diff --git a/.claude/tasks/0021-desktop-group-and-hyprland-session.md b/.claude/tasks/0021-desktop-group-and-hyprland-session.md index b62107e..853ea77 100644 --- a/.claude/tasks/0021-desktop-group-and-hyprland-session.md +++ b/.claude/tasks/0021-desktop-group-and-hyprland-session.md @@ -60,3 +60,8 @@ Enable the desktop on neogaia. - **Dropped from the plan.** Mouse drag-to-move and drag-to-resize (`bindm`) were removed: they fall outside the task's enumerated keyboard bindings, and `resizeactive`/`movewindow` already cover floating windows from the keyboard. Hardware media/brightness keys (the spec table's `XF86` row) are likewise deferred, since they depend on audio and backlight tooling not yet in scope. + +- **Added beyond the plan.** + `Super+Shift+T` toggles the tiling strategy between the dwindle and master layouts, added at the operator's request during review. + Neither a dispatcher nor a keyword flips the layout on its own, so a small script reads the current layout and sets the other through `hyprctl keyword`. + It is not in the spec keybind table. diff --git a/modules/desktop/hyprland/hyprland.nix b/modules/desktop/hyprland/hyprland.nix index 3e7fb9e..108ea24 100644 --- a/modules/desktop/hyprland/hyprland.nix +++ b/modules/desktop/hyprland/hyprland.nix @@ -14,6 +14,16 @@ let "$mod, ${toString n}, workspace, ${toString n}" "$mod SHIFT, ${toString n}, movetoworkspace, ${toString n}" ]) (lib.range 1 9); + + # Flip the tiling strategy between the two built-in layouts, since neither a + # dispatcher nor a keyword toggles it on its own. + toggleLayout = pkgs.writeShellScript "hypr-toggle-layout" '' + if [ "$(hyprctl getoption -j general:layout | ${pkgs.jq}/bin/jq -r .str)" = dwindle ]; then + hyprctl keyword general:layout master + else + hyprctl keyword general:layout dwindle + fi + ''; in { options.modules.desktop.hyprland = { @@ -122,6 +132,7 @@ in "$mod, F, fullscreen," # togglesplit is a dwindle layout message, reached through layoutmsg. "$mod, T, layoutmsg, togglesplit" + "$mod SHIFT, T, exec, ${toggleLayout}" "$mod SHIFT, Q, killactive," "$mod CTRL, Q, forcekillactive," ]