"What I had been calling “Linux knowledge” was actually two different things bundled together: understanding of how systems work, and familiarity with where things live on a particular filesystem. The first transfers perfectly to NixOS. The second becomes largely irrelevant, and whilst that felt like a loss at first, I now think it is fine. Knowing that configuration files live under /etc is useful context, but it is not deep understanding. Deep understanding is knowing what the configuration does and why, and that knowledge is entirely portable."
Particularly:
>> "familiarity with where things live on a particular filesystem."
Taken in context with mightyiam's quote:
>> "because I get to keep it, share it across multiple computers, "
It seems to me like a primary advantage of NixOS is that familiarity with where things live on your particular filesystem is made to be portable across machines, and not a constant beachead.
For me, it was easier to just continue to use Ansible for machine reproducibility. I really like the thought behind Nix but I felt like I needed to elbows deep in it 24/7 to really grok it. And if I stopped looking at Nix for 6 months, then that knowledge just disappeared. I migrated away from NixOS for my homelab because I would come back to flakes I had written and not understand how anything worked and couldn't be bothered to relearn. I know that Ansible and Nix can sometimes be apple and oranges but I know that I can come back to a playbook and understand what it does even if I haven't touched Ansible for years.
Not really touched on here, but one thing I found very useful in switching to nix is having your entire system defined in a single repo opens it up for very nice agentic setups. Claude code can now configure my whole system, debug my gpu issues, install software etc, and I can simply git diff to inspect the changes and apply if I agree. On arch sometimes Bluetooth not working or my fingerprint scanner not working becomes some hours of debugging, now I can solve these issues trivially, and if it doesn't work I can restore to an earlier point instead of trails of attempts left through my imperative system
"What I had been calling “Linux knowledge” was actually two different things bundled together: understanding of how systems work, and familiarity with where things live on a particular filesystem. The first transfers perfectly to NixOS. The second becomes largely irrelevant, and whilst that felt like a loss at first, I now think it is fine. Knowing that configuration files live under /etc is useful context, but it is not deep understanding. Deep understanding is knowing what the configuration does and why, and that knowledge is entirely portable."
Particularly: >> "familiarity with where things live on a particular filesystem."
Taken in context with mightyiam's quote: >> "because I get to keep it, share it across multiple computers, "
It seems to me like a primary advantage of NixOS is that familiarity with where things live on your particular filesystem is made to be portable across machines, and not a constant beachead.
For me, it was easier to just continue to use Ansible for machine reproducibility. I really like the thought behind Nix but I felt like I needed to elbows deep in it 24/7 to really grok it. And if I stopped looking at Nix for 6 months, then that knowledge just disappeared. I migrated away from NixOS for my homelab because I would come back to flakes I had written and not understand how anything worked and couldn't be bothered to relearn. I know that Ansible and Nix can sometimes be apple and oranges but I know that I can come back to a playbook and understand what it does even if I haven't touched Ansible for years.
Not really touched on here, but one thing I found very useful in switching to nix is having your entire system defined in a single repo opens it up for very nice agentic setups. Claude code can now configure my whole system, debug my gpu issues, install software etc, and I can simply git diff to inspect the changes and apply if I agree. On arch sometimes Bluetooth not working or my fingerprint scanner not working becomes some hours of debugging, now I can solve these issues trivially, and if it doesn't work I can restore to an earlier point instead of trails of attempts left through my imperative system