diff --git a/.aliases/dev-update-default-nix-to-match-flake b/.aliases/dev-update-default-nix-to-match-flake
index fdece2ad..3cb54b28 100755
--- a/.aliases/dev-update-default-nix-to-match-flake
+++ b/.aliases/dev-update-default-nix-to-match-flake
@@ -16,7 +16,8 @@ escape_for_sed() {
echo "$string"
}
-for input in nixpkgs nixpkgs-master; do
+# for input in nixpkgs nixpkgs-master; do
+for input in nixpkgs; do
echo "Processing input: $input"
# Update rev
diff --git a/.aliases/dev-update-nixpkgs-master b/.aliases/dev-update-nixpkgs-master
index 99bb6c0f..974df903 100755
--- a/.aliases/dev-update-nixpkgs-master
+++ b/.aliases/dev-update-nixpkgs-master
@@ -1,11 +1,11 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p nix gnused
-
-set -e
-
-SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-cd "$SCRIPTDIR/.."
-
-nix flake update nixpkgs-master
-
-dev-update-default-nix-to-match-flake
+#
+# set -e
+#
+# SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+# cd "$SCRIPTDIR/.."
+#
+# nix flake update nixpkgs-master
+#
+# dev-update-default-nix-to-match-flake
diff --git a/.aliases/dev-verify-default-nix b/.aliases/dev-verify-default-nix
index 51705b92..811d1995 100755
--- a/.aliases/dev-verify-default-nix
+++ b/.aliases/dev-verify-default-nix
@@ -9,16 +9,16 @@ SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPTDIR/.."
FLAKE_NIXPKGS_REV=$(nix flake metadata --json | jq -r .locks.nodes.nixpkgs.locked.rev)
-FLAKE_NIXPKGS_MASTER_REV=$(nix flake metadata --json | jq -r '.locks.nodes["nixpkgs-master"].locked.rev')
+# FLAKE_NIXPKGS_MASTER_REV=$(nix flake metadata --json | jq -r '.locks.nodes["nixpkgs-master"].locked.rev')
echo "FLAKE_NIXPKGS_REV: '$FLAKE_NIXPKGS_REV'"
-echo "FLAKE_NIXPKGS_MASTER_REV: '$FLAKE_NIXPKGS_MASTER_REV'"
+# echo "FLAKE_NIXPKGS_MASTER_REV: '$FLAKE_NIXPKGS_MASTER_REV'"
DEFAULT_NIXPKGS_REV=$(cat default.nix | grep nixpkgs-rev | cut -d'"' -f2)
-DEFAULT_NIXPKGS_MASTER_REV=$(cat default.nix | grep nixpkgs-master-rev | cut -d'"' -f2)
+# DEFAULT_NIXPKGS_MASTER_REV=$(cat default.nix | grep nixpkgs-master-rev | cut -d'"' -f2)
echo "DEFAULT_NIXPKGS_REV: '$DEFAULT_NIXPKGS_REV'"
-echo "DEFAULT_NIXPKGS_MASTER_REV: '$DEFAULT_NIXPKGS_MASTER_REV'"
+# echo "DEFAULT_NIXPKGS_MASTER_REV: '$DEFAULT_NIXPKGS_MASTER_REV'"
if [ "$FLAKE_NIXPKGS_REV" != "$DEFAULT_NIXPKGS_REV" ]; then
@@ -26,7 +26,7 @@ if [ "$FLAKE_NIXPKGS_REV" != "$DEFAULT_NIXPKGS_REV" ]; then
exit 1
fi
-if [ "$FLAKE_NIXPKGS_MASTER_REV" != "$DEFAULT_NIXPKGS_MASTER_REV" ]; then
- echo "nixpkgs-master rev differed between flake and default.nix"
- exit 1
-fi
+# if [ "$FLAKE_NIXPKGS_MASTER_REV" != "$DEFAULT_NIXPKGS_MASTER_REV" ]; then
+# echo "nixpkgs-master rev differed between flake and default.nix"
+# exit 1
+# fi
diff --git a/FEATURE-MATRIX.md b/FEATURE-MATRIX.md
index d2c6dd08..186707a2 100644
--- a/FEATURE-MATRIX.md
+++ b/FEATURE-MATRIX.md
@@ -40,7 +40,7 @@ Which languages support which notebook and editor features. The graphic version
| Julia | ✅ | ✅ | ✅ | ✅ | ✅ | – | ✅ |
| Octave | – | – | – | – | – | – | – |
| PostgreSQL | – | – | – | – | – | – | – |
-| PyPy | ✅ | ? | ? | ? | ? | ? | ? |
+| PyPy | ✅ | ✅ | ✅ | ✅ | ✅ | – | – |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ | – | – |
| R | ✅ | ✅ | ✅ | ✅ | ✅ | – | – |
| R (Ark) | – | – | – | – | – | – | – |
@@ -60,7 +60,7 @@ Which languages support which notebook and editor features. The graphic version
| Julia | ✅ | – | ✅ | ✅ | ✅ | ✅ |
| Octave | – | – | – | – | – | – |
| PostgreSQL | – | – | – | – | – | – |
-| PyPy | ? | ? | ? | ? | ? | ? |
+| PyPy | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| R | ✅ | – | ✅ | ✅ | ✅ | ✅ |
| R (Ark) | – | – | – | – | – | – |
@@ -80,7 +80,7 @@ Which languages support which notebook and editor features. The graphic version
| Julia | ✅ | ✅ | ✅ |
| Octave | – | – | – |
| PostgreSQL | – | – | – |
-| PyPy | ? | ? | ? |
+| PyPy | – | ✅ | ✅ |
| Python | – | ✅ | ✅ |
| R | ✅ | ✅ | ✅ |
| R (Ark) | – | – | – |
diff --git a/OPTIONS.md b/OPTIONS.md
index 0f355e22..85c247b3 100644
--- a/OPTIONS.md
+++ b/OPTIONS.md
@@ -748,7 +748,7 @@ string
*Type:*
-one of “go”, “go_1_23”, “go_1_24”, “go_1_25”, “go_1_26”, “go_latest”
+one of “go”, “go_1_23”, “go_1_25”, “go_1_26”, “go_1_27”, “go_latest”
@@ -1936,7 +1936,7 @@ false
*Type:*
-one of “python3”, “python311”, “python312”, “python313”
+one of “python3”, “python312”, “python313”, “python314”
@@ -2254,11 +2254,80 @@ one of “rust”, “rust_1_95”
-## language-servers\.spellchecker\.enable
+## language-servers\.spellchecker\.markdown\.enable
-Enable the Markdown spellchecker\.
+**Check Markdown**
+
+Include the Markdown spellchecker (\.md, \.ipynb)\.
+
+
+
+*Type:*
+boolean
+
+
+
+*Default:*
+
+```nix
+true
+```
+
+
+
+## language-servers\.spellchecker\.typst\.enable
+
+
+
+**Check Typst**
+
+Include the Typst spellchecker (\.typ)\.
+
+
+
+*Type:*
+boolean
+
+
+
+*Default:*
+
+```nix
+true
+```
+
+
+
+## language-servers\.spellchecker\.typst\.checkBlockComments
+
+
+
+**Check Typst block comments**
+
+Spellcheck the prose inside Typst block comments (/\* … \*/)\.
+
+
+
+*Type:*
+boolean
+
+
+
+*Default:*
+
+```nix
+false
+```
+
+
+
+## language-servers\.spellchecker\.typst\.checkLineComments
+
+**Check Typst line comments**
+
+Spellcheck the prose inside Typst line comments (// …)\.
@@ -2298,6 +2367,8 @@ string
## shells\.bash\.enable
+
+
Enable the Bash shell\.
diff --git a/codedown.nix b/codedown.nix
index 5a0fdfc2..58e501ad 100644
--- a/codedown.nix
+++ b/codedown.nix
@@ -1,7 +1,7 @@
{ pkgsStableSrc
, pkgsStable
-, pkgsMasterSrc
-, pkgsMaster
+# , pkgsMasterSrc
+# , pkgsMaster
, requiredPackages ? []
, system ? "x86_64-linux"
}:
@@ -29,7 +29,8 @@ rec {
settingsSchemas = lib.mapAttrs (attr: value: value.meta.settingsSchema or []) kernels;
evaluateConfig = callPackage ./nix/evaluate-config.nix {
- inherit pkgsStable pkgsMaster;
+ inherit pkgsStable;
+ # inherit pkgsMaster;
};
everythingConfig = let
@@ -60,7 +61,8 @@ rec {
exporters = everythingEnv.config.builtExporters;
makeEnvironment = callPackage ./nix/makeEnvironment.nix {
- inherit pkgsStable pkgsMaster;
+ inherit pkgsStable;
+ # inherit pkgsMaster;
};
# Which languages support which features, derived from the module evaluation.
@@ -101,5 +103,6 @@ rec {
;
# Exposed so it's easier to compute build dependencies in the presence of IFD
- inherit pkgsStableSrc pkgsStable pkgsMasterSrc pkgsMaster requiredPackages;
+ inherit pkgsStableSrc pkgsStable requiredPackages;
+ # inherit pkgsMasterSrc pkgsMaster;
}
diff --git a/default.nix b/default.nix
index 5f674b9f..b4ca7127 100644
--- a/default.nix
+++ b/default.nix
@@ -6,43 +6,24 @@
}:
let
- stableRev = "f5190b692864072e79a2fb7c52d72d1d57fcb269"; # nixpkgs-rev
+ stableRev = "ca23145d9899c9d4b7f035339e2f21cf3106aa79"; # nixpkgs-rev
stableFetchFromGitHub = fetchFromGitHub {
owner = "NixOS";
repo = "nixpkgs";
rev = stableRev;
- hash = "sha256-6mqKLf7ukajFOrVjO7EH1i37CQOVG22AnuU3wR84xK0="; # nixpkgs-hash
+ hash = "sha256-UxFzpSVQ7zZdd9bPc/sgCkbtSMwJkAKi82tas5FXgFI="; # nixpkgs-hash
};
stableBuiltins = builtins.fetchTarball {
url = ''https://github.com/NixOS/nixpkgs/archive/${stableRev}.tar.gz'';
- sha256 = "1bf470gw2dz5ks06s6wm0c4znbfn0yqknqxm7b2si4gfzqnqlspa"; # nixpkgs-sha256
+ sha256 = "0ll0ay8v6nkbyfi05409ri4fsiha43xp7kynfxfkdvsh4njp64ak"; # nixpkgs-sha256
};
pkgsStableSrc = if fetchFromGitHub != null then stableFetchFromGitHub else stableBuiltins;
pkgsStable = import pkgsStableSrc ({
inherit overlays;
} // (if system == null then {} else { inherit system; }));
- masterRev = "f4d46d85b687293bc8d872010fb66a4f23c23139"; # nixpkgs-master-rev
- masterFetchFromGitHub = fetchFromGitHub {
- owner = "NixOS";
- repo = "nixpkgs";
- rev = masterRev;
- hash = "sha256-j0P9+h7HX67KNlGki6puFfx8xO6wx4Jz23jXg3dpfCw="; # nixpkgs-master-hash
- };
- masterBuiltins = builtins.fetchTarball {
- url = ''https://github.com/NixOS/nixpkgs/archive/${masterRev}.tar.gz'';
- sha256 = "0b3wd5vq7mvqvdrq5ixhxv27rz0mdsm8p92i6v5awpy73vxgshwg"; # nixpkgs-master-sha256
- };
- pkgsMasterSrc = if fetchFromGitHub != null then masterFetchFromGitHub else masterBuiltins;
- pkgsMaster = import pkgsMasterSrc ({
- inherit overlays;
- } // (if system == null then {} else { inherit system; }));
-
in
pkgsStable.callPackage ./codedown.nix {
- inherit
- pkgsStableSrc pkgsStable
- pkgsMasterSrc pkgsMaster
- ;
+ inherit pkgsStableSrc pkgsStable;
}
diff --git a/docs/feature-matrix-dark.svg b/docs/feature-matrix-dark.svg
index a7af3a5d..0d31a659 100644
--- a/docs/feature-matrix-dark.svg
+++ b/docs/feature-matrix-dark.svg
@@ -122,7 +122,7 @@
C++ 23
- 21.1.7
+ 21.1.8
C++ 23 - Jupyter kernel: yes
@@ -210,7 +210,7 @@
Clojure
- 1.12.3.1577
+ 1.12.5.1645
Clojure - Jupyter kernel: yes
@@ -369,7 +369,7 @@
Go
- 1.25.9
+ 1.26.6
Go - Jupyter kernel: yes
@@ -802,50 +802,62 @@
- PyPy - Code completion: unknown
- ?
+ PyPy - Code completion: yes (jedi)
+
+
- PyPy - Hover docs: unknown
- ?
+ PyPy - Hover docs: yes (jedi)
+
+
- PyPy - Signature help: unknown
- ?
+ PyPy - Signature help: yes (jedi)
+
+
- PyPy - Diagnostics: unknown
- ?
+ PyPy - Diagnostics: yes (push)
+
+
- PyPy - Semantic highlighting: unknown
- ?
+ PyPy - Semantic highlighting: no
+
- PyPy - Inlay hints: unknown
- ?
+ PyPy - Inlay hints: no
+
- PyPy - Jump to definition: unknown
- ?
+ PyPy - Jump to definition: yes (jedi)
+
+
- PyPy - Jump to type definition: unknown
- ?
+ PyPy - Jump to type definition: yes (jedi)
+
+
- PyPy - Find references: unknown
- ?
+ PyPy - Find references: yes (jedi)
+
+
- PyPy - Document outline: unknown
- ?
+ PyPy - Document outline: yes (jedi)
+
+
- PyPy - Workspace symbol search: unknown
- ?
+ PyPy - Workspace symbol search: yes (jedi)
+
+
- PyPy - Highlight occurrences: unknown
- ?
+ PyPy - Highlight occurrences: yes (jedi)
+
+
- PyPy - Formatting: unknown
- ?
+ PyPy - Formatting: no
+
- PyPy - Rename symbol: unknown
- ?
+ PyPy - Rename symbol: yes (jedi)
+
+
- PyPy - Code actions: unknown
- ?
+ PyPy - Code actions: yes (jedi)
+
+
PyPy - Subpackage management: yes
@@ -853,7 +865,7 @@
Python
- 3.13.12
+ 3.13.15
Python - Jupyter kernel: yes
@@ -940,7 +952,7 @@
R
- 4.5.1
+ 4.5.3
R - Jupyter kernel: yes
@@ -1285,7 +1297,5 @@
supported
not available
- ?
- not measured
diff --git a/docs/feature-matrix.json b/docs/feature-matrix.json
index 66c70d93..db0467e9 100644
--- a/docs/feature-matrix.json
+++ b/docs/feature-matrix.json
@@ -1 +1 @@
-{"features":[{"description":"Runs notebook cells through a Jupyter kernel.","group":"core","id":"jupyterKernel","name":"Jupyter kernel","source":"nix"},{"description":"Ships an interactive console you can attach to the same session.","group":"core","id":"repl","name":"REPL","source":"nix"},{"description":"Lists the variables currently defined in the session, with drill-down.","group":"core","id":"variableInspector","name":"Variable inspector","source":"nix"},{"description":"Breakpoints and stepping via the Jupyter debug protocol.","group":"core","id":"debugger","name":"Debugger","source":"nix"},{"description":"Editor highlighting for the language.","group":"core","id":"syntaxHighlighting","name":"Syntax highlighting","source":"nix"},{"description":"An LSP server is wired up for notebook cells and files.","group":"intelligence","id":"languageServer","name":"Language server","source":"nix"},{"description":"Context-aware completions as you type.","group":"intelligence","id":"completion","name":"Code completion","source":"lsp"},{"description":"Type and documentation popups on hover.","group":"intelligence","id":"hover","name":"Hover docs","source":"lsp"},{"description":"Parameter hints while calling a function.","group":"intelligence","id":"signatureHelp","name":"Signature help","source":"lsp"},{"description":"Errors, warnings and lints reported inline.","group":"intelligence","id":"diagnostics","name":"Diagnostics","source":"lsp"},{"description":"Highlighting driven by the compiler/analyzer rather than a regex grammar.","group":"intelligence","id":"semanticTokens","name":"Semantic highlighting","source":"lsp"},{"description":"Inferred types and parameter names rendered inline.","group":"intelligence","id":"inlayHints","name":"Inlay hints","source":"lsp"},{"description":"Go from a use of a symbol to where it's defined.","group":"navigation","id":"definition","name":"Jump to definition","source":"lsp"},{"description":"Go from a value to the definition of its type.","group":"navigation","id":"typeDefinition","name":"Jump to type definition","source":"lsp"},{"description":"Find every use of a symbol.","group":"navigation","id":"references","name":"Find references","source":"lsp"},{"description":"Symbol tree for the current document.","group":"navigation","id":"documentSymbols","name":"Document outline","source":"lsp"},{"description":"Search symbols across the whole project.","group":"navigation","id":"workspaceSymbols","name":"Workspace symbol search","source":"lsp"},{"description":"Highlights other occurrences of the symbol under the cursor.","group":"navigation","id":"documentHighlight","name":"Highlight occurrences","source":"lsp"},{"description":"Format a document or a selection.","group":"editing","id":"formatting","name":"Formatting","source":"lsp"},{"description":"Rename a symbol and every reference to it.","group":"editing","id":"rename","name":"Rename symbol","source":"lsp"},{"description":"Quick fixes and refactorings offered on a range.","group":"editing","id":"codeActions","name":"Code actions","source":"lsp"},{"description":"A searchable set of language packages you can add to the environment declaratively.","group":"packages","id":"subPackageManagement","name":"Subpackage management","source":"nix"}],"groups":[{"id":"core","name":"Notebook"},{"id":"intelligence","name":"Code intelligence"},{"id":"navigation","name":"Navigation"},{"id":"editing","name":"Editing"},{"id":"packages","name":"Packages"}],"languages":[{"attrs":["bash"],"componentVersions":{"bash":"5.3p9","bash-kernel":"0.10.0","bash-language-server":"5.6.0"},"description":"GNU Bourne-Again Shell, the de facto standard shell on Linux (for interactive use)","displayName":"Bash","extensions":["sh","bash"],"iconMonochrome":"modules/kernels/bash/gnubash-monochrome.svg","id":"bash","languageServers":{"available":["bash-language-server"],"enabledByDefault":["bash-language-server"],"probed":["bash-language-server"]},"support":{"codeActions":{"detail":"bash-language-server","level":"full"},"completion":{"detail":"bash-language-server","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"bash-language-server","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"bash-language-server","level":"full"},"documentSymbols":{"detail":"bash-language-server","level":"full"},"formatting":{"detail":"bash-language-server","level":"full"},"hover":{"detail":"bash-language-server","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"bash-language-server","level":"full"},"references":{"detail":"bash-language-server","level":"full"},"rename":{"detail":"bash-language-server","level":"full"},"repl":{"detail":"bash","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"shell","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"bash-language-server","level":"full"}},"version":"5.3p9"},{"attrs":["c++23","cpp"],"componentVersions":{"clang":"21.1.7","clangd":"21.1.7","cling":"1.2","std":"c++23","xeus-cling":"0.15.3"},"description":"C language family frontend for LLVM (wrapper script)","displayName":"C++ 23","extensions":["cpp","hpp","cxx","hxx","c","h"],"iconMonochrome":"modules/kernels/cpp/cpp23-monochrome.svg","id":"cpp","languageServers":{"available":["clangd"],"enabledByDefault":["clangd"],"probed":["clangd"]},"support":{"codeActions":{"detail":"clangd","level":"full"},"completion":{"detail":"clangd","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"clangd","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"clangd","level":"full"},"documentSymbols":{"detail":"clangd","level":"full"},"formatting":{"detail":"clangd","level":"full"},"hover":{"detail":"clangd","level":"full"},"inlayHints":{"detail":"clangd","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"clangd","level":"full"},"references":{"detail":"clangd","level":"full"},"rename":{"detail":"clangd","level":"full"},"repl":{"detail":"cling","level":"full"},"semanticTokens":{"detail":"clangd","level":"full"},"signatureHelp":{"detail":"clangd","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"clike","level":"full"},"typeDefinition":{"detail":"clangd","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"clangd","level":"full"}},"version":"21.1.7"},{"attrs":["clojure"],"componentVersions":{"clojure":"1.12.3.1577","clojure-lsp":"2025.08.25-14.21.46"},"description":"Lisp dialect for the JVM","displayName":"Clojure","extensions":["clj"],"iconMonochrome":"modules/kernels/clojure/clojure-monochrome.svg","id":"clojure","languageServers":{"available":["clojure-lsp"],"enabledByDefault":["clojure-lsp"],"probed":["clojure-lsp"]},"support":{"codeActions":{"detail":"clojure-lsp","level":"full"},"completion":{"detail":"clojure-lsp","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"clojure-lsp","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"clojure-lsp","level":"full"},"documentSymbols":{"detail":"clojure-lsp","level":"full"},"formatting":{"detail":"clojure-lsp","level":"full"},"hover":{"detail":"clojure-lsp","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"clojure-lsp","level":"full"},"references":{"detail":"clojure-lsp","level":"full"},"rename":{"detail":"clojure-lsp","level":"full"},"repl":{"detail":"clojure","level":"full"},"semanticTokens":{"detail":"clojure-lsp","level":"full"},"signatureHelp":{"detail":"clojure-lsp","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"clojure","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"clojure-lsp","level":"full"}},"version":"1.12.3.1577"},{"attrs":["coq"],"componentVersions":{"coq":"9.1.1"},"description":"Coq proof assistant","displayName":"Coq","extensions":["v"],"iconMonochrome":"modules/kernels/coq/coq-monochrome.svg","id":"coq","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"coq","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"9.1.1"},{"attrs":["go"],"componentVersions":{"go":"1.25.9","gopls":"0.20.0"},"description":"Go Programming language","displayName":"Go","extensions":["go"],"iconMonochrome":"modules/kernels/go/go-monochrome.svg","id":"go","languageServers":{"available":["gopls"],"enabledByDefault":["gopls"],"probed":["gopls"]},"support":{"codeActions":{"detail":"gopls","level":"full"},"completion":{"detail":"gopls","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"gopls","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"gopls","level":"full"},"documentSymbols":{"detail":"gopls","level":"full"},"formatting":{"detail":"gopls","level":"full"},"hover":{"detail":"gopls","level":"full"},"inlayHints":{"detail":"gopls","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"gopls","level":"full"},"references":{"detail":"gopls","level":"full"},"rename":{"detail":"gopls","level":"full"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":"gopls","level":"full"},"signatureHelp":{"detail":"gopls","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"go","level":"full"},"typeDefinition":{"detail":"gopls","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"gopls","level":"full"}},"version":"1.25.9"},{"attrs":["haskell"],"componentVersions":{"ghc":"9.10.3","haskell-language-server":"2.13.0.0"},"description":"An advanced, purely functional programming language (GHC 9.10.3)","displayName":"Haskell","extensions":["hs"],"iconMonochrome":"modules/kernels/haskell/haskell-monochrome.svg","id":"haskell","languageServers":{"available":["haskell-language-server"],"enabledByDefault":["haskell-language-server"],"probed":["haskell-language-server"]},"support":{"codeActions":{"detail":"haskell-language-server","level":"full"},"completion":{"detail":"haskell-language-server","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"haskell-language-server","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"haskell-language-server","level":"full"},"documentSymbols":{"detail":"haskell-language-server","level":"full"},"formatting":{"detail":"haskell-language-server","level":"full"},"hover":{"detail":"haskell-language-server","level":"full"},"inlayHints":{"detail":"haskell-language-server","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"haskell-language-server","level":"full"},"references":{"detail":"haskell-language-server","level":"full"},"rename":{"detail":"haskell-language-server","level":"full"},"repl":{"detail":"ghci","level":"full"},"semanticTokens":{"detail":"haskell-language-server","level":"full"},"signatureHelp":{"detail":"haskell-language-server","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"haskell","level":"full"},"typeDefinition":{"detail":"haskell-language-server","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"haskell-language-server","level":"full"}},"version":"9.10.3"},{"attrs":["julia"],"componentVersions":{"julia":"1.12.6"},"description":"High-level performance-oriented dynamical language for technical computing","displayName":"Julia","extensions":["jl"],"iconMonochrome":"modules/kernels/julia/julia-monochrome.svg","id":"julia","languageServers":{"available":["LanguageServer"],"enabledByDefault":["LanguageServer"],"probed":["LanguageServer"]},"support":{"codeActions":{"detail":"LanguageServer","level":"full"},"completion":{"detail":"LanguageServer","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"LanguageServer","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"LanguageServer","level":"full"},"documentSymbols":{"detail":"LanguageServer","level":"full"},"formatting":{"detail":"LanguageServer","level":"full"},"hover":{"detail":"LanguageServer","level":"full"},"inlayHints":{"detail":"LanguageServer","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"LanguageServer","level":"full"},"references":{"detail":"LanguageServer","level":"full"},"rename":{"detail":"LanguageServer","level":"full"},"repl":{"detail":"julia","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"LanguageServer","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"julia","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"LanguageServer","level":"full"}},"version":"1.12.6"},{"attrs":["octave"],"componentVersions":{"octave":"11.1.0"},"description":"Scientific Programming Language","displayName":"Octave","extensions":["m"],"iconMonochrome":"modules/kernels/octave/octave-monochrome.svg","id":"octave","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"octave","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"octave","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"11.1.0"},{"attrs":["postgres"],"componentVersions":{"postgres-kernel":"0.1"},"description":"A simple Jupyter kernel for PostgreSQL","displayName":"PostgreSQL","extensions":["sql"],"iconMonochrome":"modules/kernels/postgres/postgresql-monochrome.svg","id":"postgres","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"sql","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"0.1"},{"attrs":["python3","python"],"componentVersions":{"flake8":"7.3.0","jedi-language-server":"0.46.0","pycodestyle":"2.14.0","pylint":"3.3.7","pyright":"1.1.407","python":"7.3.20","python-lsp-server":"1.13.2"},"description":"Fast, compliant alternative implementation of the Python language (3.11)","displayName":"PyPy","extensions":["py"],"iconMonochrome":"modules/kernels/python/python-monochrome.svg","id":"pypy3","languageServers":{"available":["flake8","jedi","microsoft","pycodestyle","pylint","pyright","python-language-server","python-lsp-server"],"enabledByDefault":["jedi"],"probed":[]},"support":{"codeActions":{"detail":null,"level":"unknown"},"completion":{"detail":null,"level":"unknown"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":null,"level":"unknown"},"diagnostics":{"detail":null,"level":"unknown"},"documentHighlight":{"detail":null,"level":"unknown"},"documentSymbols":{"detail":null,"level":"unknown"},"formatting":{"detail":null,"level":"unknown"},"hover":{"detail":null,"level":"unknown"},"inlayHints":{"detail":null,"level":"unknown"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"jedi","level":"full"},"references":{"detail":null,"level":"unknown"},"rename":{"detail":null,"level":"unknown"},"repl":{"detail":"ipython","level":"full"},"semanticTokens":{"detail":null,"level":"unknown"},"signatureHelp":{"detail":null,"level":"unknown"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"python","level":"full"},"typeDefinition":{"detail":null,"level":"unknown"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":null,"level":"unknown"}},"version":"7.3.20"},{"attrs":["python3","python"],"componentVersions":{"flake8":"7.3.0","jedi-language-server":"0.46.0","pycodestyle":"2.14.0","pylint":"3.3.7","pyright":"1.1.407","python":"3.13.12","python-lsp-server":"1.13.2"},"description":"High-level dynamically-typed programming language","displayName":"Python","extensions":["py"],"iconMonochrome":"modules/kernels/python/python-monochrome.svg","id":"python3","languageServers":{"available":["flake8","jedi","microsoft","pycodestyle","pylint","pyright","python-language-server","python-lsp-server"],"enabledByDefault":["jedi"],"probed":["jedi"]},"support":{"codeActions":{"detail":"jedi","level":"full"},"completion":{"detail":"jedi","level":"full"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":"jedi","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"jedi","level":"full"},"documentSymbols":{"detail":"jedi","level":"full"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":"jedi","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"jedi","level":"full"},"references":{"detail":"jedi","level":"full"},"rename":{"detail":"jedi","level":"full"},"repl":{"detail":"ipython","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"jedi","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"python","level":"full"},"typeDefinition":{"detail":"jedi","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"jedi","level":"full"}},"version":"3.13.12"},{"attrs":["r","R"],"componentVersions":{"languageserver":"0.3.16","r":"4.5.1"},"description":"Free software environment for statistical computing and graphics","displayName":"R","extensions":["r"],"iconMonochrome":"modules/kernels/r/r-monochrome.svg","id":"R","languageServers":{"available":["languageserver"],"enabledByDefault":["languageserver"],"probed":["languageserver"]},"support":{"codeActions":{"detail":"languageserver","level":"full"},"completion":{"detail":"languageserver","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"languageserver","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"languageserver","level":"full"},"documentSymbols":{"detail":"languageserver","level":"full"},"formatting":{"detail":"languageserver","level":"full"},"hover":{"detail":"languageserver","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"languageserver","level":"full"},"references":{"detail":"languageserver","level":"full"},"rename":{"detail":"languageserver","level":"full"},"repl":{"detail":"r","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"languageserver","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"r","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"languageserver","level":"full"}},"version":"4.5.1"},{"attrs":["r","R"],"componentVersions":{"ark":"0.1.252","r":"4.5.3"},"description":"Free software environment for statistical computing and graphics","displayName":"R (Ark)","extensions":["r"],"iconMonochrome":"modules/kernels/r-ark/r-monochrome.svg","id":"R-ark","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"r","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"r","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"4.5.3"},{"attrs":["ruby"],"componentVersions":{"iruby":"v0.8.2","ruby":"3.4.9","solargraph":"0.57.0"},"description":"Object-oriented language for quick and easy programming","displayName":"Ruby","extensions":["rb"],"iconMonochrome":"modules/kernels/ruby/ruby-monochrome.svg","id":"ruby","languageServers":{"available":["solargraph"],"enabledByDefault":["solargraph"],"probed":["solargraph"]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":"solargraph","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"solargraph","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"solargraph","level":"full"},"documentSymbols":{"detail":"solargraph","level":"full"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":"solargraph","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"solargraph","level":"full"},"references":{"detail":"solargraph","level":"full"},"rename":{"detail":"solargraph","level":"full"},"repl":{"detail":"irb","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"solargraph","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"ruby","level":"full"},"typeDefinition":{"detail":"solargraph","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"solargraph","level":"full"}},"version":"3.4.9"},{"attrs":["rust"],"componentVersions":{"cargo":"1.95.0","evcxr":"0.21.1","rust":"1.95.0","rust-analyzer":"2026-04-27"},"description":"Safe, concurrent, practical language (wrapper script)","displayName":"Rust","extensions":["rs","rlib"],"iconMonochrome":"modules/kernels/rust/rust-logo-monochrome.svg","id":"rust","languageServers":{"available":["rust-analyzer"],"enabledByDefault":["rust-analyzer"],"probed":["rust-analyzer"]},"support":{"codeActions":{"detail":"rust-analyzer","level":"full"},"completion":{"detail":"rust-analyzer","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"rust-analyzer","level":"full"},"diagnostics":{"detail":"pull + push","level":"full"},"documentHighlight":{"detail":"rust-analyzer","level":"full"},"documentSymbols":{"detail":"rust-analyzer","level":"full"},"formatting":{"detail":"rust-analyzer","level":"full"},"hover":{"detail":"rust-analyzer","level":"full"},"inlayHints":{"detail":"rust-analyzer","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"rust-analyzer","level":"full"},"references":{"detail":"rust-analyzer","level":"full"},"rename":{"detail":"rust-analyzer","level":"full"},"repl":{"detail":"evcxr","level":"full"},"semanticTokens":{"detail":"rust-analyzer","level":"full"},"signatureHelp":{"detail":"rust-analyzer","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"rust","level":"full"},"typeDefinition":{"detail":"rust-analyzer","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"rust-analyzer","level":"full"}},"version":"1.95.0"}],"provenance":{"lsp":"Read from language server `initialize` responses (nix/lsp-capabilities.json, regenerated by scripts/probe-lsp-capabilities).","lspProbedKernels":["R","R-ark","bash","clojure","coq","cpp","go","haskell","julia","octave","postgres","python3","ruby","rust"],"nix":"Evaluated from the codedown-languages module system (nix/feature-matrix.nix)."},"schemaVersion":1}
\ No newline at end of file
+{"features":[{"description":"Runs notebook cells through a Jupyter kernel.","group":"core","id":"jupyterKernel","name":"Jupyter kernel","source":"nix"},{"description":"Ships an interactive console you can attach to the same session.","group":"core","id":"repl","name":"REPL","source":"nix"},{"description":"Lists the variables currently defined in the session, with drill-down.","group":"core","id":"variableInspector","name":"Variable inspector","source":"nix"},{"description":"Breakpoints and stepping via the Jupyter debug protocol.","group":"core","id":"debugger","name":"Debugger","source":"nix"},{"description":"Editor highlighting for the language.","group":"core","id":"syntaxHighlighting","name":"Syntax highlighting","source":"nix"},{"description":"An LSP server is wired up for notebook cells and files.","group":"intelligence","id":"languageServer","name":"Language server","source":"nix"},{"description":"Context-aware completions as you type.","group":"intelligence","id":"completion","name":"Code completion","source":"lsp"},{"description":"Type and documentation popups on hover.","group":"intelligence","id":"hover","name":"Hover docs","source":"lsp"},{"description":"Parameter hints while calling a function.","group":"intelligence","id":"signatureHelp","name":"Signature help","source":"lsp"},{"description":"Errors, warnings and lints reported inline.","group":"intelligence","id":"diagnostics","name":"Diagnostics","source":"lsp"},{"description":"Highlighting driven by the compiler/analyzer rather than a regex grammar.","group":"intelligence","id":"semanticTokens","name":"Semantic highlighting","source":"lsp"},{"description":"Inferred types and parameter names rendered inline.","group":"intelligence","id":"inlayHints","name":"Inlay hints","source":"lsp"},{"description":"Go from a use of a symbol to where it's defined.","group":"navigation","id":"definition","name":"Jump to definition","source":"lsp"},{"description":"Go from a value to the definition of its type.","group":"navigation","id":"typeDefinition","name":"Jump to type definition","source":"lsp"},{"description":"Find every use of a symbol.","group":"navigation","id":"references","name":"Find references","source":"lsp"},{"description":"Symbol tree for the current document.","group":"navigation","id":"documentSymbols","name":"Document outline","source":"lsp"},{"description":"Search symbols across the whole project.","group":"navigation","id":"workspaceSymbols","name":"Workspace symbol search","source":"lsp"},{"description":"Highlights other occurrences of the symbol under the cursor.","group":"navigation","id":"documentHighlight","name":"Highlight occurrences","source":"lsp"},{"description":"Format a document or a selection.","group":"editing","id":"formatting","name":"Formatting","source":"lsp"},{"description":"Rename a symbol and every reference to it.","group":"editing","id":"rename","name":"Rename symbol","source":"lsp"},{"description":"Quick fixes and refactorings offered on a range.","group":"editing","id":"codeActions","name":"Code actions","source":"lsp"},{"description":"A searchable set of language packages you can add to the environment declaratively.","group":"packages","id":"subPackageManagement","name":"Subpackage management","source":"nix"}],"groups":[{"id":"core","name":"Notebook"},{"id":"intelligence","name":"Code intelligence"},{"id":"navigation","name":"Navigation"},{"id":"editing","name":"Editing"},{"id":"packages","name":"Packages"}],"languages":[{"attrs":["bash"],"componentVersions":{"bash":"5.3p9","bash-kernel":"0.10.0","bash-language-server":"5.6.0"},"description":"GNU Bourne-Again Shell, the de facto standard shell on Linux (for interactive use)","displayName":"Bash","extensions":["sh","bash"],"iconMonochrome":"modules/kernels/bash/gnubash-monochrome.svg","id":"bash","languageServers":{"available":["bash-language-server"],"enabledByDefault":["bash-language-server"],"probed":["bash-language-server"]},"support":{"codeActions":{"detail":"bash-language-server","level":"full"},"completion":{"detail":"bash-language-server","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"bash-language-server","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"bash-language-server","level":"full"},"documentSymbols":{"detail":"bash-language-server","level":"full"},"formatting":{"detail":"bash-language-server","level":"full"},"hover":{"detail":"bash-language-server","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"bash-language-server","level":"full"},"references":{"detail":"bash-language-server","level":"full"},"rename":{"detail":"bash-language-server","level":"full"},"repl":{"detail":"bash","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"shell","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"bash-language-server","level":"full"}},"version":"5.3p9"},{"attrs":["c++23","cpp"],"componentVersions":{"clang":"21.1.8","clangd":"21.1.8","cling":"1.2","std":"c++23","xeus-cling":"0.15.3"},"description":"C language family frontend for LLVM (wrapper script)","displayName":"C++ 23","extensions":["cpp","hpp","cxx","hxx","c","h"],"iconMonochrome":"modules/kernels/cpp/cpp23-monochrome.svg","id":"cpp","languageServers":{"available":["clangd"],"enabledByDefault":["clangd"],"probed":["clangd"]},"support":{"codeActions":{"detail":"clangd","level":"full"},"completion":{"detail":"clangd","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"clangd","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"clangd","level":"full"},"documentSymbols":{"detail":"clangd","level":"full"},"formatting":{"detail":"clangd","level":"full"},"hover":{"detail":"clangd","level":"full"},"inlayHints":{"detail":"clangd","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"clangd","level":"full"},"references":{"detail":"clangd","level":"full"},"rename":{"detail":"clangd","level":"full"},"repl":{"detail":"cling","level":"full"},"semanticTokens":{"detail":"clangd","level":"full"},"signatureHelp":{"detail":"clangd","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"clike","level":"full"},"typeDefinition":{"detail":"clangd","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"clangd","level":"full"}},"version":"21.1.8"},{"attrs":["clojure"],"componentVersions":{"clojure":"1.12.5.1645","clojure-lsp":"2026.02.20-16.08.58"},"description":"Lisp dialect for the JVM","displayName":"Clojure","extensions":["clj"],"iconMonochrome":"modules/kernels/clojure/clojure-monochrome.svg","id":"clojure","languageServers":{"available":["clojure-lsp"],"enabledByDefault":["clojure-lsp"],"probed":["clojure-lsp"]},"support":{"codeActions":{"detail":"clojure-lsp","level":"full"},"completion":{"detail":"clojure-lsp","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"clojure-lsp","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"clojure-lsp","level":"full"},"documentSymbols":{"detail":"clojure-lsp","level":"full"},"formatting":{"detail":"clojure-lsp","level":"full"},"hover":{"detail":"clojure-lsp","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"clojure-lsp","level":"full"},"references":{"detail":"clojure-lsp","level":"full"},"rename":{"detail":"clojure-lsp","level":"full"},"repl":{"detail":"clojure","level":"full"},"semanticTokens":{"detail":"clojure-lsp","level":"full"},"signatureHelp":{"detail":"clojure-lsp","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"clojure","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"clojure-lsp","level":"full"}},"version":"1.12.5.1645"},{"attrs":["coq"],"componentVersions":{"coq":"9.1.1"},"description":"Coq proof assistant","displayName":"Coq","extensions":["v"],"iconMonochrome":"modules/kernels/coq/coq-monochrome.svg","id":"coq","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"coq","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"9.1.1"},{"attrs":["go"],"componentVersions":{"go":"1.26.6","gopls":"0.22.0"},"description":"Go Programming language","displayName":"Go","extensions":["go"],"iconMonochrome":"modules/kernels/go/go-monochrome.svg","id":"go","languageServers":{"available":["gopls"],"enabledByDefault":["gopls"],"probed":["gopls"]},"support":{"codeActions":{"detail":"gopls","level":"full"},"completion":{"detail":"gopls","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"gopls","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"gopls","level":"full"},"documentSymbols":{"detail":"gopls","level":"full"},"formatting":{"detail":"gopls","level":"full"},"hover":{"detail":"gopls","level":"full"},"inlayHints":{"detail":"gopls","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"gopls","level":"full"},"references":{"detail":"gopls","level":"full"},"rename":{"detail":"gopls","level":"full"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":"gopls","level":"full"},"signatureHelp":{"detail":"gopls","level":"full"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"go","level":"full"},"typeDefinition":{"detail":"gopls","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"gopls","level":"full"}},"version":"1.26.6"},{"attrs":["haskell"],"componentVersions":{"ghc":"9.10.3","haskell-language-server":"2.13.0.0"},"description":"An advanced, purely functional programming language (GHC 9.10.3)","displayName":"Haskell","extensions":["hs"],"iconMonochrome":"modules/kernels/haskell/haskell-monochrome.svg","id":"haskell","languageServers":{"available":["haskell-language-server"],"enabledByDefault":["haskell-language-server"],"probed":["haskell-language-server"]},"support":{"codeActions":{"detail":"haskell-language-server","level":"full"},"completion":{"detail":"haskell-language-server","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"haskell-language-server","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"haskell-language-server","level":"full"},"documentSymbols":{"detail":"haskell-language-server","level":"full"},"formatting":{"detail":"haskell-language-server","level":"full"},"hover":{"detail":"haskell-language-server","level":"full"},"inlayHints":{"detail":"haskell-language-server","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"haskell-language-server","level":"full"},"references":{"detail":"haskell-language-server","level":"full"},"rename":{"detail":"haskell-language-server","level":"full"},"repl":{"detail":"ghci","level":"full"},"semanticTokens":{"detail":"haskell-language-server","level":"full"},"signatureHelp":{"detail":"haskell-language-server","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"haskell","level":"full"},"typeDefinition":{"detail":"haskell-language-server","level":"full"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":"haskell-language-server","level":"full"}},"version":"9.10.3"},{"attrs":["julia"],"componentVersions":{"julia":"1.12.6"},"description":"High-level performance-oriented dynamical language for technical computing","displayName":"Julia","extensions":["jl"],"iconMonochrome":"modules/kernels/julia/julia-monochrome.svg","id":"julia","languageServers":{"available":["LanguageServer"],"enabledByDefault":["LanguageServer"],"probed":["LanguageServer"]},"support":{"codeActions":{"detail":"LanguageServer","level":"full"},"completion":{"detail":"LanguageServer","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"LanguageServer","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"LanguageServer","level":"full"},"documentSymbols":{"detail":"LanguageServer","level":"full"},"formatting":{"detail":"LanguageServer","level":"full"},"hover":{"detail":"LanguageServer","level":"full"},"inlayHints":{"detail":"LanguageServer","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"LanguageServer","level":"full"},"references":{"detail":"LanguageServer","level":"full"},"rename":{"detail":"LanguageServer","level":"full"},"repl":{"detail":"julia","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"LanguageServer","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"julia","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"LanguageServer","level":"full"}},"version":"1.12.6"},{"attrs":["octave"],"componentVersions":{"octave":"11.1.0"},"description":"Scientific Programming Language","displayName":"Octave","extensions":["m"],"iconMonochrome":"modules/kernels/octave/octave-monochrome.svg","id":"octave","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"octave","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"octave","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"11.1.0"},{"attrs":["postgres"],"componentVersions":{"postgres-kernel":"0.1"},"description":"A simple Jupyter kernel for PostgreSQL","displayName":"PostgreSQL","extensions":["sql"],"iconMonochrome":"modules/kernels/postgres/postgresql-monochrome.svg","id":"postgres","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"console","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"none"},"syntaxHighlighting":{"detail":"sql","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"none"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"0.1"},{"attrs":["python3","python"],"componentVersions":{"flake8":"7.3.0","jedi-language-server":"0.46.0","pycodestyle":"2.14.0","pylint":"4.0.5","pyright":"1.1.411","python":"7.3.20","python-lsp-server":"1.14.0"},"description":"Fast, compliant alternative implementation of the Python language (3.11)","displayName":"PyPy","extensions":["py"],"iconMonochrome":"modules/kernels/python/python-monochrome.svg","id":"pypy3","languageServers":{"available":["flake8","jedi","microsoft","pycodestyle","pylint","pyright","python-language-server","python-lsp-server"],"enabledByDefault":["jedi"],"probed":["jedi"]},"support":{"codeActions":{"detail":"jedi","level":"full"},"completion":{"detail":"jedi","level":"full"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":"jedi","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"jedi","level":"full"},"documentSymbols":{"detail":"jedi","level":"full"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":"jedi","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"jedi","level":"full"},"references":{"detail":"jedi","level":"full"},"rename":{"detail":"jedi","level":"full"},"repl":{"detail":"ipython","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"jedi","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"python","level":"full"},"typeDefinition":{"detail":"jedi","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"jedi","level":"full"}},"version":"7.3.20"},{"attrs":["python3","python"],"componentVersions":{"flake8":"7.3.0","jedi-language-server":"0.46.0","pycodestyle":"2.14.0","pylint":"4.0.5","pyright":"1.1.411","python":"3.13.15","python-lsp-server":"1.14.0"},"description":"High-level dynamically-typed programming language","displayName":"Python","extensions":["py"],"iconMonochrome":"modules/kernels/python/python-monochrome.svg","id":"python3","languageServers":{"available":["flake8","jedi","microsoft","pycodestyle","pylint","pyright","python-language-server","python-lsp-server"],"enabledByDefault":["jedi"],"probed":["jedi"]},"support":{"codeActions":{"detail":"jedi","level":"full"},"completion":{"detail":"jedi","level":"full"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":"jedi","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"jedi","level":"full"},"documentSymbols":{"detail":"jedi","level":"full"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":"jedi","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"jedi","level":"full"},"references":{"detail":"jedi","level":"full"},"rename":{"detail":"jedi","level":"full"},"repl":{"detail":"ipython","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"jedi","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"python","level":"full"},"typeDefinition":{"detail":"jedi","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"jedi","level":"full"}},"version":"3.13.15"},{"attrs":["r","R"],"componentVersions":{"languageserver":"0.3.16","r":"4.5.3"},"description":"Free software environment for statistical computing and graphics","displayName":"R","extensions":["r"],"iconMonochrome":"modules/kernels/r/r-monochrome.svg","id":"R","languageServers":{"available":["languageserver"],"enabledByDefault":["languageserver"],"probed":["languageserver"]},"support":{"codeActions":{"detail":"languageserver","level":"full"},"completion":{"detail":"languageserver","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"languageserver","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"languageserver","level":"full"},"documentSymbols":{"detail":"languageserver","level":"full"},"formatting":{"detail":"languageserver","level":"full"},"hover":{"detail":"languageserver","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"languageserver","level":"full"},"references":{"detail":"languageserver","level":"full"},"rename":{"detail":"languageserver","level":"full"},"repl":{"detail":"r","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"languageserver","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"r","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"languageserver","level":"full"}},"version":"4.5.3"},{"attrs":["r","R"],"componentVersions":{"ark":"0.1.252","r":"4.5.3"},"description":"Free software environment for statistical computing and graphics","displayName":"R (Ark)","extensions":["r"],"iconMonochrome":"modules/kernels/r-ark/r-monochrome.svg","id":"R-ark","languageServers":{"available":[],"enabledByDefault":[],"probed":[]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":null,"level":"none"},"debugger":{"detail":null,"level":"full"},"definition":{"detail":null,"level":"none"},"diagnostics":{"detail":null,"level":"none"},"documentHighlight":{"detail":null,"level":"none"},"documentSymbols":{"detail":null,"level":"none"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":null,"level":"none"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":null,"level":"none"},"references":{"detail":null,"level":"none"},"rename":{"detail":null,"level":"none"},"repl":{"detail":"r","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":null,"level":"none"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"r","level":"full"},"typeDefinition":{"detail":null,"level":"none"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":null,"level":"none"}},"version":"4.5.3"},{"attrs":["ruby"],"componentVersions":{"iruby":"v0.8.2","ruby":"3.4.9","solargraph":"0.57.0"},"description":"Object-oriented language for quick and easy programming","displayName":"Ruby","extensions":["rb"],"iconMonochrome":"modules/kernels/ruby/ruby-monochrome.svg","id":"ruby","languageServers":{"available":["solargraph"],"enabledByDefault":["solargraph"],"probed":["solargraph"]},"support":{"codeActions":{"detail":null,"level":"none"},"completion":{"detail":"solargraph","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"solargraph","level":"full"},"diagnostics":{"detail":"push","level":"full"},"documentHighlight":{"detail":"solargraph","level":"full"},"documentSymbols":{"detail":"solargraph","level":"full"},"formatting":{"detail":null,"level":"none"},"hover":{"detail":"solargraph","level":"full"},"inlayHints":{"detail":null,"level":"none"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"solargraph","level":"full"},"references":{"detail":"solargraph","level":"full"},"rename":{"detail":"solargraph","level":"full"},"repl":{"detail":"irb","level":"full"},"semanticTokens":{"detail":null,"level":"none"},"signatureHelp":{"detail":"solargraph","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"ruby","level":"full"},"typeDefinition":{"detail":"solargraph","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"solargraph","level":"full"}},"version":"3.4.9"},{"attrs":["rust"],"componentVersions":{"cargo":"1.95.0","evcxr":"0.21.1","rust":"1.95.0","rust-analyzer":"2026-06-01"},"description":"Safe, concurrent, practical language (wrapper script)","displayName":"Rust","extensions":["rs","rlib"],"iconMonochrome":"modules/kernels/rust/rust-logo-monochrome.svg","id":"rust","languageServers":{"available":["rust-analyzer"],"enabledByDefault":["rust-analyzer"],"probed":["rust-analyzer"]},"support":{"codeActions":{"detail":"rust-analyzer","level":"full"},"completion":{"detail":"rust-analyzer","level":"full"},"debugger":{"detail":null,"level":"none"},"definition":{"detail":"rust-analyzer","level":"full"},"diagnostics":{"detail":"pull + push","level":"full"},"documentHighlight":{"detail":"rust-analyzer","level":"full"},"documentSymbols":{"detail":"rust-analyzer","level":"full"},"formatting":{"detail":"rust-analyzer","level":"full"},"hover":{"detail":"rust-analyzer","level":"full"},"inlayHints":{"detail":"rust-analyzer","level":"full"},"jupyterKernel":{"detail":null,"level":"full"},"languageServer":{"detail":"rust-analyzer","level":"full"},"references":{"detail":"rust-analyzer","level":"full"},"rename":{"detail":"rust-analyzer","level":"full"},"repl":{"detail":"evcxr","level":"full"},"semanticTokens":{"detail":"rust-analyzer","level":"full"},"signatureHelp":{"detail":"rust-analyzer","level":"full"},"subPackageManagement":{"detail":null,"level":"full"},"syntaxHighlighting":{"detail":"rust","level":"full"},"typeDefinition":{"detail":"rust-analyzer","level":"full"},"variableInspector":{"detail":null,"level":"full"},"workspaceSymbols":{"detail":"rust-analyzer","level":"full"}},"version":"1.95.0"}],"provenance":{"lsp":"Read from language server `initialize` responses (nix/lsp-capabilities.json, regenerated by scripts/probe-lsp-capabilities).","lspProbedKernels":["R","R-ark","bash","clojure","coq","cpp","go","haskell","julia","octave","postgres","pypy3","python3","ruby","rust"],"nix":"Evaluated from the codedown-languages module system (nix/feature-matrix.nix)."},"schemaVersion":1}
\ No newline at end of file
diff --git a/docs/feature-matrix.svg b/docs/feature-matrix.svg
index 88bd936a..9aba1638 100644
--- a/docs/feature-matrix.svg
+++ b/docs/feature-matrix.svg
@@ -122,7 +122,7 @@
C++ 23
- 21.1.7
+ 21.1.8
C++ 23 - Jupyter kernel: yes
@@ -210,7 +210,7 @@
Clojure
- 1.12.3.1577
+ 1.12.5.1645
Clojure - Jupyter kernel: yes
@@ -369,7 +369,7 @@
Go
- 1.25.9
+ 1.26.6
Go - Jupyter kernel: yes
@@ -802,50 +802,62 @@
- PyPy - Code completion: unknown
- ?
+ PyPy - Code completion: yes (jedi)
+
+
- PyPy - Hover docs: unknown
- ?
+ PyPy - Hover docs: yes (jedi)
+
+
- PyPy - Signature help: unknown
- ?
+ PyPy - Signature help: yes (jedi)
+
+
- PyPy - Diagnostics: unknown
- ?
+ PyPy - Diagnostics: yes (push)
+
+
- PyPy - Semantic highlighting: unknown
- ?
+ PyPy - Semantic highlighting: no
+
- PyPy - Inlay hints: unknown
- ?
+ PyPy - Inlay hints: no
+
- PyPy - Jump to definition: unknown
- ?
+ PyPy - Jump to definition: yes (jedi)
+
+
- PyPy - Jump to type definition: unknown
- ?
+ PyPy - Jump to type definition: yes (jedi)
+
+
- PyPy - Find references: unknown
- ?
+ PyPy - Find references: yes (jedi)
+
+
- PyPy - Document outline: unknown
- ?
+ PyPy - Document outline: yes (jedi)
+
+
- PyPy - Workspace symbol search: unknown
- ?
+ PyPy - Workspace symbol search: yes (jedi)
+
+
- PyPy - Highlight occurrences: unknown
- ?
+ PyPy - Highlight occurrences: yes (jedi)
+
+
- PyPy - Formatting: unknown
- ?
+ PyPy - Formatting: no
+
- PyPy - Rename symbol: unknown
- ?
+ PyPy - Rename symbol: yes (jedi)
+
+
- PyPy - Code actions: unknown
- ?
+ PyPy - Code actions: yes (jedi)
+
+
PyPy - Subpackage management: yes
@@ -853,7 +865,7 @@
Python
- 3.13.12
+ 3.13.15
Python - Jupyter kernel: yes
@@ -940,7 +952,7 @@
R
- 4.5.1
+ 4.5.3
R - Jupyter kernel: yes
@@ -1285,7 +1297,5 @@
supported
not available
- ?
- not measured
diff --git a/flake.lock b/flake.lock
index 8cfa03a5..2d6191e0 100644
--- a/flake.lock
+++ b/flake.lock
@@ -17,32 +17,16 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1779930049,
- "narHash": "sha256-6mqKLf7ukajFOrVjO7EH1i37CQOVG22AnuU3wR84xK0=",
+ "lastModified": 1787993413,
+ "narHash": "sha256-UxFzpSVQ7zZdd9bPc/sgCkbtSMwJkAKi82tas5FXgFI=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "f5190b692864072e79a2fb7c52d72d1d57fcb269",
+ "rev": "ca23145d9899c9d4b7f035339e2f21cf3106aa79",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "release-25.11",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs-master": {
- "locked": {
- "lastModified": 1779951496,
- "narHash": "sha256-j0P9+h7HX67KNlGki6puFfx8xO6wx4Jz23jXg3dpfCw=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "f4d46d85b687293bc8d872010fb66a4f23c23139",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "master",
+ "ref": "release-26.05",
"repo": "nixpkgs",
"type": "github"
}
@@ -50,8 +34,7 @@
"root": {
"inputs": {
"flake-utils": "flake-utils",
- "nixpkgs": "nixpkgs",
- "nixpkgs-master": "nixpkgs-master"
+ "nixpkgs": "nixpkgs"
}
}
},
diff --git a/flake.nix b/flake.nix
index 4aa64914..8d04526c 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,23 +1,23 @@
{
description = "CodeDown languages";
- inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-25.11";
- inputs.nixpkgs-master.url = "github:NixOS/nixpkgs/master";
+ inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-26.05";
+ # inputs.nixpkgs-master.url = "github:NixOS/nixpkgs/master";
inputs.flake-utils.url = "github:numtide/flake-utils";
- outputs = { self, nixpkgs, nixpkgs-master, flake-utils }:
+ outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgsStable = import nixpkgs { inherit system; };
- pkgsMaster = import nixpkgs-master { inherit system; };
+ # pkgsMaster = import nixpkgs-master { inherit system; };
codedown = import ./codedown.nix {
pkgsStableSrc = nixpkgs;
inherit pkgsStable;
- pkgsMasterSrc = nixpkgs-master;
- inherit pkgsMaster;
+ # pkgsMasterSrc = nixpkgs-master;
+ # inherit pkgsMaster;
};
sampleOutputs = pkgsStable.callPackage ./nix/sample-outputs.nix { inherit codedown pkgsStable; };
@@ -36,10 +36,10 @@
'') attrs)}
'';
- optionsDoc = pkgsMaster.nixosOptionsDoc {
+ optionsDoc = pkgsStable.nixosOptionsDoc {
# Fold each option's "title" into its description so it survives into the docs.
- options = (import ./nix/fold-option-titles.nix { lib = pkgsMaster.lib; }) (((pkgsMaster.callPackage ./nix/evaluate-config.nix {
- inherit pkgsStable pkgsMaster;
+ options = (import ./nix/fold-option-titles.nix { lib = pkgsStable.lib; }) (((pkgsStable.callPackage ./nix/evaluate-config.nix {
+ inherit pkgsStable;
extraSpecialArgs = {
pkgs = {};
};
@@ -47,7 +47,7 @@
transformOptions = opt: opt // {
# Remove declarations to hide "Declared by" lines
declarations = [];
- } // (pkgsMaster.lib.optionalAttrs (pkgsMaster.lib.head (opt.loc or []) == "_module") {
+ } // (pkgsStable.lib.optionalAttrs (pkgsStable.lib.head (opt.loc or []) == "_module") {
visible = false;
internal = true;
});
@@ -99,7 +99,7 @@
inherit (codedown) packageSearch;
allSettingsSchemas = pkgsStable.callPackage ./nix/all-settings-schemas.nix { inherit (sampleOutputs) sample_environments; };
- jupyter-runner = pkgsMaster.callPackage ./nix/jupyter-runner.nix {};
+ jupyter-runner = pkgsStable.callPackage ./nix/jupyter-runner.nix {};
notebook = with pkgsStable; python3.pkgs.toPythonModule (
python3.pkgs.notebook.overridePythonAttrs (oldAttrs: {
diff --git a/modules/base.nix b/modules/base.nix
index ffe2a837..bc69a23e 100644
--- a/modules/base.nix
+++ b/modules/base.nix
@@ -16,12 +16,12 @@ with lib;
internal = true;
};
- pkgsMaster = mkOption {
- type = types.attrs;
- default = pkgs;
- visible = false;
- internal = true;
- };
+ # pkgsMaster = mkOption {
+ # type = types.attrs;
+ # default = pkgs;
+ # visible = false;
+ # internal = true;
+ # };
builtExporters = mkOption {
type = types.attrsOf types.package;
diff --git a/modules/exporters/nbconvert/module.nix b/modules/exporters/nbconvert/module.nix
index 26391c2e..fa126cd5 100644
--- a/modules/exporters/nbconvert/module.nix
+++ b/modules/exporters/nbconvert/module.nix
@@ -43,7 +43,7 @@ with lib;
};
config = mkIf config.exporters.nbconvert.enable {
- builtExporters.nbconvert = config.pkgsMaster.callPackage ./default.nix {
+ builtExporters.nbconvert = config.pkgs.callPackage ./default.nix {
texliveScheme = config.pkgs.texlive.combined.${config.exporters.nbconvert.texliveScheme};
settings = config.exporters.nbconvert;
diff --git a/modules/exporters/pandoc/module.nix b/modules/exporters/pandoc/module.nix
index 9edc903b..0c9da69d 100644
--- a/modules/exporters/pandoc/module.nix
+++ b/modules/exporters/pandoc/module.nix
@@ -43,7 +43,7 @@ with lib;
};
config = mkIf config.exporters.pandoc.enable {
- builtExporters.pandoc = config.pkgsMaster.callPackage ./default.nix {
+ builtExporters.pandoc = config.pkgs.callPackage ./default.nix {
texliveScheme = config.pkgs.texlive.combined.${config.exporters.pandoc.texliveScheme};
settings = config.exporters.pandoc;
diff --git a/modules/exporters/typst/module.nix b/modules/exporters/typst/module.nix
index a92cdd07..23673076 100644
--- a/modules/exporters/typst/module.nix
+++ b/modules/exporters/typst/module.nix
@@ -58,7 +58,7 @@ in
};
config = mkIf config.exporters.typst.enable {
- builtExporters.typst = config.pkgsMaster.callPackage ./default.nix {
+ builtExporters.typst = config.pkgs.callPackage ./default.nix {
settings = config.exporters.typst;
settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.exporters.typst;
};
diff --git a/modules/kernels/coq/module.nix b/modules/kernels/coq/module.nix
index d223557c..8c801d34 100644
--- a/modules/kernels/coq/module.nix
+++ b/modules/kernels/coq/module.nix
@@ -3,7 +3,7 @@
with lib;
let
- pkgsToUse = config.pkgsMaster;
+ pkgsToUse = config.pkgs;
in
diff --git a/modules/kernels/cpp/module.nix b/modules/kernels/cpp/module.nix
index 37272e8e..207eea46 100644
--- a/modules/kernels/cpp/module.nix
+++ b/modules/kernels/cpp/module.nix
@@ -3,7 +3,11 @@
with lib;
let
- pkgsToUse = config.pkgs;
+ # cling 1.2 is built on clang 18, which segfaults parsing GCC 15's libstdc++ headers, so give
+ # it GCC 14's.
+ pkgsToUse = config.pkgs.extend (_final: prev: {
+ cling = prev.cling.override { gcc-unwrapped = prev.gcc14.cc; };
+ });
in
diff --git a/modules/kernels/go/kernel.nix b/modules/kernels/go/kernel.nix
index d2b021b8..7997d79a 100644
--- a/modules/kernels/go/kernel.nix
+++ b/modules/kernels/go/kernel.nix
@@ -22,6 +22,10 @@ let
};
vendorHash = "sha256-bGaXnd0E6dRNiwvGIn7Ptddrt7dRzPfkPThgHPuL2Vo=";
+
+ # The upstream tests give the kernel a fixed retry budget to come up on a ZMQ port, which
+ # isn't long enough on an emulated or loaded builder. The go suite covers the kernel anyway.
+ doCheck = false;
});
argv = [
diff --git a/modules/kernels/haskell/compilers-stable.nix b/modules/kernels/haskell/compilers-stable.nix
deleted file mode 100644
index 8a941674..00000000
--- a/modules/kernels/haskell/compilers-stable.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ fetchFromGitHub
-, lib
-, libsodium
-, runCommand
-, haskell
-
-, ihaskell-source
-}:
-
-
-{
-}
diff --git a/modules/kernels/haskell/compilers-unstable.nix b/modules/kernels/haskell/compilers.nix
similarity index 100%
rename from modules/kernels/haskell/compilers-unstable.nix
rename to modules/kernels/haskell/compilers.nix
diff --git a/modules/kernels/haskell/module.nix b/modules/kernels/haskell/module.nix
index 565036b6..22865281 100644
--- a/modules/kernels/haskell/module.nix
+++ b/modules/kernels/haskell/module.nix
@@ -76,10 +76,7 @@ in
sha256 = "sha256-2SeTakYt/DPQ7S+uHVOVbL/xAcil7g5OGPIx+ZSKYCA=";
};
- compilers =
- config.pkgs.callPackage ./compilers-stable.nix { inherit ihaskell-source; }
- // config.pkgsMaster.callPackage ./compilers-unstable.nix { inherit ihaskell-source; }
- ;
+ compilers = config.pkgs.callPackage ./compilers.nix { inherit ihaskell-source; };
compilerName = config.kernels.haskell.ghcPackage;
diff --git a/modules/kernels/julia/module.nix b/modules/kernels/julia/module.nix
index d670d345..7f4b47d4 100644
--- a/modules/kernels/julia/module.nix
+++ b/modules/kernels/julia/module.nix
@@ -3,7 +3,7 @@
with lib;
let
- pkgsToUse = config.pkgsMaster;
+ pkgsToUse = config.pkgs;
in
diff --git a/modules/kernels/octave/module.nix b/modules/kernels/octave/module.nix
index 72d6ebe3..00036773 100644
--- a/modules/kernels/octave/module.nix
+++ b/modules/kernels/octave/module.nix
@@ -3,7 +3,7 @@
with lib;
let
- pkgsToUse = config.pkgsMaster;
+ pkgsToUse = config.pkgs;
in
diff --git a/modules/kernels/python/module.nix b/modules/kernels/python/module.nix
index 7ad93b7f..c59a12c2 100644
--- a/modules/kernels/python/module.nix
+++ b/modules/kernels/python/module.nix
@@ -133,10 +133,9 @@ in
"python3"
# "python310"
- "python311"
"python312"
"python313"
- # "python314"
+ "python314"
]
# ++ (builtins.filter (n: builtins.match "^python3[0-9]*$" n != null) (builtins.attrNames config.pkgs))
));
@@ -172,7 +171,8 @@ in
packageOverrides = _pyFinal: pyPrev: {
# Every pylint primer test drives one shared PRIMER_DIRECTORY and reads back the
# comment.txt it writes there, so the pytest-xdist workers overwrite each other's
- # output and one of them reads an empty file. They only run on Python 3.11, and
+ # output and one of them reads an empty file. They only run on the single
+ # interpreter pylint pins them to (PRIMER_CURRENT_INTERPRETER, currently 3.13), and
# they cover pylint's own CI tooling rather than anything we ship.
pylint = pyPrev.pylint.overridePythonAttrs (old: {
disabledTestPaths = (old.disabledTestPaths or []) ++ [
diff --git a/modules/kernels/r-ark/module.nix b/modules/kernels/r-ark/module.nix
index 37e25ed0..05d40598 100644
--- a/modules/kernels/r-ark/module.nix
+++ b/modules/kernels/r-ark/module.nix
@@ -5,7 +5,7 @@ with lib;
let
# Ark requires rustc >= 1.94, which is newer than the stable nixpkgs pin
# ships, so build it (and its R) from the master pin like the Rust kernel.
- pkgsToUse = config.pkgsMaster;
+ pkgsToUse = config.pkgs;
in
diff --git a/modules/kernels/ruby/module.nix b/modules/kernels/ruby/module.nix
index ed0451d8..db67376c 100644
--- a/modules/kernels/ruby/module.nix
+++ b/modules/kernels/ruby/module.nix
@@ -3,7 +3,7 @@
with lib;
let
- pkgs = config.pkgsMaster;
+ pkgs = config.pkgs;
in
diff --git a/modules/kernels/rust/module.nix b/modules/kernels/rust/module.nix
index 810c917e..0a691e71 100644
--- a/modules/kernels/rust/module.nix
+++ b/modules/kernels/rust/module.nix
@@ -17,7 +17,7 @@ let
];
};
- pkgsToUse = config.pkgsMaster;
+ pkgsToUse = config.pkgs;
in
diff --git a/nix/evaluate-config.nix b/nix/evaluate-config.nix
index eb89560c..f14a747f 100644
--- a/nix/evaluate-config.nix
+++ b/nix/evaluate-config.nix
@@ -1,6 +1,6 @@
{ lib
, pkgsStable
-, pkgsMaster
+# , pkgsMaster
, extraSpecialArgs ? {}
}:
@@ -61,7 +61,7 @@ extendedLib.evalModules {
{
config = {
pkgs = pkgsStable;
- inherit pkgsMaster;
+ # inherit pkgsMaster;
};
}
{
diff --git a/nix/lsp-capabilities.json b/nix/lsp-capabilities.json
index 1f7a0f9a..74190fca 100644
--- a/nix/lsp-capabilities.json
+++ b/nix/lsp-capabilities.json
@@ -801,6 +801,64 @@
},
"octave": {},
"postgres": {},
+ "pypy3": {
+ "jedi": {
+ "capabilities": {
+ "codeActionProvider": {
+ "codeActionKinds": [
+ "refactor.inline",
+ "refactor.extract"
+ ]
+ },
+ "completionProvider": {
+ "resolveProvider": true,
+ "triggerCharacters": [
+ ".",
+ "'",
+ "\""
+ ]
+ },
+ "declarationProvider": true,
+ "definitionProvider": true,
+ "documentHighlightProvider": true,
+ "documentSymbolProvider": true,
+ "executeCommandProvider": {
+ "commands": []
+ },
+ "hoverProvider": true,
+ "positionEncoding": "utf-16",
+ "referencesProvider": true,
+ "renameProvider": {
+ "prepareProvider": false
+ },
+ "signatureHelpProvider": {
+ "triggerCharacters": [
+ "(",
+ ","
+ ]
+ },
+ "textDocumentSync": {
+ "change": 2,
+ "openClose": true,
+ "save": true,
+ "willSave": false
+ },
+ "typeDefinitionProvider": true,
+ "workspace": {
+ "fileOperations": {},
+ "workspaceFolders": {
+ "changeNotifications": true,
+ "supported": true
+ }
+ },
+ "workspaceSymbolProvider": {
+ "resolveProvider": false
+ }
+ },
+ "displayName": "Jedi",
+ "version": "0.46.0"
+ }
+ },
"python3": {
"jedi": {
"capabilities": {
diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix
index 1f7ec0b1..e11fd5c0 100644
--- a/nix/makeEnvironment.nix
+++ b/nix/makeEnvironment.nix
@@ -9,7 +9,7 @@
, writeText
, pkgsStable
-, pkgsMaster
+# , pkgsMaster
}:
config:
@@ -18,7 +18,8 @@ with lib;
let
chooseMeta = callPackage ./choose-meta.nix {};
- evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }) config;
+ evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable; }) config;
+ # evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }) config;
removeNonDefaultSettings = callPackage ./remove-non-default-settings.nix {};
# Only used for the channel-level environment settings_schema, which is currently exposed on the
# Nixpkgs-channel overlay makeEnvironment only (see nix/nixpkgs-overlay.nix), not here.
diff --git a/sample_environments.nix b/sample_environments.nix
index 390c7334..3b472866 100644
--- a/sample_environments.nix
+++ b/sample_environments.nix
@@ -37,9 +37,9 @@
julia110 = import ./sample_environments/julia110.nix args;
julia111 = import ./sample_environments/julia111.nix args;
mega = import ./sample_environments/mega.nix args;
- python311 = import ./sample_environments/python311.nix args;
python312 = import ./sample_environments/python312.nix args;
python313 = import ./sample_environments/python313.nix args;
+ python314 = import ./sample_environments/python314.nix args;
python3 = import ./sample_environments/python3.nix args;
} // pkgsStable.lib.optionalAttrs pkgsStable.stdenv.targetPlatform.isLinux {
# PyPy's bootstrap interpreter doesn't build on Darwin: its libffi calls are guarded by
diff --git a/sample_environments/python311.nix b/sample_environments/python314.nix
similarity index 86%
rename from sample_environments/python311.nix
rename to sample_environments/python314.nix
index 96ff6e32..3c7fd697 100644
--- a/sample_environments/python311.nix
+++ b/sample_environments/python314.nix
@@ -3,9 +3,9 @@
}:
codedown.makeEnvironment {
- name = "python311";
+ name = "python314";
- kernels.python3.python3Package = "python311";
+ kernels.python3.python3Package = "python314";
kernels.python3.enable = true;
kernels.python3.packages = [
diff --git a/scripts/update-feature-matrix b/scripts/update-feature-matrix
index ccb2ec4a..a119b2ba 100755
--- a/scripts/update-feature-matrix
+++ b/scripts/update-feature-matrix
@@ -53,17 +53,11 @@ def main():
(DOCS / name).chmod(0o644)
print(f" wrote docs/{name}", flush=True)
- matrix = json.loads((DOCS / "feature-matrix.json").read_text())
- counts = f"{len(matrix['languages'])} languages, {len(matrix['features'])} features"
-
graphic = "\n".join([
"",
' ',
'
',
"",
- "",
- f"_{counts}. See [FEATURE-MATRIX.md](./FEATURE-MATRIX.md) for the same data as "
- "tables, and for how it's generated._",
])
tables = (built / "feature-matrix.md").read_text().strip()
diff --git a/tests/app/Spec/Tests/Python.hs b/tests/app/Spec/Tests/Python.hs
index a27d1b01..6ccc33ef 100644
--- a/tests/app/Spec/Tests/Python.hs
+++ b/tests/app/Spec/Tests/Python.hs
@@ -23,10 +23,9 @@ tests :: LanguageSpec
tests = describe "Python" $ parallel $ do
tests' ("python3", "python3")
-- tests' ("python3", "python310")
- tests' ("python3", "python311")
tests' ("python3", "python312")
tests' ("python3", "python313")
- -- tests' ("python3", "python314")
+ tests' ("python3", "python314")
-- PyPy's bootstrap interpreter doesn't build on Darwin, so there's no kernel to test there.
when (os /= "darwin") pypyTests