aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/development/git/default.nix81
1 files changed, 76 insertions, 5 deletions
diff --git a/modules/development/git/default.nix b/modules/development/git/default.nix
index 9a937f5..031194b 100644
--- a/modules/development/git/default.nix
+++ b/modules/development/git/default.nix
@@ -47,6 +47,7 @@
config = lib.mkIf config.development.git.enable {
home.packages = with pkgs; [
git-graph
+ gawk
];
xdg.configFile."git-graph/models/custom.toml".text = ''
@@ -83,7 +84,7 @@
['^(feature|fork/).*$', ['magenta', 'cyan']],
['^release.*$', ['green']],
['^(bugfix|hotfix).*$', ['red']],
- ['^tags/.*$', ['green']],
+ ['^tags/.*$', ['gray', 'purple', 'teal', 'brown']]
]
unknown = ['gray', 'purple', 'teal', 'brown']
'';
@@ -105,14 +106,84 @@
alias = {
log-graph = ''
!f() {
- fmt=$(printf '\033[1;34mCommit:\033[0m \033[33m%%h\033[0m \033[91m%%d\033[0m%%n\033[1;34mParents:\033[0m \033[35m%%p\033[0m%%n\033[1;34mAuthor:\033[0m \033[32m%%an\033[0m <\033[96m%%ae\033[0m>%%n\033[1;34mDate:\033[0m \033[36m%%ad (%%ar)\033[0m%%n%%n%%B%%n\033[90m--------------------------------------------------------\033[0m')
- git-graph --model custom --color always --sparse --style round --format="$fmt"
+ fmt=$(printf '\033[1;34mCommit:\033[0m \033[33m%%h\033[0m \033[91m%%d\033[0m%%n\x01%%H\x01%%n\033[1;34mParents:\033[0m \033[35m%%p\033[0m%%n\033[1;34mAuthor:\033[0m \033[32m%%an\033[0m <\033[96m%%ae\033[0m>%%n\033[1;34mDate:\033[0m \033[36m%%ad (%%ar)\033[0m%%n%%n%%B%%n\033[90m--------------------------------------------------------\033[0m')
+ git-graph --model custom --color always --sparse --style round --format="$fmt" | awk '
+ index($0, "\x01") > 0 {
+ line = $0
+ start = index(line, "\x01")
+ rest = substr(line, start + 1)
+ stop = index(rest, "\x01")
+ hash = substr(rest, 1, stop - 1)
+ prefix = substr(line, 1, start - 1)
+
+ gsub(/\033\[[0-9;]*[a-zA-Z]/, "", hash)
+ gsub(/[^0-9a-fA-F]/, "", hash)
+
+ if (length(hash) >= 7) {
+ cmd = "git log -1 --format=\"%G?|%GK\" " hash " 2>/dev/null"
+ cmd | getline sig
+ close(cmd)
+ split(sig, a, "|")
+ st = a[1]; key = a[2]
+ } else {
+ st = ""; key = ""
+ }
+
+ if (st == "G") label = "\033[32mgood\033[0m"
+ else if (st == "B") label = "\033[31mbad\033[0m"
+ else if (st == "U") label = "\033[33muntrusted\033[0m"
+ else if (st == "X") label = "\033[33mexpired sig\033[0m"
+ else if (st == "Y") label = "\033[33mexpired key\033[0m"
+ else if (st == "R") label = "\033[31mrevoked\033[0m"
+ else if (st == "E") label = "\033[90munverifiable\033[0m"
+ else label = "\033[90mnone\033[0m"
+ keydisp = (key == "") ? "\033[90m-\033[0m" : "\033[35m" key "\033[0m"
+ printf "%s\033[1;34mSignature:\033[0m %s %s\n", prefix, label, keydisp
+ next
+ }
+ { print }
+ '
}; f | less -R
'';
log-graph-embed = ''
!f() {
- fmt=$(printf '\033[1;34mCommit:\033[0m \033[33m%%h\033[0m \033[91m%%d\033[0m%%n\033[1;34mParents:\033[0m \033[35m%%p\033[0m%%n\033[1;34mAuthor:\033[0m \033[32m%%an\033[0m <\033[96m%%ae\033[0m>%%n\033[1;34mDate:\033[0m \033[36m%%ad (%%ar)\033[0m%%n%%n%%B%%n\033[90m--------------------------------------------------------\033[0m')
- git-graph --model custom --color always --sparse --style round --no-pager --format="$fmt"
+ fmt=$(printf '\033[1;34mCommit:\033[0m \033[33m%%h\033[0m \033[91m%%d\033[0m%%n\x01%%H\x01%%n\033[1;34mParents:\033[0m \033[35m%%p\033[0m%%n\033[1;34mAuthor:\033[0m \033[32m%%an\033[0m <\033[96m%%ae\033[0m>%%n\033[1;34mDate:\033[0m \033[36m%%ad (%%ar)\033[0m%%n%%n%%B%%n\033[90m--------------------------------------------------------\033[0m')
+ git-graph --model custom --color always --sparse --style round --no-pager --format="$fmt" | awk '
+ index($0, "\x01") > 0 {
+ line = $0
+ start = index(line, "\x01")
+ rest = substr(line, start + 1)
+ stop = index(rest, "\x01")
+ hash = substr(rest, 1, stop - 1)
+ prefix = substr(line, 1, start - 1)
+
+ gsub(/\033\[[0-9;]*[a-zA-Z]/, "", hash)
+ gsub(/[^0-9a-fA-F]/, "", hash)
+
+ if (length(hash) >= 7) {
+ cmd = "git log -1 --format=\"%G?|%GK\" " hash " 2>/dev/null"
+ cmd | getline sig
+ close(cmd)
+ split(sig, a, "|")
+ st = a[1]; key = a[2]
+ } else {
+ st = ""; key = ""
+ }
+
+ if (st == "G") label = "\033[32mgood\033[0m"
+ else if (st == "B") label = "\033[31mbad\033[0m"
+ else if (st == "U") label = "\033[33muntrusted\033[0m"
+ else if (st == "X") label = "\033[33mexpired sig\033[0m"
+ else if (st == "Y") label = "\033[33mexpired key\033[0m"
+ else if (st == "R") label = "\033[31mrevoked\033[0m"
+ else if (st == "E") label = "\033[90munverifiable\033[0m"
+ else label = "\033[90mnone\033[0m"
+ keydisp = (key == "") ? "\033[90m-\033[0m" : "\033[35m" key "\033[0m"
+ printf "%s\033[1;34mSignature:\033[0m %s %s\n", prefix, label, keydisp
+ next
+ }
+ { print }
+ '
}; f
'';
};