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}