{ lib, config, pkgs, ... }: let inherit (lib) types mkEnableOption mkIf; inherit (lib.plusultra) mkOpt enabled; cfg = config.plusultra.tools.git; user = config.plusultra.user; in { options.plusultra.tools.git = { enable = mkEnableOption "Git"; userName = mkOpt types.str user.fullName "The name to configure git with."; userEmail = mkOpt types.str user.email "The email to configure git with."; signingKey = mkOpt types.str "7F3D64824AC0B6B8009E50504BC0896FB5693595" "The key ID to sign commits with."; signByDefault = mkOpt types.bool false "Whether to sign commits by default."; }; config = mkIf cfg.enable { home.packages = with pkgs; [ git-delete-merged-branches delta ]; programs.git = { enable = true; inherit (cfg) userName userEmail; lfs = enabled; signing = { key = cfg.signingKey; inherit (cfg) signByDefault; }; extraConfig = { init = { defaultBranch = "main"; }; pull = { rebase = true; }; push = { autoSetupRemote = true; }; core = { whitespace = "trailing-space,space-before-tab"; }; safe = { directory = "${user.home}/git"; }; "credential \"https://github.com\"" = { helper = "!gh auth git-credential"; }; alias = { co = "checkout"; ci = "commit"; }; pull.ff = "only"; core.pager = "${pkgs.delta}/bin/delta"; delta = { features = "side-by-side line-numbers decorations"; syntax-theme = "DarkNeon"; light = "false"; line-numbers = "false"; navigate = "true"; }; interactive.diffFilter = "${pkgs.delta}/bin/delta --color-only"; merge.conflictStyle = "diff3"; diff.colorMoved = "default"; }; }; }; }