Skip to content
Tech News
← Back to articles

Why I love NixOS

read original get NixOS User Guide Book → more articles
Why This Matters

NixOS's core innovation lies in its deterministic and reproducible package management, enabling users to build, modify, and rollback entire operating systems with confidence. This approach addresses the common issues of state accumulation and configuration chaos in traditional OSes, offering a more reliable and declarative way to manage systems. For the tech industry and consumers, NixOS represents a shift towards more predictable, maintainable, and transparent system configurations, which could influence future OS development and deployment practices.

Key Takeaways

What I love about NixOS has less to do with Linux and more to do with the Nix package manager.

To me, NixOS is the operating system artifact of a much more important idea: a deterministic and reproducible functional package manager. That is the core of why I love NixOS. It is not distro branding that I care about. It is the fact that I can construct a whole operating system as a deterministic result of feeding Nix DSL to Nix and then rebuild it, change it bit by bit, and roll it back if I do not like the result.

I love NixOS because most operating systems slowly turn into a pile of state. You install packages, tweak settings, try random tools, remove some of them, upgrade over time and after a while you have a machine that works but not in a way that you can confidently explain from first principles. NixOS felt very different to me. I do not have to trust a pile of state. I can define a system and build it.

I love NixOS because I can specify the whole OS including the packages I need and the configuration in one declarative setup. That one place aspect matters to me more than it might sound at first. I do not have to chase package choices in one place, desktop settings in another place and keyboard behavior somewhere else. Below are a couple of small Nix DSL examples.

GNOME extensions:

environment.systemPackages = with pkgs; [ gnomeExtensions.dash-to-dock gnomeExtensions.unite gnomeExtensions.appindicator libappindicator ]; services.desktopManager.gnome.extraGSettingsOverrides = '' [org.gnome.shell] enabled-extensions=['[email protected]', '[email protected]', '[email protected]'] [org.gnome.shell.extensions.dash-to-dock] dock-position='BOTTOM' autohide=true dock-fixed=false extend-height=false transparency-mode='FIX' '';

Key mapping per keyboard:

services.keyd = { enable = true; keyboards = { usb_keyboard = { ids = [ "usb:kb" ]; settings.main = { leftcontrol = "leftmeta"; leftmeta = "leftcontrol"; rightalt = "rightmeta"; rightmeta = "rightalt"; }; }; laptop_keyboard = { ids = [ "laptop:kb" ]; settings.main = swapLeftAltLeftControl; }; }; };

Those are ordinary details of a working machine, but that is exactly the point. I can describe them declaratively, rebuild the system and keep moving. If I buy a new computer, I do not have to remember a long chain of manual setup steps or half-baked scripts scattered all over. I can rebuild the system from a single source of truth.

I love NixOS because it has been around for a long time. In my experience, it has been very stable. It has a predictable release cadence every six months. I can set it up to update automatically and upgrade it without the usual fear that tends to come with operating system upgrades. I do not have to think much about upgrade prompts, desktop notifications or random system drift in the background. It mostly stays out of my way. And if I want to be more adventurous, it also has an unstable channel that I can enable to experiment and get newer software.

... continue reading