{pkgs, ...}: { programs.helix = { enable = true; package = pkgs.unstable.helix; languages = { language-server = { clangd = { command = "clangd"; args = ["--header-insertion=never"]; }; biome = { command = "biome"; args = ["lsp-proxy"]; }; fish_lsp = { command = "fish-lsp"; args = ["start"]; }; slangd = { command = "slangd"; }; }; language = [ { name = "fish"; scope = "source.fish"; auto-format = true; language-servers = [{name = "fish_lsp";}]; } { name = "meson"; scope = "source.meson"; injection-regex = "meson"; comment-token = "#"; indent = { tab-width = 2; unit = " "; }; auto-format = true; formatter = { command = "muon"; args = ["fmt" "-"]; }; } { name = "nix"; scope = "source.nix"; auto-format = true; formatter = { command = "alejandra"; args = ["-q"]; }; } { name = "cpp"; language-servers = ["clangd"]; } { name = "python"; language-servers = ["ruff" "basedpyright"]; } { name = "objc"; scope = "source.objc"; file-types = ["m" "mm" "M"]; injection-regex = "objc"; roots = ["xcodeproj"]; comment-token = "//"; indent = { tab-width = 2; unit = " "; }; language-servers = [{name = "clangd";}]; } { name = "slang"; scope = "source.slang"; file-types = ["slang"]; auto-format = true; language-servers = [{name = "slangd";}]; comment-token = "//"; } # BiomeJS Setup { name = "javascript"; language-servers = [ { name = "typescript-language-server"; except-features = ["format"]; } "biome" ]; auto-format = true; formatter = { command = "biome"; args = ["format" "--stdin-file-path" "a.js"]; }; } { name = "typescript"; language-servers = [ { name = "typescript-language-server"; except-features = ["format"]; } "biome" ]; auto-format = true; formatter = { command = "biome"; args = ["format" "--stdin-file-path" "a.ts"]; }; } { name = "tsx"; auto-format = true; language-servers = [ { name = "typescript-language-server"; except-features = ["format"]; } "biome" ]; formatter = { command = "biome"; args = ["format" "--stdin-file-path" "a.tsx"]; }; } { name = "jsx"; auto-format = true; language-servers = [ { name = "typescript-language-server"; except-features = ["format"]; } "biome" ]; formatter = { command = "biome"; args = ["format" "--stdin-file-path" "a.jsx"]; }; } { name = "json"; language-servers = [ { name = "vscode-json-language-server"; except-features = ["format"]; } "biome" ]; } ]; grammar = [ { name = "objc"; source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-objc"; rev = "18802acf31d0b5c1c1d50bdbc9eb0e1636cab9ed"; }; } { name = "slang"; source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-slang"; rev = "3ed23c04a412a0559162d9cadf96dfff7cb36079"; }; } ]; }; settings = { theme = "base16_terminal"; editor = { auto-format = false; end-of-line-diagnostics = "warning"; true-color = true; color-modes = true; completion-replace = true; rulers = [120]; auto-save = { focus-lost = true; }; bufferline = "multiple"; line-number = "relative"; inline-diagnostics = { cursor-line = "error"; }; statusline = { left = ["mode" "spinner" "spacer" "version-control" "file-name"]; }; file-picker = { git-ignore = true; }; lsp = { display-inlay-hints = true; display-messages = true; }; cursor-shape.insert = "bar"; soft-wrap.enable = true; }; keys = { normal = { C-right = "move_next_word_start"; C-left = "move_prev_word_end"; "=" = ":format"; space = { F = "file_picker_in_current_buffer_directory"; }; g = { f = "no_op"; }; }; insert = { C-right = "move_next_word_start"; C-left = "move_prev_word_end"; }; }; }; }; }