{lib, ...}: { options.git = { useRsa = lib.mkEnableOption "Use rsa instead of ed25519"; }; config.programs.git = { enable = true; ignores = [".envrc"]; signing = { signByDefault = true; key = if true #config.git.useRsa then "~/.ssh/id_rsa.pub" else "~/.ssh/id_ed25519.pub"; }; # maintenance = { # enable = false; # # TODO: figure out a way to specify all repositories in ~/projects & ~/work at run time # repositories = []; # }; settings = { user = { name = "Zoe Roux"; email = "zoe.roux@zoriya.dev"; }; alias = { master = #bash '' !git symbolic-ref --short refs/remotes/$(git remote | head -n 1)/HEAD | sed 's@.*/@@' ''; cleanup = #bash '' !git branch --merged | grep -vE "^([+*]|\s*($(git master))\s*$)" | xargs git branch --delete 2>/dev/null ''; nuke = #bash '' !git reset --hard HEAD && git clean -df . ''; }; gpg = { format = "ssh"; ssh.allowedSignersFile = "~/.ssh/allowed_signers"; }; fetch = { prune = true; pruneTags = true; all = true; }; push = { default = "upstream"; autoSetupRemote = true; }; pull.ff = "only"; init.defaultBranch = "master"; branch.sort = "-committerdate"; tag.sort = "version:refname"; advice = { diverging = false; skippedCherryPicks = false; }; rerere = { enabled = true; autoupdate = true; }; rebase = { updateRefs = true; autoStash = true; autoSquash = true; }; diff = { # newer & better diff algo, why is this not the default? algorithm = "histogram"; colorMoved = "plain"; renames = true; # use actually understandable prefixes (c/, i/ & w/) instead of a/ b/ mnemonicPrefix = true; }; # show diff in commit window commit.verbose = true; core = { # Disable hooks (i think i need to run it on each repo too, idk) hookspath = "/dev/null"; fsmonitor = true; untrackedCache = true; }; # Break compat with older versions of git (and systems that doesn't support mtime) to have better performances feature.manyFiles = true; clean.requireForce = false; url = { "ssh://git@github.com" = { insteadOf = "https://github.com"; }; }; }; }; }