I've been using NixOS every day for over a year now. Nix & home-manager manages my entire desktop config and I've contributed to Nixpkgs. That being said, I don't think it's the perfect distro, and it isn't for everyone. Here are my two cents.
The package list is amazing
Nixpkgs has the most packages of any package manager. It's almost guaranteed to have the package you're looking for and more.
Repology chart of various package repositories - NixOS repos have the most packages
Non-prepackged programs are a nightmare
If you ever encounter a program that hasn't made its way into Nixpkgs yet, the process of writing a deriviation for it can be painful.
This has happened to me on various occasions. When I notice a missing package, my first action is to search GitHub for anyone else who has already written a derivation. This has worked for almost every other package I encountered, except for custom-written packages. The process of writing a deriviation is not very well documented, so I run non-Nix programs using nix-ld or steam-run.
It keeps you busy
System configurations (such as flakes) take a lot of time to maintain. Especially on the unstable branch, you have to dedicate time fixing random bugs that appear after an update.
The unstable branch is really unstable
In experimental software, the 'unstable' branch usually means things will break. With NixOS, it's more of a guarantee. There have been countless updates that have broke some part of my system. Most of the time it just breaks a rebuild, but others will literally break my networking or implement some driver regression.
I can't say how many times Ags (and Astal) were bumped to a version that broke my desktop shell. Hyprland has had countless updates that required config modification.
Many packages I want are currently only available on the unstable branch. I would imagine the 24.11 or even the 25.05 branches would be more stable. If you seek stability, stay away from the unstable branch. Update: Since 25.05 went stable, I've switched and have experienced far fewer issues.
Declarative systems are really satisfying
Nix flakes make it easy to install & reinstall Linux on all machines. That's the beauty of reproducibility! I no longer have to manually set up my apps and configurations - I can just copy a generated hardware config into my flake, build it, and I'm finished. All my programs are installed automagically!
The effort you put into making a reproducible system pays off immensely when building a new system.
Contributing is fun and easy
If you have experience with Git, the contribution process is actually quite simple. The Nix community have put together great contributing documentation which makes it easy to submit your first PR. Once you understand the Nix language, fixing issues and broken packages is actually really fun.
You can't always follow software installation steps
Linux installation instructions for some programs simply don't work. NixOS is a non-FHS compliant operating system, so trying to install traditional non-Nix packages will result in some issues. Most of the time, you have to do it the declarative Nix way.
Nixpkgs package updates can be slow
Although there are bots & scripts that automatically update Nixpkgs packages, larger program updates can take a while. Look at GIMP v3 - it took more than a month from its initial release for it to land in unstable. Since Hydra caches packages, it also takes a few additional days for the packages to become usable on a flake (even on unstable)
It's storage-efficient, not performant
Currently, Nix packages are not 'optimized' in any form. Sure, you'll save resources by having better control over running services, but the performance advantage of packages compiled with LTO (like in CachyOS) is much greater.
That being said, Nix manages storage more efficently. My entire desktop (including all my programs and wallpapers) is just 20GB. That's about half of what the bare Windows (with no apps) install takes.
Since Nix manages the packages on your system, it's easier for Nix to clean itself up and keep storage usage low.
Documentation is lacking & fragmented
Nix documentation tends to be fragmentized. Often, you'll find a solution to most problems on the Nix forums (or you can get help quickly on the Nix Discord server). The offical NixOS manual doesn't cover much and it's counterpart, the NixOS Wiki doesn't go in-depth. Nix.dev is good, but it just adds to the fragmentation. The Arch wiki remains superior.
The learning curve isn't bad
Sure, making your own configuration from scratch will take some time. But seriously, who actually makes their configuration from scratch? Almost everyone who is making their own flake has 'taken' parts of someone else's configuration, or forked one entirely. And once you've got a working configuration, making changes is really easy due to the readability of Nix expressions. There isn't much of a learning curve - you can build someone's flake on your machine in less than a few hours.
Better than Windows
No ads, no bloat. There isn't much comparison - the improvements on Linux far outweigh those missing Windows apps (you'll find replacements - or use Wine). Not to mention the privacy benefits and freedoms associated with open source - there isn't much you can't do!
Should you switch?
If you're new to Linux, start with something simpler like Mint or Ubuntu. But if you've got some extra time and dedication, why not?