I've been recently getting into NixOS, and I really like the concept of the store, reproducible builds, and declarative configuration. It keeps things organized and clean. But there are certain aspects of its implementation that are kind of rough:
-
It feels artificially complicated. Too many commands that do very small changes, unfamiliar configuration files with new, very specific and confusing syntax. Combining all commands into a central, consistent command (like git does) would help tremendously. I am aware of the
nix
command, but 1. it doesn't do everything, and 2. it's so new that every single documentation tells you to usenix-env
or other specific commands. Why notnix rebuild switch
? It feels like they tried to separate Nix from NixOS when they could really be the same thing. -
Special treat to special packages. Configuring the boot loader, networks, timezone, kernel modules in
/etc/nixos/configuration.nix
makes sense. But this also configures x11, printing services, OpenSSH, pulseaudio. These programs have their own configuration files, that are governed by their own communities. -
What am I supposed to put into
/etc/nixos/configuration.nix
? What is the point of reproducible builds if I put every single package I use inenvironment.systemPackages
, which means it has to download gigabytes of data? -
The error messages are not great. This is specially bad when a lot of the syntax feels made up.
The learning curve for this is absolutely huge, so I was wondering if it was worth spending a month learning all this, when it only applies to Nix/NixOS and I might not need all the complexity that comes with it.
I would love a simpler Nix.
Direct streaming/downloading doesn't give your IP away (just to the server), torrenting does.