Two years on NixOS
Yet another year has passed since I switched to NixOS
as my main
desktop system. Time to look back and see how it went
(2022 instance).
System maintenance
I did not have any problems related to package build failures for any
amount of time on nixos-unstable
. Probably because I did a bit of
testing when changes were in staging
.
I had to deal with fallout around configuration changes related to upgrades:
fontconfig
font hinting default changed. I had to set explicit defaults to restore font rendering.pipewire
configuration layout changed and I had to slightly adapt my non-standard socket overrides: https://github.com/NixOS/nixpkgs/pull/220332#issuecomment-1480119470- I followed rename of
boot.tmpOn*
options toboot.tmp.*
.
All 3 were easy to track down and fix. It’s a bit more maintenance than last year’s but still manageable.
Community support
NixOS
community remains to be a friendly place that welcomes
newcomers, experiments, and day-to-day maintenance work. I have not seen
instances of large conflicts or abusive behaviors towards anyone.
I had a few chances to interact with wider community by attempting
larger-scale nixpkgs
changes: I succeeded on one change and failed on
another change.
More successful change was
enabling parallel installs by default.
It’s a good example of a small change with small impact that touches
most packages. I managed to speed up quite a few slow-to-install
packages without major regressions. We have 32 nixpkgs
packages marked
with
enableParallelInstalling = false
.
The rest should install in parallel (as long as a package builds in
parallel).
Less successful change was the initially minor
bootstrap process change.
It’s a good example of a medium change with some impact on most
packages. I successfully pushed a few small cleanups but ended up
reverting larger changes. Those exposed bugs either in changes
themselves (gcc
bootstrap is hard) or on incorrect assumptions of
downstream packages. This change is also very hard to communicate:
people tend to dismiss finer details of the change and don’t see the
reason for a particular change. Maybe I’ll try again next year :) In any
case I learned a lot in the process!
I follow Matrix channels even less than I did last year as I focus a bit
more on personal and select nixpkgs
projects.
Maintenance model
I think nixpkgs
maintenance model still holds today. There are RFC
like RFC 127
to label
problematic packages in a more fine-grained form than just
ok
/broken
. Most updates are still done by a
robot
auto-updater.
Looking at
commit activity
nixpkgs
gets about 1000 commits a week. That’s a lot.
Home server experience
Don’t have anything to complain about here. The server required zero maintenance from me this year as well.
The only thing I changed was the switch from nixos-unstable
to direct
master
branch from nixpkgs
to get upstream kernel upgrades slightly
faster at the expense of local kernel build.
Fun fact: when I had a cooling failure
on my main desktop system I switched to home server as my main machine.
It took a few config lines to turn a headless machine to wayland
desktop
(and then back a week later when repair finished). As it’s an old
machine I noticed how some builds are slower than they ought to be. This
prompted me to work on
parallel installs.
Local experiments
I switched my machine configurations to
flake
-based configuration to have
configuration update history in a single /etc/nixos
git
repository.
While at it, I also switched my desktop from nixos-unstable
channel
directly to master
branch to get latest kernels and firefox
as soon
as they are available. This means a bit of local compiling from time to
time.
I switched from i3+x11
to wayland+sway
as my main desktop window
manager. This exposed minor bugs in
waypipe
and even
wine
!
Parting words
NixOS
still works fine for me. Compared to last year I was able to do
larger projects within NixOS
community (bootstrap, parallel builds,
closure shrinking, large package updates, …) and outside NixOS
community (gcc
, wayland
, xmms2
, ski
, …).
Give it a go if you did not yet :)