Back to Blog

Why I stopped using NixOS and went back to Arch Linux

·3 min read
nixOs
archlinux
linux

About a year ago I switched from arch linux to NixOS as a daily driver on my laptop...

I fell in love with the idea of NixOS: as input you (basically) define your whole system configuration in a special config file syntax (Nix) and as output it gives you a reproducable build of your whole operating system and keeps track of changes so you can always revert back to an older generation if necessary. While this is nice on paper, it didn't end up working out for me..

After using NixOS for almost 1 year I decided to switch back to Arch linux on my lapop. Here's why:

Nix break all the Time....

Ironically, I only broke Arch once in five years, whereas NixOS often breaks even before updating. Something usually requires a change in my Nix configuration before the nixos-rebuild command finally succeeds. It's good that this check exists, but the constant cycle of rebuild → fix → rebuild → fix → rebuild becomes quite annoying after a while especially when the required changes are very small...

When the new configuration finally builds, more ofen than not some component randomly stops working after reboot. If it isn't broken copy paste between electron apps it is audio or bluetooth that randomly stopped working. I'm left alone to fix it with 0 clue as to why it broke.

Huge update sizes

NixOS handles dependencies differently compared to Arch Linux, which leads to much larger update sizes. Instead of replacing packages in place, NixOS installs new versions alongside the old ones, keeping multiple system generations....

For example, updating glibc in Arch Linux simply replaces the previous version. In NixOS, every package depending on glibc gets rebuilt or redownloaded, which greatly increases disk usage. While this provides rollback safety, it also means the system can quickly grow in size (unless you run nix-collect-garbage periodically).

$ ls /nix/store | grep glibc-locales
0j3cpwmwab04jmvyzcqh538jzrnm60hn-glibc-locales-2.40-36.drv
0k4azawc10ygacxyqjz36cqghxsicqpr-glibc-locales-2.40-66.drv
2i4wm7zsm2nkn7sn2aj7ng4x1k3p71gz-glibc-locales-2.39-52.drv
2sk3c2n6p3aavhd7659ll2w63mv0i3aw-glibc-locales-2.40-66.drv
33alnvvkrp1s13vg5frn1zca34xbz424-glibc-locales-2.39-52.drv
51ssq420b3wqvcxmgmcw00hk8zkh6gvw-glibc-locales-2.39-52.drv
...

If I take this, Arch Linux updates are easier to manage. Old files are removed automatically, and shared libraries don’t trigger redundant downloads. If you care about minimizing disk usage or have limited internet/network, NixOS can be a nightmare.

Compilation takes forever (and binary caches are unreliable)

NixOS builds packages in isolated environments, which often means compiling everything from source even for minor updates. While binary caches like Cachix (a hosted Nix binary cache service) can theoretically speed up installations, they often miss packages due to system differences, forcing unnecessary compilation.

For example, if a dependency isn’t cached exactly as required, NixOS will rebuild it locally even for common packages. This can take hours, especially on slower hardware. On my machine, regular maintenance updates without proper caching easily take 4–5+ hours....

In contrast, Arch Linux simply downloads prebuilt binaries via pacman or an AUR helper, making updates take just a few minutes.

If you dislike waiting for your system to rebuild constantly, NixOS can be frustrating. And if you actually enjoy recompiling everything from scratch, why not use Gentoo Linux instead?

Conclusion

I wish NixOS a bright future ahead to address all of its shortcomings. But until then it's no longer my favorite distro and I wouldn't recommend daily driving it as your desktop linux distro unless you have a very specific use case....

Note

I do not hate NixOS, but it’s not really built for me. I prefer simplicity and speed over complex builds.