Getting sudo to use Touch ID on macOS
macOS can authenticate sudo with Touch ID through pam_tid.so. The update-safe setup is one line in /etc/pam.d/sudo_local, with the normal password prompt left as a fallback.
Getting cmux to hand HTML files back to my real browser
cmux 0.64.5 flipped the default for opening local HTML files: they now preview inside cmux instead of launching your system browser. One settings key flips it back.
Migrating from Ghostty to cmux
cmux is built on libghostty and reads my existing ~/.config/ghostty/config, so the move from Ghostty was effectively a relaunch. Here is what it actually got me: workspaces with PR status in the sidebar and an embedded browser for opening plans and PRs next to the terminal that owns them.
Building a custom Claude Code status line
Claude Code gives you a JSON blob and a shell script hook. I used it to build a multi-line status line with repo info, GitButler branches, cost tracking, and rate limits in one session.
Ghostty tab titles from git repo names
Using a zsh hook and Ghostty configuration to show the git repo name in terminal tab titles.
My dotfiles setup: how I manage my dev environment
I've been asked about my dotfiles a few times, so here's the full breakdown — GNU Stow for symlinks, multi-identity Git, 1Password SSH, AI agent configs, and a bunch of shell tricks I've picked up along the way.
Migrating my terminal setup to Ghostty, Zinit, and Starship with Claude
How I used Claude Code to migrate my terminal and shell configuration, preserve my existing integrations, and check the result.
Restricting macOS settings for a child's account
The account setup and System Settings restrictions I chose for a family Mac, while keeping school Wi-Fi access available and managing NextDNS separately.