Something that isn't stated in this thread yet is how easy NixOS makes version upgrades.
I maintain multiple pet servers. When I used Ubuntu, doing release upgrades cost me ~6 hours per server per upgrade every 2 years. Most of that time went into merging updated upstream configuration files with my changed configuration files, often for silly stuff like upstream changing tabs to spaces in the config file syntax. With the Debian-style upgrader, you also have to wait 5 minutes until you're prompted for the next config file to merge, while other packages are "configuring" with `dpkg`. So you cannot do them all in a batch, but have to stare at the screen throughout the procedure, attending every 5 minutes.
So with multiple servers that was multiple days of upgrades per year.
With NixOS, these days are is reduced to minutes.
For example, on one of my servers I upgraded just now:
18:07 -- starting NixOS 21.05 -> 21.11 upgrade command
18:10 -- download finished
18:10:15 -- rebooted into new running system
This server currently runs:
* webserver
* mailserver (with web UI, spamfilter, etc)
* nameserver (with dynamic DNS updates)
* VPN server
* mumble voicechat server
* XMPP server
* Matrix server with signal bridge
* vaultwarden server
* some custom web services
This is possible because with NixOS, you do not mutate text files in `/etc` for configuration. Instead, you write a structured config similar to a JSON object (but in the Nix language, so you can use stuff like `map` and `filter` to solve repeated tasks over e.g. all the domains in your web server). This config only contains the differences from the default config. So concepts like "does the upstream Apache config file indent with tabs or spaces" no longer play any role.
For the server above, the config file is 800 lines long, of which 200 are comments.
So NixOS is saving me multiple days per year in sysadmin tasks, which is pretty good!