diff --git a/configs/nixos/modules/desktop/session/hyprland/default.nix b/configs/nixos/modules/desktop/session/hyprland/default.nix index 7236346..2a82bb7 100644 --- a/configs/nixos/modules/desktop/session/hyprland/default.nix +++ b/configs/nixos/modules/desktop/session/hyprland/default.nix @@ -8,6 +8,85 @@ options.modules.desktop.session.hyprland.enable = lib.mkEnableOption "the Hyprland compositor"; config = lib.mkIf config.modules.desktop.session.hyprland.enable { + + # This program integration owns the session, portals, and polkit, launched + # through the universal Wayland session manager. + programs.hyprland = { + enable = true; + withUWSM = true; + }; + + home-manager.users.${config.user.name}.wayland.windowManager.hyprland = { + enable = true; + + # One package drives the whole session, so there is never a version split. + # The program integration above installs it and the portal, leaving home- + # manager to write only the config. + package = null; + portalPackage = null; + + # uwsm owns the systemd graphical-session targets. + systemd.enable = false; + + # Write the native Lua Hyprland config. Home Manager renders the Nix + # settings below as hl.* calls. + configType = "lua"; + + settings = { + config.general.layout = "dwindle"; + + bind = lib.mapAttrsToList (_name: keybind: { + _args = [ + keybind.keys + (lib.generators.mkLuaInline ( + { + exec = "hl.dsp.exec_cmd(${lib.generators.toLua { } keybind.action.command})"; + 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; } + })"; + "resize-window" = "hl.dsp.window.resize(${ + lib.generators.toLua { } ( + { + down = { + x = 0; + y = 10; + relative = true; + }; + left = { + x = -10; + y = 0; + relative = true; + }; + right = { + x = 10; + y = 0; + relative = true; + }; + up = { + x = 0; + y = -10; + relative = true; + }; + } + .${keybind.action.direction} + ) + })"; + "toggle-floating" = ''hl.dsp.window.float({ action = "toggle" })''; + "toggle-fullscreen" = "hl.dsp.window.fullscreen()"; + "close-window" = "hl.dsp.window.close()"; + } + .${keybind.action.kind} + )) + ] + ++ lib.optional keybind.repeating { + repeating = true; + }; + }) (lib.attrByPath [ config.networking.hostName ] { } config.registry.keybind); + }; + }; registry.keybind.${config.networking.hostName} = lib.mkMerge [ # Generate numeric workspace keybinds. (lib.listToAttrs ( @@ -110,84 +189,5 @@ }; } ]; - - # This program integration owns the session, portals, and polkit, launched - # through the universal Wayland session manager. - programs.hyprland = { - enable = true; - withUWSM = true; - }; - - home-manager.users.${config.user.name}.wayland.windowManager.hyprland = { - enable = true; - - # One package drives the whole session, so there is never a version split. - # The program integration above installs it and the portal, leaving home- - # manager to write only the config. - package = null; - portalPackage = null; - - # uwsm owns the systemd graphical-session targets. - systemd.enable = false; - - # Write the native Lua Hyprland config. Home Manager renders the Nix - # settings below as hl.* calls. - configType = "lua"; - - settings = { - config.general.layout = "dwindle"; - - bind = lib.mapAttrsToList (_name: keybind: { - _args = [ - keybind.keys - (lib.generators.mkLuaInline ( - { - exec = "hl.dsp.exec_cmd(${lib.generators.toLua { } keybind.action.command})"; - 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; } - })"; - "resize-window" = "hl.dsp.window.resize(${ - lib.generators.toLua { } ( - { - down = { - x = 0; - y = 10; - relative = true; - }; - left = { - x = -10; - y = 0; - relative = true; - }; - right = { - x = 10; - y = 0; - relative = true; - }; - up = { - x = 0; - y = -10; - relative = true; - }; - } - .${keybind.action.direction} - ) - })"; - "toggle-floating" = ''hl.dsp.window.float({ action = "toggle" })''; - "toggle-fullscreen" = "hl.dsp.window.fullscreen()"; - "close-window" = "hl.dsp.window.close()"; - } - .${keybind.action.kind} - )) - ] - ++ lib.optional keybind.repeating { - repeating = true; - }; - }) (lib.attrByPath [ config.networking.hostName ] { } config.registry.keybind); - }; - }; }; }