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;
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 = {
"$mod" = "SUPER";
"$terminal" = config.nomarchy.terminal;
@@ -33,9 +38,10 @@ in
monitor = [ ",preferred,auto,1" ];
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
# swww-daemon internally).
# the daemon internally).
"nomarchy-theme-sync wallpaper"
];
@@ -89,13 +95,13 @@ in
touchpad.natural_scroll = true;
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
# dwindle:pseudotile was removed in Hyprland 0.55 (the `pseudo`
# dispatcher still exists); setting it aborts config parsing.
dwindle.preserve_split = true;
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
force_default_wallpaper = 0;
};

View File

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