cat posts/2026-02-09-windows-macos-and-linux-my-2026-setup.md
Windows, macOS and Linux: my 2026 setup
At about 4 p.m. on a Tuesday last month, my Windows laptop told me it would restart in fifteen minutes to finish installing an update, and I was in the middle of a profiling session I’d spent half an hour setting up. I postponed it. It asked again an hour later. I’ve been using Windows since before it was a good idea, I was first made a Microsoft MVP in 2005, and I still nearly threw the laptop.
So I had some sympathy for Microsoft forced me to switch to Linux, which went up on Hacker News at the end of January and picked up nearly 1,900 points. The author is a long-time Windows user who finally moved their desktop to CachyOS, an Arch-based distribution, after a run of things: an update that installed itself while the PC was idle even though they’d postponed it, Chrome flickering badly after the same update, a fix that needed an Insider build, which brought its own bug, and Copilot buttons appearing everywhere. The line that stuck with me was “Windows is now also too much work”. For about twenty years the argument against Linux on the desktop was that it was too much work, and I made it myself more than once.
They’re right about most of it, and I’m still not switching the laptop. I’ll get to why.
What I run where
I use four machines most weeks. Two Macs, which is where I spend most of my time, the Windows laptop, and a Linux dev box in our cloud account that I only ever reach over SSH. This is what’s on each, as of this month:
| Macs | Windows laptop | Linux box | |
|---|---|---|---|
| Terminal | Ghostty | Windows Terminal | (whatever I came from) |
| Shell | zsh | PowerShell, plus WSL | bash |
| Editor | Neovim, VS Code for big .NET work | Neovim, Visual Studio when I need the profiler | Neovim |
| Agent | Claude Code | Claude Code, in WSL | Claude Code |
Most of that hasn’t changed since I wrote about my dotfiles in 2023 and my editor in 2024. Ghostty replaced iTerm2 a year ago and I haven’t opened iTerm2 since. Still no Windows version of Ghostty.
The newest row is the agent, and it’s the one that’s changed how I think about all of this. Claude Code has run natively on Windows since last summer, but I still use it inside WSL. The shell commands it reaches for are mostly Unix ones, and in WSL they behave the way they do on the Mac. On native Windows, I’d be reviewing commands in a second dialect, and I already read enough commands.
How I keep three systems from feeling like three jobs
Mostly by moving as much as I can into things that don’t care what OS they’re on.
The editor is the big one. Neovim, with one config, from one dotfiles repo, on all four machines. My hands don’t know which OS they’re on as long as I’m inside the editor. When I’m outside it, they do. Cmd versus Ctrl is the friction I’ve never fixed and have stopped trying to. I just accept a day of reaching for the wrong key after a week on one machine.
The shell is the second. My aliases and small functions live in one file that both bash and zsh read, and PowerShell has its own copy, which is the one place I’ve accepted keeping two versions of the same idea.
The third is the colors, which sounds trivial and isn’t, for me. The same Catppuccin palette in the terminal, the editor and the prompt on every machine means I can glance at a screen and not have to think about where I am.
And the agent has made some of this matter less. When the Windows side of something is different, I describe what I want and let it work out the PowerShell, then read what it wrote. A year ago, keeping the Windows config in step with the Mac config was a chore I put off for months. Now it’s a request.
Why the laptop stays on Windows
Partly habit, I’ll admit. But mostly because there are things on it I can’t get anywhere else. Visual Studio’s profiler, still. A handful of customers’ admins who use our product exclusively through old versions of Edge on locked-down Windows machines, and when one of them reports a bug I’d rather see it on the same OS than guess. And a stubborn feeling that someone running engineering should have one machine on the operating system most of the world uses, and know what that’s like right now, update prompts included.
What I’ve done is give up on Windows as the place I do my real work. WSL is where the development happens. Windows is the host, and the thing that runs Visual Studio when I need it, and less each year. If the profiler ever runs properly anywhere else, I’d probably wipe it and put Linux on it, and I’d expect to spend a week missing small things and then not think about it again.
I postponed that update three times before I let it install. It was a Saturday, and it took eleven minutes, and nothing broke. Which I think is that post’s point, more or less. It was fine, and I still planned a Saturday around it.