feat(displays): hotplug auto-switch for display profiles (item 15b)
All checks were successful
Check / eval (push) Successful in 2m57s
All checks were successful
Check / eval (push) Successful in 2m57s
nomarchy-display-profile gains `match <outputs>`: an exact set match wins, else the largest profile whose named outputs are all connected; any tie prints nothing — the watcher must never flap between ambiguous layouts. nomarchy-display-profile-watch (exec-once when profiles are declared, the keyboard-watcher poll pattern — session units race Hyprland IPC on relogin) reacts to output-set CHANGES only, reads settings.displayProfileAuto from the live state each time (the menu's new Auto-switch row toggles it instantly, no rebuild), and applies via the tool — so an auto-pick persists a concrete profile that the next rebuild bakes. A separate boolean rather than an "auto" pseudo-profile for exactly that bake semantics. Verified: V0 (flake check); V1 — a scratch 4-profile downstream builds; tool + watcher pass bash -n; the match matrix exercised end-to-end: three exact picks, an unambiguous-superset pick, a tie -> none, a no-fit -> none; the watcher is exec-once'd in the rendered config; the menu renders the Auto-switch row. Remains: V3 real dock/undock (HARDWARE-QUEUE, rides the slice-a entry). Slice c (workspace binding) stays, tagged optional. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -394,11 +394,26 @@ ${themeRows}
|
||||
if [ "$p" = "$active" ]; then printf '● %s\n' "$p"; else printf '○ %s\n' "$p"; fi
|
||||
done
|
||||
printf 'Base layout\n'
|
||||
if [ "$(nomarchy-theme-sync get settings.displayProfileAuto 2>/dev/null)" = true ]
|
||||
then printf 'Auto-switch (on)\n'
|
||||
else printf 'Auto-switch (off)\n'
|
||||
fi
|
||||
printf '%s\n' "$BACK"
|
||||
} | rofi -dmenu -p Profiles ) || exit 0
|
||||
case "$choice" in
|
||||
"$BACK") exec "$0" display ;;
|
||||
"Base layout") exec nomarchy-display-profile base ;;
|
||||
*"Auto-switch"*)
|
||||
# Instant in-flake flag; the watcher reads it live on the next
|
||||
# output change — no rebuild, no unit juggling.
|
||||
if [ "$(nomarchy-theme-sync get settings.displayProfileAuto 2>/dev/null)" = true ]; then
|
||||
nomarchy-theme-sync --quiet set settings.displayProfileAuto false --no-switch
|
||||
notify-send "Display profiles" "Auto-switch off — profiles change only from this menu."
|
||||
else
|
||||
nomarchy-theme-sync --quiet set settings.displayProfileAuto true --no-switch
|
||||
notify-send "Display profiles" "Auto-switch on — plugging/unplugging outputs picks the matching profile."
|
||||
fi
|
||||
exec "$0" display-profile ;;
|
||||
*) exec nomarchy-display-profile apply "''${choice#[●○] }" ;;
|
||||
esac ;;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user