diff --git a/configs/nixos/modules/desktop/session/hyprland/default.nix b/configs/nixos/modules/desktop/session/hyprland/default.nix index 5bcd5fb..33c687e 100644 --- a/configs/nixos/modules/desktop/session/hyprland/default.nix +++ b/configs/nixos/modules/desktop/session/hyprland/default.nix @@ -4,6 +4,26 @@ ... }: # The Hyprland compositor. +let + directions = [ + { + key = "H"; + direction = "left"; + } + { + key = "J"; + direction = "down"; + } + { + key = "K"; + direction = "up"; + } + { + key = "L"; + direction = "right"; + } + ]; +in { options.modules.desktop.session.hyprland.enable = lib.mkEnableOption "the Hyprland compositor"; @@ -24,38 +44,35 @@ )) # Generate directional keybinds. (lib.listToAttrs ( - map - ( - { direction, key }: - { - name = "hyprland-focus-${direction}"; - value = { - keys = "SUPER + ${key}"; - action = { - kind = "focus"; - inherit direction; - }; + map ( + { direction, key }: + { + name = "hyprland-focus-${direction}"; + value = { + keys = "SUPER + ${key}"; + action = { + kind = "focus"; + inherit direction; }; - } - ) - [ - { - key = "H"; - direction = "left"; - } - { - key = "J"; - direction = "down"; - } - { - key = "K"; - direction = "up"; - } - { - key = "L"; - direction = "right"; - } - ] + }; + } + ) directions + )) + # Generate directional window movement keybinds. + (lib.listToAttrs ( + map ( + { direction, key }: + { + name = "hyprland-move-${direction}"; + value = { + keys = "SUPER + Shift + ${key}"; + action = { + kind = "move-window"; + inherit direction; + }; + }; + } + ) directions )) ]; @@ -94,6 +111,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} )) diff --git a/configs/nixos/registry/keybind.nix b/configs/nixos/registry/keybind.nix index 05530b7..198d44f 100644 --- a/configs/nixos/registry/keybind.nix +++ b/configs/nixos/registry/keybind.nix @@ -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;