Three years on NixOS
This year I decided to shift yearly updates on my NixOS endeavors
(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:
- follow
fonts.fontstofonts.packagesrename (added inPR#244332) - follow
pipewiremigration toextraConfig(added inPR#282377). - follow
programs.gnupg.agent.pinentryFlavortoprograms.gnupg.agent.pinentryPackagemigration (added inPR#133542). - follow the rename from
nix.unstabletonix.latest(added inPR#305951).
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:
- problematic
firefoxupdate brokemeetvideo streaming. It was triggered by the use of--with-system-libvpxoption innixpkgs. That was one of the cases where I had the luxury of bisecting the whole system to pinpoint the bad component: https://github.com/NixOS/nixpkgs/pull/283010#issuecomment-1925703583. Local revert until the fix was shipped was trivial. - problematic unstable
6.8kernel upgrade caused kernel panic ineevdfscheduler. Was fixed upstream in https://lore.kernel.org/lkml/ZicOSiEWHJJcahi%2F@yujie-X299/t/ around6.9kernel. The crashes were nasty as scheduler crash locks up the machine and does not print anything when it happens. Luckilysystemdrecovered crash log fromEFInvramand it was clear from the backtrace that it’s a bug related to scheduling kernel subsystem.
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 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, so
flickery). 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 NixOS a go if you did not yet :)