feat(hyprland): add window movement binds

This commit is contained in:
2026-10-11 14:50:38 -04:00
parent a2fc568704
commit b15a153188
2 changed files with 60 additions and 22 deletions

View File

@@ -11,32 +11,63 @@
registry.keybind.${config.networking.hostName} = lib.mkMerge [
# Generate numeric workspace keybinds.
(lib.listToAttrs (
map (workspace: {
name = "hyprland-workspace-${toString workspace}";
value = {
keys = "SUPER + ${toString workspace}";
action = {
kind = "focus";
inherit workspace;
};
};
}) (lib.range 1 9)
))
# Generate directional keybinds.
(lib.listToAttrs (
map
(
{ direction, key }:
lib.concatMap (
workspace:
let
workspaceText = toString workspace;
in
[
{
name = "hyprland-focus-${direction}";
name = "hyprland-workspace-${workspaceText}";
value = {
keys = "SUPER + ${key}";
keys = "SUPER + ${workspaceText}";
action = {
kind = "focus";
inherit direction;
inherit workspace;
};
};
}
{
name = "hyprland-move-to-workspace-${workspaceText}";
value = {
keys = "SUPER + SHIFT + ${workspaceText}";
action = {
kind = "move-window";
inherit workspace;
};
};
}
]
) (lib.range 1 9)
))
# Generate directional keybinds.
(lib.listToAttrs (
lib.concatMap
(
{ direction, key }:
[
{
name = "hyprland-focus-${direction}";
value = {
keys = "SUPER + ${key}";
action = {
kind = "focus";
inherit direction;
};
};
}
{
name = "hyprland-move-${direction}";
value = {
keys = "SUPER + SHIFT + ${key}";
action = {
kind = "move-window";
inherit direction;
};
};
}
]
)
[
{
@@ -94,6 +125,9 @@
focus = "hl.dsp.focus(${
lib.generators.toLua { } { inherit (keybind.action) direction workspace; }
})";
"move-window" = "hl.dsp.window.move(${
lib.generators.toLua { } { inherit (keybind.action) direction workspace; }
})";
}
.${keybind.action.kind}
))

View File

@@ -12,7 +12,10 @@
entry:
(entry.value.action.kind == "exec" && entry.value.action.command != null)
|| (
entry.value.action.kind == "focus"
builtins.elem entry.value.action.kind [
"focus"
"move-window"
]
&& lib.xor (entry.value.action.direction != null) (entry.value.action.workspace != null)
)
) entries;
@@ -37,6 +40,7 @@
type = lib.types.enum [
"exec"
"focus"
"move-window"
];
};
@@ -48,7 +52,7 @@
};
direction = lib.mkOption {
description = "Direction focused by a focus keybind.";
description = "Direction targeted by a keybind action.";
type = lib.types.nullOr (
lib.types.enum [
"down"
@@ -62,7 +66,7 @@
};
workspace = lib.mkOption {
description = "Workspace focused by a focus keybind.";
description = "Workspace targeted by a keybind action.";
type = lib.types.nullOr lib.types.int;
default = null;
example = 1;