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.
This commit is contained in:
nevaforget committed 2026-09-28 14:52:05 +02:00
1 parent de70d1794e
commit dddf236ace
9 files changed
+190 -7

No files matched your search

+12
View File
@@ -193,6 +193,18 @@ in
galculator
];
xdg.mime = {
defaultApplications = {
"image/gif" = "viewnior.desktop";
"image/jpeg" = "viewnior.desktop";
"image/png" = "viewnior.desktop";
"image/webp" = "viewnior.desktop";
};
addedAssociations."image/webp" = "viewnior.desktop";
};
programs.gdk-pixbuf.modulePackages = [ pkgs.webp-pixbuf-loader ];
# Polkit agent for privilege prompts inside the session.
security.polkit.enable = true;
# The setuid pkexec wrapper is opt-in and off by default. Without it pkexec
+6
View File
@@ -272,6 +272,12 @@ in
ExecReload = "${lib.getExe pkgs.stasis} reload";
Restart = "on-failure";
RestartSec = 2;
# Stopped by hand it exits at once; stopped as part of the session it
# does not answer SIGTERM, and the default 90 seconds left the whole
# user manager waiting on it — niri received its own SIGTERM only once
# stasis had been killed. Measured at 88s in the journal. What it holds
# is an idle timer, so nothing is lost when it goes down hard.
TimeoutStopSec = 5;
IPAddressDeny = "any";
ProtectProc = "invisible";
ProcSubset = "pid";
+5 -7
View File
@@ -47,11 +47,6 @@ let
# it, so the link target below cannot drift from what Kvantum looks up.
kvantumThemeName = "catppuccin-mocha-lavender";
# Mocha like everything else here. The package installs under
# share/plymouth/themes/catppuccin-${variant}, which is the name boot.plymouth
# asks for. Upstream Catppuccin has no accent variants for Plymouth.
plymouthVariant = "mocha";
plymouthTheme = pkgs.catppuccin-plymouth.override { variant = plymouthVariant; };
in
{
environment.etc = {
@@ -119,10 +114,13 @@ in
# With systemd in the initrd, which this configuration uses, systemd asks for
# the LUKS passphrase and Plymouth draws that prompt; the script initrd instead
# shows it as text before the splash comes up.
# The theme carries a name of its own, outside the catppuccin-<flavour> set
# that the NixOS plymouth module links its logo into, so the splash shows
# what the theme brings and nothing besides.
boot.plymouth = {
enable = true;
theme = "catppuccin-${plymouthVariant}";
themePackages = [ plymouthTheme ];
theme = "moonarch";
themePackages = [ moonarchPkgs.moonarch-plymouth ];
};
# Qt applications are wrapped, so each one looks for plugins in its own