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