feat: serial:/size: external matching, exclude Hyprland FALLBACK output

- external list now accepts serial: and size: prefixes; desc: matches
  serial too. Fixes docked-mode deadlock where Hyprland's synthetic
  FALLBACK output (created when the built-in is disabled by a stale
  docked config) was treated as a real external monitor, leaving the
  daemon stuck in docked after undocking.
- modes name resolution gains serial: prefix (resolveSerial).
- add -log-level flag for observability.
- add unit tests for external matching and name resolution.
- update README and example config.
This commit is contained in:
Maksim Totmin
2026-08-06 12:25:47 +07:00
parent 3515608fd3
commit ab6cad0505
10 changed files with 393 additions and 31 deletions
+8 -2
View File
@@ -25,7 +25,10 @@ restore_on_exit: true
# External monitors that trigger docked mode.
# Plain name: matches the connector name (e.g. DP-1, HDMI-A-1).
# desc: prefix: matches by monitor description (survives rename).
# desc: prefix: matches by monitor description or serial (survives rename).
# serial: prefix: matches by serial number (e.g. serial:3342300033911).
# size: prefix: matches by resolution, optionally with refresh
# (e.g. size:2560x1440 or size:2560x1440@165).
# Optional — if omitted or left empty, the daemon auto-detects external
# monitors: any display whose connector is not eDP-/LVDS-/DSI- is treated
# as external.
@@ -33,13 +36,16 @@ external:
- DP-1
- DP-2
- desc:Dell Inc. DELL U2723QE
- serial:3342300033911
- size:3440x1440@120
# Monitor layouts for each mode.
# "portable" and "docked" are required.
# Monitors connected but not listed in the mode are automatically disabled.
#
# Fields:
# name — connector name, desc:description, size:WxH, or size:WxH@R
# name — connector name, desc:description, serial:XXXX, size:WxH,
# or size:WxH@R
# enabled — true to show, false to disable
# mode — "preferred" (auto-detect), "1920x1080@60", etc.
# position — "auto", "0x0", "1920x0", etc.