{ 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"; }; }; }; }