about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--hm/soispha/conf/git/default.nix12
-rwxr-xr-xhm/soispha/conf/git/scripts/commit19
2 files changed, 30 insertions, 1 deletions
diff --git a/hm/soispha/conf/git/default.nix b/hm/soispha/conf/git/default.nix
index 46f272eb..eda42210 100644
--- a/hm/soispha/conf/git/default.nix
+++ b/hm/soispha/conf/git/default.nix
@@ -2,16 +2,26 @@
   nixosConfig,
   lib,
   config,
+  sysLib,
+  pkgs,
   ...
 }: let
   gitIgnoreFile = ./git_ignore.git;
   gitTemplateFile = ./git_template.git;
+  commit = sysLib.writeShellScriptWithLibraryAndKeepPath {
+    name = "commit";
+    src = ./scripts/commit;
+    dependencies = with pkgs; [
+      git
+      gnused
+    ];
+  };
 in {
   programs.git = {
     enable = true;
     #package = pkgs.gitAndTools.gitFull; # TODO: for git send-email support
     aliases = {
-      cm = "commit --verbose";
+      cm = "!${commit}/bin/commit";
       cmr = "commit --file .git/COMMIT_EDITMSG --edit --verbose";
 
       st = "status";
diff --git a/hm/soispha/conf/git/scripts/commit b/hm/soispha/conf/git/scripts/commit
new file mode 100755
index 00000000..1b497065
--- /dev/null
+++ b/hm/soispha/conf/git/scripts/commit
@@ -0,0 +1,19 @@
+#!/usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.10.0" . %SHELL_LIBRARY_PATH
+
+ROOT="$(git rev-parse --show-toplevel)";
+
+# Take first line from previous commit
+if [ -f "$ROOT/.git/COMMIT_EDITMSG" ]; then
+    sed '1s/\(.*\)\((.*)\)\?\(:.*\)/\1\2: /;1p;d' "$ROOT/.git/COMMIT_EDITMSG" > "$ROOT/.git/COMMIT_TEMPLATE"
+else
+    printf "\n" > "$ROOT/.git/COMMIT_TEMPLATE"
+fi
+sed '1d' "$(git config commit.template)"  >> "$ROOT/.git/COMMIT_TEMPLATE"
+
+git commit --template "$ROOT/.git/COMMIT_TEMPLATE" --verbose "$@"
+
+
+# vim: ft=sh