Skip to content

Uses

The tools I actually work in. The software half is checked into a Nix flake, so this is what my machines get rebuilt from rather than what I remember using.

Start with
ordesktop
Under it

TypeScript Neon Better Auth Tailwind Zustand zod AI SDK Stripe Resend Vercel Blob Vercel Queue Upstash Vitest Ultracite Turborepo Docker Vercel Flags SDK PostHog

The default stack, all 20 rows

Editor

Zed
Mainly Zed lately, and mainly for reading: what changed, the diff beside it, project-wide search. The typing is done by an agent, so the editor is where I navigate a codebase rather than where I compose it.
Cursor
The other main editor, and the one I still switch back to. Zed has had most of the hours recently, but the job either one is doing is identical.
Neovim
Configured in Lua and symlinked out of the Nix store on purpose, so a keymap can change without rebuilding anything. It is a small share of the day now, and saying otherwise would be nostalgia.

AI coding setup

Codex
The primary driver, and like Claude Code it runs in auto mode. `gpt-5.6-sol` at medium, high when the work earns it, and `luna-max` for the tasks that need less thinking, where it is still very effective. Sub-agents are doing more of it now.
Claude Code
The second opinion, on a different model, running the same sub-agent workflow. Which agent gets a job is a written rule rather than a mood.
T3 Code
The biggest change to how I work lately. A session started at the desktop reopens on the MacBook, or on a phone with both machines shut, because the session lives on the VM below and T3 is only a surface onto it.
AGENTS.md
One shared base file, concatenated with a per-harness and a per-host overlay into whatever file each agent actually reads. Same rules across four machines and two harnesses.
Skills
Pinned by revision in a lockfile and pulled from other people's repositories and my own, so an agent's instructions version like a dependency. Mine are published as source in nick-neely/agent-skills, plain Markdown and the scripts it calls, so the same skill works in every harness above.
Hunk
Diff review with a CLI attached, so an agent and I can work through the same hunks in the same session.

Terminal

Ghostty
Terminal on the Mac: FiraCode Nerd Font Mono at 14, Dracula. On the WSL desktop the shell is the same one and the window around it is not mine to configure.
Starship
Prompt, with its timeouts raised because WSL2 stats a filesystem slowly. A custom segment lights yellow when my dotfiles or my skills have drifted from the flake and red when that drift matters, and it reads a cache with a shell builtin, so the badge costs nothing per prompt. Empty is its normal state, which is the point: a badge that is always lit stops being read.
Herdr
A multiplexer built for running coding agents side by side. Ctrl-A is the prefix, the sidebar carries what each agent is doing, and prefix-m and prefix-d open btop and a diff without leaving the session.
Atuin
Shell history in SQLite, on Ctrl-R. The up arrow stays dumb, deliberately.

Hardware

Two machines and the desk one of them sits at.

Desktop
The primary workstation, and where I am most comfortable working. Ryzen 7 9800X3D, 64GB of DDR5-6000 Trident Z5 Neo, 4TB plus 2TB of NVMe, an RTX 3070, an NZXT H9 Elite with a Kraken Elite 360 on top of it. Still holding out for a 5090 at a price I am willing to pay.
MacBook
Where I work when I am not at the desk: the couch, the balcony, anywhere that is not the chair. M5 Pro, 18 cores, 64GB, 2TB.
Keyboard
Wooting 80HE in the zinc alloy housing, which is super heavy and never moves. Geon Raw HE linears, tape-modded for thock, under DROP MiTo MT3 Godspeed: the Apollo base with the Milky Way kit.
Desk + chair
A Secretlab Magnus Pro XL, standing, with a LiberNovo Omni in front of it. The unglamorous reason the desktop is still the primary workstation.

Hosts & config

Where the work actually runs, and what keeps two operating systems interchangeable. Increasingly it runs in a long-running agent session on a VM that neither machine has to be awake for, and the direction is a mobile workflow: a phone or a laptop steering a session that never stopped.

exe.dev
Agent sessions, repositories, and hours-long runs live on a persistent VM there and keep going after I disconnect. I reach it over mosh on the tailnet, so a closed laptop or a changed network does not end anything. Herdr and T3 Code open onto the same sessions, which is what turns a phone into a control surface.
Tailscale
The private network everything else here is addressed on. Both machines, the exe.dev VM, and a Raspberry Pi at home that serves as the exit node, all reachable by name without a port opened anywhere. The mosh session above rides on it.
Nix + Home Manager
One flake covers four hosts: the WSL desktop, the Mac, a mini PC, and the exe.dev VM. A small `dot` CLI drives it, and the prompt badge above is what says when a machine has stopped matching the checkout.
Windows + WSL2
One half of the setup; the MacBook is the other. Development happens only inside Ubuntu under WSL2, never on the Windows side, and the flake strips the Windows-side toolchain entries off PATH so exactly one of them answers. That is what keeps WSL and macOS interchangeable: both are whatever the dotfiles repo prescribes.
direnv + 1Password
Per-project environments from a committed `.envrc`, backed by nix-direnv. Secrets stay `op://` references, so nothing lands in a dotfile.

The default stack

Every name opens a line on why that one.

Framework
desktop
Language
Data
Auth
UI
State
Validation
AI
agents
Payments
Email
Storage
Jobs
Rate limiting
Testing
Quality
Monorepos
Local
Deploys
Flags
Analytics