Okay, so hear me out…
My interest was piqued when I started knowing more and more about NixOS from the recent “I use NixOS btw” wave everywhere. The main selling point for me was the one config file to rule them all. I have always wanted something like that on Arch. And here it is with a dose of immutability, and extra stability in the form atomic updates and whatnot. You also had the option of turning it to a rolling release model; that’s awesome! What’s not to love then?
So, I kept reading even further about NixOS. I got to learn about how the Linux root structure is almost completely different. Building packages from the source follows a completely different procedure. Configuring anything in your system will rely on the main config file, instead of executing the standard terminal command, or editing their respective config file. The list goes on…
I understand that all of this is done by design. They are not flaws, per se. Rather the means to facilitate the philosophy that every NixOS user is after. However, that also does not mean it is inherently flawless in the grand scheme of the entire ecosystem. I personally love Linux, and would always want to grow with my knowledge in how I handle and get things done in it. Wouldn’t me disconnecting away from that, in favour of the NixOS’ arcane methods, just hurt my progression in my Linux learning journey?
This is a genuine question, of course. I have been thinking about this for a few days now, unsure of whether I should change course and get into it or not. I also do not have the time to use other distros aside from what I mainly install; I would be all in. So, what do you all think?
More advanced in what way? (Excuse my ignorance)
It’s declarative, reproducible, has atomic rollbacks. Most of the compelling reasons to use Docker are just worse versions of what’s available with Nix. Its Dockerfiles are an attempt to make a declarative, layer-based description of the resulting operating system, but in a less rich way than Nix (which is a higher level of abstraction and has a stronger type system.)
Look at how easy it is to create containers with Nix: https://nixos.wiki/wiki/NixOS_Containers
It’s basically a matter of changing
services.nginx.enable = true;
tocontainers.my-container-name.services.nginx.enable = true;
.