feat(displays): display profiles — docked/undocked switching (item 15a)
All checks were successful
Check / eval (push) Successful in 3m4s
All checks were successful
Check / eval (push) Successful in 3m4s
nomarchy.displayProfiles: named layouts for the same outputs, each a list of nomarchy.monitors-style entries. The active profile lives in the in-flake state (settings.displayProfile) on the night-light pattern: nomarchy-display-profile apply <name> fires the baked hyprctl rules instantly and writes the state with --no-switch; the next rebuild bakes the profile's entries over nomarchy.monitors whole-by-name. Monitor-rule composition is extracted to pure monitor-rules.nix (renderer + 3-layer resolve, incl. a disable-guard so a stale menu resolution pick can't resurrect a profile-disabled panel, and junk state degrading to base config instead of an eval error) — because a writeText/toFile state fixture is unreadable at flake-check eval time, the new checks.display-profiles unit-tests the pure function directly. Menu: System › Display gains a self-gated "Profiles ›" row (●/○ active mark, Base layout to clear); commented template example + README row. Verified: V0 (flake check, forcing the new check's asserts); V1 — a scratch downstream through lib.mkFlake builds: the generated tool passes bash -n with correct rules (disable/vrr/float scale), the baked hyprland.conf shows the exact expected overlay, the menu renders, and list/usage smoke-test clean. Remains: V3 live switching on a dock (HARDWARE-QUEUE). Slices b (hotplug auto-switch) + c (workspace binding) stay in item 15. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -237,6 +237,31 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
displayProfiles = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.listOf monitorType);
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
docked = [
|
||||
{ name = "eDP-1"; resolution = "disable"; }
|
||||
{ name = "DP-3"; position = "0x0"; }
|
||||
{ name = "DP-4"; position = "auto-right"; }
|
||||
];
|
||||
undocked = [ { name = "eDP-1"; position = "0x0"; } ];
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Named display layouts for the same outputs (docked, undocked, …),
|
||||
each a list of nomarchy.monitors-style entries. Switch from the menu
|
||||
(System › Display › Profiles) or `nomarchy-display-profile apply
|
||||
<name>`: the profile's rules apply instantly via hyprctl and the
|
||||
choice persists in the in-flake state (settings.displayProfile), so
|
||||
the next rebuild bakes the active profile's entries over
|
||||
nomarchy.monitors by name. Outputs a profile doesn't name keep
|
||||
their base rules.
|
||||
'';
|
||||
};
|
||||
|
||||
# ── Component toggles ──────────────────────────────────────────
|
||||
hyprland.enable = lib.mkEnableOption "Nomarchy's Hyprland configuration" // { default = true; };
|
||||
waybar.enable = lib.mkEnableOption "Nomarchy's Waybar configuration" // { default = true; };
|
||||
|
||||
Reference in New Issue
Block a user