From 2f8dec791b64c0675890c92a441c3479310f6647 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Fri, 29 May 2026 01:05:50 -0700 Subject: [PATCH 01/10] Bump nixpkgsMaster and bump main nixpkgs to release-25.11 --- default.nix | 12 +- flake.lock | 14 +- flake.nix | 2 +- modules/kernels/bash/default.nix | 6 +- modules/kernels/bash/kernel.nix | 4 +- .../bash/language_server_bash/default.nix | 10 +- .../language_server_clangd/cling-parser.nix | 2 +- modules/kernels/cpp/module.nix | 2 +- modules/kernels/go/kernel.nix | 14 +- modules/kernels/haskell/compilers-stable.nix | 27 ---- .../kernels/haskell/compilers-unstable.nix | 77 ++++++++--- modules/kernels/octave/kernel.nix | 2 +- modules/kernels/octave/octave.nix | 4 +- modules/kernels/postgres/kernel.nix | 10 +- modules/kernels/ruby/default.nix | 6 +- modules/kernels/ruby/iruby/Gemfile | 3 +- modules/kernels/ruby/iruby/Gemfile.lock | 47 ++++--- modules/kernels/ruby/iruby/default.nix | 2 +- modules/kernels/ruby/iruby/gemset.nix | 125 +++++++++++++----- modules/kernels/ruby/module.nix | 8 +- .../diagnostic-languageserver/node-env.nix | 2 +- nix/makeEnvironment.nix | 1 - old_languages/dot/kernel.nix | 4 +- sample_environments.nix | 3 +- sample_environments/julia19.nix | 11 -- sample_environments/ruby_3_3.nix | 10 ++ sample_environments/ruby_3_4.nix | 10 ++ tests/app/Spec/Tests/Julia.hs | 3 - tests/app/Spec/Tests/Ruby.hs | 6 +- 29 files changed, 264 insertions(+), 163 deletions(-) delete mode 100644 sample_environments/julia19.nix create mode 100644 sample_environments/ruby_3_3.nix create mode 100644 sample_environments/ruby_3_4.nix diff --git a/default.nix b/default.nix index eac39519..5f674b9f 100644 --- a/default.nix +++ b/default.nix @@ -6,32 +6,32 @@ }: let - stableRev = "3634657dc244b3e4868a9b37b7243ea33aa786ec"; # nixpkgs-rev + stableRev = "f5190b692864072e79a2fb7c52d72d1d57fcb269"; # nixpkgs-rev stableFetchFromGitHub = fetchFromGitHub { owner = "NixOS"; repo = "nixpkgs"; rev = stableRev; - hash = "sha256-B+oXXmNRTOajmEpzYJDrpZmYRFIBWA/fKCgY5CXCc5M="; # nixpkgs-hash + hash = "sha256-6mqKLf7ukajFOrVjO7EH1i37CQOVG22AnuU3wR84xK0="; # nixpkgs-hash }; stableBuiltins = builtins.fetchTarball { url = ''https://github.com/NixOS/nixpkgs/archive/${stableRev}.tar.gz''; - sha256 = "14vkq8jy861853ghyn01a929i6d5xf860wsak2iyck2icdg1gsh7"; # nixpkgs-sha256 + sha256 = "1bf470gw2dz5ks06s6wm0c4znbfn0yqknqxm7b2si4gfzqnqlspa"; # nixpkgs-sha256 }; pkgsStableSrc = if fetchFromGitHub != null then stableFetchFromGitHub else stableBuiltins; pkgsStable = import pkgsStableSrc ({ inherit overlays; } // (if system == null then {} else { inherit system; })); - masterRev = "bb9c7537288d5410c0661f7762c175beffd75170"; # nixpkgs-master-rev + masterRev = "f4d46d85b687293bc8d872010fb66a4f23c23139"; # nixpkgs-master-rev masterFetchFromGitHub = fetchFromGitHub { owner = "NixOS"; repo = "nixpkgs"; rev = masterRev; - hash = "sha256-W0e4WJk3A1hmKN4AcoYujF9x9yXaReB+L32JoQFbkv8="; # nixpkgs-master-hash + hash = "sha256-j0P9+h7HX67KNlGki6puFfx8xO6wx4Jz23jXg3dpfCw="; # nixpkgs-master-hash }; masterBuiltins = builtins.fetchTarball { url = ''https://github.com/NixOS/nixpkgs/archive/${masterRev}.tar.gz''; - sha256 = "1zwjbc0s32bx5xzf0ifs4pvp2pwc5s37406y51k5h0rpk5cbhisv"; # nixpkgs-master-sha256 + sha256 = "0b3wd5vq7mvqvdrq5ixhxv27rz0mdsm8p92i6v5awpy73vxgshwg"; # nixpkgs-master-sha256 }; pkgsMasterSrc = if fetchFromGitHub != null then masterFetchFromGitHub else masterBuiltins; pkgsMaster = import pkgsMasterSrc ({ diff --git a/flake.lock b/flake.lock index bfa3ec19..8cfa03a5 100644 --- a/flake.lock +++ b/flake.lock @@ -17,27 +17,27 @@ }, "nixpkgs": { "locked": { - "lastModified": 1755208203, - "narHash": "sha256-B+oXXmNRTOajmEpzYJDrpZmYRFIBWA/fKCgY5CXCc5M=", + "lastModified": 1779930049, + "narHash": "sha256-6mqKLf7ukajFOrVjO7EH1i37CQOVG22AnuU3wR84xK0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3634657dc244b3e4868a9b37b7243ea33aa786ec", + "rev": "f5190b692864072e79a2fb7c52d72d1d57fcb269", "type": "github" }, "original": { "owner": "NixOS", - "ref": "release-25.05", + "ref": "release-25.11", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-master": { "locked": { - "lastModified": 1759478436, - "narHash": "sha256-W0e4WJk3A1hmKN4AcoYujF9x9yXaReB+L32JoQFbkv8=", + "lastModified": 1779951496, + "narHash": "sha256-j0P9+h7HX67KNlGki6puFfx8xO6wx4Jz23jXg3dpfCw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bb9c7537288d5410c0661f7762c175beffd75170", + "rev": "f4d46d85b687293bc8d872010fb66a4f23c23139", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6aa0fcb7..388e9eab 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,7 @@ { description = "CodeDown languages"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-25.05"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-25.11"; inputs.nixpkgs-master.url = "github:NixOS/nixpkgs/master"; inputs.flake-utils.url = "github:numtide/flake-utils"; diff --git a/modules/kernels/bash/default.nix b/modules/kernels/bash/default.nix index e3c2cb32..3ec98e0b 100644 --- a/modules/kernels/bash/default.nix +++ b/modules/kernels/bash/default.nix @@ -1,10 +1,10 @@ { callPackage , lib , python3 -, nodePackages , symlinkJoin , bash +, bash-language-server , settings , settingsSchema @@ -47,8 +47,8 @@ symlinkJoin { }; versions = { bash = bash.version; - bash-language-server = nodePackages.bash-language-server.version; - bash_kernel = python3.pkgs.bash_kernel.version; + bash-language-server = bash-language-server.version; + bash-kernel = python3.pkgs.bash-kernel.version; }; inherit packageOptions packageSearch; inherit settingsSchema settings; diff --git a/modules/kernels/bash/kernel.nix b/modules/kernels/bash/kernel.nix index 98928d72..bb96299a 100644 --- a/modules/kernels/bash/kernel.nix +++ b/modules/kernels/bash/kernel.nix @@ -10,10 +10,10 @@ let common = callPackage ../common.nix {}; - python = python3.withPackages (ps: [ps.bash_kernel]); + python = python3.withPackages (ps: [ps.bash-kernel]); # Checks failed on macOS on release-25.05. Disabling them is one option: - # python = python3.withPackages (ps: [(ps.bash_kernel.overrideAttrs (_oldAttrs: { doCheck = false; }))]); + # python = python3.withPackages (ps: [(ps.bash-kernel.overrideAttrs (_oldAttrs: { doCheck = false; }))]); in diff --git a/modules/kernels/bash/language_server_bash/default.nix b/modules/kernels/bash/language_server_bash/default.nix index b6cba2b9..cfa97894 100644 --- a/modules/kernels/bash/language_server_bash/default.nix +++ b/modules/kernels/bash/language_server_bash/default.nix @@ -1,9 +1,9 @@ -{ lib -, runCommand -, callPackage +{ callPackage +, lib , makeWrapper -, nodePackages +, runCommand +, bash-language-server , shellcheck , unixtools @@ -17,7 +17,7 @@ let # will make it fail to hit in the cache.nixos.org and then the user will need # to download pnpm in order to build it. But we submitted an upstream fix to reduce # the closure size; see https://github.com/NixOS/nixpkgs/pull/521755 - bashLanguageServer = nodePackages.bash-language-server; + bashLanguageServer = bash-language-server; # manWithPages = (import ../shared.nix).manWithPages; diff --git a/modules/kernels/cpp/language_server_clangd/cling-parser.nix b/modules/kernels/cpp/language_server_clangd/cling-parser.nix index cf328d3f..09e55679 100644 --- a/modules/kernels/cpp/language_server_clangd/cling-parser.nix +++ b/modules/kernels/cpp/language_server_clangd/cling-parser.nix @@ -17,7 +17,7 @@ let owner = "codedownio"; repo = "cpp-notebook-language-server"; rev = "v${version}"; - hash = "sha256-KGCj8pH38sFIgYEBC7bRycav1+rY8nidzDwC1qM6h5c="; + hash = "sha256-unUZw2fG4ESxg4WIqEI6kkKspq1Bu+v2WzpinL3C17U="; }; sourceRoot = "${src.name}/cling-parser"; diff --git a/modules/kernels/cpp/module.nix b/modules/kernels/cpp/module.nix index 217ffe56..03bcf8bb 100644 --- a/modules/kernels/cpp/module.nix +++ b/modules/kernels/cpp/module.nix @@ -3,7 +3,7 @@ with lib; let - pkgsToUse = config.pkgsMaster; + pkgsToUse = config.pkgs; in diff --git a/modules/kernels/go/kernel.nix b/modules/kernels/go/kernel.nix index e5f59b07..c19c6e89 100644 --- a/modules/kernels/go/kernel.nix +++ b/modules/kernels/go/kernel.nix @@ -1,5 +1,6 @@ { lib , callPackage +, fetchFromGitHub , gophernotes , attrs @@ -12,13 +13,24 @@ with lib; let common = callPackage ../common.nix {}; + gophernotesPatched = gophernotes.overrideAttrs (_oldAttrs: { + src = fetchFromGitHub { + owner = "codedownio"; + repo = "gophernotes"; + rev = "6b18077f97aa913b73093beeb2152b2d51ee64af"; + hash = "sha256-gSD2zUWka3cur5jkv4siYp2gJdxD+00bmJi6BZd0c+c="; # nixpkgs-hash + }; + + vendorHash = "sha256-bGaXnd0E6dRNiwvGIn7Ptddrt7dRzPfkPThgHPuL2Vo="; + }); + in common.makeJupyterKernel { go = { displayName = "Go"; argv = [ - "${gophernotes}/bin/gophernotes" + "${gophernotesPatched}/bin/gophernotes" "{connection_file}" ]; language = head attrs; diff --git a/modules/kernels/haskell/compilers-stable.nix b/modules/kernels/haskell/compilers-stable.nix index 2ee0fa15..8a941674 100644 --- a/modules/kernels/haskell/compilers-stable.nix +++ b/modules/kernels/haskell/compilers-stable.nix @@ -9,31 +9,4 @@ { - ghc96 = haskell.packages.ghc96.override { - overrides = self: super: { - ghc-parser = self.callCabal2nix "ghc-parser" ( - runCommand "ghc-parser-source" {} "cp -r ${ihaskell-source}/ghc-parser $out" - ) {}; - - ipython-kernel = self.callCabal2nix "ipython-kernel" ( - runCommand "ipython-kernel" {} "cp -r ${ihaskell-source}/ipython-kernel $out" - ) {}; - - ihaskell = self.callCabal2nixWithOptions "ihaskell" ihaskell-source "--no-check" {}; - }; - }; - - ghc98 = haskell.packages.ghc98.override { - overrides = self: super: { - ghc-parser = self.callCabal2nix "ghc-parser" ( - runCommand "ghc-parser-source" {} "cp -r ${ihaskell-source}/ghc-parser $out" - ) {}; - - ipython-kernel = self.callCabal2nix "ipython-kernel" ( - runCommand "ipython-kernel" {} "cp -r ${ihaskell-source}/ipython-kernel $out" - ) {}; - - ihaskell = self.callCabal2nixWithOptions "ihaskell" ihaskell-source "--no-check" {}; - }; - }; } diff --git a/modules/kernels/haskell/compilers-unstable.nix b/modules/kernels/haskell/compilers-unstable.nix index ef8dcdb3..1ba86d58 100644 --- a/modules/kernels/haskell/compilers-unstable.nix +++ b/modules/kernels/haskell/compilers-unstable.nix @@ -8,16 +8,16 @@ }: { - ghc910 = let - "ghc-syntax-highlighter_0_0_12_0" = haskell.packages.ghc910.callPackage - ({ mkDerivation, base, ghc-lib-parser_9_10_2_20250515, hspec, hspec-discover, text + ghc96 = let + "ghc-syntax-highlighter_0_0_11_0" = haskell.packages.ghc96.callPackage + ({ mkDerivation, base, ghc-lib-parser, hspec, hspec-discover, text }: mkDerivation { pname = "ghc-syntax-highlighter"; - version = "0.0.12.0"; - sha256 = "sha256-qZ1FkqZIeICogR5QTsILNWaZrnCvt6LLJQq66QnFdGA="; + version = "0.0.11.0"; + sha256 = "sha256-umeX9DNHPNQ3D66C3WPKZyo4NKOl7XyHz61V1QyHW3g="; enableSeparateDataOutput = true; - libraryHaskellDepends = [ base ghc-lib-parser_9_10_2_20250515 text ]; + libraryHaskellDepends = [ base ghc-lib-parser text ]; testHaskellDepends = [ base hspec text ]; testToolDepends = [ hspec-discover ]; description = "Syntax highlighter for Haskell using the lexer of GHC"; @@ -25,7 +25,7 @@ hydraPlatforms = lib.platforms.none; }) {}; in - haskell.packages.ghc910.override { + haskell.packages.ghc96.override { overrides = self: super: { ghc-parser = self.callCabal2nix "ghc-parser" ( runCommand "ghc-parser-source" {} "cp -r ${ihaskell-source}/ghc-parser $out" @@ -37,21 +37,54 @@ ihaskell = self.callCabal2nixWithOptions "ihaskell" ihaskell-source "--no-check" {}; - ghc-lib-parser = self.ghc-lib-parser_9_10_2_20250515; - - # We need a specific un-released version here; see - # https://github.com/ndmitchell/hlint/issues/1613#issuecomment-3231912769 - hlint = let - src = fetchFromGitHub { - owner = "ndmitchell"; - repo = "hlint"; - rev = "7dfba720eaf6fa9bd0b23ae269334559aa722847"; - sha256 = "sha256-niGBdSrkatr+TZCcLYXo4MDg5FyXTYiKQ5K+ZIWSWBs="; - }; - in - self.callCabal2nix "hlint" src {}; - - ghc-syntax-highlighter = ghc-syntax-highlighter_0_0_12_0; + ghc-syntax-highlighter = ghc-syntax-highlighter_0_0_11_0; + }; + }; + + ghc98 = let + "ghc-syntax-highlighter_0_0_11_0" = haskell.packages.ghc98.callPackage + ({ mkDerivation, base, ghc-lib-parser, hspec, hspec-discover, text + }: + mkDerivation { + pname = "ghc-syntax-highlighter"; + version = "0.0.11.0"; + sha256 = "sha256-umeX9DNHPNQ3D66C3WPKZyo4NKOl7XyHz61V1QyHW3g="; + enableSeparateDataOutput = true; + libraryHaskellDepends = [ base ghc-lib-parser text ]; + testHaskellDepends = [ base hspec text ]; + testToolDepends = [ hspec-discover ]; + description = "Syntax highlighter for Haskell using the lexer of GHC"; + license = lib.licenses.bsd3; + hydraPlatforms = lib.platforms.none; + }) {}; + in + haskell.packages.ghc98.override { + overrides = self: super: { + ghc-parser = self.callCabal2nix "ghc-parser" ( + runCommand "ghc-parser-source" {} "cp -r ${ihaskell-source}/ghc-parser $out" + ) {}; + + ipython-kernel = self.callCabal2nix "ipython-kernel" ( + runCommand "ipython-kernel" {} "cp -r ${ihaskell-source}/ipython-kernel $out" + ) {}; + + ihaskell = self.callCabal2nixWithOptions "ihaskell" ihaskell-source "--no-check" {}; + + ghc-syntax-highlighter = ghc-syntax-highlighter_0_0_11_0; + }; + }; + + ghc910 = haskell.packages.ghc910.override { + overrides = self: super: { + ghc-parser = self.callCabal2nix "ghc-parser" ( + runCommand "ghc-parser-source" {} "cp -r ${ihaskell-source}/ghc-parser $out" + ) {}; + + ipython-kernel = self.callCabal2nix "ipython-kernel" ( + runCommand "ipython-kernel" {} "cp -r ${ihaskell-source}/ipython-kernel $out" + ) {}; + + ihaskell = self.callCabal2nixWithOptions "ihaskell" ihaskell-source "--no-check" {}; }; }; diff --git a/modules/kernels/octave/kernel.nix b/modules/kernels/octave/kernel.nix index 71b2848c..aa1eb6e2 100644 --- a/modules/kernels/octave/kernel.nix +++ b/modules/kernels/octave/kernel.nix @@ -68,7 +68,7 @@ let python = runCommand "python" { inherit octave; - python = python3.withPackages (ps: [ps.metakernel octaveKernel] ++ (with ps; [traitlets jupyter_core ipykernel])); + python = python3.withPackages (ps: [ps.metakernel octaveKernel] ++ (with ps; [traitlets jupyter-core ipykernel])); bash = bashInteractive; buildInputs = [makeWrapper]; } '' diff --git a/modules/kernels/octave/octave.nix b/modules/kernels/octave/octave.nix index 5d077efd..30212c4c 100644 --- a/modules/kernels/octave/octave.nix +++ b/modules/kernels/octave/octave.nix @@ -7,8 +7,8 @@ , makeFontsConf , carlito , dejavu_fonts +, font-misc-misc , freefont_ttf -, xorg , epstool , fig2dev @@ -24,7 +24,7 @@ let fontsConf = makeFontsConf { fontDirectories = [ carlito dejavu_fonts - freefont_ttf xorg.fontmiscmisc + freefont_ttf font-misc-misc # liberation_ttf_v1_binary # liberation_ttf_v2_binary ]; diff --git a/modules/kernels/postgres/kernel.nix b/modules/kernels/postgres/kernel.nix index 1aa55e0d..af55b3c7 100644 --- a/modules/kernels/postgres/kernel.nix +++ b/modules/kernels/postgres/kernel.nix @@ -1,7 +1,6 @@ { callPackage , fetchFromGitHub , python3 -, bash , attrs , extensions }: @@ -9,10 +8,13 @@ let common = callPackage ../common.nix {}; - app = python3.pkgs.buildPythonPackage rec { + app = python3.pkgs.buildPythonPackage { pname = "postgres_kernel"; version = "0.1"; + pyproject = true; + build-system = [ python3.pkgs.setuptools ]; + src = fetchFromGitHub { owner = "codedownio"; repo = "postgres_kernel"; @@ -20,13 +22,13 @@ let sha256 = "1cwn3glgwa6gq1hn6bq8b14c8vn2xmjv5wrwsjc5n6ydqkx3qlhf"; }; - propagatedBuildInputs = with python3.pkgs; [jupyter_client psycopg2 tabulate ipykernel]; + propagatedBuildInputs = with python3.pkgs; [jupyter-client psycopg2 tabulate ipykernel]; doCheck = false; meta = { description = "A simple Jupyter kernel for PostgreSQL"; - homepage = https://github.com/bgschiller/postgres_kernel; + homepage = "https://github.com/bgschiller/postgres_kernel"; }; }; diff --git a/modules/kernels/ruby/default.nix b/modules/kernels/ruby/default.nix index 9c063e1d..7f12c073 100644 --- a/modules/kernels/ruby/default.nix +++ b/modules/kernels/ruby/default.nix @@ -1,10 +1,6 @@ { lib , callPackage -, pkgs -, recurseIntoAttrs -, stdenv , symlinkJoin -, writeTextDir , ruby @@ -22,7 +18,7 @@ let kernelName = "ruby"; - rubyPackages = recurseIntoAttrs ruby.gems; + rubyPackages = lib.recurseIntoAttrs ruby.gems; packageOptions = rubyPackages; packageSearch = common.searcher packageOptions; diff --git a/modules/kernels/ruby/iruby/Gemfile b/modules/kernels/ruby/iruby/Gemfile index 9a97b151..db60ff18 100644 --- a/modules/kernels/ruby/iruby/Gemfile +++ b/modules/kernels/ruby/iruby/Gemfile @@ -1,2 +1,3 @@ source 'https://rubygems.org' -gem 'iruby', "0.8.0" +gem 'iruby', "0.8.2" +gem 'ostruct' diff --git a/modules/kernels/ruby/iruby/Gemfile.lock b/modules/kernels/ruby/iruby/Gemfile.lock index 6bab2931..6fed5d89 100644 --- a/modules/kernels/ruby/iruby/Gemfile.lock +++ b/modules/kernels/ruby/iruby/Gemfile.lock @@ -2,42 +2,55 @@ GEM remote: https://rubygems.org/ specs: data_uri (0.1.0) - ffi (1.17.0) + date (3.5.1) + erb (6.0.4) + ffi (1.17.4) ffi-rzmq (2.0.7) ffi-rzmq-core (>= 1.0.7) ffi-rzmq-core (1.0.7) ffi - io-console (0.7.2) - irb (1.14.1) + io-console (0.8.2) + irb (1.18.0) + pp (>= 0.6.0) + prism (>= 1.3.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - iruby (0.8.0) + iruby (0.8.2) data_uri (~> 0.1) ffi-rzmq irb logger mime-types (>= 3.3.1) multi_json (~> 1.11) - native-package-installer - logger (1.6.1) - mime-types (3.5.2) - mime-types-data (~> 3.2015) - mime-types-data (3.2024.0903) - multi_json (1.15.0) - native-package-installer (1.1.9) - psych (5.1.2) + logger (1.7.0) + mime-types (3.7.0) + logger + mime-types-data (~> 3.2025, >= 3.2025.0507) + mime-types-data (3.2026.0414) + multi_json (1.21.1) + ostruct (0.6.3) + pp (0.6.3) + prettyprint + prettyprint (0.2.0) + prism (1.9.0) + psych (5.3.1) + date stringio - rdoc (6.7.0) + rdoc (7.2.0) + erb psych (>= 4.0.0) - reline (0.5.10) + tsort + reline (0.6.3) io-console (~> 0.5) - stringio (3.1.1) + stringio (3.2.0) + tsort (0.2.0) PLATFORMS ruby DEPENDENCIES - iruby (= 0.8.0) + iruby (= 0.8.2) + ostruct BUNDLED WITH - 2.5.16 + 2.7.2 diff --git a/modules/kernels/ruby/iruby/default.nix b/modules/kernels/ruby/iruby/default.nix index 87353c4c..bd88b5b3 100644 --- a/modules/kernels/ruby/iruby/default.nix +++ b/modules/kernels/ruby/iruby/default.nix @@ -30,7 +30,7 @@ let # buildInputs = [ zeromq libtool ]; passthru = { - version = "v0.8.0"; + version = "v0.8.2"; }; meta = with lib; { diff --git a/modules/kernels/ruby/iruby/gemset.nix b/modules/kernels/ruby/iruby/gemset.nix index 6e6ee103..0df7517a 100644 --- a/modules/kernels/ruby/iruby/gemset.nix +++ b/modules/kernels/ruby/iruby/gemset.nix @@ -9,15 +9,35 @@ }; version = "0.1.0"; }; + date = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h0db8r2v5llxdbzkzyllkfniqw9gm092qn7cbaib73v9lw0c3bm"; + type = "gem"; + }; + version = "3.5.1"; + }; + erb = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ncmbdjf2bwmk0jf5cxywns9zbxyfiy4h4p3pzi7yddyjhv81qrq"; + type = "gem"; + }; + version = "6.0.4"; + }; ffi = { groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "07139870npj59jnl8vmk39ja3gdk3fb5z9vc0lf32y2h891hwqsi"; + sha256 = "1kqasqvy8d7r09ri4n6bkdwbk63j7afd9ilsw34nzlgh0qp69ldw"; type = "gem"; }; - version = "1.17.0"; + version = "1.17.4"; }; ffi-rzmq = { dependencies = ["ffi-rzmq-core"]; @@ -46,105 +66,136 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "08d2lx42pa8jjav0lcjbzfzmw61b8imxr9041pva8xzqabrczp7h"; + sha256 = "1k0lk3pwadm2myvpg893n8jshmrf2sigrd4ki15lymy7gixaxqyn"; type = "gem"; }; - version = "0.7.2"; + version = "0.8.2"; }; irb = { - dependencies = ["rdoc" "reline"]; + dependencies = ["pp" "prism" "rdoc" "reline"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1y40dv3caswr81dlsyln6vnmmpzf5jcal2rqjbsglvnkb0xh0xar"; + sha256 = "1qs8a9vprg7s8krgq4s0pygr91hclqqyz98ik15p0m1sf2h5956y"; type = "gem"; }; - version = "1.14.1"; + version = "1.18.0"; }; iruby = { - dependencies = ["data_uri" "ffi-rzmq" "irb" "logger" "mime-types" "multi_json" "native-package-installer"]; + dependencies = ["data_uri" "ffi-rzmq" "irb" "logger" "mime-types" "multi_json"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1nvn52ailvk6cl100s9vryamhi7cj06bdfmadps4q57690bwp2rh"; + sha256 = "11lb7flkqpaff303g6lj9vzdw9zc0s2qmz36a6i4x4qj559bz30n"; type = "gem"; }; - version = "0.8.0"; + version = "0.8.2"; }; logger = { groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0lwncq2rf8gm79g2rcnnyzs26ma1f4wnfjm6gs4zf2wlsdz5in9s"; + sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr"; type = "gem"; }; - version = "1.6.1"; + version = "1.7.0"; }; mime-types = { - dependencies = ["mime-types-data"]; + dependencies = ["logger" "mime-types-data"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1r64z0m5zrn4k37wabfnv43wa6yivgdfk6cf2rpmmirlz889yaf1"; + sha256 = "0mjyxl7c0xzyqdqa8r45hqg7jcw2prp3hkp39mdf223g4hfgdsyw"; type = "gem"; }; - version = "3.5.2"; + version = "3.7.0"; }; mime-types-data = { groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0d5bmxcq87nj6h5rx6b1fkdzq8256yba97s2vlkszpwhc47m9rfs"; + sha256 = "1k28j6ww8rf43r5i8278jvm2cq3pnzsvqm7yqpb4p93kadjlq726"; type = "gem"; }; - version = "3.2024.0903"; + version = "3.2026.0414"; }; multi_json = { groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z"; + sha256 = "1040lr5y2phn7avdyam6zw6ikprlmk77biw3yhclsfwfh0qnl4p6"; + type = "gem"; + }; + version = "1.21.1"; + }; + ostruct = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04nrir9wdpc4izqwqbysxyly8y7hsfr4fsv69rw91lfi9d5fv8lm"; type = "gem"; }; - version = "1.15.0"; + version = "0.6.3"; }; - native-package-installer = { + pp = { + dependencies = ["prettyprint"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0bvr9q7qwbmg9jfg85r1i5l7d0yxlgp0l2jg62j921vm49mipd7v"; + sha256 = "1xlxmg86k5kifci1xvlmgw56x88dmqf04zfzn7zcr4qb8ladal99"; type = "gem"; }; - version = "1.1.9"; + version = "0.6.3"; + }; + prettyprint = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14zicq3plqi217w6xahv7b8f7aj5kpxv1j1w98344ix9h5ay3j9b"; + type = "gem"; + }; + version = "0.2.0"; + }; + prism = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11ggfikcs1lv17nhmhqyyp6z8nq5pkfcj6a904047hljkxm0qlvv"; + type = "gem"; + }; + version = "1.9.0"; }; psych = { - dependencies = ["stringio"]; + dependencies = ["date" "stringio"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0s5383m6004q76xm3lb732bp4sjzb6mxb6rbgn129gy2izsj4wrk"; + sha256 = "0x0r3gc66abv8i4dw0x0370b5hrshjfp6kpp7wbp178cy775fypb"; type = "gem"; }; - version = "5.1.2"; + version = "5.3.1"; }; rdoc = { - dependencies = ["psych"]; + dependencies = ["erb" "psych" "tsort"]; groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0ygk2zk0ky3d88v3ll7qh6xqvbvw5jin0hqdi1xkv1dhaw7myzdi"; + sha256 = "14iiyb4yi1chdzrynrk74xbhmikml3ixgdayjma3p700singfl46"; type = "gem"; }; - version = "6.7.0"; + version = "7.2.0"; }; reline = { dependencies = ["io-console"]; @@ -152,19 +203,29 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0rl1jmxs7pay58l7lkxkrn6nkdpk52k8rvnfwqsd1swjlxlwjq0n"; + sha256 = "0d8q5c4nh2g9pp758kizh8sfrvngynrjlm0i1zn3cnsnfd4v160i"; type = "gem"; }; - version = "0.5.10"; + version = "0.6.3"; }; stringio = { groups = ["default"]; platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "07mfqb40b2wh53k33h91zva78f9zwcdnl85jiq74wnaw2wa6wiak"; + sha256 = "1q92y9627yisykyscv0bdsrrgyaajc2qr56dwlzx7ysgigjv4z63"; + type = "gem"; + }; + version = "3.2.0"; + }; + tsort = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17q8h020dw73wjmql50lqw5ddsngg67jfw8ncjv476l5ys9sfl4n"; type = "gem"; }; - version = "3.1.1"; + version = "0.2.0"; }; } diff --git a/modules/kernels/ruby/module.nix b/modules/kernels/ruby/module.nix index cfc2a79b..bee3c791 100644 --- a/modules/kernels/ruby/module.nix +++ b/modules/kernels/ruby/module.nix @@ -28,10 +28,14 @@ in example = "Ruby version"; type = types.enum ([ "ruby" - "ruby_3_1" - "ruby_3_2" + # "ruby_3_1" # EOL + # "ruby_3_2" # EOL "ruby_3_3" "ruby_3_4" + + # iruby doesn't support yet; upstream has unreleased fix though; see + # https://github.com/SciRuby/iruby/pull/380 + # "ruby_4_0" ]); # ++ (builtins.filter (name: builtins.substring 0 (builtins.stringLength "ruby_") name == "ruby_") # (builtins.attrNames pkgs)) diff --git a/modules/language_servers/diagnostic-languageserver/node-env.nix b/modules/language_servers/diagnostic-languageserver/node-env.nix index bc1e3662..3fab04fc 100644 --- a/modules/language_servers/diagnostic-languageserver/node-env.nix +++ b/modules/language_servers/diagnostic-languageserver/node-env.nix @@ -4,7 +4,7 @@ let # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master - utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux; + utillinux = if pkgs ? util-linux then pkgs.util-linux else pkgs.utillinux; python = if nodejs ? python then nodejs.python else python2; diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index ea84b155..4f257646 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -5,7 +5,6 @@ , linkFarm , runCommand , symlinkJoin -, system , writeTextDir , writeText diff --git a/old_languages/dot/kernel.nix b/old_languages/dot/kernel.nix index 75be65bf..27096f6d 100644 --- a/old_languages/dot/kernel.nix +++ b/old_languages/dot/kernel.nix @@ -25,7 +25,7 @@ let sha256 = "1gmvybwfj6m1sjk1h6350446z3wfnai2062sfs0zgs3lczhflxsc"; }; - buildInputs = with python3.pkgs; [ jupyter_client ipykernel ]; + buildInputs = with python3.pkgs; [ jupyter-client ipykernel ]; propagatedBuildInputs = with python3.pkgs; [ graphviz fontconfig ipykernel ]; @@ -44,7 +44,7 @@ let fontsConf = makeFontsConf { fontDirectories = [ carlito dejavu_fonts - freefont_ttf xorg.fontmiscmisc + freefont_ttf font-misc-misc # liberation_ttf_v1_binary # liberation_ttf_v2_binary ]; diff --git a/sample_environments.nix b/sample_environments.nix index 5734c660..0b404eb0 100644 --- a/sample_environments.nix +++ b/sample_environments.nix @@ -17,7 +17,6 @@ args: { go = import ./sample_environments/go.nix args; julia110 = import ./sample_environments/julia110.nix args; julia111 = import ./sample_environments/julia111.nix args; - julia19 = import ./sample_environments/julia19.nix args; mega = import ./sample_environments/mega.nix args; octave = import ./sample_environments/octave.nix args; postgres = import ./sample_environments/postgres.nix args; @@ -28,6 +27,8 @@ args: { python3 = import ./sample_environments/python3.nix args; r = import ./sample_environments/r.nix args; ruby = import ./sample_environments/ruby.nix args; + ruby_3_3 = import ./sample_environments/ruby_3_3.nix args; + ruby_3_4 = import ./sample_environments/ruby_3_4.nix args; rust = import ./sample_environments/rust.nix args; shells-bash = import ./sample_environments/shells-bash.nix args; shells-fish = import ./sample_environments/shells-fish.nix args; diff --git a/sample_environments/julia19.nix b/sample_environments/julia19.nix deleted file mode 100644 index b4cfc9f4..00000000 --- a/sample_environments/julia19.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ codedown -, ... -}: - -codedown.makeEnvironment { - name = "julia19"; - - kernels.julia.enable = true; - kernels.julia.juliaPackage = "julia_19"; - kernels.julia.packages = ["JSON3" "Plots"]; -} diff --git a/sample_environments/ruby_3_3.nix b/sample_environments/ruby_3_3.nix new file mode 100644 index 00000000..8e5c24fc --- /dev/null +++ b/sample_environments/ruby_3_3.nix @@ -0,0 +1,10 @@ +{ codedown +, ... +}: + +codedown.makeEnvironment { + name = "ruby"; + + kernels.ruby.enable = true; + kernels.ruby.rubyPackage = "ruby_3_3"; +} diff --git a/sample_environments/ruby_3_4.nix b/sample_environments/ruby_3_4.nix new file mode 100644 index 00000000..71a6b191 --- /dev/null +++ b/sample_environments/ruby_3_4.nix @@ -0,0 +1,10 @@ +{ codedown +, ... +}: + +codedown.makeEnvironment { + name = "ruby"; + + kernels.ruby.enable = true; + kernels.ruby.rubyPackage = "ruby_3_4"; +} diff --git a/tests/app/Spec/Tests/Julia.hs b/tests/app/Spec/Tests/Julia.hs index 74486431..5af90cdd 100644 --- a/tests/app/Spec/Tests/Julia.hs +++ b/tests/app/Spec/Tests/Julia.hs @@ -24,9 +24,6 @@ import qualified Spec.Tests.Julia.Diagnostics as Diagnostics tests :: LanguageSpec tests = do - juliaTests "julia_19" - juliaTests "julia_19-bin" - juliaTests "julia_110" juliaTests "julia_110-bin" diff --git a/tests/app/Spec/Tests/Ruby.hs b/tests/app/Spec/Tests/Ruby.hs index a6097e2d..404fb195 100644 --- a/tests/app/Spec/Tests/Ruby.hs +++ b/tests/app/Spec/Tests/Ruby.hs @@ -26,11 +26,11 @@ import TestLib.Types tests :: LanguageSpec tests = describe "Ruby" $ do kernelTests "ruby" - kernelTests "ruby_3_1" - kernelTests "ruby_3_2" + -- kernelTests "ruby_3_1" # EOL + -- kernelTests "ruby_3_2" # EOL kernelTests "ruby_3_3" kernelTests "ruby_3_4" - -- kernelTests "ruby_3_5" + -- kernelTests "ruby_4_0" -- iruby 0.8.2 doesn't support Ruby 4.0 yet kernelName :: Text -> Text kernelName _rubyPackage = "ruby" From 5fe7ba31831067530399cd7e39446a63817fb5ec Mon Sep 17 00:00:00 2001 From: thomasjm Date: Fri, 29 May 2026 01:15:15 -0700 Subject: [PATCH 02/10] Fix warnings about using system --- modules/kernels/cpp/default.nix | 3 +-- modules/kernels/cpp/language_server_clangd/cnls.nix | 4 ++-- modules/kernels/cpp/language_server_clangd/default.nix | 3 +-- modules/kernels/go/default.nix | 3 +-- modules/kernels/go/language-server-gopls/gnls.nix | 4 ++-- .../go/language-server-gopls/language-server-gopls.nix | 3 +-- modules/kernels/haskell/language-server-hls/hnls.nix | 5 ++--- modules/kernels/rust/language_server_rust_analyzer/rnls.nix | 3 +-- sample_environments.nix | 2 +- 9 files changed, 12 insertions(+), 18 deletions(-) diff --git a/modules/kernels/cpp/default.nix b/modules/kernels/cpp/default.nix index 9d5a58a6..ce025d00 100644 --- a/modules/kernels/cpp/default.nix +++ b/modules/kernels/cpp/default.nix @@ -5,7 +5,6 @@ , clang , xeus-cling , llvmPackages -, system , settings , settingsSchema @@ -25,7 +24,7 @@ let languageServers = lib.optionals settings.lsp.clangd.enable [(callPackage ./language_server_clangd { - inherit kernelName llvmPackages system cling; + inherit kernelName llvmPackages cling; settings = settings.lsp.clangd; })]; diff --git a/modules/kernels/cpp/language_server_clangd/cnls.nix b/modules/kernels/cpp/language_server_clangd/cnls.nix index 4f5704f5..41bb0499 100644 --- a/modules/kernels/cpp/language_server_clangd/cnls.nix +++ b/modules/kernels/cpp/language_server_clangd/cnls.nix @@ -1,5 +1,5 @@ { fetchzip -, system +, stdenv }: # Fetch a static binary from GitHub releases @@ -30,4 +30,4 @@ hash = "sha256-UGB6tVuWlMOxskNFdICaVTurdbd95auAMg7Ty4Iawng="; }; # HASHES_END -}.${system} +}.${stdenv.hostPlatform.system} diff --git a/modules/kernels/cpp/language_server_clangd/default.nix b/modules/kernels/cpp/language_server_clangd/default.nix index 340744d5..6a7523db 100644 --- a/modules/kernels/cpp/language_server_clangd/default.nix +++ b/modules/kernels/cpp/language_server_clangd/default.nix @@ -3,7 +3,6 @@ , runCommand , makeWrapper , llvmPackages -, system , cling , kernelName @@ -15,7 +14,7 @@ let clangd = llvmPackages.clang-tools; - cnls = callPackage ./cnls.nix { inherit system; }; + cnls = callPackage ./cnls.nix {}; cnlsVersion = import ./cnls-version.nix; diff --git a/modules/kernels/go/default.nix b/modules/kernels/go/default.nix index ecc31f30..d020f84a 100644 --- a/modules/kernels/go/default.nix +++ b/modules/kernels/go/default.nix @@ -2,7 +2,6 @@ , gopls , lib , symlinkJoin -, system , go @@ -23,7 +22,7 @@ let languageServers = [] ++ lib.optionals settings.lsp.gopls.enable [(callPackage ./language-server-gopls/language-server-gopls.nix { - inherit go attrs kernelName system; + inherit go attrs kernelName; settings = settings.lsp.gopls; })] ; diff --git a/modules/kernels/go/language-server-gopls/gnls.nix b/modules/kernels/go/language-server-gopls/gnls.nix index bbe81f04..ef2fdb43 100644 --- a/modules/kernels/go/language-server-gopls/gnls.nix +++ b/modules/kernels/go/language-server-gopls/gnls.nix @@ -1,5 +1,5 @@ { fetchzip -, system +, stdenv }: # Fetch a static binary from GitHub releases @@ -30,4 +30,4 @@ hash = "sha256-9n1ExuhRLioeGfdQlLTyRCr+P0+YR4yc3BLBd9W2jww="; }; # HASHES_END -}.${system} +}.${stdenv.hostPlatform.system} diff --git a/modules/kernels/go/language-server-gopls/language-server-gopls.nix b/modules/kernels/go/language-server-gopls/language-server-gopls.nix index 753a7abb..4e2880ad 100644 --- a/modules/kernels/go/language-server-gopls/language-server-gopls.nix +++ b/modules/kernels/go/language-server-gopls/language-server-gopls.nix @@ -3,7 +3,6 @@ , runCommand , makeWrapper , pkgs -, system , attrs , kernelName @@ -18,7 +17,7 @@ let gnlsVersion = import ./gnls-version.nix; - gnls = callPackage ./gnls.nix { inherit system; }; + gnls = callPackage ./gnls.nix {}; go-parser = callPackage ./go-parser.nix {}; diff --git a/modules/kernels/haskell/language-server-hls/hnls.nix b/modules/kernels/haskell/language-server-hls/hnls.nix index 3655340d..bda71139 100644 --- a/modules/kernels/haskell/language-server-hls/hnls.nix +++ b/modules/kernels/haskell/language-server-hls/hnls.nix @@ -3,7 +3,6 @@ , fetchzip , lib , stdenv -, system , ghc , snapshot @@ -22,7 +21,7 @@ let cp -r ./. $out ''; }; - mkUrl = ghc: system: "https://github.com/codedownio/haskell-notebook-language-server/releases/download/v${version}/haskell-notebook-language-server-${version}-${ghc}-${system}.tar.gz"; + mkUrl = ghc: sys: "https://github.com/codedownio/haskell-notebook-language-server/releases/download/v${version}/haskell-notebook-language-server-${version}-${ghc}-${sys}.tar.gz"; in { # HASHES_START @@ -138,7 +137,7 @@ let # }; # versions = localFlakeVersions; - desiredVersion = "ghc" + (builtins.replaceStrings ["."] [""] (lib.versions.majorMinor ghc.version)) + "-" + system; + desiredVersion = "ghc" + (builtins.replaceStrings ["."] [""] (lib.versions.majorMinor ghc.version)) + "-" + stdenv.hostPlatform.system; in diff --git a/modules/kernels/rust/language_server_rust_analyzer/rnls.nix b/modules/kernels/rust/language_server_rust_analyzer/rnls.nix index 5ce31952..8cfd0efb 100644 --- a/modules/kernels/rust/language_server_rust_analyzer/rnls.nix +++ b/modules/kernels/rust/language_server_rust_analyzer/rnls.nix @@ -1,6 +1,5 @@ { fetchzip , stdenv -, system }: # Build from source method. Blows up the closure! @@ -46,4 +45,4 @@ hash = "sha256-Krsoh3WLG8TkXKTEtFNCThbCc1UQjlziiDngOgvOtF4="; }; # HASHES_END -}.${system} +}.${stdenv.hostPlatform.system} diff --git a/sample_environments.nix b/sample_environments.nix index 0b404eb0..3d51462d 100644 --- a/sample_environments.nix +++ b/sample_environments.nix @@ -26,9 +26,9 @@ args: { python313 = import ./sample_environments/python313.nix args; python3 = import ./sample_environments/python3.nix args; r = import ./sample_environments/r.nix args; - ruby = import ./sample_environments/ruby.nix args; ruby_3_3 = import ./sample_environments/ruby_3_3.nix args; ruby_3_4 = import ./sample_environments/ruby_3_4.nix args; + ruby = import ./sample_environments/ruby.nix args; rust = import ./sample_environments/rust.nix args; shells-bash = import ./sample_environments/shells-bash.nix args; shells-fish = import ./sample_environments/shells-fish.nix args; From 2a97b2839d7d37705073c978a7d1ed9d83a20b23 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Sat, 30 May 2026 01:27:08 -0700 Subject: [PATCH 03/10] rust: fix rand test failing on darwin --- modules/kernels/rust/evcxr/default.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/kernels/rust/evcxr/default.nix b/modules/kernels/rust/evcxr/default.nix index 02ce91e6..85d2b12a 100644 --- a/modules/kernels/rust/evcxr/default.nix +++ b/modules/kernels/rust/evcxr/default.nix @@ -1,8 +1,10 @@ { callPackage , lib +, libiconv , makeWrapper , python3 , runCommand +, stdenv , CoreServices , Security @@ -72,10 +74,19 @@ evcxr.overrideAttrs (oldAttrs: { buildInputs = [makeWrapper]; + # On Darwin, rustc invokes `cc` for linking at runtime. cc is the Nix + # clang wrapper, which only adds library paths it has been told about + # via NIX_LDFLAGS_. libiconv is normally pulled in by stdenv + # buildInputs during a Nix build, but evcxr links user code at *runtime* + # outside any derivation, so the wrapper sees no NIX_LDFLAGS and rustc + # ends up emitting `-liconv` with no `-L` for it. Bake the libiconv + # path into the wrapper here so runtime linking finds it. makeWrapperArgs = [ "--set" "CARGO_HOME" "${cargoHome packages}" "--set" "EVCXR_CONFIG_DIR" "${evcxrConfigDir packages}" "--prefix" "PATH" ":" "${lib.makeBinPath [rustc cargo]}" + ] ++ lib.optionals stdenv.isDarwin [ + "--set" "NIX_LDFLAGS_${stdenv.cc.suffixSalt}" "-L${lib.getLib libiconv}/lib" ]; passthru = { From a7784d4bea27e1cfb5d9620f983c55450639d010 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Sat, 30 May 2026 01:36:38 -0700 Subject: [PATCH 04/10] rust: fix another failure on darwin, closes #83 --- tests/app/Spec/Tests/Rust/Diagnostics.hs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/app/Spec/Tests/Rust/Diagnostics.hs b/tests/app/Spec/Tests/Rust/Diagnostics.hs index 36df9e16..5195c1bc 100644 --- a/tests/app/Spec/Tests/Rust/Diagnostics.hs +++ b/tests/app/Spec/Tests/Rust/Diagnostics.hs @@ -20,15 +20,16 @@ tests = describe "Diagnostics" $ do , (Range (Position 0 0) (Position 0 8), Nothing, "a macro with a similar name exists: `println`") ] - testDiagnostics "rust-analyzer" "test.rs" LanguageKind_Rust [__i|struct A { a: u8, b: u8 } - const a: A = A { a: 10, }; - |] $ \diagnostics -> do - assertDiagnosticRanges' (L.sortBy (compare `on` (^. LSP.message)) diagnostics) [ - (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing field `b` in initializer of `A`\nmissing `b`") - -- (Range (Position 1 6) (Position 1 7), Just (InR "non_upper_case_globals"), "Constant `a` should have UPPER_SNAKE_CASE name, e.g. `A`") - -- , (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing field `b` in initializer of `A`\nmissing `b`") - -- , (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing structure fields:\n- b\n") - ] + testDiagnosticsLabel "rust-analyzer, test.rs with missing struct field" "rust-analyzer" "test.rs" LanguageKind_Rust + [__i|struct A { a: u8, b: u8 } + const a: A = A { a: 10, }; + |] $ \diagnostics -> + assertDiagnosticRanges' (L.sortBy (compare `on` (^. LSP.message)) diagnostics) [ + (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing field `b` in initializer of `A`\nmissing `b`") + -- (Range (Position 1 6) (Position 1 7), Just (InR "non_upper_case_globals"), "Constant `a` should have UPPER_SNAKE_CASE name, e.g. `A`") + -- , (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing field `b` in initializer of `A`\nmissing `b`") + -- , (Range (Position 1 13) (Position 1 14), Just (InR "E0063"), "missing structure fields:\n- b\n") + ] testDiagnostics "rust-analyzer" "main.ipynb" LanguageKind_Rust [__i|println!("Hello world"); eprintln!("Hello error"); From e867b7cc10365b9a2f20676702621aad14b898bd Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Sat, 30 May 2026 13:53:38 -0700 Subject: [PATCH 05/10] More fixes --- flake.nix | 4 +++- modules/kernels/julia/module.nix | 9 ++++++-- nix/nodehun-overlay.nix | 38 ++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 nix/nodehun-overlay.nix diff --git a/flake.nix b/flake.nix index 388e9eab..e1f0aebb 100644 --- a/flake.nix +++ b/flake.nix @@ -9,7 +9,9 @@ outputs = { self, nixpkgs, nixpkgs-master, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let - overlays = []; + overlays = [ + (import ./nix/nodehun-overlay.nix) + ]; pkgsStable = import nixpkgs { inherit system overlays; }; pkgsMaster = import nixpkgs-master { inherit system overlays; }; diff --git a/modules/kernels/julia/module.nix b/modules/kernels/julia/module.nix index 6cf95f44..0796101d 100644 --- a/modules/kernels/julia/module.nix +++ b/modules/kernels/julia/module.nix @@ -80,9 +80,14 @@ in julia = let juliaPackage = config.kernels.julia.juliaPackage; requestedJulia = getAttr juliaPackage pkgsToUse; + hasBin = builtins.hasAttr (juliaPackage + "-bin") pkgsToUse; + # On Darwin, nixpkgs lists julia source builds as supported (meta.unsupported = false) + # but the actual build fails (PCRE2 build errors). Prefer the -bin variant on Darwin + # whenever it's available, since it works in practice. + preferBin = requestedJulia.meta.unsupported || (pkgsToUse.stdenv.isDarwin && hasBin); in - if requestedJulia.meta.unsupported - then (if builtins.hasAttr (juliaPackage + "-bin") pkgsToUse then pkgsToUse.${juliaPackage + "-bin"} else throw "${juliaPackage} is not supported on this system and fallback ${juliaPackage}-bin was not found.") + if preferBin + then (if hasBin then pkgsToUse.${juliaPackage + "-bin"} else throw "${juliaPackage} is not supported on this system and fallback ${juliaPackage}-bin was not found.") else requestedJulia; settings = config.kernels.julia; diff --git a/nix/nodehun-overlay.nix b/nix/nodehun-overlay.nix new file mode 100644 index 00000000..5e1ad05f --- /dev/null +++ b/nix/nodehun-overlay.nix @@ -0,0 +1,38 @@ +# Fix the nodehun build on Darwin under newer Apple clang. +# +# nodehun 3.0.2 bundles an old node-addon-api whose napi.h does +# +# static const napi_typedarray_type unknown_array_type = +# static_cast(-1); +# +# Newer clang (Apple SDK 14+) rejects this as "in-class initializer for static +# data member is not a constant expression" because -1 is outside the enum's +# declared range. -Wno-enum-constexpr-conversion downgrades it on Darwin. +final: prev: { + nodehun = prev.nodehun.overrideAttrs (oldAttrs: { + # The vendored node-addon-api 1.6.3 in nodehun's package-lock has + # static const napi_typedarray_type unknown_array_type = + # static_cast(-1); + # Newer clang (Apple SDK 14+) rejects this in-class initializer because + # -1 is outside the enum's declared range under stricter constexpr + # enum-range checking. The current upstream node-addon-api dropped this + # sentinel entirely and defaults to napi_int8_array; we do the same. + # The value is only used as a "no-match" return from a primitive→typed- + # array-type lookup that nodehun never invokes for the unmapped types. + # + # `npmConfigHook` runs as a postPatch hook and itself does both `npm ci` + # (which materialises node_modules) and `npm rebuild` (which compiles + # the native addon via node-gyp) in one go. We tell npm rebuild to skip + # scripts so node-gyp doesn't run yet, patch the now-present header, + # then drive the native build ourselves in preBuild. + npmRebuildFlags = (oldAttrs.npmRebuildFlags or []) ++ [ "--ignore-scripts" ]; + + preBuild = (oldAttrs.preBuild or "") + '' + if [ -f node_modules/node-addon-api/napi.h ]; then + substituteInPlace node_modules/node-addon-api/napi.h \ + --replace-fail 'static_cast(-1)' 'napi_int8_array' + fi + npm rebuild --offline --foreground-scripts + ''; + }); +} From 0e64b58323195348402d2977e77b6de232a58f45 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 1 Jun 2026 14:33:20 -0700 Subject: [PATCH 06/10] Apply nodehun overlay in default.nix so the test harness gets the patched build --- default.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/default.nix b/default.nix index 5f674b9f..559b2321 100644 --- a/default.nix +++ b/default.nix @@ -6,6 +6,12 @@ }: let + # Overlays that must apply to every codedown consumer, including the test + # harness which imports this default.nix directly (bypassing flake.nix). The + # nodehun overlay fixes the spellchecker's native build on newer Apple clang. + baseOverlays = [ (import ./nix/nodehun-overlay.nix) ]; + allOverlays = baseOverlays ++ overlays; + stableRev = "f5190b692864072e79a2fb7c52d72d1d57fcb269"; # nixpkgs-rev stableFetchFromGitHub = fetchFromGitHub { owner = "NixOS"; @@ -19,7 +25,7 @@ let }; pkgsStableSrc = if fetchFromGitHub != null then stableFetchFromGitHub else stableBuiltins; pkgsStable = import pkgsStableSrc ({ - inherit overlays; + overlays = allOverlays; } // (if system == null then {} else { inherit system; })); masterRev = "f4d46d85b687293bc8d872010fb66a4f23c23139"; # nixpkgs-master-rev @@ -35,7 +41,7 @@ let }; pkgsMasterSrc = if fetchFromGitHub != null then masterFetchFromGitHub else masterBuiltins; pkgsMaster = import pkgsMasterSrc ({ - inherit overlays; + overlays = allOverlays; } // (if system == null then {} else { inherit system; })); in From a47dca0fc824ab8d767e04e1abf02e5564dd459b Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 1 Jun 2026 14:49:18 -0700 Subject: [PATCH 07/10] Apply nodehun Darwin fix as a local override instead of a global overlay --- default.nix | 10 +---- flake.nix | 7 +--- .../markdown-spellcheck-lsp/default.nix | 7 +++- .../nodehun-darwin-fix.nix | 28 ++++++++++++++ nix/nodehun-overlay.nix | 38 ------------------- 5 files changed, 38 insertions(+), 52 deletions(-) create mode 100644 modules/language_servers/markdown-spellcheck-lsp/nodehun-darwin-fix.nix delete mode 100644 nix/nodehun-overlay.nix diff --git a/default.nix b/default.nix index 559b2321..5f674b9f 100644 --- a/default.nix +++ b/default.nix @@ -6,12 +6,6 @@ }: let - # Overlays that must apply to every codedown consumer, including the test - # harness which imports this default.nix directly (bypassing flake.nix). The - # nodehun overlay fixes the spellchecker's native build on newer Apple clang. - baseOverlays = [ (import ./nix/nodehun-overlay.nix) ]; - allOverlays = baseOverlays ++ overlays; - stableRev = "f5190b692864072e79a2fb7c52d72d1d57fcb269"; # nixpkgs-rev stableFetchFromGitHub = fetchFromGitHub { owner = "NixOS"; @@ -25,7 +19,7 @@ let }; pkgsStableSrc = if fetchFromGitHub != null then stableFetchFromGitHub else stableBuiltins; pkgsStable = import pkgsStableSrc ({ - overlays = allOverlays; + inherit overlays; } // (if system == null then {} else { inherit system; })); masterRev = "f4d46d85b687293bc8d872010fb66a4f23c23139"; # nixpkgs-master-rev @@ -41,7 +35,7 @@ let }; pkgsMasterSrc = if fetchFromGitHub != null then masterFetchFromGitHub else masterBuiltins; pkgsMaster = import pkgsMasterSrc ({ - overlays = allOverlays; + inherit overlays; } // (if system == null then {} else { inherit system; })); in diff --git a/flake.nix b/flake.nix index e1f0aebb..8fe6a4ce 100644 --- a/flake.nix +++ b/flake.nix @@ -9,11 +9,8 @@ outputs = { self, nixpkgs, nixpkgs-master, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let - overlays = [ - (import ./nix/nodehun-overlay.nix) - ]; - pkgsStable = import nixpkgs { inherit system overlays; }; - pkgsMaster = import nixpkgs-master { inherit system overlays; }; + pkgsStable = import nixpkgs { inherit system; }; + pkgsMaster = import nixpkgs-master { inherit system; }; codedown = import ./codedown.nix { pkgsStableSrc = nixpkgs; diff --git a/modules/language_servers/markdown-spellcheck-lsp/default.nix b/modules/language_servers/markdown-spellcheck-lsp/default.nix index 5155ebb7..62a7b6f5 100644 --- a/modules/language_servers/markdown-spellcheck-lsp/default.nix +++ b/modules/language_servers/markdown-spellcheck-lsp/default.nix @@ -20,6 +20,11 @@ let nodejs = nodejs-slim; + # nodehun's native build fails on Darwin under newer Apple clang; patch it. + nodehun' = if stdenv.isDarwin + then (import ./nodehun-darwin-fix.nix) nodehun + else nodehun; + # nodeHeaders = runCommand "node-${nodejs.version}-headers.tar.gz" { buildInputs = []; } '' # dir="node-v${nodejs.version}" # mkdir "$dir" @@ -53,7 +58,7 @@ let } '' mkdir -p $out/bin makeWrapper ${nodejs}/bin/node $out/bin/markdown-spellcheck-lsp \ - --set NODE_PATH ${nodehun}/lib/node_modules \ + --set NODE_PATH ${nodehun'}/lib/node_modules \ --add-flags ${indexJs} ''; diff --git a/modules/language_servers/markdown-spellcheck-lsp/nodehun-darwin-fix.nix b/modules/language_servers/markdown-spellcheck-lsp/nodehun-darwin-fix.nix new file mode 100644 index 00000000..25fe442b --- /dev/null +++ b/modules/language_servers/markdown-spellcheck-lsp/nodehun-darwin-fix.nix @@ -0,0 +1,28 @@ +# Fix the nodehun build on Darwin under newer Apple clang. +# +# nodehun 3.0.2 vendors node-addon-api 1.6.3, whose napi.h has +# static const napi_typedarray_type unknown_array_type = +# static_cast(-1); +# Newer clang (Apple SDK 14+) rejects this in-class initializer because -1 is +# outside the enum's declared range under stricter constexpr enum-range +# checking. Upstream node-addon-api dropped this sentinel entirely and defaults +# to napi_int8_array; we do the same. The value is only used as a "no-match" +# return from a primitive->typed-array-type lookup that nodehun never invokes +# for the unmapped types. +# +# `npmConfigHook` runs as a postPatch hook and itself does both `npm ci` (which +# materialises node_modules) and `npm rebuild` (which compiles the native addon +# via node-gyp) in one go. We tell npm rebuild to skip scripts so node-gyp +# doesn't run yet, patch the now-present header, then drive the native build +# ourselves in preBuild. +nodehun: nodehun.overrideAttrs (oldAttrs: { + npmRebuildFlags = (oldAttrs.npmRebuildFlags or []) ++ [ "--ignore-scripts" ]; + + preBuild = (oldAttrs.preBuild or "") + '' + if [ -f node_modules/node-addon-api/napi.h ]; then + substituteInPlace node_modules/node-addon-api/napi.h \ + --replace-fail 'static_cast(-1)' 'napi_int8_array' + fi + npm rebuild --offline --foreground-scripts + ''; +}) diff --git a/nix/nodehun-overlay.nix b/nix/nodehun-overlay.nix deleted file mode 100644 index 5e1ad05f..00000000 --- a/nix/nodehun-overlay.nix +++ /dev/null @@ -1,38 +0,0 @@ -# Fix the nodehun build on Darwin under newer Apple clang. -# -# nodehun 3.0.2 bundles an old node-addon-api whose napi.h does -# -# static const napi_typedarray_type unknown_array_type = -# static_cast(-1); -# -# Newer clang (Apple SDK 14+) rejects this as "in-class initializer for static -# data member is not a constant expression" because -1 is outside the enum's -# declared range. -Wno-enum-constexpr-conversion downgrades it on Darwin. -final: prev: { - nodehun = prev.nodehun.overrideAttrs (oldAttrs: { - # The vendored node-addon-api 1.6.3 in nodehun's package-lock has - # static const napi_typedarray_type unknown_array_type = - # static_cast(-1); - # Newer clang (Apple SDK 14+) rejects this in-class initializer because - # -1 is outside the enum's declared range under stricter constexpr - # enum-range checking. The current upstream node-addon-api dropped this - # sentinel entirely and defaults to napi_int8_array; we do the same. - # The value is only used as a "no-match" return from a primitive→typed- - # array-type lookup that nodehun never invokes for the unmapped types. - # - # `npmConfigHook` runs as a postPatch hook and itself does both `npm ci` - # (which materialises node_modules) and `npm rebuild` (which compiles - # the native addon via node-gyp) in one go. We tell npm rebuild to skip - # scripts so node-gyp doesn't run yet, patch the now-present header, - # then drive the native build ourselves in preBuild. - npmRebuildFlags = (oldAttrs.npmRebuildFlags or []) ++ [ "--ignore-scripts" ]; - - preBuild = (oldAttrs.preBuild or "") + '' - if [ -f node_modules/node-addon-api/napi.h ]; then - substituteInPlace node_modules/node-addon-api/napi.h \ - --replace-fail 'static_cast(-1)' 'napi_int8_array' - fi - npm rebuild --offline --foreground-scripts - ''; - }); -} From 9216e1b17f1c3095419a0c2b69214842bdc518b8 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 1 Jun 2026 14:50:25 -0700 Subject: [PATCH 08/10] octave: use gnuplot graphics toolkit to avoid fltk warning on stdout --- modules/kernels/octave/kernel.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/kernels/octave/kernel.nix b/modules/kernels/octave/kernel.nix index aa1eb6e2..65b00e0c 100644 --- a/modules/kernels/octave/kernel.nix +++ b/modules/kernels/octave/kernel.nix @@ -58,6 +58,8 @@ let extraOctaveConfig = '' warning('off', 'Octave:gnuplot-graphics') + warning('off', 'Octave:fltk-graphics') + graphics_toolkit('gnuplot') ''; extraOctaveConfigArgs = if extraOctaveConfig == null then "" else From 5f58283e0c4f8d947247522f191b16ce22889755 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Tue, 2 Jun 2026 13:19:27 -0700 Subject: [PATCH 09/10] gnls: update to 0.1.0.4 (fixes darwin) --- .../go/language-server-gopls/gnls-version.nix | 2 +- .../kernels/go/language-server-gopls/gnls.nix | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/kernels/go/language-server-gopls/gnls-version.nix b/modules/kernels/go/language-server-gopls/gnls-version.nix index 6ac50715..de64febe 100644 --- a/modules/kernels/go/language-server-gopls/gnls-version.nix +++ b/modules/kernels/go/language-server-gopls/gnls-version.nix @@ -1 +1 @@ -"0.1.0.3" +"0.1.0.4" diff --git a/modules/kernels/go/language-server-gopls/gnls.nix b/modules/kernels/go/language-server-gopls/gnls.nix index ef2fdb43..f384b594 100644 --- a/modules/kernels/go/language-server-gopls/gnls.nix +++ b/modules/kernels/go/language-server-gopls/gnls.nix @@ -6,28 +6,28 @@ { # HASHES_START "aarch64-linux" = fetchzip { - name = "go-notebook-language-server-0.1.0.3"; + name = "go-notebook-language-server-0.1.0.4"; stripRoot = false; - url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.3/go-notebook-language-server-0.1.0.3-aarch64-linux.tar.gz"; - hash = "sha256-q2u2Iyy5cZCnxcXppZbbahtsZ+sQi1QrKLw1JDqUeJM="; + url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.4/go-notebook-language-server-0.1.0.4-aarch64-linux.tar.gz"; + hash = "sha256-GZG3miAdBqLKat4arB1isjMKKpnRl8m2LOYtKUBT8oM="; }; "x86_64-linux" = fetchzip { - name = "go-notebook-language-server-0.1.0.3"; + name = "go-notebook-language-server-0.1.0.4"; stripRoot = false; - url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.3/go-notebook-language-server-0.1.0.3-x86_64-linux.tar.gz"; - hash = "sha256-Yq6AYnaYO1JIblz8d8oUdVWZb18trpr4JgkKcLN2IuM="; + url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.4/go-notebook-language-server-0.1.0.4-x86_64-linux.tar.gz"; + hash = "sha256-0hMofbVtiAmIRhWihDBYZ9pXy9yfpiqeBLX+L0PwreE="; }; "x86_64-darwin" = fetchzip { - name = "go-notebook-language-server-0.1.0.3"; + name = "go-notebook-language-server-0.1.0.4"; stripRoot = false; - url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.3/go-notebook-language-server-0.1.0.3-x86_64-darwin.tar.gz"; - hash = "sha256-ovu3YFTB8vDwBp0hcFE/hV09W7vqjkC1fzKrfumXDws="; + url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.4/go-notebook-language-server-0.1.0.4-x86_64-darwin.tar.gz"; + hash = "sha256-8z71FB5mV4s9gW5QCBdPE6a3jRRx/OX/6JA/hX3T2Zc="; }; "aarch64-darwin" = fetchzip { - name = "go-notebook-language-server-0.1.0.3"; + name = "go-notebook-language-server-0.1.0.4"; stripRoot = false; - url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.3/go-notebook-language-server-0.1.0.3-aarch64-darwin.tar.gz"; - hash = "sha256-9n1ExuhRLioeGfdQlLTyRCr+P0+YR4yc3BLBd9W2jww="; + url = "https://github.com/codedownio/go-notebook-language-server/releases/download/v0.1.0.4/go-notebook-language-server-0.1.0.4-aarch64-darwin.tar.gz"; + hash = "sha256-cAcGaKANex4kMnYD4JZb+JeEcidkNIxj8CF3pns03gE="; }; # HASHES_END }.${stdenv.hostPlatform.system} From 97ba33ab2ca1f51722c2e722d6f5e7469592864f Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 2 Jun 2026 13:36:48 -0700 Subject: [PATCH 10/10] ci: actions/checkout @v4 -> @v6 --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 872bcdf8..45ace8ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: - Linux steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: verify-default-nix.sh if: "!contains(github.event.head_commit.message, 'noci')" @@ -37,7 +37,7 @@ jobs: - Linux steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: nix flake check if: "!contains(github.event.head_commit.message, 'noci')" @@ -60,7 +60,7 @@ jobs: arch: aarch64-linux steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build .#ui_metadata_farm if: "!contains(github.event.head_commit.message, 'noci')" @@ -84,7 +84,7 @@ jobs: arch: aarch64-linux steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build .#sample_environments_farm if: "!contains(github.event.head_commit.message, 'noci')" @@ -137,7 +137,7 @@ jobs: - macOS - Linux steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: recursive