{ 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; myNiriUnwrapped = inputs.wrapper-modules.wrappers.niri.wrap { inherit pkgs; settings = { spawn-at-startup = [ (lib.getExe self'.packages.myNoctalia) ]; xwayland-satellite.path = lib.getExe pkgs.xwayland-satellite; input.keyboard.xkb.layout = "us,ua"; layout.gaps = 5; binds = { "Mod+Return".spawn-sh = lib.getExe pkgs.kitty; # "Mod+Q".close-window = null; "Mod+S".spawn-sh = "${lib.getExe self'.packages.myNoctalia} ipc call launcher toggle"; }; }; }; 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 ''; }; }; }