Hi everyone, someone can explain, in simple words, why considering to switch on NixOs over other distro? And the use case? I think would help a lot of people (including me) to understand it better :D
Hi everyone, someone can explain, in simple words, why considering to switch on NixOs over other distro? And the use case? I think would help a lot of people (including me) to understand it better :D
You know why reinstalling Linux is annoying? Because you have to remember (or write down) every piece of config you ever changed. Dark mode in KDE? Change it in settings. Some systemd unit tweak? Change it in /etc/systemd. Want to run some commands at boot? Use systemd (see above), or write an initrd hook (distro-specific). Need a specific version of an app? Need some files in /opt? Need certain packages installed? You better remember to do that!
In NixOS, you “reinstall” your OS every time you change a single setting, because reinstalling NixOS isn’t scary at all - everything that needs to be changed is configured in your configuration - just make sure /home and /var/lib are saved (and perhaps some other dirs, I have root on tmpfs and bind mount all persistent files I need to ensure I know what needs to be preserved on clean reinstall and what doesn’t).
Want to move it to a different PC? No problem, copy the files in /home and /var/lib and simply install NixOS using the configuration you already have on the new PC. Want to create a boot option with slightly different kernel or kernel options, or maybe even another DE? No problem, specializations got you covered. Something broke and you want to try an older version of your system? Just select it in your bootloader, it will “install” the old version of your system on boot!
And of course, this also means it’s easy to share configurations for specific use cases. Want to run on some specific hardware that doesn’t work out of the box? Perhaps nixos-hardware got you covered. Want a certain program set up? Maybe there’s already a NixOS option for system-level config or a home-manager option for user-level config, worst case you can write it yourself and share for everyone else in the community using flakes, and maybe open a PR to nixpkgs/home-manager. Want to share configuration between systems? That’s easy, put them in the same flake and write a common module shared between all of your systems.
Basically, if you’re fine with whatever comes out of the box in any Linux distro, you don’t need NixOS, but if you need configuration, if you run servers, it is a lifesaver. I switched from Arch, no regrets. I run my personal laptop, my server, which I effortlessly migrated from Oracle Cloud when they quit Russia, and my router on it, here’s my NixOS/home-manager config.
The only downsides are the learning curve and the fact that you can’t “just” run programs that expect a FHS layout. You can do it with workarounds like steam-run or appimage-run anyway, but overall be prepared to learn to package stuff for NixOS. Also if you have no experience with functional programming, the Nix language may be hard to understand at first.
Edit: home-manager is also available on all Linux distros and iirc even MacOS. Nix-the-package-manager is also available on all Linux distros and MacOS, and it’s useful for creating consistent developer environments, but it’s NixOS that really makes Nix shine.
This is probably the most comprehensive, yet easily understandable explanation of NixOS I’ve ever read.
Thank you very much