cfg: {lib, ...}: let
  inherit (lib) literalExpression mkOption types;
in {
  options = {
    reverseProxy = mkOption {
      type = types.nullOr types.str;
      default = null;
      description = ''
        Option to give the parameters to a simple "reverse_proxy" command
        appended after extraConfig.
      '';
    };

    subDomains = mkOption {
      type = types.attrsOf (types.submodule (import ./sub-domain-options.nix cfg));
      default = {};
      example = literalExpression ''
        {
          headscale = {
            reverseProxy = "localhost:8080";
            extraConfig = '''
              encode gzip
            ''';
          }
        };
      '';
      description = ''
        Declarative specification of a virtual hosts subdomain served by Caddy.
      '';
    };

    subDirectories = mkOption {
      type = types.attrsOf (types.submodule (import ./sub-dir-options.nix cfg));
      default = {};
      example = literalExpression ''
        {
          headscale = {
            appSupport = false;
            reverseProxy = "localhost:8080";
            extraConfig = '''
              encode gzip
            ''';
          };
        };
      '';
      description = ''
        Declarative specification of a subdomain's subdirectories served by Caddy.
      '';
    };
  };
}