Skip to content

Upgrade to nixpkgs 26.11 and clean up follow-on issues - #19

Merged
djacu merged 12 commits into
mainfrom
djacu/another-26.05-upgrade
Jun 8, 2026
Merged

djacu merged 12 commits into
mainfrom
djacu/another-26.05-upgrade

Conversation

@djacu

@djacu djacu commented Jun 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • nixpkgs 26.05 → 26.11. Drop the now-stale home.enableNixpkgsReleaseCheck = false workaround since nixpkgs caught up to home-manager.
  • gpg SSH-agent ordering-cycle workaround (home-manager#9432). PR #9420 added set-SSH_AUTH_SOCK.service with Before=gpg-agent-ssh.socket, which forms an ordering cycle with the unit's default deps; systemd resolves it by dropping gpg-agent-ssh.socket, leaving the SSH agent unbound and git-over-SSH failing with Permission denied (publickey). Override Unit.Before = []. Hit on malachite after the bump; latent on the other hosts until their next reboot.
  • *Order arr services after their postgres container. sonarr, sonarr-anime, radarr, prowlarr, and whisparr connect to their postgres instance at the container's veth address, which pg_hba.conf trusts as the only allowed /24. With no ordering dependency, concurrent startup let the service connect before the container's route existed — via the default route (wrong source IP) — and hit a fatal, non-retried no pg_hba.conf entry rejection. Add after + requires on container@postgres-<name>.service, matching the existing stasharr service.
  • kitty inotify-watch leak workaround. Set auto_reload_config = -1 in homeModules.programs.kitty to dodge kitty 0.47.0–0.47.1's __watch_conf__ recursively watching subdirs and exhausting the inotify budget (upstream #10102, fixed in 0.47.2). The config is store-managed, so runtime auto-reload is redundant anyway.
  • Enable mdformat-gfm so markdown tables get column-padded instead of collapsed; rewrite docs/reference/ores.md as a markdown table with role / hardware / notes columns mapping each ore-named host (argentite, cassiterite, malachite, scheelite).
  • Docs: add docs/plans/active/kde-plasma-sycoca-stale-cache-investigation.md capturing the FluffyChat-not-found Plasma sycoca incident on argentite (2026-05-10).
  • .git-blame-ignore-revs: two new entries for the formatter rebaselines (treewide: nix fmt, formatter-module: enable mdformat-gfm).

Test plan

  • nix build .#hydraJobs.systemConfigs.x86_64-linux.{argentite,cassiterite,malachite,scheelite,test-vm} clean
  • nix build .#hydraJobs.homeConfigs.x86_64-linux.{argentite,cassiterite,malachite,scheelite}-djacu clean
  • nixos-rebuild switch on each host: activation completes without persist-files errors. Hosts not yet migrated to impermanence-rollback need the runbook at docs/runbooks/migrate-zfs-host-to-impermanence-rollback.md on first deploy (done for argentite this round).
  • Post-deploy on argentite: nix run nixpkgs#inotify-info shows total watches ~50k (well under the 524,288 limit), no kitten __watch_conf__ outlier.
  • docs/reference/ores.md renders as a padded markdown table; em-dashes where data is absent.
  • scheelite deploy: all five *arr apps healthy (HTTP 401), After/Requires on container@postgres-<name>.service confirmed live, declarative-reconcile services succeed, no failed units.
  • scheelite reboot — definitive test of the *arr↔postgres cold-start race (only fires on concurrent boot).
  • Reboot validation of the gpg workaround — confirm gpg-agent-ssh.socket is active and git-over-SSH works after a reboot (the cycle is only evaluated at boot).

djacu added 12 commits June 7, 2026 16:28
nixpkgs has caught up to home-manager at 26.11, so the release-check
override and its self-removing warning are no longer needed. Bump the
lock and remove the workaround together.
Capture the FluffyChat-not-found incident on argentite (Plasma 6.6.4):
what was verified, what cache rebuild dance worked, and the open
questions for the next occurrence.
Add the mdformat-gfm plugin so tables get column-padded rather than
collapsed to minimum width. Existing tables across the docs tree are
re-padded as a side effect.
Convert the hand-aligned plain-text list to a markdown table that
mdformat-gfm pads automatically. Add role/hardware/notes columns
mapping each ore-named host (argentite, cassiterite, malachite,
scheelite) to its hardware; em-dash for rows that don't map to a
host.

Drop the stale `notes/ores.md` exclude from formatter-module — the
file lives under `docs/reference/` and is properly formatted, so
the exception is no longer needed.
The config is rendered into the nix store and symlinked into
~/.config/kitty, so it never changes in place — kitty has to be
restarted to pick up a new generation anyway, making the runtime
auto-reload redundant. Leaving it on also triggers kitty
0.47.0-0.47.1's __watch_conf__ bug where the watcher recursively
walks subdirs and exhausts the inotify budget (~482k watches on a
single kitty process here). Upstream issue #10102, fixed in 0.47.2.
PR nix-community/home-manager#9420 introduced set-SSH_AUTH_SOCK.service
with Before=gpg-agent-ssh.socket on its [Unit] section. Combined with
the service's implicit DefaultDependencies (After=basic.target, and
basic.target After=sockets.target), this forms an ordering cycle:

  sockets.target -> gpg-agent-ssh.socket    (socket's WantedBy=sockets.target)
  gpg-agent-ssh.socket After set-SSH_AUTH_SOCK.service    (Before= on service)
  set-SSH_AUTH_SOCK.service After basic.target -> sockets.target  (default deps)

systemd resolves the cycle by deleting gpg-agent-ssh.socket/start,
leaving the SSH agent socket unbound. gpg-agent serves no SSH keys
and git over SSH fails with "Permission denied (publickey)" -- no
pinentry prompt because there is no agent to prompt.

Override Unit.Before to []. The cycle is created purely by that
ordering edge, not by any activation relation -- set-SSH_AUTH_SOCK.service
is pulled into the transaction independently via WantedBy=default.target,
so dropping WantedBy=gpg-agent-ssh.socket from [Install] doesn't help
(verified empirically on malachite before settling on Unit.Before).
The service's only job is to push SSH_AUTH_SOCK into systemd-user and
D-Bus environments; consumers run much later than either unit's
activation, so removing the strict ordering is harmless.

Add a warning that fires when home-manager-unstable is bumped off the
rev #9432 was reported against, so the workaround gets reviewed on
each input bump -- same pattern as the enableNixpkgsReleaseCheck
workaround removed in 0ca745f.

Hit on malachite after the home-manager bump in 0ca745f. Latent on
argentite/cassiterite/scheelite -- their currently-running sessions
started before the buggy unit was on disk, so the cycle hasn't been
evaluated against the new graph yet. The next reboot on any of them
would expose it.

Tracking upstream at nix-community/home-manager#9432.
…whisparr}: order after postgres container

The *arr services connect to their postgres instance at the
container's veth address, which pg_hba.conf trusts as the only
allowed /24. With no ordering dependency on the container, on
concurrent startup the service could begin before the container's
veth/route existed, connect via the default route (source IP
10.0.10.111), and hit a fatal `no pg_hba.conf entry` rejection that
the *arr does not retry. Add `after` + `requires` on
container@postgres-<name>.service, matching the existing stasharr
service.
…s race

Cold-boot reboot of scheelite surfaced a pre-existing race: the
download-client reconcilers wait for the target *arr's API but not for
qBittorrent's WebUI, so prowlarr-downloadclients (fires earliest, no
media-mount dep) can push a qBittorrent client before qBittorrent's
WebUI accepts connections — the *arr validation gets Connection refused
and the unit fails. Low impact (updates an existing client) but a
persistent failed unit after each boot that loses the race. Captured
with root cause, timing evidence, and a proposed endpoint-poll fix.
test-vm declared fileSystems."/".device but no fsType. Under nixpkgs
26.11, ZFS's boot.zfs.enabled eagerly reads every filesystem's fsType
while evaluating assertions, so the missing value throws "option
fileSystems.\"/\".fsType was accessed but has no value defined" — which
fails `nix flake check`'s evaluation of nixosConfigurations.test-vm
(the hydraJobs build-skip path didn't surface it). Set fsType = "ext4"
for the VM's legacy IDE root device.
@djacu
djacu merged commit fe83c5e into main Jun 8, 2026
3 checks passed
@djacu
djacu deleted the djacu/another-26.05-upgrade branch June 8, 2026 04:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant