{ config, flake, ... }: let inherit (flake.config.people) user0; inherit (flake.config.people.user.${user0}) domain email dns; inherit (flake.config.service.instance.acme) paths; inherit (flake.config.service) instance; dnsConfig = { dnsProvider = dns.provider0; directory = paths.path0; environmentFile = config.sops.secrets."dns/namecheap".path; }; instanceName = service: (instance.${service}.subdomain); domain0ServiceNames = [ "nextcloud" "jellyfin" "minecraft" "ollama" "syncthing" "vaultwarden" ]; domain1ServiceNames = [ "nextcloud" "castopod" "forgejo" "matrix" "peertube" "writefreely" ]; domain0Subdomains = map instanceName domain0ServiceNames; domain1Subdomains = map instanceName domain1ServiceNames; domainRoot = [ domain.url0 domain.url1 ]; in { security.acme = { acceptTerms = true; defaults = { email = email.address0; server = "https://acme-v02.api.letsencrypt.org/directory"; }; certs = builtins.listToAttrs ( (map (prefix: { name = "${prefix}.${domain.url0}"; value = dnsConfig; }) domain0Subdomains) ++ (map (prefix: { name = "${prefix}.${domain.url1}"; value = dnsConfig; }) domain1Subdomains) ++ (map (name: { name = name; value = dnsConfig; }) domainRoot) ); }; sops = let sopsSecrets = ["pass"]; sopsPath = secret: { path = "/var/lib/secrets/${instance.acme.name}/${dns.provider0}-${secret}"; owner = "root"; mode = "600"; }; in { secrets = builtins.listToAttrs ( map (secret: { name = "dns/${dns.provider0}"; value = sopsPath secret; }) sopsSecrets ); }; }