Three years on NixOS

June 2, 2024

This year I decided to shift yearly updates on my NixOS endeavours (2023 instance). This time the occasion is NixOS 24.05 release.

System maintenance

Looking at the git log for /etc/nixos for the desktop system I see the following things happening over the past year:

All four were trivial to tweak and did not cause much confusion.

Similar to previous year I did not have any problems related to package build failures for any on nixos-unstable. Again, probably because I tested staging time to time.

This time I had two non-trivial problems in upstream packages:

Community support

NixOS community remains to be a friendly place that welcomes newcomers, experiments and day-to-day maintenance work. This year NixOS Foundation received some heat for how it governs some aspects of the community. NixOS Foundation proposed a few major changes on how it will operate in future.

The most important (and hardest organizationally) change I did was to document and exercise the procedure of updating bootstrap binaries in nixpkgs.

My fanciest contribution was my failed attempt at listing “all” the package attributes available in nixpkgs. While I was not able to list all the attributes initially I managed to derive about 60 fixes to nixpkgs (all linked in the article) to make future listing smoother. Tl:DR; of the fixes is: dynamic typing is hard.

The most unusual nixpkgs contribution was to find the non-determinism in nix expression language itself. It’s not something I expected to encounter in real code. Alas.

The trickiest from technical standpoint was the fix for parallel strip breakage. -Ofast and libpam bugs were also fun.

The most satisfying was to reduce the runtime closure for many packages that use __FILE__ just for for debug messages.

Surprisingly I managed to get about 800 commits into nixpkgs this year. About ~90 of them is fixes to get compatibility with gcc-13. About 60 are evaluation fixes mentioned above. About 400 of them are various package version updates.

I still read some of Matrix channels but I mostly skim through discourse as I have even less free time than last year.

Home server experience

I did not have to adapt anything for the past year. I switched from apache to nginx as an httpd without any issues. And that’s about it. Things Just Work.

Local experiments

As an experiment I gave hyprland a short try. I had to switch back to sway. I had two issues with hyprland: new applications are visibly changing layout a few times before they settle on final window size (I could not get used to it) and configuration language quirks (I frequently missed commas where empty arguments are required).

I also did a bit of fresh gcc testing. This time frame also coincided with gcc-14 development and release cycle. nixpkgs ended up being a reasonable vehicle to play with gcc-14. The last bug pile report tells me that I found about 50 gcc bugs and even fixed at least one non-trivial one.

Parting words

NixOS still works fine for me. I did not do as much as I managed to last year. But looking back the list looks impressive.

Give it a go if you did not yet :)