From e02b4d820053f7ddfa69dbcf9b31a8b802472886 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sun, 5 Jul 2026 17:20:26 +0100 Subject: [PATCH] docs(backlog): design pass for display profiles (item 15) 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 --- agent/BACKLOG.md | 37 ++++++++++++++++++++++++++++++++----- agent/JOURNAL.md | 15 +++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 9954f0c..a48ed05 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -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). ### 15. Display profiles — docked/undocked switching -ROADMAP § Display / monitor management, remaining: true profile -switching of the *same* outputs (multi-layout toggles, beyond -per-output hotplug rules), optionally workspace-to-monitor binding. -Design first (state-file shape, menu surface) — write the plan into -this entry before coding. +ROADMAP § Display / monitor management, remaining: profile switching of +the *same* outputs. **Plan (designed 2026-07-05, iteration #27):** +- **Option:** `nomarchy.displayProfiles` (HM) = `attrsOf (listOf + monitorType)` — each profile is a named list reusing the existing + monitor submodule verbatim (no second schema). Example: `docked = + [ { name="eDP-1"; resolution="disable"; } { name="DP-3"; … } ]`. +- **State:** `settings.displayProfile = ""` (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: " row (only when profiles are declared) → pick → + `hyprctl keyword monitor ` 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 ROADMAP § Greeter. tuigreet themed from theme-state.json at system diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index c6a4a6f..be78a68 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -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) - **Task:** BACKLOG NEXT#14 `[big]` — split: (a) checks-on-push shipped earlier; this ships (b) the weekly bump + (c) the fast-lane as