{ self, inputs, ... }: { flake.modules.nixos.niri = { pkgs, lib, ... }: let niriPkg = self.packages.${pkgs.stdenv.hostPlatform.system}.myNiri; in { programs.niri = { enable = true; package = niriPkg; }; systemd.user.services.niri.enableDefaultPath = false; }; perSystem = { pkgs, lib, self', ... }: let nixGLPackage = inputs.nixgl.packages.${pkgs.stdenv.hostPlatform.system}.nixGLIntel; noctaliaPkg = self'.packages.myNoctaliaNixGL; terminalPkg = pkgs.ghostty; myNiriUnwrapped = inputs.wrapper-modules.wrappers.niri.wrap { inherit pkgs; settings = { spawn-at-startup = [ (lib.getExe noctaliaPkg) ]; xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite; input.keyboard.xkb.layout = "us,ua"; layout.gaps = 5; binds = { "Mod+Return".spawn-sh = lib.getExe terminalPkg; # "Mod+Ctrl+Return".spawn-sh = "${lib.getExe noctaliaPkg} ipc call launcher toggle"; "Mod+Space".spawn-sh = "${lib.getExe noctaliaPkg} ipc call launcher toggle"; "Mod+B".spawn-sh = "${lib.getExe pkgs.brave}"; "Mod+E".spawn-sh = "xdg-open ."; "Mod+Alt+L".spawn-sh = "loginctl lock-session"; "Alt+F4".spawn-sh = "${lib.getExe' pkgs.coreutils "true"}"; "Mod+Shift+Q".close-window = { }; "Mod+S".spawn-sh = "${lib.getExe noctaliaPkg} ipc call launcher toggle"; "Mod+1".focus-workspace = 1; "Mod+2".focus-workspace = 2; "Mod+3".focus-workspace = 3; "Mod+4".focus-workspace = 4; "Mod+5".focus-workspace = 5; "Mod+6".focus-workspace = 6; "Mod+7".focus-workspace = 7; "Mod+8".focus-workspace = 8; "Mod+9".focus-workspace = 9; "Mod+Tab".focus-workspace-previous = { }; # "Mod+WheelScrollDown".focus-workspace-down = { }; # "Mod+WheelScrollUp".focus-workspace-up = { }; # "Mod+Up".focus-window-up = { }; # "Mod+Down".focus-window-down = { }; "Mod+Up".focus-workspace-up = { }; "Mod+Down".focus-workspace-down = { }; "Mod+Left".focus-column-left = { }; "Mod+Right".focus-column-right = { }; "Mod+K".focus-window-up = { }; "Mod+J".focus-window-down = { }; "Mod+H".focus-column-left = { }; "Mod+L".focus-column-right = { }; "Mod+Home".focus-column-first = { }; "Mod+End".focus-column-last = { }; # "Mod+Shift+Left".focus-monitor-left = { }; # "Mod+Shift+Right".focus-monitor-right = { }; # "Mod+Shift+Up".focus-monitor-up = { }; # "Mod+Shift+Down".focus-monitor-down = { }; "Mod+Shift+1".move-column-to-workspace = 1; "Mod+Shift+2".move-column-to-workspace = 2; "Mod+Shift+3".move-column-to-workspace = 3; "Mod+Shift+4".move-column-to-workspace = 4; "Mod+Shift+5".move-column-to-workspace = 5; "Mod+Shift+6".move-column-to-workspace = 6; "Mod+Shift+7".move-column-to-workspace = 7; "Mod+Shift+8".move-column-to-workspace = 8; "Mod+Shift+9".move-column-to-workspace = 9; "Mod+Ctrl+Up".move-window-up = { }; "Mod+Ctrl+Down".move-window-down = { }; "Mod+Ctrl+Left".move-column-left = { }; "Mod+Ctrl+Right".move-column-right = { }; "Mod+Ctrl+K".move-window-up = { }; "Mod+Ctrl+J".move-window-down = { }; "Mod+Ctrl+H".move-column-left = { }; "Mod+Ctrl+L".move-column-right = { }; "Mod+Ctrl+Home".move-column-to-first = { }; "Mod+Ctrl+End".move-column-to-last = { }; "Mod+Shift+Ctrl+Left".move-column-to-monitor-left = { }; "Mod+Shift+Ctrl+Right".move-column-to-monitor-right = { }; "Mod+Shift+Ctrl+Up".move-column-to-monitor-up = { }; "Mod+Shift+Ctrl+Down".move-column-to-monitor-down = { }; "Mod+Ctrl+F".expand-column-to-available-width = { }; "Mod+C".center-column = { }; "Mod+Ctrl+C".center-visible-columns = { }; "Mod+Minus".set-column-width = "-10%"; "Mod+Equal".set-column-width = "+10%"; "Mod+Shift+Minus".set-window-height = "-10%"; "Mod+Shift+Equal".set-window-height = "+10%"; "Mod+T".toggle-window-floating = { }; "Mod+F".fullscreen-window = { }; "Mod+W".toggle-column-tabbed-display = { }; "Mod+O".toggle-overview = { }; "Ctrl+Shift+1".screenshot = { }; "Ctrl+Shift+2".screenshot-screen = { }; "Ctrl+Shift+3".screenshot-window = { }; "Mod+Shift+Slash".show-hotkey-overlay = { }; "Mod+Escape".toggle-keyboard-shortcuts-inhibit = { }; "Mod+Shift+P".power-off-monitors = { }; "Ctrl+Alt+Delete".quit = { }; "Mod+WheelScrollRight".focus-column-right = { }; "Mod+WheelScrollLeft".focus-column-left = { }; "Mod+Ctrl+WheelScrollRight".move-column-right = { }; "Mod+Ctrl+WheelScrollLeft".move-column-left = { }; "Mod+Shift+WheelScrollDown".focus-column-right = { }; "Mod+Shift+WheelScrollUp".focus-column-left = { }; # "Mod+Ctrl+Shift+WheelScrollDown".move-column-right = { }; # "Mod+Ctrl+Shift+WheelScrollUp".move-column-left = { }; }; }; }; in { packages.myNiri = myNiriUnwrapped; packages.myNiriNixGL = pkgs.symlinkJoin { name = "my-niri-nixgl"; paths = [ myNiriUnwrapped ]; nativeBuildInputs = [ pkgs.makeWrapper ]; meta.mainProgram = "niri"; postBuild = '' for exe in "$out"/bin/*; do if [[ -f "$exe" ]]; then base="$(basename "$exe")" mv "$exe" "$out/bin/.''${base}-real" makeWrapper ${lib.getExe nixGLPackage} "$exe" \ --add-flags "$out/bin/.''${base}-real" fi done ''; }; }; }