NixOS-specific features (as opposed to using Nix on top of other distro)

I really like the concept of Nix, and I am trying to understand if it is worth giving up my current distro altogether (which may not be easy anyway) and move to NixOS.

I would like to know what additional features NixOS provides, as opposed to using Nix on top of another distro. What’s the added value? Could you please provide some details?

Thanks

Gugg

I would like to know what additional features NixOS provides, as opposed to using Nix on top of another distro. What’s the added value? Could you please provide some details?

You can switch to a previous state of the system. Try upgrading/downgrading X.org a few times when configuring a fancy feature — not much fun if you cannot have both installed and just a necessary combo of things selected for use.

And you can configure a lot of things as a single Nix expression

Thanks for your reply.
I was also wondering, is there anything I would be missing if I moved from my current distro (Manjaro) to NixOS? (apart from the AUR repository)
Any caveats regarding NixOS?

My personal reasons, and let me mention I have been a BSD (open and free) user over the years.

  1. a clean base, with the possibility of allowing users to install their own packages. This takes the BSD userland vs ports concept even further and despite the sometimes issues of scripts not shebanging to /usr/bin/env, works very well.

  2. a very good zfs on linux setup. Frankly I am very pleased with how good and easy the ZOL setup on nixos is.

  3. The roll backs from an update but still bleeding edge. As a former Arch Linux user I have been burned by a pacman -Syu before. Granted it was my own fault, but still.

  4. nix shell. granted I have not really learned how best to use it, and my use case would be for development. I use docker for containering deployments but rarely use it for developing because it feels more like a hassle in that domain. From what I see nix-shell feels less in the way for creating development environments.

I will mention some cons:

So I use vim/nvim. nixos finally pushed me over to nvim as using vundle with nvim and newer nvim completion plugins just worked better. This is not a nixos issue. And frankly I need to consider allwing nix-env to manage my nvim plugins, but still it was a slight shift.

The other is sometimes after a sudo nix-channel --update && sudo nixos-rebuild switch I lose wireless on my laptop. No amount of restarting the network manager service seems to get it back up and it is like tha hardware disappears. I end up being forced to reboot to get wireless back. Not sure why, and it is a minor hassle but feels oh so Windows when that happens. I only run an update once a week. So I really haven’t bothered to dig into it.

My overall opinion on the generals, nixos feels like a very clean developer workstation distro (my main usage at the moment). The packaging plus configuration is making my life easier.

Ken

Missing? Do you mean, missing packages, missing services, missing freedoms or missing knowledge of administering system? You’ll be missing at least something of all of above. NixOS changes many aspects of a Linux distribution, so it’s up to you to try and compare yourself: is it worth or not.

  • To check missing packages you can consult NixOS Search or https://repology.org/
  • To check missing services (and services in NixOS are not provided with packages, those are a separate beast) you can check NixOS Search
  • Checking missing freedoms is harder, I don’t know of any complete description of what is harder/impossible to do in NixOS. Of top of my head:
    • you can’t modify packages in-place (actually, can, but it’s not straightforward), can’t use make install without Nix. If you use Nix already, you should be familiar with this
    • lots of /etc is symlink/readonly, so editing configs in-place is hard. Help from internet becomes non-portable
    • most services even don’t expose their config in /etc, so checking configs may be a problem
    • you can’t install services imperatively, only packages. In some cases you even have to dig into service details
    • proprietary stuff usually doesn’t consider NixOS usecase, so it may be harder to run
  • And for missing knowledge, you should read first 3 chapters of NixOS 23.11 manual | Nix & NixOS. And when your config becomes large enough and you want to split it into files/ extract commons, or want to add new service, time to read in details about module system. Though I’d recommend to read actual NixOS modules source code and learn by example.

PS. Oh yeah, @devilock76 is correct that NixOS is buggy sometimes. But it is less buggy than Arch, and has the best experience for rolling-release distro.

1 Like

I’ve had a similar experience, but have been able to get networking back by dropping to tty1 and restarting the display manager with systemctl restart display-manager. I think the issue has something to do with updates to QT/KDE but it’s pretty infrequent so I also haven’t bothered to look.

Just yesterday I stumbled on a bug in btrfs utils and could fix it myself in just a few minutes. It was as easy as adding an overlay with:

self: super: {
  btrfs-progs = super.btrfs-progs.overrideAttrs (oldAttrs: {
    patches = oldAttrs.patches or [] ++ [ ./0001-btrfs-send-bugfix.patch ];
  });
}

I don’t think I would’ve been able to set up my own build of a custom package on Arch this quickly. And I’ve used NixOS for barely over a week.

The ability to quickly change things to be the way you want them to be and have that change persist (that patch will be automatically applied until I remove it without requiring any changes to system upgrade procedure) is a big win for NixOS.

1 Like