{ pkgs }:

{
  enable = true;

  userName = "Daniel Siepmann";
  userEmail = "coding@daniel-siepmann.de";

  signing = {
    key = "15560EF4";
    signByDefault = true;
  };

  aliases = {
    c = "checkout";
    ss = "show -s";

    s = "status -s";
    dc = "diff --cached";

    sc = "switch -c";
    st = "switch -t";

    com = "commit";

    ri = "rebase -i";
    rc = "rebase --continue";

    fap = "fetch --all --prune";
    rh = "reset --hard";
    cp = "cherry-pick";

    lg = "log --graph --pretty=format:'%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset' --abbrev-commit --date=relative";
  };

  ignores = [
    # Some files which might be generated by system or tools
    "*~"
    "*.swp"
    "*.swn"
    "*.swo"
    "*.orig"
    "*.rej"
    "*.pyc"
    "*.bak"
    "*/tags"
    "/tags"
    "*.~lock.*#"
    # As I'm using Makefiles in many projects for my own confidence
    "Makefile"
    # As I'm using nix-shell in many projects for my own confidence
    "shell.nix"

    # Some generics which occur in some projects
    "build/"
    "logs/"

    # PHP Specific
    ".phpunit.result.cache"
    ".phpunit.cache"
    ".php-cs-fixer.cache"
    "phpcs.xml"

    # TYPO3 documentation specific
    "Documentation-GENERATED-temp*/"
    # Customer specific
    "config/env/development-dsiepmann/"
  ];

  diff-so-fancy = {
    enable = true;
    markEmptyLines = false;
    stripLeadingSymbols = false;
    useUnicodeRuler = false;
  };

  extraConfig = {
    advice = {
      detachedHead = false;
    };

    branch = {
      autosetuprebase = "always";
    };

    color = {
      diff = "auto";
      status = "auto";
      branch = "auto";
      interactive = "auto";
      ui = "auto";
    };

    core = {
      whitespace = "-blank-at-eol,-space-before-tab,-indent-with-non-tab,-tab-in-indent,-blank-at-eof,-trailing-space-,cr-at-eol";
    };

    # Not possible right now, due to: https://github.com/gitonomy/gitlib/issues/114 for onw customer project
    # diff = {
    #   noprefix = true;
    # };

    pager = {
      branch = false;
      show = false;
    };

    grep = {
      lineNumber = true;
    };

    help = {
      autocorrect = 1;
    };

    push = {
      default = "current";
      gpgSign = "if-asked";
    };

    init = {
      defaultBranch = "main";
    };

    merge = {
      ff = true;
      tool = "nvimdiff4";
    };

    "mergetool \"nvimdiff4\"" = {
      cmd = "nvim -d $LOCAL $BASE $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J' -c 'diffoff'";
    };
  };
}
