I have been seeing a lot of NixOS content recently, and a part of me appreciates the ideology of Nix.
- No need to remember how you configured your machine (running some random command inside some random directory).
- Separate the config from the physical machine. Redeploy elsewhere instantly.
I loved the idea even before I knew Nix when I switched from Gnome to i3 way back in 2017. Configure your i3 config once and never worry about “new” (read “breaking”) features from the distro. I used the same config for nearly a decade with minor changes, till I switched to niri this year. So the way I interact with my desktop has not changed for a long time.
Back to the topic; while Nix configures your OS in a declarative manner, it’s very different from what I’m used to. I have managed Ubuntu systems in depth, and now I know there is a huge carry-over of knowledge across other distros (arch/fedora/centos). And this “hobbyist-level” knowledge has helped me multiple times at my work. But Nix is very different in the way we configure a system compared to the norm.
My fear is that not only do I have to throw away chunks of my existing Linux know-how, but the new Nix-way will interfere with what I currently know and require at my job. Is there some truth behind my thinking or am I just being a bit paranoid? Fresh and veteran Nix users, please help.


Traditional and Immutable distros as working OSes are not knowledge compatible at all. The software that runs on it is the same, but everything else about how they run, are executed, managed, installed…etc, all different.
Nix is Immutable, and on top of that, has an entire configuration language you need to manage.
If you’re not familiar with a standard Linux OS, you’re going to have a bad time, I can tell you that.
As far as your concepts of “random commands” not being used as part of the running of a system, that is not quite correct. You will still to track adhoc changes to different services or configurations that would then need to also be applied and executed in a NiX config in the proper place to ensure proper order of execution.
Let’s just say it’s an advanced system that serves a purpose meant for repeatable testing and CI/CD type operations. It’s not really meant to be a user-friendly system to make managing your desktop easier, so. don’t misunderstand this one important fact.
I disagree, I’ve never learned more about Linux that since I switched to NixOS. Granted you have a new language to learn and an extra layer to manage, but that layer is still working on regular elements of the Linux ecosystem. Adding a service with
services.something. enable = true;will generally just create a systemd service (and possibly some other things depending on the service).It’s true you need to have very good basics in Linux before but it works very well on desktop, especially with home-manager.
Well, no. Not to shoot down your comment or anything, but you’ve only learned a lot about Nix still in your example.
For instance, if someone presented you with an Arch system of some sort and asked why a certain systems unit wasn’t working, or why the speakers on their laptop don’t work but the headphones jack does, or why their Nvidia kmod modules aren’t loading.
Your experience with Nix is t going to help with some of the more basic functions of a traditional Linux system because of the abstractions in top of abstractions that you’re used to interacting with on Nix.
I’m not even digging on Nix, like I said, it was designed for a very specific purpose. I’ve run hundreds, if not thousands, of various build system permutations on Nix over the years, and even I wouldn’t even think about using it for really basic stuff like running a Desktop 🤣
Yes, I didn’t explain that very well. I meant that I learnt a lot because sometimes you want to go a bit further than what the nix config let you do so you end up reading what the module actually do to figure out what to override. So I’ve learnt a lot about Linux reading and then writing derivations and modules.
Do you mean to say that I can run random systemctl commands to make changes to the system, but in order to make them persistent, I need to add them to the config? If yes, this model is fine by me. As long as the changes are documented in files maintained by me, it’s good.
In mutable distros, the issue I face is that some changes are present in
.config,/etc,~.localwhich slowly becomes painful to keep track of.If you simply just want to track config file changes, use a flat git repo, or something like Ansible.
That’s going to be a helluva lot simpler for you to learn and execute on.