/ modules / common / git.nix
git.nix
 1  {
 2    config,
 3    lib,
 4    pkgs,
 5    ...
 6  }:
 7  let
 8    inherit (lib) enabled merge mkIf;
 9  in
10  {
11    environment.shellAliases = merge {
12      redo = "commit --amend -S";
13      p = "push";
14      pl = "pull";
15      f = "fetch";
16      s = "status";
17      cl = "clone";
18      ad = "add .";
19      cm = "commit -m";
20      lp = "log --pretty=format:'%C(yellow)%h%Creset -%C(red)%an%Creset, %ar : %s'";
21    };
22  
23    environment.systemPackages = [
24      pkgs.git-absorb
25      pkgs.tig
26    ];
27  
28    home-manager.sharedModules = [
29      {
30        programs.git = enabled {
31          userName = "ay-mxn";
32          userEmail = "171892944+ay-mxn@users.noreply.github.com";
33  
34          lfs.enable = true;
35          difftastic.enable = true;
36  
37          extraConfig =
38            merge {
39              init.defaultBranch = "main";
40              commit.verbose = true;
41              log.date = "iso";
42              branch.sort = "-committerdate";
43              pull.rebase = true;
44              push.autoSetupRemote = true;
45              merge.conflictStyle = "zdiff3";
46              rebase.autoSquash = true;
47              rebase.autoStash = true;
48              rebase.updateRefs = true;
49              rerere.enabled = true;
50  
51              alias.recent = "! git branch --sort=-committerdate --format=\"%(committerdate:relative)%09%(refname:short)\" | head -10";
52            }
53            // lib.optionalAttrs config.isDesktop {
54              core.sshCommand = "ssh -i ~/.ssh/id";
55              commit.gpgSign = true;
56              tag.gpgSign = true;
57              gpg.format = "ssh";
58              user.signingKey = "~/.ssh/id";
59            };
60        };
61      }
62    ];
63  }