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