People ask me what I use, so here’s the list. I try to only include things I actively use for more than a month. If something isn’t here, it’s probably because I tried it and bounced.

Last updated May 2026.

Desk

  • Laptop — 14" MacBook Pro (M3 Pro, 36 GB). Upgraded from an M1 Air in mid-2024 and it’s the first laptop I’ve had where I genuinely don’t think about compile times.
  • Desktop — a homebrew AMD Ryzen 7700 box with 64 GB of RAM. Runs NixOS. Exists mostly so I have something I can compile Rust on without the fans screaming.
  • Monitor — a single 4K LG 27UL850. I had two for a while and found myself ignoring the second one.
  • Keyboard — Kinesis Advantage 360 Pro. I switched from a Keychron in 2023 after my right pinky started complaining. It’s helped.
  • Mouse — Logitech MX Master 3S. The horizontal scroll wheel turned out to be the feature I use most.
  • Chair — Herman Miller Aeron. Bought used off Craigslist for a fraction of retail. 10/10, would do again.

Editor

  • Neovim for most things. My config lives in the dotfiles repo under nvim/ — I don’t recommend copying it wholesale, it’s tuned to my specific quirks.
  • VS Code when pairing or when a language server is easier to deal with there (rust-analyzer has been great in both, but VS Code has fewer rough edges around workspace projects).
  • Zed as of late 2025 for quick edits. It’s fast. I haven’t committed to it for real work yet.

Terminal

  • WezTerm on both Mac and Linux. I tried Alacritty, Kitty, and iTerm and WezTerm was the one where I stopped tweaking things.
  • Fish shell. I finally stopped trying to be a Zsh person in 2022.
  • tmux. I’ve been using it so long that I’ve forgotten it’s configurable. My config is 40 lines.

CLI essentials

  • ripgrepgrep with fewer surprises and better defaults
  • fdfind but humane
  • jq — the only way I read JSON over a certain size
  • miller — for when jq isn’t quite the right shape
  • fzf — everything shells into fzf eventually
  • httpie — 90% of my curl usage. I still use curl when things get weird.
  • bat — a cat I don’t mind looking at
  • dust — disk usage with pictures
  • direnv — how I keep project-specific environment variables sane
  • delta — makes git diff readable

Languages

I reach for these in roughly this order, depending on what the task looks like.

  • Go — first choice for anything that needs to run in a container and handle concurrency. Boring in a good way.
  • Rust — when I need speed, predictable memory, or have the time to do things properly.
  • Python — data munging, scripts with dependencies I don’t want to package.
  • Shell — anything under 50 lines.
  • TypeScript — reluctantly, when a frontend is required.

Homelab

The closet in the office is loud. Here’s the approximate contents:

  • Mini PCs: two used Lenovo M720q tinys running Proxmox. They are the workhorses.
  • NAS: a Synology DS920+ with four 8 TB drives in SHR. Replaced my old DIY FreeNAS box when I got tired of maintaining it.
  • Switch: a Unifi USW-24-PoE. More ports than I need. Future me will thank past me.
  • Router: a small x86 box running OPNsense. Because I wanted to learn OPNsense.
  • UPS: an APC 1500VA. Saved the NAS at least twice.

Services I self-host: Pi-hole, Immich, Paperless-ngx, a small Gitea instance for personal repos, Syncthing for phone photos, Jellyfin for the DVDs my parents keep mailing me.

Cameras

I mostly shoot on a Fujifilm X100V I bought used in 2022. For longer walks I have a Fujifilm X-T4 with a 35mm f/1.4. Film camera in the closet: a Pentax K1000 my uncle gave me that still works.

I edit in Darktable on Linux. I used Lightroom for years and switched when the subscription got annoying. I am not a photographer, just a person who owns a camera, and I think that’s okay.

Coffee

This is the most overkill section and I refuse to apologize. A Lelit Bianca espresso machine. A Niche Zero grinder. A kitchen scale. A small notebook. Nothing about this is sensible.

What I don’t use anymore

  • Docker Desktop — switched to OrbStack on Mac and podman on Linux.
  • kubectl as a daily driver — I use k9s.
  • Heroku, sadly.
  • Anything that requires me to log in to a dashboard to change a setting that could’ve been a config file.