For what it's worth: I no longer suggest the use of NixOS for any purpose. I only have one NixOS system in my house because it's my NAS and I am a coward.
There's one sentence in there I wanted to call out:
> Everything had to be done the “Nix Way”
Funny thing, what eventually drew me into using NixOS was a comment on some random forum (long since lost the reference) from what appeared to be an experienced NixOS veteran that said pretty much the opposite: that NixOS is as pure or impure as you want it to be. Want purely declarative everything? Do everything with Nix expressions, be it classic derivations or flakes. Want stateful package management? Install stuff to your profile. Or even install devbox and run homebrew in it. I've come to see the benefits in doing things "the Nix Way", but it's pragmatic enough that you're not entirely locked in. You just can't make any assumptions about what PATH looks like.
So while the rest of my system is defined as a flake, the one thing I haven't fully embraced on NixOS is home-manager, and I've only just started adopting that in a piecewise fashion. Meanwhile I'm defining a flake per project on my mac to replace all the other version-manager thingies I'd been using, but I still find nix-darwin a step too far.
A lot of scripts and binaries don't work properly if not installed through Nix. This can really affect your workflow if you depend on random niche software not packaged by Nix.
When I started my first job I couldn't build their TypeScript project because it depended on GRPC on NPM. That NPM package is literally just a binary...
This isn't really the fault of NixOS, but it's wildly impractical as long as the world is stuck where it is. I've recently considered going back into NixOS and spinning up Podman Ubuntu containers for stateful dev environments (with my home-manager programs included, of course). It's sort of the reverse approach, instead of Nix being a second-class citizen on Ubuntu, I want Ubuntu to be a second-class Citizen on Nix.
Yah I suppose I should have said "you just can't make any assumptions about the filesystem layout" instead. You can always assume shells have a symlink in /bin, and there's another for /usr/bin/env, and that's about it. Programs that assume the system follows the FHS tend to break on other distributions too, but certainly will on Nix. That's where we end up using containers and VMs, or whatever smoke and mirrors act NixOS does for Steam.