summary refs log tree commit diff stats
path: root/user/settings/git.nix
diff options
context:
space:
mode:
Diffstat (limited to 'user/settings/git.nix')
-rw-r--r--user/settings/git.nix77
1 files changed, 77 insertions, 0 deletions
diff --git a/user/settings/git.nix b/user/settings/git.nix
new file mode 100644
index 00000000..503b9e3f
--- /dev/null
+++ b/user/settings/git.nix
@@ -0,0 +1,77 @@
+{ config, pkgs, ... }:
+
+{
+  home.packages = with pkgs; [
+    gitAndTools.git-extras
+  ];
+  programs.git = {
+    enable = true;
+    userName = "Alan Pearce";
+    userEmail = "alan@alanpearce.eu";
+    extraConfig = {
+      pull = {
+        rebase = true;
+      };
+      push = {
+        default = "current";
+        followTags = true;
+      };
+      rebase = {
+        autosquash = true;
+      };
+      rerere = {
+        enable = true;
+      };
+      diff = {
+        algorithm = "patience";
+        tool = "icdiff";
+      };
+      difftool = {
+        prompt = false;
+      };
+      "difftool.icdiff" = {
+        cmd = "${pkgs.icdiff}/bin/icdiff --line-numbers $LOCAL $REMOTE";
+      };
+      "difftool.sopsdiffer" = {
+        textconf = "${pkgs.sops}/bin/sops -d";
+      };
+      "merge.npm-merge-driver" = {
+        name = "automatically merge npm lockfiles";
+        driver = "npx npm-merge-driver merge %A %O %B %P";
+      };
+      remote = {
+        autoSetupMerge = true;
+      };
+      "branch.master" = {
+        rebase = false;
+      };
+    };
+    signing = {
+      key = "0xCD4BEB92A8D46583";
+    };
+    lfs = {
+      enable = true;
+    };
+    aliases = {
+      authors = "shortlog -s -n";
+      mup = "merge FETCH_HEAD";
+      rup = "rebase FETCH_HEAD";
+      st = "status -sb";
+      ci = "commit";
+      br = "branch";
+      co = "checkout";
+      lasttag = "!sh -c 'git tag --sort=version:refname | grep \"^v\\\\?[0-9]\" | tail -n1'";
+      pending = "!sh -c 'git log --oneline --grep=\"#\" ...$(git lasttag)'";
+      lg = "log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cr) %C(bold blue)<%an> %Cred%d%Creset'";
+      prl = "log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cr) %C(bold blue)<%an> %Cred%d%Creset'  --grep='#'";
+      ignored = "ls-files --others -i --exclude-standard";
+    };
+    ignores = [
+      ".DS_Store"
+      "*_flymake.*"
+      "*~"
+      "\#*\#"
+      ".\#*"
+    ];
+  };
+}