{/* Auto-generated by nix/lang-eval.nix from etc/lang-eval/jotain-lang-registry.el. /} {/ Refresh with just docs-refresh-lang-matrix. The flake check lang-eval-doc-in-sync verifies this file matches the registry. */}
Language Support
Jotain gives every programming language the same baseline the moment its buffer opens — no language server required:
- Completion — in-buffer completion via corfu + cape (dabbrev, file, keyword).
- Diagnostics — on-the-fly checking via flymake.
- Documentation — echo-area docs via eldoc.
- Navigation — xref, imenu, tree-sitter code folding, and a breadcrumb header line.
- Formatting on save — via apheleia, where a formatter is configured (below).
- Editing hygiene — editorconfig, indentation detection (dtrt-indent), and snippets (tempel).
When a language server is on the project's PATH (Jotain resolves servers from the project's own devenv/environment, not from this config), eglot starts automatically and upgrades completion, documentation, navigation, and diagnostics to semantic LSP, and adds go-to-definition into dependencies, find-references, rename, code actions, and workspace-symbol search. Debugging is provided by dape for the languages with a DAP adapter below.
The table lists the language-specific wiring on top of that baseline. It is the declared standard from the language registry; the live, ground-truth matrix (actual mode routing and which servers are bundled/available) is produced by nix build .#lang-eval-matrix, and a live end-to-end LSP probe by nix build .#lang-eval-live.
| Language | Major mode | Tree-sitter | Language server | Formatter | Debug (DAP) | Snippets | Inlay | Live-probed |
|---|---|---|---|---|---|---|---|---|
| Nix | nix-ts-mode |
✓ | nixd / nil |
nixfmt |
— | — | ✓ | ✓ |
| Python | python-ts-mode |
✓ | basedpyright-langserver / pyright-langserver / pylsp ᵉ |
ruff |
debugpy |
✓ | ✓ | ✓ |
| Rust | rust-ts-mode |
✓ | rust-analyzer |
rustfmt |
codelldb |
✓ | ✓ | — |
| Go | go-ts-mode |
✓ | gopls ᵉ |
goimports |
dlv |
✓ | ✓ | ✓ |
| TypeScript | typescript-ts-mode |
✓ | typescript-language-server ᵉ |
prettier |
— | ✓ | ✓ | ✓ |
| TSX | tsx-ts-mode |
✓ | typescript-language-server ᵉ |
prettier |
— | ✓ | ✓ | — |
| JavaScript | js-ts-mode |
✓ | typescript-language-server ᵉ |
prettier |
— | ✓ | — | — |
| CSS / SCSS | css-ts-mode |
✓ | vscode-css-language-server |
prettier |
— | — | — | — |
| C | c-ts-mode |
✓ | clangd ᵉ |
clang-format |
codelldb |
✓ | ✓ | — |
| C++ | c++-ts-mode |
✓ | clangd ᵉ |
clang-format |
codelldb |
✓ | ✓ | — |
| CUDA | cuda-ts-mode |
✓ | clangd ᵉ |
clang-format |
codelldb |
✓ | ✓ | — |
| Bash / shell | bash-ts-mode |
✓ | bash-language-server |
shfmt |
— | — | — | ✓ |
| Dockerfile | dockerfile-ts-mode |
✓ | docker-langserver ᵉ |
— | — | — | — | ✓ |
| YAML | yaml-ts-mode |
✓ | yaml-language-server |
prettier |
— | — | — | ✓ |
| JSON | json-ts-mode |
✓ | vscode-json-language-server |
prettier |
— | — | — | — |
| TOML | toml-ts-mode |
✓ | taplo |
— | — | — | — | — |
| Zig | zig-ts-mode |
✓ | zls |
zig |
— | — | ✓ | — |
| OCaml | neocaml-mode |
✓ | ocamllsp ᵉ |
ocamlformat |
— | — | ✓ | — |
| Haskell | haskell-ts-mode |
✓ | haskell-language-server-wrapper |
— | — | — | ✓ | — |
| Terraform | terraform-mode |
— | terraform-ls |
— | — | — | — | — |
| CMake | cmake-ts-mode |
✓ | cmake-language-server |
— | — | — | — | — |
| Meson | meson-mode |
— | — | meson |
— | — | — | — |
| QML | qml-ts-mode |
✓ | qmlls ᵉ |
qmlformat |
— | — | — | — |
| LikeC4 | likec4-mode |
— | likec4-lsp / likec4 ᵉ |
— | — | — | — | — |
| HTML | mhtml-ts-mode |
✓ | vscode-html-language-server / html-languageserver ᵉ |
— | — | — | — | — |
| CSV | csv-mode |
— | — | — | — | — | — | — |
| SQL | sql-mode |
— | — | — | — | — | — | — |
| Dune | dune-mode |
— | — | — | — | — | — | — |
| Bazel / Starlark | bazel-build-mode |
— | — | buildifier |
— | — | — | — |
| Structurizr DSL | jotain-structurizr-mode |
— | — | — | — | — | — | — |
| Jinja2 | jinja2-mode |
— | — | — | — | — | — | — |
| Just | just-ts-mode |
✓ | — | — | — | — | — | — |
Notes: ᵉ marks a server set by an explicit eglot-server-programs override in init-prog.el (the rest are eglot's built-in defaults). Live-probed ✓ marks the curated subset checked end-to-end by .#lang-eval-live. Tree-sitter ✓ means a grammar backs the major mode (all grammars ship with the distribution). This page is generated from etc/lang-eval/jotain-lang-registry.el — edit the registry, not this file, then run just docs-refresh-lang-matrix.