docs(backlog): design pass for display profiles (item 15)
All checks were successful
Check / eval (push) Successful in 3m1s
All checks were successful
Check / eval (push) Successful in 3m1s
The item required a written plan before coding. Option shape reuses the existing monitorType submodule (attrsOf (listOf monitorType)); active profile is in-flake state (settings.displayProfile) on the night-light instant+bake pattern; whole-entry-by-name rebuild overlay with a disable-guard so a stale menu resolution pick can't resurrect a disabled panel; self-gated System > Display profile row; sliced a/b/c with hotplug auto-switch and workspace binding deferred behind the core picker. kanshi remains a non-goal. Verified: V0 (docs-only change). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,11 +47,38 @@ job: the `checks.*` VM suite + real toplevel/HM builds on every push
|
|||||||
(also upgrades item 14's bump gate from eval-only to the full suite).
|
(also upgrades item 14's bump gate from eval-only to the full suite).
|
||||||
|
|
||||||
### 15. Display profiles — docked/undocked switching
|
### 15. Display profiles — docked/undocked switching
|
||||||
ROADMAP § Display / monitor management, remaining: true profile
|
ROADMAP § Display / monitor management, remaining: profile switching of
|
||||||
switching of the *same* outputs (multi-layout toggles, beyond
|
the *same* outputs. **Plan (designed 2026-07-05, iteration #27):**
|
||||||
per-output hotplug rules), optionally workspace-to-monitor binding.
|
- **Option:** `nomarchy.displayProfiles` (HM) = `attrsOf (listOf
|
||||||
Design first (state-file shape, menu surface) — write the plan into
|
monitorType)` — each profile is a named list reusing the existing
|
||||||
this entry before coding.
|
monitor submodule verbatim (no second schema). Example: `docked =
|
||||||
|
[ { name="eDP-1"; resolution="disable"; } { name="DP-3"; … } ]`.
|
||||||
|
- **State:** `settings.displayProfile = "<name>"` (absent = base
|
||||||
|
config), menu-written with `--no-switch` — the night-light pattern:
|
||||||
|
instant now, baked at the next rebuild. Add the key to
|
||||||
|
nomarchy-theme-sync's known-settings list (item 11's validator warns
|
||||||
|
on unknowns).
|
||||||
|
- **Rebuild overlay** (hyprland.nix): active profile's entries replace
|
||||||
|
base `nomarchy.monitors` entries whole, by name; the existing
|
||||||
|
`settings.monitors` resolution overlay then applies field-level on
|
||||||
|
top, EXCEPT onto entries whose profile resolution = "disable" (a
|
||||||
|
stale resolution pick must not resurrect a disabled panel).
|
||||||
|
- **Instant apply** (menu): System › Display gains a self-gated
|
||||||
|
"Profile: <active>" row (only when profiles are declared) → pick →
|
||||||
|
`hyprctl keyword monitor <rule>` per entry (rules baked into the
|
||||||
|
dispatcher at build, like everything else in rofi.nix) + state write
|
||||||
|
+ toast. Outputs the profile doesn't name keep their base rules.
|
||||||
|
- **Slices:** (a) option + overlay + menu picker + template example
|
||||||
|
(opt-in ⇒ commented `templates/downstream/home.nix` block) — V1 +
|
||||||
|
a checks.* grep of the rendered hyprland conf, V3 real dock; (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
|
||||||
|
`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.
|
||||||
|
|
||||||
### 16. Greeter theming from the JSON
|
### 16. Greeter theming from the JSON
|
||||||
ROADMAP § Greeter. tuigreet themed from theme-state.json at system
|
ROADMAP § Greeter. tuigreet themed from theme-state.json at system
|
||||||
|
|||||||
@@ -17,6 +17,21 @@ Template:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-07-05 — display-profiles design pass (iteration #27, item 15, no code)
|
||||||
|
- **Task:** BACKLOG NEXT#15 — the entry itself demands "design first,
|
||||||
|
write the plan into this entry before coding". Backlog-only iteration.
|
||||||
|
- **Did:** wrote the plan into item 15: `nomarchy.displayProfiles =
|
||||||
|
attrsOf (listOf monitorType)` (reuse the existing submodule),
|
||||||
|
`settings.displayProfile` state via the night-light pattern (instant
|
||||||
|
hyprctl apply + bake on rebuild), whole-entry-by-name overlay with a
|
||||||
|
disable-guard against stale resolution picks, self-gated menu row,
|
||||||
|
three slices (option+overlay+menu / opt-in hotplug auto-switch /
|
||||||
|
per-profile workspace binding), kanshi stays a non-goal.
|
||||||
|
- **Verified:** V0 (docs-only; flake untouched).
|
||||||
|
- **Pending:** nothing — 15a is now directly codeable.
|
||||||
|
- **Next suggestion:** 15a (option + overlay + menu picker), or #16
|
||||||
|
greeter theming if a fresh session prefers a self-contained item.
|
||||||
|
|
||||||
## 2026-07-05 — scheduled lock-bump workflow (iteration #26, item 14 b+c)
|
## 2026-07-05 — scheduled lock-bump workflow (iteration #26, item 14 b+c)
|
||||||
- **Task:** BACKLOG NEXT#14 `[big]` — split: (a) checks-on-push shipped
|
- **Task:** BACKLOG NEXT#14 `[big]` — split: (a) checks-on-push shipped
|
||||||
earlier; this ships (b) the weekly bump + (c) the fast-lane as
|
earlier; this ships (b) the weekly bump + (c) the fast-lane as
|
||||||
|
|||||||
Reference in New Issue
Block a user