Uses
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
ripgrep—grepwith fewer surprises and better defaultsfd—findbut humanejq— the only way I read JSON over a certain sizemiller— for when jq isn’t quite the right shapefzf— everything shells into fzf eventuallyhttpie— 90% of my curl usage. I still use curl when things get weird.bat— acatI don’t mind looking atdust— disk usage with picturesdirenv— how I keep project-specific environment variables sanedelta— 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
podmanon Linux. kubectlas a daily driver — I usek9s.- Heroku, sadly.
- Anything that requires me to log in to a dashboard to change a setting that could’ve been a config file.