{
config,
lib,
pkgs,
...
}: let
cfg = config.services.canwa;
configFormat = pkgs.formats.toml {};
configFile = configFormat.generate "canwa.toml" cfg.config;
checkedConfig =
pkgs.runCommand "checked-canwa.toml" {
} ''
cp ${configFile} $out
${cfg.package}/bin/canwa --config $out --dry-run
'';
in {
options = {
services.canwa = {
enable = lib.mkEnableOption "canwa";
package = lib.mkOption {
type = lib.types.package;
};
user = lib.mkOption {
type = lib.types.str;
default = "canwa";
};
group = lib.mkOption {
type = lib.types.str;
default = "canwa";
};
config = lib.mkOption {
type = configFormat.type;
default = {};
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.canwa = {
description = "canwa";
after = ["network-online.target"];
wants = ["network-online.target"];
wantedBy = ["multi-user.target"];
serviceConfig = {
DynamicUser = true;
User = cfg.user;
Group = cfg.group;
ExecStart = lib.escapeShellArgs [
"${cfg.package}/bin/canwa"
"--config"
"${checkedConfig}"
];
Restart = "on-failure";
};
};
};
}