{ pkgs, config, lib, namespace, ... }: let cfg = config.${namespace}.services.duplicacy-web; in { options = { ${namespace}.services.duplicacy-web = { enable = lib.mkEnableOption "Enables duplicacy-web"; home = lib.mkOption { default = "/var/lib/duplicacy-web"; type = lib.types.str; description = "Environment where duplicacy-web stores its config files"; }; }; }; config = lib.mkIf cfg.enable { environment.systemPackages = [ pkgs.${namespace}.duplicacy-web ]; networking.firewall.allowedTCPPorts = [ 3875 ]; # Install systemd service. systemd.services.duplicacy-web = { enable = true; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; after = [ "syslog.target" "network-online.target" ]; description = "Start the Duplicacy backup service and web UI"; serviceConfig = { Type = "simple"; ExecStart = ''${pkgs.${namespace}.duplicacy-web}/duplicacy-web''; Restart = "on-failure"; RestartSec = 10; KillMode = "process"; }; environment = { HOME = cfg.home; }; unitConfig.RequiresMountsFor = cfg.home; }; }; }