Getting familiar with nix can take some time. e.g. figuring out how to write a Nix package if there's not a package already can be difficult.
When things work in NixOS, it really does feel very nice to know you have a declared config (so that you don't have to worry about what changes you made). When things don't work in NixOS, it may be quite demanding/challenging to fix.
In a way, I think most of the "I tried Nix/NixOS but didn't stick with it" comments are about its learning curve.
I'd make comparisons to other tools: VSCode does the job pretty well without having to learn anything, but many people will learn tools like vim, & emacs. (The latter isn't just out of legacy; kakoune & helix seem pretty neat).
Still, I'd gate these power-user tools behind "you need to take the time to learn them", rather than a general recommendation.
It's a little bit of a double edged sword. NixOS lets me use pretty much straight upstream packages, which sometimes break due to not having thorough integration testing like a traditional distro would. On the other hand, I was able to just boot up an older configuration to get back to functional, and that let me figure out wtf was wrong.
[1]: https://github.com/mzur/gnome-shell-wsmatrix/issues/236
I would count this as not breaking. I mean... on most systems, you are borked if an upgrade fails and now need to boot a live CD. I've never had that happen on NixOS. I had it happen only once, and that was due to a bad ZFS setting that the OS couldn't possibly have fixed (weird BIOS thing where the SATA drives came up incorrectly).
It's a waste of time learning all the debug and repair steps. With NixOS nothing breaks. No need to waste brain cells.
I realized how great it was when a friend asked me to fix his windows computer and I realized I had no idea that computers even broke in those ways anymore.
One of my favorite lesser benefits of using NixOS is that running a big system upgrade doesn't even stop you from installing software while it's running. Realize you need a new program while your system upgrade is running? No problem! Add it to your NixOS configuration for posterity if you like, then run it in a Nix shell or install it to your user profile. No need to interrupt the upgrade or wait until it's over.
- there are no types in nix
- the debugging capabilities are limited
- there is no "slot" concept nor the edges of dependecy graphs may be tagged
- it's hard to make contributions because they press on you a lot about minor formalities, e.g.they require you to squash commits manually and deliberately don't want to enable one-click squash in Github settings, P/Rs and issues are getting ignored (even critical/security issues), etc.
I would bet money that most people who are singing praise for NixOS have sunk significant time into absorbing the whole NixOS way of doing things, learning the Nix language, tinkering with their machine config, diagnosing non-trivial problems, etc.
It is just a smaller community and younger project. NixOS is nowhere neat as stable. The security story is, comparatively, simply not present (e.g. there is no equivalent of https://www.debian.org/security/ that I can find). The user base is tiny in comparison. Packaging up stuff for NixOS often requires non-trivial patches, downright hacks, or wrapper scripts for binaries that can break assumptions made by upstream and lead to little paper cut issues.
NixOS is many things, but it isn't a Debian Stable. They fill different roles. Debian is a mainstream distribution, and the problems you'll have will be similar to the problems most people have, so you'll be swimming with the tide and be able to find help. I see NixOS more as a rolling release distro that gives you a mechanism and programming language to control configuration and rollback, but a lot of those 80K NixOS packages are just kinda sitting there packaged up in a way that kinda worked at some point but isn't really solid.
I use Nix as a package manager on top of Debian, to bring in development tools, etc. This is relatively easy. When I tried using it as an OS I had to spend way too much time figuring out weird issues.
* Bleeding edge packages
* Bleeding edge alternative packages (Try wayland an pipewire without being scared)
* Upgrades that doesn't evaluate changes nothing (except disk space)
* Upgrades that evaluates but doesn't work ("never" happens) are atomic and can be rolled back from (unless you mess with boot, but even then booting NixOS livecd, mounting things up and running the install command will get you back)
* Things that aren't in your config doesn't exist in your system
* Identical systems across machines (with configurable differences)
The difference is huge, but some things are a pain in the ass, so I use "distrobox" too for small one-off things, it manages podman to set up an OS container for me that shares my homedir and such (so I get all my dot files in there too)
* You'll learn to appreciate systemd
* You'll eventually learn a bit of FP
* Once something works, it keeps working.
There are more pros, and I didn't list any cons, but with fistrobox you can hide many warts where your FP skills are lacking.
So to answer your question, upgrades between versions will probably always break for you, but they'll break on build time, so you fix them (mostly deprecated/moved options) and then it's all fine and dandy, rather than your system being broken.
Ubuntu works well as long as you install an LTS release and then only upgrade to the next LTS at the end of the support window for the previous release.
Tangentially, I'm getting bored of my desktop environment, and wouldn't mind mixing things up. I've been using cinnamon. I am hesitant to try KDE because of all the GUI dependencies it would presumably install.
I've been very happy with Manjaro KDE Plasma which I installed maybe two years ago. It's been my main OS since then and I've never had a single problem.
When I installed it on my somewhat unpopular laptop it was the only distro that "just worked". I tried Pop!_OS, Fedora, KDE Neon, EndeavourOS and Kubuntu and some other ones without luck. Pop!_OS didn't even boot.
On Manjaro everything (except for Nvidia graphics) just worked. From thunderbolt to sleep and display switching. The Nvidia setup could've be smoother (needed a slew of terminal commands), but once set up it works. Actually it was my dad that recommended Manjaro as he had exactly the same experience with his laptop.
Debian based distros has given me headaches every time I try to dist-upgrade (following every recommended step). It's still a mystery how that process can be so unreliable considering Debian has been around for ~30 years. It was not long ago that I broke Raspberry Pi OS at dist-upgrade. Luckily, Manjaro KDE Plasma is available for the Pi as well.
Manjaro gives me rolling releases and stability. openSUSE Tumbleweed looks kind of interesting, but Manjaro is working and and at this time in life I've got better things to do than to distro hop.
Other than that, NixOS is a godsend.
The point is entirely different: if you update the channel-list you need the network for any changes to the configuration and I don't know of a way to go back to an earlier channel state.
`nix-channel` does have a `--rollback` flag to it.
However, I feel that Nix Flakes would allow you a better experience. With nix flakes, the revision of the nixpkgs input is persisted in a lockfile. You could check this file in somewhere, and then getting your working directory back to a known working state is much easier.
This is not a support forum and we're not trying to diagnose and fix someone's issue. It's just not that hard to get into trouble with NixOS and there's still a room for improvement, that's all.
Reading on `nix-channel --rollback`, it should definitely help in some cases and I don't know how I missed it, maybe the docs weren't clear it's not tied to config generations or I just didn't pay enough attention.
Unless you erase your darlings: https://grahamc.com/blog/erase-your-darlings