this repo has no description
1{
2 pkgs,
3 inputs,
4 config,
5 ...
6}: {
7 programs.gh = {
8 enable = true;
9
10 extensions = with pkgs; [
11 gh-dash
12 gh-eco
13 gh-actions-cache
14 ];
15
16 settings.aliases.co = "pr checkout";
17 settings.aliases.patch = "!patch2pr";
18 settings.version = "1";
19 };
20
21 # manual.manpages.enable = true;
22
23 home.packages = [
24 pkgs.git-absorb
25 (inputs.self.lib.dontCheck inputs.git-branchless.packages.${pkgs.stdenv.hostPlatform.system}.git-branchless)
26 pkgs.git-gone
27 pkgs.git-cliff
28 pkgs.git-revise
29 pkgs.gitAndTools.git-imerge
30 pkgs.prr
31 pkgs.hut
32 pkgs.patch2pr
33 pkgs.revup
34 inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.imbox
35 pkgs.radicle-node
36 ];
37
38 programs.git = {
39 enable = true;
40
41 diff-so-fancy.enable = true;
42 lfs.enable = true;
43
44 attributes = [
45 "*.ex diff=elixir"
46 "*.exs diff=elixir"
47 "mix.lock merge=binary"
48
49 "*.erl diff=erlang"
50 "*.hrl diff=erlang"
51 "rebar.lock merge=binary"
52
53 "*.tex diff=tex"
54
55 "*.rs diff=rust"
56 "Cargo.lock merge=binary"
57
58 "*.css diff=css"
59
60 "*.md diff=markdown"
61
62 "flake.lock merge=binary"
63
64 "yarn.lock merge=binary"
65
66 "*.lockb diff=lockb"
67 ];
68
69 ignores = inputs.self.lib.readFileWithComments ./git/ignore;
70
71 aliases = {
72 b = "branch";
73 ca = "commit --amend";
74 ci = "commit";
75 co = "checkout";
76 rci = "commit --amend --reuse-message HEAD";
77
78 lg = "log --color --graph --abbrev-commit --pretty=simple-oneline";
79
80 squash = "!git rebase -i \"$(git merge-base HEAD \"$(git default-branch)\")\"";
81
82 st = "status -sb";
83 todo = "grep -Ee '\\\\bTODO:?\\\\b'";
84 fixme = "grep -Ee '\\\\bFIX(ME)?:?\\\\b'";
85
86 default-branch = "!git symbolic-ref --short refs/remotes/origin/HEAD | sed 's|^origin/||'";
87
88 cleanup = "!git branch --format=\"%(if:notequals=*)%(HEAD)%(then)%(if:notequals=\${1:-$(git default-branch)})%(refname:lstrip=2)%(then)%(refname:lstrip=2)%(end)%(end)\" --merged \"\$(git default-branch)\" | xargs -rpxL1 git branch -d";
89 };
90
91 extraConfig = {
92 core.commitGraph = true;
93
94 init.defaultBranch = "master";
95
96 user = {
97 name = "Łukasz Jan Niemier";
98 useConfigOnly = true;
99 };
100
101 merge = {
102 ff = false;
103 conflictstyle = "zdiff3";
104 };
105
106 branch.autoSetupRebase = "always";
107
108 commit = {
109 gpgSign = true;
110 verbose = true;
111 cleanup = "scissors";
112 };
113
114 diff = {
115 indentHeuristic = true;
116 algorithm = "histogram";
117 mnemonicPrefix = true;
118 renames = "copies";
119
120 tool = "difftastic";
121
122 markdown.xfuncname = "^(#+\\s+.*)$";
123
124 lockb = {
125 textconv = "${pkgs.bun}/bin/bun";
126 binary = true;
127 };
128 };
129
130 difftool = {
131 prompt = false;
132
133 difftastic.cmd = "${pkgs.difftastic}/bin/difft \"$LOCAL\" \"$REMOTE\"";
134 };
135
136 pager.difftool = true;
137
138 fetch.prune = true;
139
140 tag = {
141 forceSignAnnotated = true;
142 sort = "version:refname";
143 };
144
145 versionsort.suffix = ["" "-rc" "-pre"];
146
147 push = {
148 default = "simple";
149 autoSetupRemote = true;
150 followTags = true;
151 gpgSign = "if-asked";
152 };
153
154 pull = {
155 rebase = true;
156 twohead = "ort";
157 };
158
159 rebase = {
160 autostash = true;
161 autosquash = true;
162 updateRefs = true;
163 };
164
165 url."git@github.com:".pushInsteadOf = ["https://github.com/" "git://github.com/"];
166
167 sendemail = {
168 smtpserver = "${config.programs.msmtp.package}/bin/msmtp";
169 bcc = config.accounts.email.accounts.hauleth.address;
170 annotate = true;
171 };
172
173 maintenance = {
174 # It will ask 1password for access to SSH key/GH token. That is
175 # irritating
176 prefetch.enabled = false;
177 };
178
179 pretty = {
180 simple-oneline = "%C(yellow)%h%C(auto)%d %s [%C(green)%aN <%aE>%C(reset)] (%C(blue)%ar%C(reset))";
181 simple-oneline-sign = "%C(yellow)%h%C(auto)%d %s [%C(green)%aN <%aE>%C(reset)] (%C(blue)%ar%C(reset)) %G?";
182 };
183
184 branchless."revsets.alias".work = "heads(draft())";
185 };
186 };
187}