{
  config,
  lib,
  pkgs,
  ...
}: let
  inherit
    (lib)
    mkEnableOption
    mkIf
    ;

  cfg = config.my.home.git;
in {
  options.my.home.git.enable = (mkEnableOption "Git configuration") // {default = true;};

  config = mkIf cfg.enable {
    programs.git = {
      enable = true;

      delta = {
        enable = true;
        options = {
          syntax-theme = "Solarized (light)";
        };
      };
      lfs.enable = true;

      userEmail = "antoine@alarsyo.net";
      userName = "Antoine Martin";

      extraConfig = {
        commit = {verbose = true;};
        core = {editor = "vim";};
        init = {defaultBranch = "main";};
        pull = {rebase = true;};
        rerere = {enabled = true;};
        maintenance.prefetch.enabled = false;
      };

      aliases = {
        push-wip = "push -o ci.skip";
        push-merge = "push -o merge_request.create -o merge_request.merge_when_pipeline_succeeds -o merge_request.remove_source_branch";
        push-mr = "push -o merge_request.create -o merge_request.remove_source_branch";
      };

      includes = [
        {
          condition = "gitdir:~/work/lrde/";
          contents = {user = {email = "amartin@lrde.epita.fr";};};
        }
        {
          condition = "gitdir:~/work/prologin/";
          contents = {user = {email = "antoine.martin@prologin.org";};};
        }
        {
          condition = "gitdir:~/work/epita/";
          contents = {user = {email = "antoine4.martin@epita.fr";};};
        }
      ];

      ignores = [
        "/.direnv/"
        "/.envrc"
      ];
    };
  };
}