niri-tag/module.nix
atagen 785619920b
All checks were successful
Nix Build / nix build (push) Successful in 35s
fix: config path, window class escaping, debug ordering
2026-03-03 00:17:51 +11:00

78 lines
1.8 KiB
Nix

{
config,
pkgs,
lib,
...
}:
let
inherit (lib)
mkEnableOption
mkPackageOption
mkOption
mkIf
getExe
types
;
inherit (types) attrsOf bool;
name = "Niri Tag Manager";
in
{
options.services.niri-tag = {
enable = mkEnableOption name;
package = mkPackageOption pkgs name {
nullable = true;
default = "niri-tag";
};
prepopulate = mkOption {
type = types.numbers.between 0 255;
default = 3;
};
scratchpads = mkOption {
type = attrsOf (types.numbers.between 1 255);
default = { };
};
strict = mkOption {
type = bool;
default = true;
};
};
config =
let
cfg = config.services.niri-tag;
in
mkIf (cfg.enable) {
systemd.user.services.niri-tag = {
enable = true;
description = name;
wantedBy = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
after = [ "niri.service" ];
wants = [ "niri.service" ];
serviceConfig = {
Type = "notify";
Restart = "always";
ExecStart = "${getExe cfg.package}";
PrivateTmp = true;
};
};
environment.etc."niri-tag/config.toml".text =
let
scratchpads =
let
contents =
lib.mapAttrsToList (app: number: ''"${app}" = ${toString number}'') cfg.scratchpads
|> lib.concatStringsSep "\n";
in
lib.optionalString ((lib.attrsToList cfg.scratchpads |> builtins.length) > 0) ''
[scratchpads]
${contents}
'';
in
''
prepopulate = ${toString cfg.prepopulate}
strict = ${lib.boolToString cfg.strict}
${scratchpads}
'';
environment.systemPackages = [ cfg.package ];
};
}