Add multi-monitor support

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2025-02-14 20:24:25 +00:00
parent c4d8cc951d
commit ce96ec6bf7
7 changed files with 163 additions and 81 deletions

View File

@@ -21,67 +21,77 @@
"$mod" = "Super_L";
"$term" = lib.meta.getExe pkgs.kitty;
bind = [
"$mod, Return, exec, $term"
bind =
let
bindHelper = lib.meta.getExe (
pkgs.writeShellApplication {
name = "hyprland-bind-helper";
bashOptions = [
"errexit"
"pipefail"
];
runtimeInputs = with pkgs; [ hyprland ];
text = builtins.readFile ./scripts/bind.sh;
}
);
in
[
"$mod, Return, exec, $term"
"$mod, `, togglespecialworkspace"
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
"$mod, 1, exec, ${bindHelper} 1"
"$mod, 2, exec, ${bindHelper} 2"
"$mod, 3, exec, ${bindHelper} 3"
"$mod, 4, exec, ${bindHelper} 4"
"$mod, 5, exec, ${bindHelper} 5"
"$mod, 6, exec, ${bindHelper} 6"
"$mod, 7, exec, ${bindHelper} 7"
"$mod, 8, exec, ${bindHelper} 8"
"$mod, 9, exec, ${bindHelper} 9"
"$mod, 0, exec, ${bindHelper} 10"
"$mod_Shift, `, movetoworkspacesilent, special"
"$mod_Shift, 1, movetoworkspacesilent, 1"
"$mod_Shift, 2, movetoworkspacesilent, 2"
"$mod_Shift, 3, movetoworkspacesilent, 3"
"$mod_Shift, 4, movetoworkspacesilent, 4"
"$mod_Shift, 5, movetoworkspacesilent, 5"
"$mod_Shift, 6, movetoworkspacesilent, 6"
"$mod_Shift, 7, movetoworkspacesilent, 7"
"$mod_Shift, 8, movetoworkspacesilent, 8"
"$mod_Shift, 9, movetoworkspacesilent, 9"
"$mod_Shift, 0, movetoworkspacesilent, 10"
"$mod_Shift, 1, exec, ${bindHelper} 1 move"
"$mod_Shift, 2, exec, ${bindHelper} 2 move"
"$mod_Shift, 3, exec, ${bindHelper} 3 move"
"$mod_Shift, 4, exec, ${bindHelper} 4 move"
"$mod_Shift, 5, exec, ${bindHelper} 5 move"
"$mod_Shift, 6, exec, ${bindHelper} 6 move"
"$mod_Shift, 7, exec, ${bindHelper} 7 move"
"$mod_Shift, 8, exec, ${bindHelper} 8 move"
"$mod_Shift, 9, exec, ${bindHelper} 9 move"
"$mod_Shift, 0, exec, ${bindHelper} 1 move0"
"$mod_Ctrl, Space, workspaceopt, allfloat"
"$mod, left, movefocus, l"
"$mod, h, movefocus, l"
"$mod, down, movefocus, d"
"$mod, j, movefocus, d"
"$mod, up, movefocus, u"
"$mod, k, movefocus, u"
"$mod, right, movefocus, r"
"$mod, l, movefocus, r"
"$mod, left, movefocus, l"
"$mod, h, movefocus, l"
"$mod, down, movefocus, d"
"$mod, j, movefocus, d"
"$mod, up, movefocus, u"
"$mod, k, movefocus, u"
"$mod, right, movefocus, r"
"$mod, l, movefocus, r"
"$mod_Shift, left, movewindow, l"
"$mod_Shift, h, movewindow, l"
"$mod_Shift, down, movewindow, d"
"$mod_Shift, j, movewindow, d"
"$mod_Shift, up, movewindow, u"
"$mod_Shift, k, movewindow, u"
"$mod_Shift, right, movewindow, r"
"$mod_Shift, l, movewindow, r"
"$mod_Shift, left, movewindow, l"
"$mod_Shift, h, movewindow, l"
"$mod_Shift, down, movewindow, d"
"$mod_Shift, j, movewindow, d"
"$mod_Shift, up, movewindow, u"
"$mod_Shift, k, movewindow, u"
"$mod_Shift, right, movewindow, r"
"$mod_Shift, l, movewindow, r"
"$mod, Tab, cyclenext"
"$mod, Tab, bringactivetotop"
"$mod_Shift, Tab, cyclenext, prev"
"$mod_Shift, Tab, bringactivetotop"
"$mod, Tab, cyclenext"
"$mod, Tab, bringactivetotop"
"$mod_Shift, Tab, cyclenext, prev"
"$mod_Shift, Tab, bringactivetotop"
"$mod, f, fullscreen, 0"
"$mod, m, fullscreen, 1"
"$mod, p, pin"
"$mod, Space, togglefloating"
"$mod, Space, centerwindow"
"$mod, q, killactive"
"$mod, f, fullscreen, 0"
"$mod, m, fullscreen, 1"
"$mod, p, pin"
"$mod, Space, togglefloating"
"$mod, Space, centerwindow"
"$mod, q, killactive"
"Ctrl_Alt, Delete, exit"
];
"Ctrl_Alt, Delete, exit"
];
binde = [
"$mod_Ctrl, left, resizeactive, -20 0"

View File

@@ -43,7 +43,7 @@ in
systemd
];
runtimeEnv.SERVICES = lib.strings.concatStringsSep " " cfg.onMonitorChange.services;
text = builtins.readFile ./monitors.sh;
text = builtins.readFile ./scripts/monitors.sh;
}
)
} &";

View File

@@ -0,0 +1,24 @@
BASE_WS="$1"
ACTION="$2"
current_ws_id="$(hyprctl -j activeworkspace | jq -r '.id')"
ws_json="$(hyprctl -j workspaces)"
max_ws_id="$(echo "$ws_json" | jq -r '[.[] | .id] | max')"
BLOCK_SIZE=10
total_blocks=$(((max_ws_id - 1) / BLOCK_SIZE + 1))
current_block=$(((current_ws_id - 1) / BLOCK_SIZE))
target_ws=$((current_block * BLOCK_SIZE + BASE_WS))
if [ "$target_ws" -eq "$current_ws_id" ]; then
next_block=$(( (current_block + 1) % total_blocks ))
target_ws=$(( next_block * BLOCK_SIZE + BASE_WS ))
fi
if [ "$ACTION" = "move" ]; then
hyprctl dispatch movetoworkspacesilent "$target_ws"
else
hyprctl dispatch workspace "$target_ws"
fi