Compare commits

...

3 Commits

Author SHA1 Message Date
Bernardo Magri
e98ebe5d8c fix(hypr): correct invalid window-rule syntax in pip/retroarch/steam/system
Some checks failed
Check / eval-and-lint (push) Has been cancelled
Booting the VM peeled back two more layers of Hyprland config errors after
the geforce/moonlight fix:

  * pip.conf used underscored rule names with stray values —
    `keep_aspect_ratio on` and `border_size 0`. Hyprland's rules are
    `keepaspectratio` (boolean, no value) and `bordersize 0`.
  * retroarch/steam/system.conf wrote `idleinhibit, <mode>` with a comma,
    so Hyprland read <mode> as a selector ("Invalid value: always/
    fullscreen"). The mode is space-separated: `idleinhibit always`.

Verified clean in a rebuilt VM — the boot-time config-error overlay is
gone. All Omarchy-era rule-syntax holdovers, exposed once Component 5
wired apps.conf to source every app rule file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:52:40 +01:00
Bernardo Magri
8e5e63facb fix(installed-summary): drop compgen (absent in wrapped bash)
Booting the VM showed "line 31: compgen: command not found" from
nomarchy-installed-summary on first boot. compgen is a bash
programmable-completion builtin, and the non-interactive bash the script
gets wrapped with (via makeWrapper + patchShebangs) is compiled without
progcomp. Beyond the visible error, the battery-presence check silently
failed to the else branch, so a laptop was always reported as "desktop".
Replace `compgen -G` with a nullglob array (a shopt, always available).
The installer's identical check runs under the ISO's interactive bash, so
it was unaffected — this script is the only compgen user.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:30:35 +01:00
Bernardo Magri
14c22cbbaa fix(hypr): valid windowrulev2 syntax for geforce/moonlight
Booting the desktop VM surfaced Hyprland config errors on every start:
"config option <windowrule:name> does not exist" from apps/geforce.conf
and apps/moonlight.conf. Both used an invalid `windowrule { name=…;
class:=…; idle_inhibit=… }` block form (an Omarchy-era holdover) that
Hyprland rejects line-by-line — exposed once Component 5 wired apps.conf
to source all 17 app rule files. Rewrite as single-line windowrulev2
rules matching every other apps/*.conf: idle-inhibit on fullscreen for
GeForceNOW; open-fullscreen + idle-inhibit for Moonlight.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:30:35 +01:00
7 changed files with 16 additions and 19 deletions

View File

@@ -1,5 +1 @@
windowrule {
name = geforce
class:= GeForceNOW
idle_inhibit = fullscreen
}
windowrulev2 = idleinhibit fullscreen, class:^(GeForceNOW)$

View File

@@ -1,6 +1,2 @@
windowrule {
name = moonlight
class:= com.moonlight_stream.Moonlight
fullscreen = 1
idle_inhibit = fullscreen
}
windowrulev2 = fullscreen, class:^(com.moonlight_stream.Moonlight)$
windowrulev2 = idleinhibit fullscreen, class:^(com.moonlight_stream.Moonlight)$

View File

@@ -4,7 +4,7 @@ windowrulev2 = tag -default-opacity, tag:pip
windowrulev2 = float, tag:pip
windowrulev2 = pin, tag:pip
windowrulev2 = size 600 338, tag:pip
windowrulev2 = keep_aspect_ratio on, tag:pip
windowrulev2 = border_size 0, tag:pip
windowrulev2 = keepaspectratio, tag:pip
windowrulev2 = bordersize 0, tag:pip
windowrulev2 = opacity 1 1, tag:pip
windowrulev2 = move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip

View File

@@ -1,4 +1,4 @@
windowrulev2 = fullscreen, class:com.libretro.RetroArch
windowrulev2 = tag -default-opacity, class:com.libretro.RetroArch
windowrulev2 = opacity 1 1, class:com.libretro.RetroArch
windowrulev2 = idleinhibit, fullscreen, class:com.libretro.RetroArch
windowrulev2 = idleinhibit fullscreen, class:com.libretro.RetroArch

View File

@@ -5,4 +5,4 @@ windowrulev2 = tag -default-opacity, class:steam.*
windowrulev2 = opacity 1 1, class:steam.*
windowrulev2 = size 1100 700, class:steam, title:Steam
windowrulev2 = size 460 800, class:steam, title:Friends List
windowrulev2 = idleinhibit, fullscreen, class:steam
windowrulev2 = idleinhibit fullscreen, class:steam

View File

@@ -20,4 +20,4 @@ windowrulev2 = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject
windowrulev2 = rounding 8, tag:pop
# Prevent idle while open
windowrulev2 = idleinhibit, always, tag:noidle
windowrulev2 = idleinhibit always, tag:noidle

View File

@@ -26,9 +26,14 @@ tz=$(jq_or_empty "$SYS_STATE" '.timezone')
dns=$(jq_or_empty "$SYS_STATE" '.dns')
hybrid_gpu=$(jq_or_empty "$SYS_STATE" '.features.hybridGPU')
# Form factor: same battery-presence check the installer uses to auto-set
# nomarchy.{system.,}formFactor.
if compgen -G "/sys/class/power_supply/BAT*" >/dev/null; then
# Form factor: battery presence (same signal the installer uses to auto-set
# nomarchy.{system.,}formFactor). `compgen` is a bash programmable-completion
# builtin, and the non-interactive bash this script gets wrapped with is
# compiled without it — so a glob into a nullglob array, not `compgen -G`.
shopt -s nullglob
batteries=( /sys/class/power_supply/BAT* )
shopt -u nullglob
if (( ${#batteries[@]} )); then
form_factor="laptop"
else
form_factor="desktop"