From 37ddf4342a7fb2eb755eef7824431a4031ee48fd Mon Sep 17 00:00:00 2001 From: alexion Date: Wed, 22 Jul 2026 22:22:20 -0400 Subject: [PATCH] fix(desktop): use windowrule v3 syntax for the satty float rule (task 0028) --- CLAUDE.md | 5 +++++ modules/desktop/screenshot.nix | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 06c70a2..d3a8b71 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -92,3 +92,8 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla The build/render check is therefore blind to it, and the real test is a running session (or reading `~/.config/hypr/hyprland.conf` against the running package's own names). Two that bit on 0.55.4: the dwindle split actions `togglesplit`, `swapsplit`, and `pseudo` are layout messages reached through the `layoutmsg` dispatcher (`bind = $mod, T, layoutmsg, togglesplit`), not top-level dispatchers, and the old `dwindle:pseudotile` option is gone. Confirm names against the pinned package rather than the wiki, whose "latest" drifts from it. + The config can in fact be checked offline: `Hyprland --verify-config -c ` parses the file and prints `config ok` or the exact `line N:` error without a running compositor, so a rule change is provable before login rather than only at it. +- Hyprland 0.55.4 uses windowrule v3 syntax, which is not the `windowrule = float, class:^(re)$` form the wiki still shows. + A flat `windowrule =` entry is a comma-separated list of `field value` tokens, each of which **must** carry a value: matchers take a `match:` prefix and effects are bare, so floating one app is `windowrule = float 1, match:class ^(com\.gabm\.satty)$`. + The old form fails at load with `invalid field float: missing a value`, because the effect token has no value. + `windowrulev2` is removed and errors as deprecated. diff --git a/modules/desktop/screenshot.nix b/modules/desktop/screenshot.nix index 972334c..b8ba43f 100644 --- a/modules/desktop/screenshot.nix +++ b/modules/desktop/screenshot.nix @@ -39,8 +39,10 @@ in home-manager.users.${user} = { # satty is a one-shot annotation surface, so float it rather than letting # it claim a tile in the layout. + # windowrule v3 syntax: space-separated field/value tokens, comma + # separated, with matchers under a match: prefix and effects bare. wayland.windowManager.hyprland.settings.windowrule = [ - "float, class:^(com\\.gabm\\.satty)$" + "float 1, match:class ^(com\\.gabm\\.satty)$" ]; # Print with plain/Shift/Ctrl for region/window/full.