{
  config,
  lib,
  ...
}: {
  services.lldap = {
    enable = true;
    settings = {
      force_ldap_user_pass_reset = "always";
      ldap_user_dn = "admin";
      ldap_base_dn = "dc=darksailor,dc=dev";
      ldap_user_email = "admin@darksailor.dev";
      http_host = "127.0.0.1";
      http_port = 5090;
      ldap_port = 389;
      ldap_host = "::";
      ldap_user_pass_file = config.sops.secrets."lldap/admin".path;
      jwt_secret_file = "${config.sops.secrets."lldap/jwt".path}";
    };
    environment = {
      LLDAP_JWT_SECRET_FILE = "${config.sops.secrets."lldap/jwt".path}";
      # LLDAP_FORCE_UPDATE_PRIVATE_KEY = "true";
      # LLDAP_KEY_SEED_FILE = "${config.sops.secrets."lldap/seed".path}";
    };
  };
  users.users.lldap = {
    name = "lldap";
    group = "lldap";
    description = "LDAP Server User";
    isSystemUser = true;
  };
  users.groups.lldap = {};

  systemd.services.lldap = {
    serviceConfig = {
      AmbientCapabilities = "CAP_NET_BIND_SERVICE";
      DynamicUser = lib.mkForce false;
      User = "lldap";
      Group = "lldap";
    };
  };
  sops = {
    secrets = let
      owner = config.systemd.services.lldap.serviceConfig.User;
      group = config.systemd.services.lldap.serviceConfig.Group;
      restartUnits = ["lldap.service"];
      cfg = {
        inherit owner group restartUnits;
      };
    in {
      "lldap/jwt" = cfg;
      "lldap/seed" = cfg;
      "lldap/admin" = cfg;
    };
  };
}
