Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2025 Jul 10 (a Thursday)

SVGs that feel like gifs

Today I got really excited about this article from Vincent Koaning. It turns out that you can use a combination of tools to create animated SVGs (!) of your command line activity. I’m really excited about this, because it means that I get to share my work!

Unfortunately, one of the packages upon which it critically depends svg-term-cli hasn’t been updated in six years. I spent several hours this evening trying to get it to install in NixOS, but I ran into the absolutely terrible tooling for building NPM packages in Nix.

Instead of building a custom flake, I contented myself with simply doing some nice Justfile scripts to make roundtripping files tolerable.

I was hoping to give back a Nix config to the developer, but I guess not today!

2025 Jul 9 (a Wednesday)

Commitment unlocked: writing every day

This new setup is simple and pleasant enough that I believe I can persuade myself to write something new here every day. This is a promissory note.

2025 Jul 8 (a Tuesday)

About this site

I’m technically-minded so of course the first real writing here is about how I produce this site :)

2025 Jul 7 (a Monday)

Hello world!

After several years of neglect, I’m in the process of rebuilding this website. Check back soon for more.

🔭 Interests

🌿 Accomplishments

🪢 Connect with me

I’m on GitHub.

For professional communication, you can reach out to me on LinkedIn where I maintain a minimal profile.

On Discord, I go by 1attice. I’m also on BlueSky and Mastodon, at least in theory.

About this Site

This website is hosted on AWS Amplify. It is built using Nix and Mdbook, and is edited with Neovim. The fonts (which I purchased) are Butterick’s Heliotrope 4 and Triplicate Code B. I find them exceptional.

Because Amplify does not offer mdbook support by default, the site build is accomplished via a custom (but minimal) Docker image that loads Nix, which then in turn provides the build environment as a development shell.

The template used to create this site will be placed on GitHub shortly. It pleases me.

Why mdbook?

In the past, this site was quite different, rendered with Next.js (indeed I taught myself Next.js creating it.) But the maintenance and hosting burdens associated with Next.js eventually made me regret my choice. While I still believe that Next.js (along with React and TypeScript) make an unbeatable platform for web apps, this site is not a web app.

Which is to say: while I’m still happy to code SPAs in Next.js, a personal profile site does not need all that overhead. Nor should it be a 2mb download. Next.js is fit for many purposes, but not this purpose.

Even so, mdbook might seem an idiosyncratic choice to some. There are a lot of static site generators out there, and I’m sure that at least one (if not most) are probably designed with ‘small personal blog and portfolio site’ firmly in mind. Whereas mdbook, of course, was intended to produce, well, books.

It remains true that mdbook is obviously focused quite specifically at rendering markdown into documentation, this focus has, in my opinion, made it peerless in feature set and parsimony. It has an extensive ecosystem of plugins, which allow me to include such niceties as mermaid and graphviz diagrams, and supports footnotes, as well as a lovely ‘print’ export mode (you can save this whole site as a single PDF by clicking the button in the upper-right corner.)

Due to my dalliance with Rust, I have hit lots of mdbook-based docs in my time, and am always pleased to do so. They look good on mobile, they look good on desktop, they’re printable, and they’re searchable.

Finally, the niceties of blogging – an RSS feed, maybe some light tagging – are probably easier to build atop mdbook as I need them than mdbook’s extensive rendering options (mermaid, graphviz, mathjax, plantuml, etc.) would be to build on, say, Soupault. While I admire Soupault, mdbook seems the better way for me, currently, and specifically for the aims of this site.

Finally, I’ve come to the view that blandness in many websites is a feature, not a bug. If you must, consider this my stand against unnecessary differentiation. Homogeny is not the enemy of communication. Cacaphony is the enemy of communication.