cfg: {
  lib,
  name,
  ...
}: let
  inherit (lib) mkOption types;
in {
  options = {
    subDirName = mkOption {
      type = types.str;
      default = name;
      description = "The sub directory name to handle.";
    };

    reverseProxy = mkOption {
      type = types.nullOr types.str;
      default = null;
      description = ''
        Option to give the parameters to a simple "reverse_proxy" command
        appended after extraConfig.
      '';
    };

    experimental = mkOption {
      type = types.bool;
      default = false;
      description = ''
        Specify if the app being proxied expects to be under a subdirectory.
        If it doesn't, we can attempt to circumvent that but it is not guaranteed
        to work for every app.
      '';
    };

    extraConfig = mkOption {
      type = types.lines;
      default = "";
      description = ''
        Additional lines of configuration appended to this sub domain in the
        automatically generated `Caddyfile`.
      '';
    };
  };
}