{/* 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.

C-x C-f /docs/ · manual · man · info · ☾ theme