feat(displays): declarative nomarchy.monitors + nwg-displays arranger

Add a per-output monitor schema (name / resolution / position / scale /
transform / mirror / bitdepth / vrr / disable) that generates Hyprland
`monitor` rules, keeping the ,preferred,auto,1 wildcard as the fallback.
Hyprland applies the rules on hotplug, so a declared external/dock output
arranges itself on connect (no kanshi -- it fights Hyprland's own output
management). Default [] -> wildcard only, so no change for existing setups;
set wayland.windowManager.hyprland.settings.monitor directly to override.

nwg-displays ships behind nomarchy.displays.enable (default true) as an
interactive arranger -- a helper to discover values; the declarative config
stays the source of truth (its output file isn't sourced).

Remaining (roadmap): docked/undocked profile switching, workspace-to-monitor
binding.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-06-15 10:22:18 +01:00
parent 1b0eeeaf6c
commit 42801548b7
4 changed files with 117 additions and 9 deletions

View File

@@ -233,12 +233,18 @@ how to override it. Items marked ✓ are shipped.
surface or split (`nomarchy.services.*` system-side vs home-side packages);
and how it relates to `nomarchy.apps.*` (opt-out suite). Unfree entries are
already covered (`allowUnfree = true`).
- **Display / monitor management:** today Hyprland just uses
`monitor = ,preferred,auto,1` (mkDefault). Add a real external-monitor/dock
story: declarative per-output config, hotplug profiles (kanshi-style, or
Hyprland's own monitor rules), and optionally a GUI arranger (nwg-displays
writes Hyprland monitor config). Decide declarative-only vs GUI, and the
option shape (`nomarchy.monitors` vs plain Hyprland `monitor` lists).
- **Display / monitor management:** declarative `nomarchy.monitors` (a
per-output schema — name/resolution/position/scale/transform/mirror/
bitdepth/vrr/disable) generates Hyprland `monitor` rules, keeping the
`,preferred,auto,1` wildcard as the fallback; Hyprland applies them on
hotplug, so a declared external/dock output arranges itself on connect
(no kanshi — it fights Hyprland's own output management). `nwg-displays`
ships behind `nomarchy.displays.enable` as an interactive arranger (a
helper to find values; the declarative config stays the source of truth —
its output file isn't sourced). Remaining: true docked/undocked **profile
switching** of the *same* outputs (Hyprland's per-output rules cover the
common "external connects → arrange" case, not multi-layout toggles), and
optionally workspace-to-monitor binding.
- **Night light / blue-light filter:** schedulable colour-temperature shift
via `hyprsunset` (Hyprland-native; wlsunset/gammastep are alternatives) —
sunset/sunrise or a fixed schedule, with a menu + Waybar toggle.