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:
@@ -71,12 +71,14 @@ the *same* outputs. **Plan (designed 2026-07-05, iteration #27):**
|
||||
- **Slices:** (a) ✓ shipped 2026-07-05 (iteration #28): option +
|
||||
overlay (pure `modules/home/monitor-rules.nix`, unit-tested by
|
||||
checks.display-profiles) + `nomarchy-display-profile` applier + menu
|
||||
Profiles row + template example — V3 (real dock) queued; (b)
|
||||
opt-in hotplug auto-switch: a socket2 watcher on monitoradded/
|
||||
removed picks the profile whose named-output set matches connected
|
||||
outputs (exact match, else largest subset, ties = no switch) —
|
||||
decide the flag shape (`settings.displayProfile = "auto"` vs a
|
||||
separate boolean) at implementation; (c) optional per-profile
|
||||
Profiles row + template example — V3 (real dock) queued; (b) ✓
|
||||
shipped 2026-07-05 (iteration #29): hotplug auto-switch — `match`
|
||||
subcommand (exact set, else unambiguous largest subset, ties =
|
||||
none) + a poll watcher (exec-once, the keyboard-watcher pattern)
|
||||
gated live on `settings.displayProfileAuto` (a separate boolean,
|
||||
NOT an "auto" pseudo-profile, so auto-picks persist concrete
|
||||
profiles that rebuilds bake) + menu Auto-switch row — V3 rides the
|
||||
slice-a dock test; (c) optional per-profile
|
||||
`workspaces = { "1" = "DP-3"; }` → Hyprland `workspace` keywords.
|
||||
- **Non-goals:** no kanshi (fights Hyprland's output management —
|
||||
decided in ROADMAP), nwg-displays stays a find-the-values helper.
|
||||
|
||||
Reference in New Issue
Block a user