{ pkgs, userName, userEmail, gpgSigningKey, ... }: { programs = { less.enable = true; git-credential-oauth.enable = true; git = { enable = true; inherit userName; inherit userEmail; signing = { key = gpgSigningKey; signByDefault = true; }; difftastic = { enable = true; background = "light"; }; lfs = { enable = true; }; extraConfig = { branch.sort = "-committerdate"; core = { editor = "nvim"; fsmonitor = true; pager = "less -FX"; untrackedCache = true; }; column.ui = "auto"; commit.verbose = true; diff = { algorithm = "histogram"; colorMoved = "plain"; ignoreSubmodules = "none"; mnemonicPrefix = true; renames = true; }; fetch = { all = true; parallel = 8; prune = true; pruneTags = true; recurseSubmodules = true; writeCommitGraph = true; }; format.pretty = "format:%C(yellow)%h %Cblue%>(12)%ad %C(red)%G? %Cgreen%<(7,trunc)%aN%Cred%d %Creset%s"; init.defaultBranch = "main"; log.date = "relative"; merge = { conflictstyle = "zdiff3"; ff = false; tool = "nvim"; }; mergetool.nvim.cmd = "nvim -d $BASE $LOCAL $REMOTE $MERGED -c 'DiffviewOpen'"; mergetool.nvim.trustExitCode = false; mergetool.prompt = false; pager.difftool = true; pull.rebase = true; push = { autoSetupRemote = true; default = "simple"; followTags = true; recurseSubmodules = "on-demand"; }; rebase = { qutoSquash = true; autoStash = true; updateRefs = true; }; rerere = { autoupdate = true; enabled = true; }; status.submoduleSummary = true; submodule.fetchJobs = 8; submodule.recurse = true; tag.sort = "version:refname"; worktree.guessRemote = true; }; aliases = { graph = "log --graph"; }; ignores = [ ".env" ".direnv" "*.swp" ]; }; }; home.packages = with pkgs; [ (writeShellScriptBin "git-clone-worktree" '' uri=''${1} dir=''${2} if [[ -z ''${dir} ]]; then dir=''$(basename ''${1} .git) fi if [[ -e ''${dir} ]]; then echo "error: directory ''${dir} already exists" exit 1 fi mkdir ''${dir} git clone ''${uri} ''${dir}/.base branch=`git -C ''${dir}/.base symbolic-ref --short HEAD` echo "default branch is ''${branch}" git -C ''${dir}/.base checkout --detach HEAD git -C ''${dir}/.base worktree add ../''${branch} '') (writeShellScriptBin "git-make-relative" '' gitfile=''${1} if [[ -z ''${gitfile} ]]; then gitfile=".git" fi if [[ ! -f ''${gitfile} ]]; then echo "file ''${gitfile} does not exist" exit 1 fi gitdir=$(grep "gitdir:" ''${gitfile} | cut -d: -f2 | xargs) rel_gitdir=$(realpath -s --relative-to=. ''${gitdir}) echo "relative path: ''${rel_gitdir}" sed -i -e "s,gitdir:.*,gitdir: ''${rel_gitdir}," ''${gitfile} '') ]; }