<<< Back to list
Switching to NixOS
NixOS has been around for a long time but it’s never been on my radar. I got curious about it after talking with a couple of colleagues at $PREV_JOB who were managing their work Macbooks with nix/nix-darwin/home-manager. It sounded really cool to be able to fully manage a system using a configuration file and some shell vodoo.
Fast forward a couple of months and I’m switching jobs, the new place is letting me use my own hardware and I decide that I was going to give this NixOS thing a try 🥲.
The philosophy of NixOS is to manage a system through a single configuration file. Whenever one wants to install a new program or change a system setting it should be done through this file. It sounds kinda crazy but it works! Starting from a minimal (no GUI) install of NixOS it’s really easy to install only the software you want, just like Arch! And the best thing about it is you can easily backup your configuration in a Git repo and when for whatever you have to reinstall you can re-use your config.
NixOS and the Nix ecosystem are not perfect. The documentation for the various projects that make up the OS is far from perfect. Nix, the configuration language, is pretty hard to pick up, which combined with the lackluster documentation makes it really hard for new people to write nice, composable NixOS configurations.
For my computer I went with a simple Gnome desktop running on X. I just had to tell Nix that I wanted it to enable Gnome and it knew to install all of the various bits needed to make it work:
services.xserver = {
enable = true;
videoDrivers = [ "nvidia" ];
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
};
Originally I wanted to use Wayland and Sway but at that time (December 2021) Sway refused to run with the proprietary Nvidia driver so that was a no-go.
I chose Btrfs for my filesystem because I wanted compression to make the most out of the small SSD I dedicated to NixOS. After 6 months of accumulating cruft, I’ve got to say it’s really impressive: compsize
says I’ve saved 33GB by turning on compression on /home
alone:
$ sudo compsize /home
Processed 1688387 files, 647448 regular extents (820148 refs), 1358560 inline.
Type Perc Disk Usage Uncompressed Referenced
TOTAL 70% 80G 113G 123G
none 100% 67G 67G 67G
zstd 26% 12G 45G 55G
prealloc 100% 13M 13M 47M
I’ve saved the configs for the various Nix boxes I got on Github at alexghr/nix. I need to spend some time refactoring it because so far they’re just a bunch of copy-pasted files 🙈.
At this point I’ve been running NixOS as my main work OS for about 6 months and I can honestly say I don’t know how I’ve lived without it. It’s seriously the first OS where I set it up once and it got out of my way. For the most part.