{ ... }:
let
  acmeDomainMap = {
    "jellyfin.grzb.de" = "jellyfin.vs.grzb.de";
    "mail-1.grzb.de" = "mail-1.vs.grzb.de";
    "matrix.nekover.se" = "matrix.vs.grzb.de";
    "netbox.grzb.de" = "netbox.vs.grzb.de";
    "git.nekover.se" = "forgejo.vs.grzb.de";
    "grafana.grzb.de" = "metrics.vs.grzb.de";
    "jackett.grzb.de" = "torrent.vs.grzb.de";
    "jellyseerr.grzb.de" = "jellyseerr.vs.grzb.de";
    "keycloak-admin.nekover.se" = "keycloak.vs.grzb.de";
    "radarr.grzb.de" = "torrent.vs.grzb.de";
    "searx.nekover.se" = "searx.vs.grzb.de";
    "social.nekover.se" = "mastodon.vs.grzb.de";
    "sonarr.grzb.de" = "torrent.vs.grzb.de";
    "torrent.grzb.de" = "torrent.vs.grzb.de";
    "turn.nekover.se" = "coturn.vs.grzb.de";
  };
in
{
  services.nginx.virtualHosts = (builtins.mapAttrs (domain: target: {
    listen = [{ 
      addr = "0.0.0.0";
      port = 80;
    }];
    locations."^~ /.well-known/acme-challenge/" = {
      proxyPass = "http://${target}:80";
    };
  }) acmeDomainMap);
}