{
  config,
  lib,
  pkgs,
  ...
}: {
  programs.git = {
    enable = true;
    difftastic.enable = true;

    userName = "Anthony Cicchetti";
    userEmail = "anthony@anthonycicchetti.com";

    aliases = {
      pushall = "!git remote | xargs -L1 git push --all";
      pr = "!f() { git fetch -fu $${2:-$(git remote |grep ^upstream || echo origin)} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f";
      logp = "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short";
    };

    extraConfig = {
      core = {
        autocrlf = "input";
        fsmonitor = true;
      };

      checkout = {
        workers = 0;
      };

      fetch = {
        prune = true;
      };

      format = {
        pretty = "fuller";
      };

      log = {
        follow = true;
      };

      push = {
        autoSetupRemote = true;
      };

      pull = {
        rebase = true;
      };

      init = {
        defaultBranch = "main";
      };
      help = {
        autoCorrect = "prompt";
      };
      rebase = {
        updateRefs = true;
      };
    };

    includes = [
      {path = "~/.gitconfig_local";}
    ];
  };
}