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
+3 -3
View File
@@ -193,9 +193,9 @@ func (s *swayBackend) GetMonitors(ctx context.Context) ([]MonitorInfo, error) {
// then disabled monitors are turned off. All commands are sent in a single
// swaymsg call separated by ';' so Sway executes them as one IPC message.
//
// Monitor names prefixed with "desc:" are resolved to actual connector names
// by querying the current monitor state. This makes configs portable across
// dock ports and reboots.
// Monitor names prefixed with "desc:", "serial:", or "size:" are resolved
// to actual connector names by querying the current monitor state. This
// makes configs portable across dock ports and reboots.
//
// Safety: the daemon guarantees at least one enabled monitor exists before
// calling ApplyLayout. Sway refuses to disable the last active output, so