{
  pkgs,
  config,
  lib,
  ...
}:
let
  inherit (config.grimmShared) enable tooling;
  inherit (lib)
    mkOption
    types
    getExe
    mkIf
    ;

  inherit (builtins) toString readFile;
in
{
  config = mkIf (enable && tooling.enable) {
    environment.systemPackages = [
      (pkgs.writeShellScriptBin "silent-add" "${getExe config.programs.git.package} add --intent-to-add $@ ; ${getExe config.programs.git.package} update-index --assume-unchanged $@")

      pkgs.urlencode
      pkgs.tea
      pkgs.delta
      pkgs.gh
    ];

    programs.git = {
      enable = true;
      lfs.enable = true;
      config =
        let
          key_file = ../../ssh/id_ed25519_sk.pub;
          allowed_signers_file = pkgs.writeText "allowed_signers" ''${tooling.git_email} namespaces="git" ${readFile key_file}'';
        in
        {

          init.defaultBranch = "main";
          credential.username = tooling.git_user;
          gpg.format = "ssh";
          user.signingkey = toString key_file;
          gpg.ssh.allowedSignersFile = toString allowed_signers_file;
          user.name = tooling.git_user;
          user.email = tooling.git_email;
          push.autoSetupRemote = true;
          core.autocrlf = "input";
          commit.gpgsign = true;
          safe.directory = "/etc/nixos";
          core.excludesfile = (
            pkgs.writeText ".gitignore" ''
              .idea
              .obsidian
              *~
              result
            ''
          );
          pull.rebase = false;
          include.path = "${pkgs.delta.src}/themes.gitconfig";

          core.pager = "delta";
          interactive.diffFilter = "delta --color-only";
          delta = {
            navigate = true;
            features = "mantis-shrimp";
          };

          merge.conflictstyle = "diff3";
          diff.colorMoved = "default";

          alias = {
            pfusch = "push --force-with-lease --force-if-includes";
            fuck = "reset HEAD~1";
            fixup = "commit --fixup";
          };
        };
    };
  };

  options.grimmShared.tooling = {
    git_user = mkOption {
      type = types.str;
      default = "Grimmauld";
      description = "Username for git to use";
    };

    git_email = mkOption {
      type = types.str;
      default = "${config.grimmShared.tooling.git_user}@grimmauld.de";
      description = "Email for git to use";
    };
  };
}