{ config, ... }:

let
  domain = "ldap.felschr.com";
  cfg = config.services.lldap;
  port = cfg.settings.http_port;
in
{
  age.secrets.lldap-key-seed.file = ../secrets/lldap/key-seed.age;
  age.secrets.lldap-jwt.file = ../secrets/lldap/jwt.age;
  age.secrets.lldap-password = {
    file = ../secrets/lldap/password.age;
    group = "ldap";
    mode = "440";
  };

  services.lldap = {
    enable = true;
    settings = {
      http_url = "https://${domain}";
      ldap_base_dn = "dc=felschr,dc=com";
    };
    environment = {
      LLDAP_KEY_SEED = "%d/key-seed";
      LLDAP_JWT_SECRET_FILE = "%d/jwt";
      LLDAP_LDAP_USER_PASS_FILE = "%d/password";
    };
  };

  systemd.services.lldap = {
    serviceConfig.LoadCredential = [
      "key-seed:${config.age.secrets.lldap-key-seed.path}"
      "jwt:${config.age.secrets.lldap-jwt.path}"
      "password:${config.age.secrets.lldap-password.path}"
    ];
  };

  services.nginx.virtualHosts = {
    ${domain} = {
      enableACME = true;
      forceSSL = true;
      locations."/".proxyPass = "http://[::1]:${toString port}";
    };
  };

  users.groups.ldap = {
    gid = 979;
  };
}