{ config, pkgs, ... }: { programs.git = { enable = true; userName = "Simon Bruder"; userEmail = "simon@sbruder.de"; signing = { key = config.programs.gpg.settings.default-key; signByDefault = true; }; extraConfig = { core.quotepath = "off"; pull.ff = "only"; diff = { age = { # This uses the de facto default key location with no ability to # specify another key. # If decryption fails (e.g. due to a lack of the right private key, # rage’s error message will be displayed instead of the file’s # contents. textconv = toString (pkgs.writeShellScript "git-age-textconv" '' ${pkgs.rage}/bin/rage -d -i ${config.xdg.configHome}/age/keys.txt "$@" 2>&1 || true ''); }; }; }; ignores = [ "*.swp" ".direnv" "Session.vim" ]; lfs.enable = true; delta = { enable = true; options = { line-numbers = "true"; side-by-side = "true"; features = "decorations"; syntax-theme = "base16"; decorations = { commit-decoration-style = "bold yellow box ul"; file-style = "bold yellow ul"; file-decoration-style = "none"; }; }; }; aliases = { ls = "log --stat"; }; }; programs.zsh.shellAliases = { ga = "git add"; gap = "git add --patch"; gc = "git commit"; gco = "git checkout"; gcp = "git cherry-pick"; gcv = "git commit --verbose"; gd = "git diff"; gdc = "git diff --cached"; gfom = "git fetch origin master"; gl = "git log"; glp = "git log --patch"; gls = "git log --stat"; gp = "git push"; grb = "git rebase"; grbi = "git rebase -i"; grbim = "git rebase -i master"; grbm = "git rebase master"; grbom = "git rebase origin/master"; grs = "git restore"; grss = "git restore --staged"; gs = "git switch"; gsc = "git switch -c"; gsm = "git switch master"; gst = "git status"; }; }