Title is quite self-explanatory, reason I wonder is because every now and then I think to myself "maybe distro X is good, maybe I should try it at some point", but then I think a bit more and realise it kind of doesn't make a difference - the only thing I feel kinda matters is rolling vs non-rolling release patterns.
My guiding principles when choosing distro are that I run arch on my desktop because it's what I'm used to (and AUR is nice to have), and Debian on servers because some people said it's good and I the non-rolling release gives me peace of mind that I don't have to update very often. But I could switch both of these out and I really don't think it would make a difference at all.
I use NixOS, it appealed to me because i got to a point where i liked minimal distros like arch and void and i could build them up exactly the way i like them to be, however i didn't like how i would have to go through that whole process again if i wanted to do a reinstall. With NixOS i can still craft my OS the way i like it, with the benefit of it being saved as a config, and easy to restore. I did make my own post-install script for void but NixOS is a more solid solution compared to my own janky script. I'm hoping to finally settle down on this distro. I guess the upside to the huge learning curve with nix is that it's a good motivator to not abandon it because it would feel like my efforts to learn it would go to waste lol.
Besides everything else you said, I especially love how you can store entire bash scripts in the nix configs, and even populate pieces of said scripts with variables if you so desire.
Also, if you run nixops, it's much easier to work with if your dev system is also running NixOS.
Yeah, i'm realizing more and more how convenient those variables are. I recently started using gtklock for example, a screenlocker that also has separate modules for extra functionality, which are also in nixpkgs, but the problem is that you have to explicitly specify the path to those modules in the config. So i wrote the config inside of home manager, and pointed to the modules path with the pkgs.foo variables. Worked like a charm.
It's for deployments and managing many environments/machines from a single CLI interface. You can do all sorts of things like push configs based on labels/groups, gather real-time data/logs, scale up/down. It's great when you have a lot of VPS/VDS/VMs to manage and you're not using a platform's specific management tools.
I mainly use NixOS as a barebones backend, keep it as minimal and hardened as I can, then most of the projects/apps that run are done through something like Docker or k8s. So for me, it's all about managing the underlying servers that provide the tools needed for a project to operate.
The tool itself is undergoing a pretty big redesign at the moment, but you can get the gist of it from the overview in the manual of the commands.