{ config, lib, ... }: let cfg = config.vhack.taskchampion-sync; dataDirectory = "/var/lib/taskchampion-sync-server"; in { options.vhack.taskchampion-sync = { enable = lib.mkEnableOption "taskchampion-sync"; fqdn = lib.mkOption { description = "The fully qualified domain name of this instance."; type = lib.types.str; example = "task-sync.tw.online"; }; }; config = lib.mkIf cfg.enable { users = { users.taskchampion.uid = config.vhack.constants.ids.uids.taskchampion; groups.taskchampion.gid = config.vhack.constants.ids.uids.taskchampion; }; vhack = { persist.directories = [ { directory = dataDirectory; user = "taskchampion"; group = "taskchampion"; mode = "0700"; } ]; nginx.enable = true; }; services = { taskchampion-sync-server = { enable = true; dataDir = dataDirectory; }; nginx.virtualHosts."${cfg.fqdn}" = { locations."/" = { proxyPass = "http://127.0.0.1:${toString config.services.taskchampion-sync-server.port}"; recommendedProxySettings = true; }; enableACME = true; forceSSL = true; }; }; }; }