Kieran's opinionated (and probably slightly dumb) nix config
at main 7.6 kB view raw
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.stdenv.hostPlatform.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}