let browserName = config: if (builtins.isString config.mods.homePackages.browser) then config.mods.homePackages.browser else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram then config.mods.homePackages.browser.meta.mainProgram else config.mods.homePackages.browser.pname; mkSimpleBind = modKeys: key: command: args: { inherit modKeys key command args; }; mkRepeatSimpleBind = modKeys: key: command: args: { inherit modKeys key command args; meta.hyprland.repeat = true; }; mkSimpleCustomBind = modKeys: key: niri: hyprland: args: { inherit modKeys key args; command = { inherit niri hyprland; }; }; mkRepeatCustomBind = modKeys: key: niri: hyprland: args: { inherit modKeys key args; command = { inherit niri hyprland; }; meta.hyprland.repeat = true; }; mkBindWithDesc = modKeys: key: command: args: desc: { meta.niri.desc = desc; } // mkSimpleBind modKeys key command args; in { defaultWindowRules = { niri = [ '' match app-id=r#"^org\.keepassxc\.KeePassXC$"# match app-id=r#"^org\.gnome\.World\.Secrets$"# block-out-from "screen-capture" '' '' match app-id=r#"^steam$"# open-on-workspace "0" '' '' geometry-corner-radius 12 clip-to-geometry true '' ]; hyprland = [ # window rules "float,class:^(.*)(OxiCalc)(.*)$" "float,class:^(.*)(winecfg.exe)(.*)$" "float,class:^(.*)(copyq)(.*)$" "center,class:^(.*)(swappy)(.*)$" "workspace 10 silent,class:^(.*)(steam)(.*)$" # Otherwise neovide will ignore tiling "suppressevent fullscreen maximize,class:^(.*)(neovide)(.*)$" ]; }; defaultStartup = config: { all = [ "systemctl --user import-environment" "dbus-update-activation-environment --systemd --all" "hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}" # ensures the systemd service knows what "hyprctl" is :) ( if config.mods.gaming.gamemode then "systemctl try-restart gamemoded.service --user" else "" ) # other programs "${browserName config}" ( if config.mods.oxi.hyprdock.enable then "hyprdock --server" else "" ) ( if config.mods.hypr.hyprpaper.enable then "hyprpaper" else "" ) ( if config.mods.hypr.hyprland.useIronbar then "ironbar" else "" ) ( if config.mods.oxi.oxipaste.enable then "oxipaste_daemon" else "" ) ( if config.mods.oxi.oxinoti.enable then "oxinoti" else "" ) ]; niri = [ "XDG_CURRENT_DESKTOP=Niri" "XDG_SESSION_DESKTOP=Niri" "XDG_SESSION_TYPE=wayland" ]; hyprland = [ "XDG_CURRENT_DESKTOP=Hyprland" "XDG_SESSION_DESKTOP=Hyprland" "XDG_SESSION_TYPE=wayland" ]; }; defaultEnv = config: { all = { GTK_CSD = "0"; TERM = "kitty /bin/fish"; HYPRCURSOR_THEME = config.mods.stylix.cursor.name; HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size; XCURSOR_THEME = config.mods.stylix.cursor.name; XCURSOR_SIZE = toString config.mods.stylix.cursor.size; QT_QPA_PLATFORM = "wayland"; QT_QPA_PLATFORMTHEME = "qt5ct"; QT_WAYLAND_FORCE_DPI = "96"; QT_AUTO_SCREEN_SCALE_FACTOR = "0"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_SCALE_FACTOR = "1"; EDITOR = "neovide --novsync --nofork"; LIBVA_DRIVER_NAME = if config.mods.gpu.nvidia.enable then "nvidia" else ""; GBM_BACKEND = if config.mods.gpu.nvidia.enable then "nvidia-drm" else ""; __GLX_VENDOR_LIBRARY_NAME = if config.mods.gpu.nvidia.enable then "nvidia" else ""; }; niri = {}; hyprland = {}; }; defaultBinds = config: [ (mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"]) (mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"]) (mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"]) (mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"]) (mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"]) (mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"]) (mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"]) (mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"]) (mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"]) (mkSimpleBind ["Mod"] "0" "focusWorkspace" ["0"]) (mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"]) (mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"]) (mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"]) (mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"]) (mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"]) (mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"]) (mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"]) (mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"]) (mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"]) (mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["0"]) (mkSimpleBind ["Mod"] "B" "toggleFullscreen" []) (mkSimpleBind ["Mod"] "V" "toggleFloating" []) (mkSimpleBind ["Mod" "Shift"] "M" "quit" []) (mkSimpleBind ["Mod"] "Left" "moveWindowLeft" []) (mkSimpleBind ["Mod"] "Down" "moveWindowDown" []) (mkSimpleBind ["Mod"] "Up" "moveWindowUp" []) (mkSimpleBind ["Mod"] "Right" "moveWindowRight" []) (mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" []) (mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" []) (mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" []) (mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" []) (mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window") (mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide") (mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty") (mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen") ( if config.mods.yazi.enable then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi" else {} ) ( if config.mods.anyrun.enable then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun" else {} ) ( if config.mods.oxi.oxirun.enable then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun" else {} ) ( if config.mods.oxi.oxidash.enable then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash" else {} ) ( if config.mods.oxi.oxicalc.enable then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc" else {} ) ( if config.mods.oxi.oxishut.enable then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut" else {} ) ( if config.mods.oxi.oxipaste.enable then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste" else {} ) ( if config.mods.oxi.hyprdock.enable then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock" else {} ) ( if config.mods.hypr.hyprlock.enable then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend" else {} ) ( if config.mods.hypr.hyprlock.enable then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate" else {} ) (mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser") ( if ( browserName config == "firefox" || browserName config == "zen" ) then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile" else {} ) (mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot") (mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit") ( if config.mods.scripts.audioControl then { key = "XF86AudioMute"; command = "spawn-sh"; args = ["audioControl mute"]; meta.niri = { allowWhileLocked = true; desc = "Mute Audio"; }; } else {} ) ( if config.mods.scripts.audioControl then { key = "XF86AudioRaiseVolume"; command = "spawn-sh"; args = ["audioControl +5%"]; meta.niri = { allowWhileLocked = true; desc = "Raise Audio Volume"; }; } else {} ) ( if config.mods.scripts.audioControl then { key = "XF86AudioLowerVolume"; command = "spawn-sh"; args = ["audioControl -5%"]; meta.niri = { allowWhileLocked = true; desc = "Lower Audio Volume"; }; } else {} ) { key = "XF86AudioPlay"; command = "spawn-sh"; args = ["playerctl play-pause"]; meta.niri = { allowWhileLocked = true; desc = "Play/Pause"; }; } { key = "XF86AudioNext"; command = "spawn-sh"; args = ["playerctl next"]; meta.niri = { allowWhileLocked = true; desc = "Next Song"; }; } { key = "XF86AudioPrev"; command = "spawn-sh"; args = ["playerctl previous"]; meta.niri = { allowWhileLocked = true; desc = "Previous Song"; }; } ( if config.mods.scripts.changeBrightness then { key = "XF86MonBrightnessDown"; command = "spawn-sh"; args = ["changeBrightness -10%"]; meta.niri = { allowWhileLocked = true; desc = "Lower Brigthness"; }; } else {} ) ( if config.mods.scripts.changeBrightness then { key = "XF86MonBrightnessUp"; command = "spawn-sh"; args = ["changeBrightness +10%"]; meta.niri = { allowWhileLocked = true; desc = "Raise Brigthness"; }; } else {} ) # Niri only keybinds (mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null []) (mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null []) (mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null []) (mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null []) (mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null []) (mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null []) (mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null []) (mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null []) (mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"]) (mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"]) (mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"]) (mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"]) (mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"]) (mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["0"]) (mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null []) (mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null []) (mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null []) (mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null []) (mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null []) { modKeys = ["Mod"]; key = "W"; command.niri = "toggle-overview"; meta.niri = { desc = "Overview"; repeat = false; }; } { modKeys = ["Mod"]; key = "Escape"; command.niri = "toggle-keyboard-shortcuts-inhibit"; meta.niri = { allowInhibit = false; }; } { modKeys = ["Mod"]; key = "WheelScrollUp"; command.niri = "focus-workspace-up"; meta.niri.cooldown = 150; } { modKeys = ["Mod"]; key = "WheelScrollDown"; command.niri = "focus-workspace-down"; meta.niri.cooldown = 150; } { modKeys = ["Mod"]; key = "WheelScrollRight"; command.niri = "focus-column-right"; meta.niri.cooldown = 150; } { modKeys = ["Mod"]; key = "WheelScrollLeft"; command.niri = "focus-column-left"; meta.niri.cooldown = 150; } # Hyprland only keybinds (mkSimpleCustomBind ["Mod"] "C" null "togglesplit" []) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"]) (mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["0"]) (mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"]) (mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"]) (mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"]) (mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"]) (mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"]) (mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"]) (mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"]) (mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"]) (mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"]) ( if config.mods.hypr.hyprland.hyprspaceEnable then { modKeys = ["Mod"]; key = "W"; command.hyprland = "overview:toggle"; args = []; } else {} ) ]; }