Migrating to NixOS
September 30, 2026I was using Arch (btw) before. Over time, after installing so much stuff (mostly programs I just wanted to try out), my machine got bloated with unused executables, config files, and app data, to the point that cleaning it up felt like a cumbersome chore.
I’d been hearing about NixOS for a while, drawn in by its promise of a centralized, declarative config and reproducibility. Eventually I just succumbed to it.
One thing I can say for sure: it has a very steep learning curve. I had to dedicate a fair amount of time to learning the Nix language before I could even start, and I think that’s required to use NixOS. No other Linux distro I’ve tried requires you to learn a language just to use it. On top of that, I watched tons of videos on configuring NixOS just to get a sense of the conventions and get familiar with it. Thank you, Vimjoyer.
Writing my machine configuration was a joy, though. It reminded me of the feeling I had when I started coding for the first time. There’s something about “coding” your entire machine configuration from scratch that’s deeply satisfying. I had all these ideas for organizing my configuration into modules, but I finally settled on the one described here.
I’ve been using my configuration for about three months now. I’ve hit some issues, mostly related to the desktop environment I chose (Niri + Noctalia), but overall I’m pretty satisfied. One thing that’s particularly nice is secret handling: it’s basically baked into my configuration now, just encrypted, so I don’t need to set it up again when reproducing this on another machine.
That reproducibility is what made it worth using for my VPS too: I write the configuration on my machine and use nixos-rebuild switch --flake . --target-host <user@ip> --build-host localhost to build it locally and deploy the built files to the VPS. Since my machine has more powerful specs than the VPS, it’s fast, convenient, and very organized. Might write about that setup separately.
