6 Months with Nix/NixOS

Posted 17 Jan 2024 (2024-01-17)

Ok, it’s more like around 7 months but shh.

If you haven’t read my 1 month with Nix then go do that because some of the things I talk about here are also relevant there.

So, I’ve been using Nix & NixOS for over 6 months now and have a few takeaways. Lets start with the good.

The Good

Package Management

By far the best part of it all is the package management. If I want something I can usually get it in nixpkgs and it is usually up-to-date. How neat is that! And as far as flakes go my projects can stay pinned to the same versions forever unless I want to update them.

Infrastructure as Code

Now, granted, I don’t have tons of server clusters with a metric fuckton of traffic that need to be scalable and highly available but for my use case being able to create a file and have that file build your entire system is fucking amazing.

One size almost fits all

Did you know you can manage your entire $HOME directory with home-manager, a community project to unify the environment? Well you can and it can also be deployed anywhere with nix just like, and along with, your system configuration.

And if you use vim, because you obviously do (why would you use anything else?), you can manage all your plugins and consoom all that code with one tool: nix. That’s it.

The Bad and also Ugly

Unfortunately as far as the bad parts go I have more to say which is a shame considering how good the tool actually is besides these factors – but I feel they are crucial enough to bring up; some once again.

Documentation

Yup, it’s still a problem. You want to do anything? Alright cool, do you have a couple minutes (generous) to spare jumping between all the different manuals trying to figure out if what you’re looking for is even in any of the manual?

Granted it has got slightly better – very slightly.

At least there is now an RFC about documenting the code itself – but for this you have to go gallivanting through a lot of source code since some things are documented in the code but not in any of the manuals you just spent a good chunk of time searching.

Governance

There doesn’t seem to be much agreement within the project heirarchy about a lot of things. One of these things is when flakes will be stabilized. Yeah, that thing everyone always shills you isn’t even out of beta yet because no one can decide when it will be ready. Now I’m no nix maintainer so maybe the issue is more complex but from my POV it just looks like a bunch of politics instead of work. A lot of enthusiastic people with some very strongly held opinions. What could go wrong?

And lastly, my biggest pet peeve:

The Nix Language

It is amazing what you can do with the language when you actually know what you’re doing. It absolutely trumps anything else but with the issues above is hindered.

A problem I have with it is it being dynamically typed. If you have an error (lol good luck looking for docs) then it’s not exactly clear sometimes why. There’s the stack-trace but that’s even more confusing and, of course, the issues above hinder this.

Next, why do we need a DSL (domain-specific language) to do this? What’s wrong with other languages? Hell, nix itself is written primarily in C++. Now I’m not advocating for writing configs and package-building-code-thingy in C++ but what about something like Lua? I mean, alright, it’s a bit late now but sometimes you don’t have to start from scratch.

In conclusion

The ecosystem is growing way too fast and the little things that hold everything up are being overlooked. Nix itself is the best we have right now but the language just ain’t it. I think the intention is right but the execution is poor. There needs to be some compromise from individuals on how to organise all of this in order to avoid the issue perpertually spiralling out of control.

Yes this is now a rant. Enjoy.