I know some people, myself included, love to tinker with files that dictate how their system is configured. What if I told you it is possible to configure your whole system, services, users, and packages included among other things, through a single file? (Or several through file inclusion)

Well, NixOS does exactly that! And not only that, when you upgrade your system, a snapshot of your current system is taken so you can go back to it if your upgrade goes wrong for some reason. Awesome, isn’t it?

Now, why don’t I use this distro? Well, again, I miss the AUR and I don’t find its syntax (which is a DSL made for this use-case precisely) particularly appealing, but I know a lot of people don’t mind this and actually like it. Also, I appreciate the separation between the system-level configuration and the user-level configuration, in case a user wants an additional package not included by the system for instance, or to set their $PATH to the desired value without tampering with the system’s $PATH. You can even create custom environment you can enter and exit if you need for instance a precise version of Python for a certain project which is not the default one installed on your system.

Once again, this isn’t a distribution that targets Linux newcomers since you need to get your hands dirty to maintain your system.

Be aware there is a difference between Nix, the package manager, and NixOS. Nix can be installed on a lot of systems, pretty much every Linux ones but also on macOS(!), while NixOS is the Linux distribution based on Nix itself.