Pedestrian i wonder what people think of nixos here i think its the future but honestly i was completely filtered by it also its just not convenient enough for me for now.
I daily drove NixOS for a decent amount of time but I ditched it for Alpine Linux despite my dislike for distrohopping.
The good:
- Declarative package managemnt
- Reproducible system configuration from a single file
- Massive repository, usecase for flatpak or third party binaries is heavily minimised
- Biyearly stable release and rolling release both available
- Both manual installation and calamares GUI installer
- nix-shell for temporary packages and environments
- Nix generations allow you to rollback an update that went wrong
- Absolutely amazing icon (cosmetic)
The bad:
- NixOS developers, maintainers and community managers are highly political and unstable to such a hostile level. Project stability and maturity are at risk because of this
- Packages often break during updates, can happen even on the stable release. The system itself doesn't break but you are stuck from updating for 1 to 2 weeks
- Some developer environments require a specific Nix setup unlike other systems
- Third-party binaries will not run due to Nix not respecting the FHS specification (easiest way to fix it is by running them with steam-run)
- Nix uses excessive amounts of CPU and RAM during system update
- As you go deeper into the Nix rabbit hole, the returns are diminishing for an exponentially complicated tooling. For practical people who don't use what they don't have a usecase for, you won't even touch flakes or nix programming or custom nix shell environment files. I'm a developer myself and I used to do functional programming (until I went back to procedural) and I still never wanted to learn anything about nix programming.
- Systemd-only
- Nix was promised to improve its experimental FreeBSD support but it's still the same it was years ago, unusable. They focus too much on Mac support, so in a way it's similar to the problem of FreeBSD devs themselves daily driving macs rather than their actual system that needs to be improved.
The ugly:
- NixOS is the ultimate SSD killer. Updating every 2 weeks made Nix pull approx. 30GB of package data on my machine every time because it re-downloads a lot of things that haven't changed in the system (and also includes a lot of stuff in the system in the first place) due to the whole immutable design. Arch and Alpine in comparison pull 100MB to 1GB of data when updated with a similar interval (most of the times between 150MB and 500MB).
- Everything related to system setup, troubleshooting and /etc dotfiles needs to be done the Nix way, but if documentation is lacking for your specific usecase then you will find yourself stuck (I had to make a pull request to nixos-hardware repo to fix a module that is meant to power down Nvidia dedicated graphics on laptops and wasn't even powering off)
- The Nix and NixOS documentation is incredibly atrocious and definitely one of the worst documentations I have ever seen in my entire life. They should have taken Java, Scala, Ruby or Elixir documentations as examples to follow
In the end I embraced the raw, procedural DIY nature of systems like Alpine Linux and the advantages significantly outnumbered the advantages of NixOS
Just like it was inspired by functional programming, NixOS suffers from similar issues in concept. It's good on paper and has many great concepts but in reality you would get 80% of its benefit if you use 20% of its features, and trying to purely do things in only the nix/functional way hinders you more than the good it brings. This is also one of the primary reasons my #1 language for personal use shifted from Scala back to Java.