{ lib, config, ... }:

let
  cfg = config.snowhawk.git;
in
{
  options.snowhawk.git = {
    enable = lib.mkEnableOption "git";
  };

  config = lib.mkIf cfg.enable {
    programs.git = {
      enable = true;
      userName = "Zynh Ludwig";
      userEmail = "zynh0722@gmail.com";

      ignores = [
        "Session.vim"
      ];

      aliases = {
        co = "checkout";
        ci = "commit";
        st = "status";
        br = "branch";
        hist = "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short";
        type = "cat-file -t";
        dump = "cat-file -p";
        graph = "log --graph --decorate --pretty=oneline --abbrev-commit";

        # local patch-wise ignore workflow
        unchanged = "update-index --assume-unchanged";
        changed = "update-index --no-assume-unchanged";
        show-unchanged = ''!"git ls-files -v | sed -e 's/^[a-z] //p; d'\"'';
      };

      extraConfig = {
        init.defaultBranch = "main";

        core = {
          editor = "nvim";
          autocrlf = "input";
          safecrlf = true;
        };

        credential = {
          helper = [
            "cache --timeout 7200"
            "oauth"
          ];

          "https://git.zynh.me" = {
            oauthClientId = "13d5b95d-565d-4264-8961-c45cc38eaa8a";
            oauthScopes = "read_repository write_repository";
            oauthAuthURL = "/login/oauth/authorize";
            oauthTokenURL = "/login/oauth/access_token";
          };
        };
      };
    };
  };
}