AquaticOS/modules/programs/hyprland/config/workspaces.nix

59 lines
No EOL
1.9 KiB
Nix

{ ... }:
{
flake.modules.homeManager.hyprland =
{ lib, nixosConfig, ... }:
let
lua = lib.generators.mkLuaInline;
mainMod = "SUPER";
workspacecount = [ "1" "2" "3" "4" "5" "6" "7" "8" "9" ];
dsp = {
workspace = ws: lua ''hl.dsp.focus({ workspace = "${toString ws}" })'';
moveToWorkspaceSilent = ws: lua ''hl.dsp.window.move({ workspace = "${toString ws}", silent = true })'';
};
bind = keys: dispatcher: { _args = [ keys dispatcher ]; };
modKeys = [ "" "ALT" "CTRL" ];
workspaceRule =
lib.flatten (
lib.imap0 (i: mon: lib.imap0 (j: num: lib.mkMerge [
{
workspace = "${toString (i + 1)}${num}";
monitor = mon.output;
}
(lib.mkIf (j == 0) { default = true; })
])
workspacecount)
nixosConfig.aquaticConfig.hyprland.monitors
);
workspaceBinds =
lib.flatten (
lib.imap0 (i: mon:
let
prefix = toString (i + 1);
modKey = lib.elemAt modKeys i;
hasModifier = modKey != "";
isBase = i == 0;
in
lib.flatten (
lib.imap1 (j: num:
lib.optionals isBase [
(bind "${mainMod} + ${num}" (dsp.workspace "${prefix}${num}"))
(bind "${mainMod} + SHIFT + ${num}" (dsp.moveToWorkspaceSilent "${prefix}${num}"))
]
++ lib.optionals hasModifier [
(bind "${mainMod} + ${modKey} + ${num}" (dsp.workspace "${prefix}${num}"))
(bind "${mainMod} + ${modKey} + SHIFT + ${num}" (dsp.moveToWorkspaceSilent "${prefix}${num}"))
]
)
workspacecount
)
)
(lib.take 3 nixosConfig.aquaticConfig.hyprland.monitors)
);
in
{
wayland.windowManager.hyprland.settings = {
workspace_rule = workspaceRule;
bind = workspaceBinds;
};
};
}