feat(hyprland): add window movement binds #151

Merged
alexion merged 1 commits from feat/hyprland-lua-window-movement into main 2026-10-11 16:02:33 -04:00
2 changed files with 54 additions and 22 deletions

View File

@@ -11,32 +11,57 @@
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.concatMap (workspace: [
{
name = "hyprland-workspace-${toString workspace}";
value = {
keys = "SUPER + ${toString workspace}";
action = {
kind = "focus";
inherit workspace;
};
};
};
}) (lib.range 1 9)
}
{
name = "hyprland-move-to-workspace-${toString workspace}";
value = {
keys = "SUPER + SHIFT + ${toString workspace}";
action = {
kind = "move-window";
inherit workspace;
};
};
}
]) (lib.range 1 9)
))
# Generate directional keybinds.
(lib.listToAttrs (
map
lib.concatMap
(
{ direction, key }:
{
name = "hyprland-focus-${direction}";
value = {
keys = "SUPER + ${key}";
action = {
kind = "focus";
inherit direction;
[
{
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 +119,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;