{
  config,
  lib,
  pkgs,
  ...
}:
{
  options = {
    clan.sshd.certificate = {
      # TODO: allow per-server domains that we than collect in the inventory
      #domains = 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.";
      #};
      searchDomains = 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.";
      };
    };
  };
  config = {
    clan.core.vars.generators.openssh-ca =
      lib.mkIf (config.clan.sshd.certificate.searchDomains != [ ])
        {
          share = true;
          files.id_ed25519.deploy = false;
          files."id_ed25519.pub" = {
            deploy = false;
            secret = false;
          };
          runtimeInputs = [
            pkgs.openssh
          ];
          script = ''
            ssh-keygen -t ed25519 -N "" -f "$out"/id_ed25519
          '';
        };

    programs.ssh.knownHosts.ssh-ca = lib.mkIf (config.clan.sshd.certificate.searchDomains != [ ]) {
      certAuthority = true;
      extraHostNames = builtins.map (domain: "*.${domain}") config.clan.sshd.certificate.searchDomains;
      publicKey = config.clan.core.vars.generators.openssh-ca.files."id_ed25519.pub".value;
    };
  };
}
