{ ... }: { 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; }; }; }