121 Commits
Author SHA1 Message Date
nevaforget a145e5cc40 chore(flake): bump moonarch for the workspace window list in the bar 2026-10-15 18:19:03 +02:00
nevaforget 9da0457f3c feat(browsers): search.moonarch.de as default search engine, list trimmed to DuckDuckGo and Wikipedia 2026-10-14 18:49:13 +02:00
nevaforget 0e880cd3f3 feat(desktop): sshfs installed 2026-10-14 18:30:23 +02:00
nevaforget 1a385d5152 feat(desktop): tiddl installed, pinned to PR #427 for HiRes stereo 2026-10-14 18:30:23 +02:00
nevaforget 6f19047803 feat(thinkpad): sshfs installed
Flake inputs updated.
2026-10-14 18:14:48 +02:00
nevaforget c9ec8e759b fix(thinkpad): Nix fetches the DisplayLink driver itself
nixpkgs builds displaylink with requireFile, so every driver version bump
(6.2.0-30 -> 6.3.0-48) stopped the system build until the zip was put into
the store by hand. pkgs/displaylink.nix overlays requireFile with fetchurl,
taking name and hash from nixpkgs and the URL from its requireFile message.
Applied in nixosModules.moonarch, since the NixOS module reads
pkgs.displaylink directly.
2026-10-14 18:14:48 +02:00
nevaforget c3b90fba7d chore(flake): bump moonarch for the thunar daemon at login 2026-10-09 08:53:38 +02:00
nevaforget 459f6d8d82 fix(desktop): drop the swww-compat symlinks, waypaper calls awww directly
moonarch switched the waypaper backend from swww to awww (f90dd92), so the
swww/swww-daemon symlinks onto awww have nothing left to serve.

Flake inputs updated.
2026-10-07 08:11:09 +02:00
nevaforget 95c65d29dc fix(browsers): PDFs open in Firefox, not Chromium 2026-10-02 23:56:05 +02:00
nevaforget 4d2fbef15a fix(browsers): browser.nova.enabled off in Firefox 2026-10-02 15:20:34 +02:00
nevaforget 932896856b perf(boot): the boot menu waits one second, not five
systemd-boot stood at its default 5 second timeout on every boot, 5.9s of
loader in systemd-analyze on the desktop. One second still shows the menu
without a key held down, which through the desktop's KVM may not register in
time, so an older generation stays selectable when an update does not boot.

obs-studio, discord and vesktop on the desktop. Flake inputs updated.
2026-10-02 15:20:34 +02:00
nevaforget d16070a4a7 fix(desktop): xdg-open goes through the portal, so FHS sandboxes get Firefox
acli auth login opened Chromium. buildFHSEnv binds only an allowlist of /etc
entries into its bubblewrap sandbox, and /etc/xdg is not on it, so the
mimeapps.list from xdg.mime is invisible there and xdg-open takes the first
http handler in mimeinfo.cache. The same holds for Steam and AppImages.
xdg.portal.xdgOpenUsePortal hands the URL to the OpenURI portal, which
resolves it on the host (NixOS/nixpkgs#160923).

acli and kubectl on the ThinkPad. Flake inputs updated.
2026-09-30 19:25:09 +02:00
nevaforget 1077a745c3 fix(desktop): amdgpu in the initrd, so Plymouth draws at native resolution
Without it the passphrase prompt came up on the framebuffer the firmware left
behind: one monitor, its resolution, switching over only once amdgpu loaded.
The ThinkPad gets the same setting from nixos-hardware's amd profile.
2026-09-28 15:58:53 +02:00
nevaforget 153bae47ea perf(network): nothing waits for a routable address at boot
NetworkManager-wait-online holds network-online.target until a connection is
routable, and multi-user.target sits behind it through docker.service, the only
active unit that pulls the target in.
2026-09-28 15:42:05 +02:00
nevaforget dddf236ace feat(theme): a splash theme of our own, images in viewnior, a stop timeout for stasis
The Catppuccin splash showed the NixOS logo and the loading animation and
nothing else. The NixOS plymouth module links boot.plymouth.logo into every
theme directory named catppuccin-<flavour>, and the two-step module has no
alignment key for that header image, so its distance from the animation is not
the theme's to set. A theme under a name of its own is outside that loop.
moonarch-plymouth joins as a flake input; pkgs/moonarch-plymouth.nix rewrites
the descriptor's FHS ImageDir to the store path.

Images opened in Chromium although viewnior has been installed since 3e40a70:
no mimeapps.list named image/* at all, so xdg-open took the first candidate
from mimeinfo.cache. xdg.mime points gif, jpeg, png and webp at
viewnior.desktop. webp needs addedAssociations besides, which viewnior.desktop
does not declare, and webp-pixbuf-loader, without which gdk-pixbuf cannot
decode it.

stasis does not answer SIGTERM as part of the session teardown, and the default
90 seconds left the whole user manager waiting on it: niri received its own
SIGTERM only once stasis had been killed, 88 seconds in the journal.
TimeoutStopSec = 5. What it holds is an idle timer, so nothing is lost when it
goes down hard.

glab on the ThinkPad.
2026-09-28 14:52:05 +02:00
nevaforget de70d1794e fix(theme): Kvantum's theme where Qt5 looks for it, qt5ct as the platform theme 2026-09-28 08:23:48 +02:00
nevaforget e7f76aaf03 feat(theme): a themed boot splash, and amdgpu back in the ThinkPad's initrd 2026-09-28 08:23:48 +02:00
nevaforget 3d5ac11aa2 feat(browsers): drop the thumbnail from the tab hover preview 2026-09-28 08:16:38 +02:00
nevaforget d26faa091d fix(desktop): file dialog on the GTK backend, one portal config
useNautilus = false assigns FileChooser to gtk and drops the nautilus D-Bus
registration; the GTK3 dialog then follows the same settings.ini as thunar.

The deployed niri-portals.conf is gone: /etc/xdg-desktop-portal/ ranks below
/etc/xdg/, where programs.niri writes the same file. Its one extra key,
Inhibit=none, moves to desktop.nix.
2026-09-25 13:10:16 +02:00
nevaforget 3007656b0f feat(browsers): install the Bitwarden extension
Bitwarden Inc.'s own build, addressed by GUID because the store carries
third-party forks under the same name. normal_installed like the others, so it
stays removable.
2026-09-24 15:35:25 +02:00
nevaforget 3cdf7718d5 fix(browsers): switch to the German pack, and off what the first run showed
languagePacks installs the pack and the policy reports it as active, but the
interface stayed English: installing is not switching, the same split the theme
already had. Firefox does not fall back to LANG either, although de_DE.UTF-8
reaches the process. RequestedLocales is what switches to it.

Three settings from the same first run: address autofill, payment autofill, and
the three Firefox Suggest switches. The autofill pair are preferences. Suggest
is a policy instead, because its preferences already ship as false and the
profile sets no user value while the switches were on — something enables them
at runtime, which a preference set as a default does not survive. ImproveSuggest
is named rather than left to follow from the other two, so the data collection
cannot come back if Suggest is ever turned on again.
2026-09-24 15:32:36 +02:00
nevaforget 69ccc3ca89 feat(thinkpad): uv and python3 for the work projects
Host-local for the same reason as the node toolchain. python3 belongs next to
uv: its default python-preference reaches for a system interpreter before it
downloads one, so the common case needs no download at all. A project pinned
to an older version still gets one fetched, and those FHS binaries find their
loader through the nix-ld that modules/zed.nix turns on.
2026-09-24 15:18:41 +02:00
nevaforget dba33d2463 refactor(modules): one topic per module, and Firefox preconfigured
Two changes that cannot be separated in the result: the Firefox
preconfiguration is what made desktop.nix untenable, and the split is what it
now lives in.

Firefox replaces LibreWolf, with Betterfox as its preference base and the
settings that Betterfox does not cover expressed as policies: uBlock Origin,
the Catppuccin theme, no Pocket, no Sync, autoscroll, DuckDuckGo, no
translation offer, no password prompts, no bookmarks toolbar, about:blank as
home and new tab. Both add-ons are normal_installed and the preferences keep
status "default", so none of it is locked away — undoing settings by hand was
the reason to leave LibreWolf.

desktop.nix carried thirteen topics over 637 lines, and the existing split
followed the NixOS option namespace rather than the topic: services.pipewire
here, its configPackages there; services.gvfs and services.udisks2 apart from
their packages; Bluetooth likewise. Nine modules now each hold one topic with
its options, packages, configs and services together. desktop.nix keeps the
compositor, the /etc deployment, portals and what belongs to no topic.

The refactor changes nothing about the built system, and that was checked
after each of the eight steps rather than assumed. The plain store path does
not serve as the criterion: moving a package to another module reorders
environment.systemPackages, which changes the system-path hash and propagates
into every file naming it. What was compared instead is the package set
through diff-closures and every differing file with store hashes normalised
away. Two steps reordered the user tmpfiles list, which is neutral only
because no two rules name the same path — checked, not presumed.
2026-09-24 15:18:33 +02:00
nevaforget 964b5583ad feat(thinkpad): readable boot, the dock's displays, and the node toolchain
Four host-local things that the first install turned up.

The LUKS prompt and the boot menu were both unreadable on the 3840x2400
panel, for different reasons: nixos-hardware puts amdgpu into the initrd, so
the panel is already at its native mode when cryptsetup asks, and systemd-boot
draws through UEFI text output and inherits whatever the firmware left behind.
Keeping the driver out of the initrd fixes the first, consoleMode = "0" the
second.

The Hybrid USB-C Dock drives its monitors over DisplayLink, not DisplayPort alt
mode, so the panel's own connectors never report a screen. Naming the driver
pulls in evdi, the service and the udev rules.

nodejs and pnpm are host-local because no other machine here builds JavaScript.
2026-09-24 15:17:53 +02:00
nevaforget c887b3db04 fix(moonarch-scripts): state the PATH the camera scripts need
The camera scripts walk USB descriptors with standard tools and reach each
other by name, but pkexec replaces the environment with a fixed FHS PATH and
the boot unit brings its own, so neither the tools nor the sibling scripts
were found through an inherited PATH. /run/wrappers/bin leads the list because
the system environment carries polkit's own unprivileged pkexec as well, which
aborts unless it is the setuid wrapper.
2026-09-24 15:16:10 +02:00
nevaforget 84ba6d38e2 fix(thinkpad): drop fprintd, the fingerprint reader is not used
fprintd put pam_fprintd ahead of pam_unix in every PAM stack, gtklock and
sudo included, for a reader nobody enrolled. The Arch install never had
fprintd either.
2026-09-23 13:55:18 +02:00
nevaforget 7fc45ae0b8 fix(thinkpad): ready the host for its first install
The host still carried snapper, which the desktop dropped in d3cc03c:
disk.nix creates no .snapshots subvolumes, so the timer would fail every
hour without ever taking a snapshot. The account sat in the docker group
while docker itself was off, and stateVersion named 26.05 although the
machine is first installed on 26.11.

Also drops the stale snapper mentions elsewhere and adds git-firefly to
Zed's auto-installed extensions.
2026-09-23 13:14:30 +02:00
nevaforget 195f6167b5 fix(desktop): install the Kvantum theme instead of seeding it
nixpkgs patches Kvantum to look for themes along XDG_DATA_DIRS
(tsujan/Kvantum 01989083), so a theme package on the system path is
found without anything being copied into the home directory. Linking
/share/Kvantum is what makes it reachable there; the system path carries
only the /share subdirectories it is told to.

The rule this replaces never did what it promised. 'C' recreates the
destination with the mode of its source, and a store directory is
r-xr-xr-x, so copying into it fails for anyone but root and leaves an
empty directory behind — silently, with exit 0 (systemd 261). Only root
was unaffected, which is why a user unit was the one place it broke.

Qt5 clients keep the default style: the patch takes in the Qt6 build
only (NixOS/nixpkgs#355277). VLC is the only Qt5 client here.
2026-09-23 12:19:20 +02:00
nevaforget 9adadb14b5 fix(desktop): publish the wallpaper under an FHS path
waypaper reads only the copy of its config in the home directory, and
that copy is seeded with tmpfiles 'C', which never overwrites. The store
path substituted into it therefore froze at the moonarch revision it was
generated against, and the next garbage collect took that source away —
leaving the session with a black background and no error anywhere.

/usr/share/backgrounds/moonarch.jpg is relinked on every activation, so
the seeded config keeps naming a file that exists, whatever moonarch
revision is current.

gtklock and greetd keep their store paths: their configs are regenerated
on every activation and are held by the system profile, so neither can
go stale the way the seeded copy did.
2026-09-23 11:37:32 +02:00
nevaforget 88953dcc10 chore(flake): update inputs
nixpkgs 26.05pre924538 -> 26.11pre1074753, moonarch 98f51dd -> a172f90,
nixos-hardware 44d9579 -> 9ebcb77, and moonarch's own nixpkgs alongside.
2026-09-22 18:33:53 +02:00
nevaforget 2ace9f78e5 feat(desktop): add galculator 2026-09-22 18:33:02 +02:00
nevaforget ee30b4790c fix(boot): cap the systemd-boot entries at ten per host
Without configurationLimit every generation keeps its entry on the ESP.
The desktop had grown to 58 of them, 232M of a 1G partition, and nothing
ever removed one. Ten keeps a useful rollback range and lets the builder
clear the rest on every switch.
2026-09-22 18:32:08 +02:00
nevaforget fa18df657f feat(lock): install moonarch-lock and give it its own PATH
moonarch replaced its direct gtklock calls with the moonarch-lock
wrapper. stasis.rune and PowerPopout.qml come from moonarchSrc, so the
new command arrived here at once while the script did not -- the
moonarch-scripts whitelist did not carry it.

Wrapped rather than left bare like the other seven: it has two callers
and must not depend on either one's PATH. A missing gtklock means no
lock screen at all, a missing niri or jq only the wrong monitor.
2026-09-14 19:19:27 +02:00
nevaforget 6f02c86d08 chore(flake): bump moonarch to 98f51dd
Picks up the gtklock switch and the GTK theme fix, so the tree is
self-contained again: `nixos-rebuild switch` no longer needs
`--override-input moonarch`, which 0cbd829 had left it needing.

Also brings in app2unit from 20ee46f, which landed on moonarch's main while
this work was local. NixOS already carries app2unit in the system
environment, so nothing here changes because of it.

Verified: both hosts build to exactly the store paths the --override-input
build produced, so the pin is the revision that was tested.
2026-09-12 02:26:40 +02:00
nevaforget 9b60d5cdd0 fix(desktop): the GTK theme rewrite is permanent, not a migration
moonarch 6ea02b5 moves to the same Catppuccin Mocha Lavender theme, so the
rewrite no longer bridges Colloid to Catppuccin. It now bridges two names
for the identical theme: Arch installs the upstream 1.0.3 release zips,
whose directories carry the full build name with the +default tweak marker,
while nixpkgs builds the same source with no tweaks and drops the suffix.
Neither side can take the other's name without going out of its way, so
this stays.

Comment rewritten to say that, and to keep the reason it matters: GTK3
reads settings.ini directly — the dconf entry only reaches applications
that ask GSettings, which on Wayland the GTK3 ones do not — so a name that
does not resolve puts every GTK3 application on Adwaita with no error
anywhere. That is exactly the state moonarch was in until 6ea02b5, where
the named theme was installed by no package at all.

Verified with --override-input: both hosts build, and the deployed
settings.ini carries the nixpkgs name while moonarch's source carries the
Arch one.
2026-09-12 02:26:40 +02:00
nevaforget 3d67eb7bbf refactor(desktop): drop the moonarch rewrites, gtklock is named at the source
moonarch 4f36035 names gtklock itself now, in stasis.rune and in
PowerPopout.qml, so the two substitute derivations that were rewriting them
at deploy time have nothing left to do. stasisConfig, quickshellConfig,
lockCommand and lockArgv go; both consumers read moonarch's tree directly
again.

gtklockConfig stays generated rather than copied. moonarch ships
defaults/xdg/gtklock/config.ini, but it names /usr/share/moonarch for the
background and resolves the modules by bare name against /usr/lib/gtklock.
Both are store paths here, so the file is built rather than deployed — the
same reason PipeWire's config takes its own route.

NOT SELF-CONTAINED: flake.lock still pins moonarch from before 4f36035, and
that revision still says swaylock. Until the lock is bumped, a plain
`nixos-rebuild switch` deploys configs naming a locker that is no longer
installed, and stasis fails silently on a missing binary. Build with
`--override-input moonarch ~/Projects/moonarch` until then, or bump first.
Committed at Dominik's request ahead of the push that makes the bump
possible.

Verified with --override-input: both hosts build, the seeded stasis.rune
and the deployed PowerPopout.qml come straight from moonarch and name
gtklock, and the generated config.ini carries the blurred wallpaper and
both module store paths.
2026-09-12 02:26:40 +02:00
nevaforget a419a17e08 feat(desktop): gtklock replaces swaylock, GTK theme moves to Mocha
Looking at whether gtklock was worth it turned up two things.

The GTK layer was never on Mocha. colloid-gtk-theme with the catppuccin
tweak produces Frappé with a grey accent — base #292c3c, selection #ccd0da
— and #1e1e2e, #b4befe and #cba6f7 appear nowhere in its gtk.css. Kvantum,
the swaylock ring and Zed were all Mocha, so GTK was the one layer out of
step, unnoticed because the two dark bases sit close together.
catppuccin-gtk carries Colloid as a git submodule and only recolors it, so
the switch is a recolor with identical widget shapes.

The old objection to gtklock is gone: 4.0.0 links libgtk-session-lock.so.0,
so it speaks ext-session-lock-v1 like swaylock and the compositor still
holds the lock if it crashes. Only the ≤2.x layer-shell versions unlocked
on a crash. What it adds over swaylock is the modules — avatar, clock and
power buttons — which swaylock cannot do at all.

The blur stays baked into the wallpaper. gtklock cannot blur either: GTK3
has no filter CSS property at all, and it takes no screenshot of the
session, so there is nothing to blur at lock time.

Two rewrites of moonarch config were needed and both take the command from
one lockCommand binding: stasis names the locker in four places, and the
Quickshell power popout spawns it itself. Routing the popout through
`stasis trigger lock-screen` would have named it once, but the Lock button
would then fail silently whenever stasis is down. The reason to want it
turned out not to exist — the plan continues after a manual lock anyway,
because stasis takes the state from logind's LockedHint rather than from
having started the locker. Verified by locking by hand and watching DPMS
fire on schedule.

gtkSettings rewrites the Colloid name out of moonarch's settings.ini files.
Without it every GTK3 application would have fallen back to Adwaita: GTK3
reads those files directly and the dconf entry does not reach it on
Wayland.

Verified after rebuild: both hosts build, /etc/pam.d/gtklock carries the
same `auth sufficient pam_unix.so` swaylock had, the seeded stasis.rune
names gtklock at all four call sites, and the popout spawns it.
2026-09-12 02:26:40 +02:00
nevaforget 50dcffe63a chore(flake): bump nixpkgs
Unrelated to the change that follows; it was already in the working tree
and both are built against it.
2026-09-12 02:26:40 +02:00
nevaforget e205ea6358 Merge branch 'main' of gitea.moonarch.de:nevaforget/moonix
# Conflicts:
#	DECISIONS.md
#	modules/services.nix
2026-09-10 13:38:34 +02:00
nevaforget c8d9a00a8d feat(services): report the age of the nixpkgs lock
A rebuild against an unchanged lock installs nothing new, so a machine
built daily can still run months-old packages. A user timer reads the
locked lastModified of the nixpkgs input and notifies once it passes
seven days, offering a terminal that runs the update.
2026-09-10 13:32:14 +02:00
nevaforget 3222afc0c9 feat(disk): show the storage disk in file managers
A plain fstab entry is invisible to Thunar and friends — they list
removable media and gvfs entries, so the disk could only be reached by
typing its path. x-gvfs-show puts it in the sidebar, and because the entry
is noauto it appears as a drive that is not mounted yet, which is what it
usually is.

Note when changing this: the gvfs volume monitor reads fstab at startup,
so an already-running one has to be restarted before the entry shows up.
2026-09-09 19:57:09 +02:00
nevaforget 7e77bcde39 feat(disk): declare expendable storage in the layout
The Crucial P1 was mounted through two hand-written blocks in the host
because moonarch.disk knows only roles that stage 1 waits for, and a disk
that dies every other day must not be one of those. disko has a switch for
exactly this — initrdUnlock = false keeps a container out of the initrd —
so the role fits into the layout after all.

moonarch.disk.storage partitions and formats the disk like the other two,
but its container is opened after stage 1 by a key file on the encrypted
root disk, the filesystem mounts on first access, systemd stops waiting
after five seconds, and an idle timeout unmounts it again. A missing or
dead disk is then a missing directory, not a stalled boot.

The crypttab entry addresses the partition by partlabel, which disko
derives from the names in the layout, so no UUID has to be pasted in and a
replaced disk needs no edit here.

Verified after reboot: container opens as `storage` without a passphrase
prompt, /storage mounts on access, and the initrd holds only `crypted`.
2026-09-09 19:46:35 +02:00
nevaforget d3cc03c7e0 fix(desktop): drop snapper, which never took a snapshot
The module wrote the configs and the timers, but nothing creates the
.snapshots subvolumes they need, so snapper-timeline failed every hour
with errno:2 and there was never a single snapshot to roll back to.

Removing it rather than fixing it: rollbacks of / are already covered by
NixOS generations, and snapshots of /home would have shared a disk with
/home. That answers "I deleted the wrong file" but not "the disk is
gone", and the second is the failure that actually occurred here.
2026-09-09 18:45:38 +02:00
nevaforget a112ebc413 feat(desktop): mount the Crucial P1 as expendable storage
The P1 left the layout when /home moved to the XPG. It comes back at
/storage, carrying only data whose loss costs nothing — the Steam library
to begin with.

Every option is chosen so the disk can no longer hold up the boot the way
it used to. The container is opened after stage 1 through a keyfile on the
encrypted system disk instead of in the initrd, the filesystem mounts on
first access only, and device-timeout together with nofail lets systemd
give up after five seconds when the drive is gone. idle-timeout unmounts
it again once nothing uses it, which keeps it cold, and cold is when this
drive works.

Verified on the machine: storage.automount pulls the cryptsetup unit in on
first access through the device dependency, so no explicit ordering is
needed.
2026-09-09 18:41:53 +02:00
nevaforget 34b8e31152 fix(desktop): move /home off the failing Crucial P1
The 1T Crucial P1 that carried /home fell off the PCIe bus four times in
four days — controller is down, CSTS=0xffffffff, reset failing with
ENODEV — each time forcing /home read-only mid-session.

Measured on the machine: the controller sits 17 K above the rest of the
drive at idle and reaches 90 C under pure read load while the other
sensors stay at 45-48. Throughput starts at 1.5 GB/s cold and collapses
in a sawtooth as it heats, down to 768 KiB/s over a 15 minute run, with
single reads stalling up to 1.465 s. The XPG under the same fio run
holds ~1 GB/s at 42 C. SMART is otherwise clean (no media errors, no
error log entries, 5% used) and P3CR013 is the final firmware, so there
is nothing left to repair.

/home therefore moves to the system disk, which modules/disk.nix already
does when home.enable is off. The P1 stays in its slot with no
partition, container or mount referencing it.
2026-09-09 18:10:28 +02:00
nevaforget 6ff21d69d5 fix(desktop): point ~/.icons/default at the cursor theme
Steam gets XCURSOR_THEME from the session variables and still drew the
core pointer: parts of it resolve the theme literally named 'default'
instead of reading the variable. Xcursor looks that name up along
XCURSOR_PATH, where ~/.icons comes first, so a link there covers those
lookups as well.
2026-09-09 18:10:16 +02:00
nevaforget 709b80e65c fix(desktop): keep launcher apps out of the bar's cgroup
Quickshell has no scope support of its own, so apps started from its
launcher inherited the cgroup of quickshell.service and systemd killed
them along with the unit on every restart — a rebuild that rewrites the
unit was enough, and Librewolf counted each one as a crash until it
refused to restore the session. app2unit is the start prefix the QML now
uses; see moonarch's LauncherPopout.qml.

The unit also gained a start limit. After a rebuild sent niri SIGTERM,
graphical-session.target stayed up while the Wayland socket was gone, so
Restart=on-failure spun 32 times in two minutes against a dead display.
Three tries per 30s ends that; the window slides, so a single crash after
a normal run still gets its restart.
2026-09-09 15:54:03 +02:00
nevaforget 7cf022fec4 fix(stasis): let the desktop suspend on idle again
moonarch 7a24cdb puts a suspend step back into the desktop plan; it was lost
when that plan stopped inheriting the ac: blocks. systemctl has to be on the
unit PATH for it, or the step fails silently like swaylock did.
2026-09-09 14:12:25 +02:00
nevaforget 257df5a4dc fix(desktop): drop the redundant fwupd package
services.fwupd.enable already puts the package in systemPackages, so the
entry only mattered where the daemon is off: on the desktop it left a
working fwupdmgr with no unit to talk to.
2026-09-09 13:56:02 +02:00
nevaforget 30a9ef2e56 chore(flake): update nixpkgs and nixos-hardware 2026-09-09 12:44:58 +02:00