me like nix
1{ ... }: {
2 flake.modules.homeManager.editor =
3 { pkgs, config, ... }:
4 {
5 home.packages = with pkgs; [
6 helix
7 diffnav
8 gh
9 forgejo-cli
10 gh-dash
11 nixfmt
12 nil
13 vscode-json-languageserver
14 ];
15
16 programs.helix = {
17 enable = true;
18 settings = {
19 editor = {
20 bufferline = "multiple";
21 file-picker = {
22 hidden = false;
23 git-ignore = true;
24 };
25 cursor-shape = {
26 insert = "bar";
27 normal = "block";
28 select = "underline";
29 };
30 line-number = "relative";
31 cursorline = true;
32 auto-format = true;
33 end-of-line-diagnostics = "hint";
34 soft-wrap = {
35 enable = true;
36 };
37 lsp = {
38 display-inlay-hints = true;
39 display-messages = true;
40 display-progress-messages = true;
41 };
42 inline-diagnostics = {
43 cursor-line = "hint";
44 };
45 };
46 keys = {
47 normal = {
48 esc = [
49 "keep_primary_selection"
50 "collapse_selection"
51 ];
52 };
53 };
54 };
55 languages = {
56 language-server.rust-analyzer = {
57 config = {
58 check = {
59 command = "clippy";
60 };
61 checkOnSave = true;
62 cargo = {
63 allFeatures = true;
64 };
65 };
66 };
67 language-server.deno-lsp = {
68 command = "deno";
69 args = [ "lsp" ];
70 config.deno.enable = true;
71 };
72
73 language = [
74 {
75 name = "html";
76 formatter = {
77 command = "prettier";
78 args = [
79 "--parser"
80 "html"
81 ];
82 };
83 }
84 {
85 name = "nix";
86 auto-format = true;
87 formatter = {
88 command = "${pkgs.nixfmt}/bin/nixfmt";
89 };
90 }
91 {
92 name = "kotlin";
93 auto-format = true;
94 }
95 {
96 name = "rust";
97 auto-format = true;
98 formatter = {
99 command = "rustfmt";
100 args = [
101 "--edition"
102 "2024"
103 ];
104 };
105 indent = {
106 tab-width = 4;
107 unit = "t";
108 };
109 }
110 {
111 name = "astro";
112 auto-format = true;
113 formatter = {
114 command = "npx";
115 args = [
116 "prettier"
117 "--plugin"
118 "prettier-plugin-astro"
119 "--parser"
120 "astro"
121 ];
122 };
123 }
124 {
125 name = "json";
126 auto-format = true;
127 }
128 {
129 name = "just";
130 auto-format = true;
131 formatter = {
132 command = "just";
133 args = [
134 "--justfile"
135 "/dev/stdin"
136 "--dump"
137 ];
138 };
139 }
140 {
141 name = "toml";
142 auto-format = true;
143 formatter = {
144 command = "taplo";
145 args = [
146 "format"
147 "-"
148 ];
149 };
150 }
151 ];
152 };
153 };
154
155 programs.git = {
156 enable = true;
157 settings = {
158 user = {
159 name = "seanaye";
160 email = "hello@seanaye.ca";
161 };
162 init.defaultBranch = "main";
163 commit.gpgSign = true;
164 gpg.format = "ssh";
165 user.signingKey = "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIOIgEteUEW06dnBHe2z8vNLwz2iMKe8bba6JgMmOUpcBAAAABHNzaDo= sean@framework16";
166 gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers";
167 diff.tool = "diffnav";
168 difftool.prompt = false;
169 "difftool \"diffnav\"".cmd = "diffnav \"$LOCAL\" \"$REMOTE\"";
170 };
171 };
172
173 programs.jujutsu = {
174 enable = true;
175 settings = {
176 user = {
177 email = "hello@seanaye.ca";
178 name = "Sean Aye";
179 };
180 ui."diff-formatter" = ":git";
181 signing = {
182 sign-all = true;
183 behavior = "own";
184 backend = "ssh";
185 key = "${config.home.homeDirectory}/.ssh/id_ed25519_sk_rk";
186 backends.ssh.allowed-signers = "${config.home.homeDirectory}/.ssh/allowed_signers";
187 };
188 };
189 };
190
191 xdg.configFile."jj/conf.d/diffnav.toml".text = ''
192 [[--scope]]
193 --when.commands = ["diff", "show"]
194 [--scope.ui]
195 pager = "diffnav"
196 '';
197
198 xdg.configFile."gh-dash/config.yml".text = ''
199 prSections:
200 - title: My Pull Requests
201 filters: is:open author:@me
202 - title: Review Requested
203 filters: is:open review-requested:@me
204 issuesSections:
205 - title: My Issues
206 filters: is:open author:@me
207 pager:
208 diff: diffnav
209 keybindings:
210 prs:
211 - key: T
212 name: enhance
213 command: >-
214 zellij run -- gh enhance -R {{.RepoName}} {{.PrNumber}}
215 '';
216 };
217}