My computers run NixOS, a Linux distribution where the whole system is described in configuration files. My config lives on GitHub, and with one command I can rebuild any of my machines from it. I’ve tried a few Linux distros before, with Arch being my favorite, but then I heard about the structured and declarative aspect of NixOS which led me to test it and now daily-drive it.

One flake, multiple machines

The config is a flake built on nixos-unstable. Each machine (right now my desktop and laptop) gets its own folder in hosts/ with only its hardware-specific settings. Everything else is shared through modules in modules/: boot, desktop, networking, packages, users and so on. Adding a new machine is mostly generating a hardware config and registering it.

Desktop and apps

I use KDE Plasma 6, configured declaratively with plasma-manager, even down to the wallpaper. Home Manager handles my user setup: Firefox, Zsh, Neovim, SSH and apps like Alacritty, VSCodium, Spotify and Prism Launcher for Minecraft (see also Cubeium, my Minecraft mod)

For gaming, Steam is set up with Proton-GE and GameMode.

Secure Boot and secrets

Secure Boot works through Lanzaboote with my own keys. Secrets like my SSH key are encrypted with agenix, so they can live in the public repo without being readable.

I keep Secure Boot on since I dual-boot Windows on my PC.

Keeping it clean

Old system generations are garbage collected automatically every three days, and the Nix store optimises itself, so the disk doesn’t fill up with old versions.

What I think

The best part of NixOS is that my whole system lives in one config I can rebuild anywhere, but the learning curve is steep and errors can be cryptic, so I’d recommend it to people who enjoy tinkering rather than someone who just wants a computer that works.