8 October 2026
Every setting in a package
Until now, the installer itself copied my settings into the system: desktop configuration, the template for new accounts, system rules. It worked on install day and never again: a fixed setting never reached machines already installed, and no setting could ever be removed.
Seven packages, three rules
Settings now belong to affutos-* packages in the AffûtOS repository: system, boot, AMD GPU, KDE, Firefox, Steam, Decky. Installing a package applies its settings, removing it takes them away, updating it fixes them on every machine — with one exception, forced by the second rule. The image build rejects any setting copied outside a package; the installer keeps only what happens once, such as the restored backup or the firmware boot entry.
- A setting KDE reads as a global default goes into
/etc/xdg: changed for everyone on update, and the account can always override it; - a per-account setting — Steam, Firefox, files Plasma rewrites — goes into the template for new accounts,
/etc/skel, as a file owned by the package. The downside: an existing account keeps its copy, which neither an update nor a removal touches; - a service is enabled by a link shipped in the package, not by a command: removing the package is enough to disable it. The one exception is Decky: its service is named after the account, which the package cannot know in advance, so it enables it for the first account and disables it when removed.
The CPU, memory and disk monitors in the taskbar go through a Plasma update script instead, run once per account at login: they land right after the task list, as on my main machine.
The culprit was pacman
The affutos-firefox package installs the system language pack when it is installed, then puts it back after every browser update. On an already installed machine with a flawless network, reinstalling it failed at the download: curl: (7) Failed to connect to archive.mozilla.org:443 after 1 ms. One millisecond is not a slow DNS: the connection never left the machine.
The answer was in the pacman.conf manual: since pacman 7.1, hooks and package install scripts run by default in a fresh network namespace, with no interface but loopback. No download gets through. That was the cause of the “could not resolve host” errors seen during installs since late September — which I had first blamed on the dangling DNS link suspected in mid-August, then filed as “cause unknown” on 4 October.
A hook can ask for the network (NetworkAccess = allowed), a package install script cannot — and the pack is also installed when the package itself is. So both the hook and the script ask systemd to start a service, which downloads outside the isolated namespace: systemd's sockets are files, reachable even without a network. During installation, where systemd is not yet running in the target system, a post-install step replays the download.
Three fewer errors in the system journal
Three errors cluttered the system journal. Two came from the Game Mode session, which starts a Steam notification daemon and an input method whose programs are not installed: their services are now skipped while their program is missing. The third came from the service that keeps the Firefox profile in RAM: it also started for root, which has no profile, and only runs for regular accounts now.
Checked both ways
On a test machine, every package was removed and reinstalled: its system files and services disappeared and came back identical. After that, two full installs in a virtual machine with the new images: none of the three errors in the system journal, and Decky running from the first boot.
One trap along the way: on a fresh install, Decky refused to start for lack of a folder my test account already had. A service checked on an existing account proves nothing for a new one: every service is now also tested on an account created for the occasion.
The lesson: as long as the failure only happened in the installer, I searched the installer. It took seeing it on an ordinary machine for me to finally look at pacman.