9 Commits
Author SHA1 Message Date
Maksim Totmin ab6cad0505 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.
2026-08-06 12:25:47 +07:00
Maksim Totmin 3515608fd3 feat(hyprland): generate Lua monitor config instead of hyprlang
Write hl.monitor({...}) calls to ~/.config/hypr/monitors.lua (loaded via
require("monitors") in hyprland.lua) instead of monitor= lines in
monitors.conf. Prepare now strips hl.monitor lines with disabled = true,
and generateConf omits mode/position so Hyprland uses its defaults.
Update README and example config to match.
2026-08-02 12:50:53 +07:00
Maksim Totmin ac82e3e82a feat: restore portable layout on shutdown and before suspend
Add WriteConfig/Prepare backend methods (real for Hyprland, no-op for
Sway), -apply/-prepare/-no-reload CLI flags, ExecStartPre cleanup and
suspend systemd hooks so a stale docked config can never leave the
built-in display disabled after resume.
2026-08-02 12:50:37 +07:00
Maksim Totmin 3fdccadd3c feat: size: prefix, external auto-detection, auto-disable stale monitors
- size:WxH and size:WxH@R resolution for config names
- auto-detection of external monitors when external list is empty (any non-internal display)
- ensureCleanLayout: explicitly disable connected monitors not in target layout
- update docs (README, example.yaml) for all three features
2026-06-24 19:51:18 +07:00
Maksim Totmin ac2bb77113 fix(hyprland): resolve desc: monitor names before generating config
Extract shared resolveMonitorNames to backend package so both
Hyprland and Sway backends resolve desc: prefixed names to actual
connector names before applying monitor layout.

Previously the Hyprland backend wrote desc:... literally into
monitors.conf, which Hyprland ignores, causing monitors to be
positioned incorrectly or not configured at all.
2026-06-23 09:06:08 +07:00
Maksim Totmin b24da07b6e feat: add Sway backend 2026-06-22 21:36:21 +07:00
Maksim Totmin cc1137608c refactor: move backend options into backend_config section
- Add BackendConfig map[string]any to Config struct
- Deprecate top-level output_path (backward compatible via EffectiveBackendConfig())
- NewHyprland now accepts opts map[string]any instead of raw outputPath
- Factory signature unified to func(*slog.Logger, map[string]any) for all backends
- Update README with backend_config docs and fix Sway skeleton signature
- Update example.yaml to show backend_config instead of output_path
2026-06-22 20:49:02 +07:00
Maksim Totmin 15691c0918 feat: add optional output_path, change default to monitors.conf 2026-06-22 20:37:07 +07:00
Maksim Totmin a4b80616bb Initial commit: monitor-lets-go — automatic monitor layout daemon 2026-06-22 16:22:47 +07:00