Kieran's opinionated (and probably slightly dumb) nix config
1{
2 lib,
3 config,
4 pkgs,
5 inputs,
6 ...
7}:
8{
9 options.atelier.apps.helix = {
10 enable = lib.mkEnableOption "Enable helix config";
11 swift = lib.mkEnableOption "Enable Swift support";
12 };
13
14 config = lib.mkIf config.atelier.apps.helix.enable {
15 programs.helix = {
16 enable = true;
17 package = pkgs.evil-helix;
18 extraPackages =
19 with pkgs;
20 [
21 clang-tools # clangd
22 cmake-language-server # neocmakelsp
23 omnisharp-roslyn # OmniSharp
24 gopls
25 jdt-language-server # jdtls
26 typescript-language-server
27 unstable.biome
28 lua-language-server
29 nil # nix
30 nodePackages.intelephense
31 python313Packages.python-lsp-server # pylsp
32 ruby-lsp
33 rust-analyzer
34 nodePackages.bash-language-server
35 taplo
36 vscode-langservers-extracted
37 kotlin-language-server
38 harper
39 inputs.wakatime-ls.packages.${pkgs.system}.default
40 ]
41 ++ lib.optionals config.atelier.apps.helix.swift [
42 sourcekit-lsp
43 unstable.sourcekit-lsp
44 ];
45 settings = {
46 theme = "catppuccin_macchiato";
47 editor = {
48 line-number = "relative";
49 mouse = true;
50 rulers = [ 120 ];
51 true-color = true;
52 completion-replace = true;
53 end-of-line-diagnostics = "hint";
54 color-modes = true;
55 inline-diagnostics.cursor-line = "warning";
56 file-picker.hidden = false;
57 indent-guides = {
58 render = true;
59 character = "╎";
60 skip-levels = 0;
61 };
62 soft-wrap.enable = false;
63 auto-save = {
64 idle-timeout = 300000;
65 };
66 cursor-shape = {
67 normal = "block";
68 insert = "bar";
69 select = "underline";
70 };
71 statusline = {
72 left = [
73 "mode"
74 "spinner"
75 "version-control"
76 "spacer"
77 "separator"
78 "file-name"
79 "read-only-indicator"
80 "file-modification-indicator"
81 ];
82 center = [ ];
83 right = [
84 "diagnostics"
85 "workspace-diagnostics"
86 "position"
87 "total-line-numbers"
88 "position-percentage"
89 "file-encoding"
90 "file-line-ending"
91 "file-type"
92 "register"
93 "selections"
94 ];
95 separator = "│";
96 };
97 };
98 };
99 languages = {
100 language-server = {
101 harper-ls = {
102 command = "${pkgs.harper}/bin/harper-ls";
103 args = [ "--stdio" ];
104 };
105 biome = {
106 command = "${pkgs.unstable.biome}/bin/biome";
107 args = [ "lsp-proxy" ];
108 };
109 wakatime = {
110 command = "wakatime-ls";
111 };
112 };
113 language = [
114 {
115 name = "c";
116 language-servers = [
117 "clangd"
118 "harper-ls"
119 "wakatime"
120 ];
121 }
122 {
123 name = "cmake";
124 language-servers = [
125 "neocmakelsp"
126 "harper-ls"
127 "wakatime"
128 ];
129 }
130 {
131 name = "cpp";
132 language-servers = [
133 "clangd"
134 "harper-ls"
135 "wakatime"
136 ];
137 }
138 {
139 name = "c-sharp";
140 language-servers = [
141 "OmniSharp"
142 "harper-ls"
143 "wakatime"
144 ];
145 }
146 {
147 name = "go";
148 language-servers = [
149 "gopls"
150 "harper-ls"
151 "wakatime"
152 ];
153 }
154 {
155 name = "java";
156 language-servers = [
157 "jdtls"
158 "harper-ls"
159 "wakatime"
160 ];
161 }
162 {
163 name = "javascript";
164 language-servers = [
165 {
166 name = "typescript-language-server";
167 except-features = [ "format" ];
168 }
169 "biome"
170 "harper-ls"
171 "wakatime"
172 ];
173 auto-format = true;
174 }
175 {
176 name = "jsx";
177 language-servers = [
178 {
179 name = "typescript-language-server";
180 except-features = [ "format" ];
181 }
182 "biome"
183 "harper-ls"
184 "wakatime"
185 ];
186 auto-format = true;
187 }
188 {
189 name = "lua";
190 language-servers = [
191 "lua-language-server"
192 "harper-ls"
193 "wakatime"
194 ];
195 }
196 {
197 name = "nix";
198 language-servers = [
199 "nil"
200 "harper-ls"
201 "wakatime"
202 ];
203 }
204 {
205 name = "php";
206 language-servers = [
207 "intelephense"
208 "harper-ls"
209 "wakatime"
210 ];
211 }
212 {
213 name = "python";
214 language-servers = [
215 "pylsp"
216 "harper-ls"
217 "wakatime"
218 ];
219 }
220 {
221 name = "ruby";
222 language-servers = [
223 "ruby-lsp"
224 "harper-ls"
225 "wakatime"
226 ];
227 }
228 {
229 name = "rust";
230 language-servers = [
231 "rust-analyzer"
232 "harper-ls"
233 "wakatime"
234 ];
235 }
236 {
237 name = "bash";
238 language-servers = [
239 "bash-language-server"
240 "harper-ls"
241 "wakatime"
242 ];
243 }
244 {
245 name = "toml";
246 language-servers = [
247 "taplo"
248 "harper-ls"
249 "wakatime"
250 ];
251 }
252 {
253 name = "typescript";
254 language-servers = [
255 {
256 name = "typescript-language-server";
257 except-features = [ "format" ];
258 }
259 "biome"
260 "harper-ls"
261 "wakatime"
262 ];
263 auto-format = true;
264 }
265 {
266 name = "tsx";
267 language-servers = [
268 {
269 name = "typescript-language-server";
270 except-features = [ "format" ];
271 }
272 "biome"
273 "harper-ls"
274 "wakatime"
275 ];
276 auto-format = true;
277 }
278 {
279 name = "json";
280 language-servers = [
281 {
282 name = "vscode-json-language-server";
283 except-features = [ "format" ];
284 }
285 "biome"
286 "wakatime"
287 ];
288 }
289 {
290 name = "kotlin";
291 language-servers = [
292 "kotlin-language-server"
293 "harper-ls"
294 "wakatime"
295 ];
296 }
297 ] ++ lib.optionals config.atelier.apps.helix.swift [
298 {
299 name = "swift";
300 language-servers = [
301 "sourcekit-lsp"
302 "harper-ls"
303 "wakatime"
304 ];
305 }
306 ];
307 };
308 };
309 };
310}