Six months of NixOS
I jumped on the NixOS hype train half a year ago. The pitch sounded incredible: an entire operating system declared in a single configuration file. Imagine spinning up a fresh machine and having all your tools, dotfiles, and window managers install perfectly, byte-for-byte, every time. No more dependency drift or random breakages. A strictly functional approach to environment management.

It worked exactly as advertised. It was also completely exhausting.
The problem with NixOS isn't that it doesn't work. The problem is that every time you want to step off the beaten path, say, installing a weird proprietary binary or a new Nvidia driver, you suddenly have to battle the Nix package manager. You can't just wget a binary and run it if the underlying dynamically linked libraries aren't explicitly mapped in your Nix deraivation.
You sometimes have to define dependancies yourself, and write your own 'flake'. Flakes suck IMO.
And then there's the language. Learning the Nix configuration language specifically to configure your personal laptop is a tough sell. It's a steep curve to learn a specialized, purely functional, lazy-evaluated language just so you can install a text editor or fix a missing font. And flakes use a different syntax, because, why not?
Is it powerful? Yes. Is it necessary? Usually no.
Unless you manage a massive fleet of identical servers, or your development environment has such strict zero-drift requirements that Docker isn't enough, NixOS is overkill for a daily driver. The juice isn't worth the squeeze.
I'll reconsider it when an AI can reliably write and debug the Nix configuration files for me. Until that happens, the friction is just too high to justify the theoretical purity.