{
  _class = "clan.service";
  manifest.name = "clan-core/admin";
  manifest.description = "Convenient Administration for the Clan App";
  manifest.categories = [ "Utility" ];

  roles.default = {
    interface =
      { lib, ... }:
      {

        options = {
          allowedKeys = lib.mkOption {
            default = { };
            type = lib.types.attrsOf lib.types.str;
            description = "The allowed public keys for ssh access to the admin user";
            example = {
              "key_1" = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...";
            };
          };

          rsaHostKey.enable = lib.mkEnableOption "Generate RSA host key";

          # TODO: allow per-server domains that we than collect in the inventory
          #certicficateDomains = lib.mkOption {
          #  type = lib.types.listOf lib.types.str;
          #  default = [ ];
          #  example = [ "git.mydomain.com" ];
          #  description = "List of domains to include in the certificate. This option will not prepend the machine name in front of each domain.";
          #};

          certificateSearchDomains = lib.mkOption {
            type = lib.types.listOf lib.types.str;
            default = [ ];
            example = [ "mydomain.com" ];
            description = ''
              List of domains to include in the certificate.
              This option will prepend the machine name in front of each domain before adding it to the certificate.
            '';
          };
        };
      };
  };

  # We don't have a good way to specify dependencies between
  # clanServices for now. When it get's implemtende, we should just
  # use the ssh and users modules here.
  imports = [
    ./ssh.nix
    ./root-password.nix
  ];
}
