diff --git a/extra/niri.kdl b/extra/niri.kdl index 461f774..b638423 100644 --- a/extra/niri.kdl +++ b/extra/niri.kdl @@ -120,6 +120,7 @@ layout { // which may be more convenient to use. // See the binds section below for more spawn examples. // spawn-at-startup "alacritty" "-e" "fish" +@automapaper@ // Uncomment this line to ask the clients to omit their client-side decorations if possible. // If the client will specifically ask for CSD, the request will be honored. diff --git a/hosts/muos/configuration.nix b/hosts/muos/configuration.nix index ecd025f..a769fe9 100644 --- a/hosts/muos/configuration.nix +++ b/hosts/muos/configuration.nix @@ -92,23 +92,33 @@ scale = "1"; } ]; - extraConfig = { - xdg.configFile = - let - wpkgs = inputs.self.packages.${pkgs.system}; - in - { - "niri/config.kdl".source = pkgs.substituteAll { - src = ../../extra/niri.kdl; - env = { - kitty = "${pkgs.kitty}/bin/kitty"; - wofilaunch = "${wpkgs.wofi-launch}/bin/wofi-launch"; - wofipower = "${wpkgs.wofi-power}/bin/wofi-power"; - swaylock = "${pkgs.swaylock}/bin/swaylock"; + extraConfig = + let + hconfig = config.home-manager.users.noa; + in + { + xdg.configFile = + let + wpkgs = inputs.self.packages.${pkgs.system}; + in + { + "niri/config.kdl".source = pkgs.substituteAll { + src = ../../extra/niri.kdl; + env = { + kitty = "${pkgs.kitty}/bin/kitty"; + wofilaunch = "${wpkgs.wofi-launch}/bin/wofi-launch"; + wofipower = "${wpkgs.wofi-power}/bin/wofi-power"; + swaylock = "${pkgs.swaylock}/bin/swaylock"; + automapaper = lib.strings.concatMapStringsSep "\n" ( + command: + ( + ''spawn-at-startup "${(lib.strings.concatStringsSep ''" "'' (lib.strings.splitString " " command))}"'' + ) + ) hconfig.modules.automapaper.startStrings; + }; }; }; - }; - }; + }; }; "root" = import ./root.nix; }; diff --git a/modules/automapaper/default.nix b/modules/automapaper/default.nix index 62c2d39..9316923 100644 --- a/modules/automapaper/default.nix +++ b/modules/automapaper/default.nix @@ -13,6 +13,9 @@ in options.modules.automapaper = { enable = lib.mkEnableOption "enable automapaper"; hyprland = lib.mkEnableOption "enable hyprland exec-once integration"; + startStrings = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; default-configuration = { init = lib.mkOption { type = lib.types.str; @@ -142,49 +145,49 @@ in }; }; - config = lib.mkIf cfg.enable { - wayland.windowManager.hyprland.settings.exec-once = - let - mkDisplayConfig = - conf: - let - init = builtins.toFile "init.frag" conf.init; - state = builtins.toFile "state.frag" conf.state; - display = builtins.toFile "display.frag" conf.display; - in - '' - [display] - name="${conf.name}" - horizontal=${builtins.toString conf.horizontal} - vertical=${builtins.toString conf.vertical} - tps=${builtins.toString conf.tps} - state_frag="${state}" - init_frag="${init}" - display_frag="${display}" - cycles=${builtins.toString conf.cycles} - frames_per_tick=${builtins.toString conf.frames_per_tick} - ''; - confFile = - let - def = config.modules.automapaper.default-configuration; - in - conf: - builtins.toFile "${conf.name}.toml" (mkDisplayConfig { - name = conf.name; - horizontal = builtins.div conf.horizontal def.horizontal; - vertical = builtins.div conf.vertical def.vertical; - tps = def.tps; - state = def.state; - init = def.init; - display = def.display; - cycles = def.cycles; - frames_per_tick = def.frames_per_tick; - }); - in - lib.mkIf cfg.hyprland ( - builtins.map ( - conf: "${inputs.automapaper.packages.${pkgs.system}.default}/bin/automapaper -C ${confFile conf}" - ) config.modules.hyprland.displays - ); - }; + config = + let + mkDisplayConfig = + conf: + let + init = builtins.toFile "init.frag" conf.init; + state = builtins.toFile "state.frag" conf.state; + display = builtins.toFile "display.frag" conf.display; + in + '' + [display] + name="${conf.name}" + horizontal=${builtins.toString conf.horizontal} + vertical=${builtins.toString conf.vertical} + tps=${builtins.toString conf.tps} + state_frag="${state}" + init_frag="${init}" + display_frag="${display}" + cycles=${builtins.toString conf.cycles} + frames_per_tick=${builtins.toString conf.frames_per_tick} + ''; + confFile = + let + def = config.modules.automapaper.default-configuration; + in + conf: + builtins.toFile "${conf.name}.toml" (mkDisplayConfig { + name = conf.name; + horizontal = builtins.div conf.horizontal def.horizontal; + vertical = builtins.div conf.vertical def.vertical; + tps = def.tps; + state = def.state; + init = def.init; + display = def.display; + cycles = def.cycles; + frames_per_tick = def.frames_per_tick; + }); + in + lib.mkIf cfg.enable rec { + modules.automapaper.startStrings = builtins.map ( + conf: "${inputs.automapaper.packages.${pkgs.system}.default}/bin/automapaper -C ${confFile conf}" + ) config.modules.hyprland.displays; + + wayland.windowManager.hyprland.settings.exec-once = lib.mkIf cfg.hyprland modules.automapaper.startStrings; + }; }