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