Part of the extraDefaults
settings are based on this excellent article.
{ pkgs, ... }:
{
programs.git = {
enable = true;
lfs.enable = true;
delta.enable = true;
aliases = {
lol = ''log --graph --pretty=format:"%C(yellow)%h%Creset%C(cyan)%C(bold)%d%Creset %C(cyan)(%cr)%Creset %C(green)%ae%Creset %s"'';
};
extraConfig = {
absorb.maxStack = 50;
column.ui = "auto"; # use multiple column like `ls`
diff = {
submodule = "diff";
algorithm = "histogram";
colorMoved = "plain";
mnemonicPrefix = true;
};
init.defaultBranch = "main";
merge.conflictStyle = "zdiff3";
pull.rebase = true;
rerere = {
enabled = true;
autoupdate = true;
};
rebase = {
autoSquash = true;
autoStash = true;
updateRefs = true;
};
status.submoduleSummary = true;
tag.sort = "version:refname";
};
};
home.packages = with pkgs.gitAndTools; [
git-absorb
git-filter-repo
git-remote-gcrypt
];
home.shellAliases = {
gco = "git checkout";
gcp = "git cherry-pick";
grb = "git rebase";
gst = "git status";
gb = "git branch";
};
}