{ config, pkgs, ... }:

{
  programs.git = {
    enable = true;
    lfs.enable = true;
    profiles = {
      private = {
        name = "Felix Schröter";
        email = "dev@felschr.com";
        # use sign subkey's fingerprint: gpg2 -K --with-subkey-fingerprint
        signingKey = "7E08 6842 0934 AA1D 6821  1F2A 671E 39E6 744C 807D";
        dirs = [ "~/dev/private/" "/etc/nixos" ];
      };
      work = {
        name = "Felix Schröter";
        email = "fs@upsquared.com";
        # use sign subkey's fingerprint: gpg2 -K --with-subkey-fingerprint
        signingKey = "16F6 4623 8B1C 80C4 6267  6FF9 4D13 24C5 006E 9B2E";
        dirs = [ "~/dev/work/" ];
      };
    };

    ignores = [ ".direnv" ];
    signing = { signByDefault = true; };
    extraConfig = {
      init = { defaultBranch = "main"; };
      pull = { rebase = true; };
      rebase = {
        autoStash = true;
        autoSquash = true;
        abbreviateCommands = true;
        missingCommitsCheck = "warn";
      };
    };
    aliases = {
      mr =
        "!sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -";
      pr =
        "!sh -c 'git fetch $1 refs/pull/$2/head:pr/$1 && git checkout pr/$2'";
    };
  };
}