fix: live-VM desktop fixes — Hyprland 0.55 compat + swww→awww rename

Found by booting the live ISO (docs/TESTING.md checklist):
- pin HM configType = "hyprlang" (26.05 stateVersion defaults to the new
  Lua config and renders these settings as broken hl.$mod(...) calls,
  booting Hyprland into emergency mode)
- drop dwindle:pseudotile (removed in Hyprland 0.55; aborts config parse)
- disable splash rendering alongside the logo
- launch awww-daemon and call awww with swww fallback (nixpkgs' swww is
  the renamed awww fork; no `swww` binary exists anymore)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-06-10 15:38:32 +01:00
parent f211ef0d09
commit 8a0ec763e0
2 changed files with 20 additions and 12 deletions

View File

@@ -26,6 +26,11 @@ in
package = null; package = null;
portalPackage = null; portalPackage = null;
# HM defaults stateVersion >= 26.05 to the new Lua config and would
# render these hyprlang-style settings as broken `hl.$mod(...)` Lua
# (Hyprland then boots into emergency mode with no binds).
configType = "hyprlang";
settings = { settings = {
"$mod" = "SUPER"; "$mod" = "SUPER";
"$terminal" = config.nomarchy.terminal; "$terminal" = config.nomarchy.terminal;
@@ -33,9 +38,10 @@ in
monitor = [ ",preferred,auto,1" ]; monitor = [ ",preferred,auto,1" ];
exec-once = [ exec-once = [
"swww-daemon" # nixpkgs' swww is awww (renamed fork); the binary is awww-daemon.
"awww-daemon"
# Paint the wallpaper as soon as the session is up (waits for # Paint the wallpaper as soon as the session is up (waits for
# swww-daemon internally). # the daemon internally).
"nomarchy-theme-sync wallpaper" "nomarchy-theme-sync wallpaper"
]; ];
@@ -89,13 +95,13 @@ in
touchpad.natural_scroll = true; touchpad.natural_scroll = true;
}; };
dwindle = { # dwindle:pseudotile was removed in Hyprland 0.55 (the `pseudo`
pseudotile = true; # dispatcher still exists); setting it aborts config parsing.
preserve_split = true; dwindle.preserve_split = true;
};
misc = { misc = {
disable_hyprland_logo = true; disable_hyprland_logo = true;
disable_splash_rendering = true;
force_default_wallpaper = 0; force_default_wallpaper = 0;
}; };

View File

@@ -168,16 +168,18 @@ def apply_wallpaper(state: dict, wait: bool = False) -> None:
if wallpaper is None: if wallpaper is None:
log(f"no wallpaper for theme '{state.get('slug', '?')}', skipping") log(f"no wallpaper for theme '{state.get('slug', '?')}', skipping")
return return
if shutil.which("swww") is None: # nixpkgs renamed swww to awww (CLI-compatible fork); accept either.
log("swww not found, skipping wallpaper") swww = shutil.which("awww") or shutil.which("swww")
if swww is None:
log("awww/swww not found, skipping wallpaper")
return return
# At session start swww-daemon may still be coming up. # At session start the daemon may still be coming up.
for _ in range(10 if wait else 1): for _ in range(10 if wait else 1):
if subprocess.run(["swww", "query"], capture_output=True).returncode == 0: if subprocess.run([swww, "query"], capture_output=True).returncode == 0:
break break
time.sleep(0.5) time.sleep(0.5)
result = subprocess.run( result = subprocess.run(
["swww", "img", str(wallpaper), [swww, "img", str(wallpaper),
"--transition-type", "grow", "--transition-type", "grow",
"--transition-pos", "center", "--transition-pos", "center",
"--transition-duration", "1", "--transition-duration", "1",
@@ -185,7 +187,7 @@ def apply_wallpaper(state: dict, wait: bool = False) -> None:
capture_output=True, capture_output=True,
) )
log(f"wallpaper: {wallpaper.name}" if result.returncode == 0 log(f"wallpaper: {wallpaper.name}" if result.returncode == 0
else "wallpaper: swww failed (daemon not running?)") else "wallpaper: awww failed (daemon not running?)")
# ─── Commands ───────────────────────────────────────────────────────────── # ─── Commands ─────────────────────────────────────────────────────────────