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.
With NixOS i’ll leave it for a week and go to another distro and then I think to myself “what am I doing? I can just do all this on Nix” and then I go back to NixOS.
On my NixOS I have a few destroboxes set up. One for Arch, one for Fedora, Debian, and Void. I use all of them for various things so I NEED to know all the quirks of various distros. So the knowledge I’ve acquired from the various Linux distros never goes away, I still use it all daily. Also, you’re right, your fear is valid not so much in a way you’ll potentially “lose” that knowledge but rather…you might get bored.
Arch bores me now. it’s too easy. NixOS is just so much more interesting and fun to tinker with. Like for example last night I put Arch on another machine to tinker with and already i’m looking to uninstall it. It’s boring. Nix has also spoiled me with knowing EXACTLY what’s on my system and having it all right there in front of my face. I enjoy version controlling it, tweaking it, making my configs cleaner, more effeciant. I don’t feel I get that on other distros. Sure there are tools to mimic the “feeling” of NixOS on other distros like The Black Don’s Dcli for Arch but it’s not the same and even he’ll admit it’s not the same and just end up back on NixOS. But now I’m just rantnig.
If you’re concerned about losing that knowledge of other distros do what I do, just set up a few distroboxes and use them for various applications. like for me Tabby isn’t packaged in NixOS and it’s been several months since the last person made an update on said package so I simply use my Arch distrobox to use it. There are some really niche .deb programs that either don’t work well on NixOS or don’t exist so I use my Debian distrobox. On the opposite end there’s stuff like Supersonic which actually works much better on NixOS than Arch so that’s an obvious choice. mix and match. build out a complete Linux Box with NixOS at it’s core. once you do…man everything becomes a breeze.
insert meme format here
You and me are not the same.
You uninstall Arch because you are bored.
I uninstall Arch because I am scared.
Actually not true, I never even installed Arch because I am scared lol
honestly it’s really not hard anymore especially if you use archinstall. everything is there for you, even sets up DEs/WMs for you now. The HARDEST part is remembering the commands for iwctl to connect to the internet. that’s it.
I do think it is, but only if you dive into what the services and modules do, or if you create some yourself. Most packages are created for mainstream distros and you will have to adapt how they work to nixos’s mode of working. In doing so, you will learn - at least I have.
I know more about systemd, kde’s configuration, bash, opengl, library paths, and more because of having to go through the pain of making it work ok nix/nixos.
It is arguably also quite valuable to see how something is done in nixos as a kind of documentation in code for how to configure other software. Where changing an option’s value in nixos kicks of a bunch of things, on other systems you have to either trust that the package has scripts to do that, or imperatively do those steps yourself.
The skills seem quite transferable to me, IMHO.
Generally to understand nix, you need to understand normal Linux as a precursor
You will only build up knowlege. And can help at work e.g. by introducimg dev envs with nix.
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.
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.
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.



