{ lib, ... }:
  let
    inherit (lib)
      mkOption
      types
    ;

    gitType = types.submodule (
      { ... }: {
        options = {
          defaultBranch = mkOption {
            type = types.nullOr types.str;
            description = "The name of the default branch in newly created repositories.";
            default = null;
          };

          flow = {
            mainBranch = mkOption {
              type = types.nullOr types.str;
              description = "The name of the stable branch in git flow.";
              default = null;
            };

            devBranch = mkOption {
              type = types.nullOr types.str;
              description = "The name of the development branch in git flow.";
              default = null;
            };
          };

          aliases = mkOption {
            type = types.attrsOf types.str;
            description = "The git command aliases to install.";
            default = {};
          };
        };
      });

    gitOption = mkOption {
      type = gitType;
      description = "The git related options.";
      default = {};
    };
  in {
    options = {
      valhalla = {
        git = gitOption;

        users = mkOption {
          type = types.attrsOf (types.submodule (
            { ... }: {
              options = {
                git = gitOption;
              };
            }));
        };
      };
    };
  }