-{ pkgs, lib, ... }:
+{ pkgs, lib, config, ... }:
{
- home.packages = [
+ home.packages = lib.mkIf config.programs.git.enable [
+ pkgs.b4
+ pkgs.delta
+ pkgs.difftastic
+ pkgs.git-absorb
+ pkgs.git-bug
pkgs.git-chglog
+ pkgs.git-cliff
pkgs.git-crypt
+ pkgs.git-extras
pkgs.git-filter-repo
+ #pkgs.git-publish
pkgs.git-quick-stats
+ pkgs.gitui
+ #pkgs.radicle-node
pkgs.tig
];
programs.git = {
- enable = true;
+ enable = lib.mkDefault true;
ignores = [ "*~" "*.swp" ];
package = lib.mkDefault pkgs.gitMinimal;
aliases = {
a = "add";
+ ab = "absorb";
+ abr = "absorb -r";
ap = "add -p";
+ au = "add -u";
authors = "shortlog -s -n";
- bl = "git log -p -M --follow --stat --";
b = "branch";
+ bl = "git log -p -M --follow --stat --";
c = "commit";
ca = "commit --amend";
caa = "commit --amend -C@";
co = "checkout";
d = "diff";
dc = "diff --cached";
+ dcw = "diff --cached --word-diff=color";
dh = "diff --histogram";
dp = "diff --patience";
+ dt = "difftool --patience";
+ dtc = "difftool --cached";
+ dw = "diff --word-diff=color";
g = "grep";
ign = "ls-files -o -i --exclude-standard";
l = "log";
ll = "log --graph --decorate --pretty=oneline --abbrev-commit";
- lp = "log -p --pretty=fuller";
- lpg = "log -p --pretty=fuller -g";
+ lp = "log -p --pretty=fuller --stat";
+ lpg = "log -p --pretty=fuller --stat -g";
p = "push -v";
+ pa = "patch";
+ patch = "push rad HEAD:refs/patches";
pf = "push -vf";
- pu = "pull";
+ pl = "pull";
r = "reset";
rh = "reset --hard";
ri = "rebase -i";
wip = "for-each-ref --sort='authordate:iso8601' --format=' %(color:green)%(authordate:relative)%09%(color:white)%(refname:short)' refs/heads";
};
extraConfig = {
- push.default = "simple";
+ browser.elinks.cmd = "elinks";
+ color.branch = "auto";
color.diff = "auto";
#color.diff.whitespace = "red reverse";
color.status = "auto";
- color.branch = "auto";
- core.whitespace = "fix,-indent-with-non-tab,trailing-space,cr-at-eol";
+ core.commentChar = "auto";
core.quotepath = "false";
+ core.whitespace = "fix,-indent-with-non-tab,trailing-space,cr-at-eol";
diff.algorithm = "histogram";
diff.sqldiff.command = "sqldiff";
format.pretty = "oneline";
+ gui.fontdiff = ''-family "DejaVu Sans Mono" -size 8 -weight normal -slant roman -underline 0 -overstrike 0'';
+ gui.fontui = ''-family "DejaVu Sans" -size 8 -weight normal -slant roman -underline 0 -overstrike 0'';
+ gui.spellingdictionary = "en_US";
+ gui.tabsize = 4;
+ guitool."Rebase interactive" = {
+ cmd = "EDITOR=gvim git rebase -i $REVISION";
+ revprompt = true;
+ };
init.defaultBranch = "main";
- web.browser = "elinks";
- browser.elinks.cmd = "elinks";
+ merge.tool = "vimdiff";
+ merge.conflictStyle = "zdiff3";
+ protocol.version = 2;
+ pull.rebase = true;
+ push.default = "simple";
+ rebase.autosquash = "true";
sendemail.chainReplyTo = "false";
sendemail.composeencoding = "UTF-8";
sendemail.confirm = "always";
sendemail.envelopeSender = "auto";
sendemail.multiedit = "yes";
- sendemail.suppresscc = "self";
sendemail.suppressFrom = "false";
+ sendemail.suppresscc = "self";
sendemail.thread = "true";
sendemail.validate = "true";
- merge.tool = "vimdiff";
- protocol.version = 2;
- pull.rebase = true;
- rebase.autosquash = "true";
+ web.browser = "elinks";
+ };
+ iniContent = {
+ /*
+ diff.external = lib.concatStringsSep " " [
+ "${pkgs.difftastic}/bin/difft"
+ "--color auto"
+ "--background dark"
+ "--display side-by-side"
+ ];
+ */
+ # difftastic
+ /*
+ diff.tool = "difftastic";
+ difftool.prompt = false;
+ difftool.difftastic.cmd = ''${pkgs.difftastic}/bin/difft "$LOCAL" "$REMOTE"'';
+ pager.difftool = true;
+ */
+
+ # delta
+ /*
+ core.pager = "delta --grep-separator-symbol keep";
+ interactive.diffFilter = "delta --color-only --features=interactive";
+ delta.features = "decorations";
+ delta.interactive = {
+ keep-plus-minus-markers = false;
+ };
+ delta.decorations = {
+ commit-decoration-style = "blue ol";
+ commit-style = "raw";
+ file-style = "omit";
+ hunk-header-decoration-style = "blue box";
+ hunk-header-file-style = "red";
+ hunk-header-line-number-style = "#067a00";
+ hunk-header-style = "file line-number syntax";
+ };
+ */
+ };
+ };
+ programs.bash = lib.mkIf config.programs.git.enable {
+ shellAliases = {
+ g = "git";
+ ge = "git-edit-commit";
+ gg = "git grep";
+ gge = "git-grep-edit";
+ gui = "gitui";
};
+ initExtra = ''
+ git-edit-commit () { $EDITOR $(git diff-tree --no-commit-id --name-only -r "$@"); }
+ git-grep-edit () { $EDITOR $(git grep --name-only --recursive "$@"); }
+ '';
};
}