···437437 There is also a breaking change in the handling of CUDA. Instead of using a CUDA compatible jaxlib
438438 as before, you can use plugins like `python3Packages.jax-cuda12-plugin`.
439439440440+- Added `allowVariants` to gate availability of package sets like `pkgsLLVM`, `pkgsMusl`, `pkgsZig`, etc. This was done in an effort to
441441+ decrease evaluation times by limiting the number of instances of nixpkgs to evaluate. The option will be removed in the future as a
442442+ new mechanism is in the works for handling cross compilation.
443443+440444<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
441445442446## Other Notable Changes {#sec-nixpkgs-release-25.05-notable-changes}
-2
doc/release-notes/rl-2511.section.md
···33## Highlights {#sec-nixpkgs-release-25.11-highlights}
44<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
5566-- Added `allowVariants` to gate availability of package sets like `pkgsLLVM`, `pkgsMusl`, `pkgsZig`, etc. This option will be removed in a future release.
77-86- The initial work to support native compilation on LoongArch64 has completed, with further changes currently
97 in preparation. In accordance with the [Software Development and Build Convention for LoongArch Architectures](https://github.com/loongson/la-softdev-convention),
108 this release sets the default march level to `la64v1.0`, covering the desktop and server processors of 3X5000
···12121313- [gtklock](https://github.com/jovanlanik/gtklock), a GTK-based lockscreen for Wayland. Available as [programs.gtklock](#opt-programs.gtklock.enable).
14141515+- [SuiteNumérique Docs](https://github.com/suitenumerique/docs), a collaborative note taking, wiki and documentation web platform and alternative to Notion or Outline. Available as [services.lasuite-docs](#opt-services.lasuite-docs.enable).
1616+1517## Backward Incompatibilities {#sec-release-25.11-incompatibilities}
16181719<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···11-{ jetbrains, writeText }:
11+{
22+ jetbrains,
33+ symlinkJoin,
44+ lib,
55+ runCommand,
66+ # If not set, all IDEs are tested.
77+ ideName ? null,
88+}:
291010+let
1111+1212+ # Known broken plugins, PLEASE remove entries here whenever possible.
1313+ broken-plugins = [
1414+ "github-copilot" # GitHub Copilot: https://github.com/NixOS/nixpkgs/issues/400317
1515+ ];
1616+1717+ ides =
1818+ if ideName == null then
1919+ with jetbrains;
2020+ [
2121+ aqua
2222+ clion
2323+ datagrip
2424+ dataspell
2525+ gateway
2626+ goland
2727+ idea-community-src
2828+ idea-community-bin
2929+ idea-ultimate
3030+ mps
3131+ phpstorm
3232+ pycharm-community-src
3333+ pycharm-community-bin
3434+ pycharm-professional
3535+ rider
3636+ ruby-mine
3737+ rust-rover
3838+ webstorm
3939+ writerside
4040+ ]
4141+ else
4242+ [ (jetbrains.${ideName}) ];
4343+in
344{
445 # Check to see if the process for adding plugins is breaking anything, instead of the plugins themselves
55- default =
4646+ empty =
647 let
748 modify-ide = ide: jetbrains.plugins.addPlugins ide [ ];
88- ides =
99- with jetbrains;
1010- map modify-ide [
1111- clion
1212- datagrip
1313- dataspell
1414- goland
1515- idea-community
1616- idea-ultimate
1717- mps
1818- phpstorm
1919- pycharm-community
2020- pycharm-professional
2121- rider
2222- ruby-mine
2323- rust-rover
2424- webstorm
2525- ];
2626- paths = builtins.concatStringsSep " " ides;
4949+ in
5050+ symlinkJoin {
5151+ name = "jetbrains-test-plugins-empty";
5252+ paths = (map modify-ide ides);
5353+ };
5454+5555+ # Test all plugins. This will only build plugins compatible with the IDE and version. It will fail if the plugin is marked
5656+ # as compatible, but the build version is somehow not in the "builds" map (as that would indicate that something with update_plugins.py went wrong).
5757+ all =
5858+ let
5959+ plugins-json = builtins.fromJSON (builtins.readFile ./plugins.json);
6060+ plugins-for =
6161+ with lib.asserts;
6262+ ide:
6363+ builtins.map (plugin: plugin.name) (
6464+ builtins.filter (
6565+ plugin:
6666+ (
6767+ # Plugin has to not be broken
6868+ (!builtins.elem plugin.name broken-plugins)
6969+ # IDE has to be compatible
7070+ && (builtins.elem ide.pname plugin.compatible)
7171+ # Assert: The build number needs to be included (if marked compatible)
7272+ && (assertMsg (builtins.elem ide.buildNumber (builtins.attrNames plugin.builds)) "For plugin ${plugin.name} no entry for IDE build ${ide.buildNumber} is defined, even though ${ide.pname} is on that build.")
7373+ # The plugin has to exist for the build
7474+ && (plugin.builds.${ide.buildNumber} != null)
7575+ )
7676+ ) (builtins.attrValues plugins-json.plugins)
7777+ );
7878+ modify-ide = ide: jetbrains.plugins.addPlugins ide (plugins-for ide);
7979+ in
8080+ symlinkJoin {
8181+ name = "jetbrains-test-plugins-all";
8282+ paths = (map modify-ide ides);
8383+ };
8484+8585+ # This test builds the IDEs with some plugins and checks that they can be discovered by the IDE.
8686+ # Test always succeeds on IDEs that the tested plugins don't support.
8787+ stored-correctly =
8888+ let
8989+ plugins-json = builtins.fromJSON (builtins.readFile ./plugins.json);
9090+ plugin-ids = [
9191+ # This is a "normal plugin", it's output must be linked into /${pname}/plugins.
9292+ "8607" # nixidea
9393+ # This is a plugin where the output contains a single JAR file. This JAR file needs to be linked directly in /${pname}/plugins.
9494+ "7425" # wakatime
9595+ ];
9696+ check-if-supported =
9797+ ide:
9898+ builtins.all (
9999+ plugin:
100100+ (builtins.elem ide.pname plugins-json.plugins.${plugin}.compatible)
101101+ && (plugins-json.plugins.${plugin}.builds.${ide.buildNumber} != null)
102102+ ) plugin-ids;
103103+ modify-ide = ide: jetbrains.plugins.addPlugins ide plugin-ids;
27104 in
2828- writeText "jb-ides" paths;
105105+ runCommand "test-jetbrains-plugins-stored-correctly"
106106+ {
107107+ idePaths = (map modify-ide (builtins.filter check-if-supported ides));
108108+ }
109109+ # TODO: instead of globbing using $ide/*/plugins we could probably somehow get the package name here properly.
110110+ ''
111111+ set -e
112112+ exec &> >(tee -a "$out")
291133030- idea-ce-with-plugins = jetbrains.plugins.addPlugins jetbrains.idea-community [
3131- "ideavim"
3232- "nixidea"
3333- # test JAR plugins
3434- "wakatime"
3535- ];
114114+ IFS=' ' read -ra ideArray <<< "$idePaths"
115115+ for ide in "''${ideArray[@]}"; do
116116+ echo "processing $ide"
117117+118118+ echo "> ensure normal plugin is available"
119119+ (
120120+ set -x
121121+ find -L $ide/*/plugins -type f -iname 'NixIDEA-*.jar' | grep .
122122+ )
123123+124124+ echo "> ensure single JAR file plugin is available"
125125+ (
126126+ set -x
127127+ PATH_TO_LINK=$(find $ide/*/plugins -maxdepth 1 -type l -iname '*wakatime.jar' | grep .)
128128+ test -f $(readlink $PATH_TO_LINK)
129129+ )
130130+ echo ""
131131+ done
132132+133133+ echo "test done! ok!"
134134+ '';
36135}
+9-2
pkgs/applications/editors/jetbrains/readme.md
···11This directory contains the build expressions needed to build any of the jetbrains IDEs.
22The jdk is in `pkgs/development/compilers/jetbrains-jdk`.
33-To test the build process of every IDE (as well as the process for adding plugins), build `jetbrains.plugins.tests.default`.
33+44+## Tests:
55+- To test the build process of every IDE (as well as the process for adding plugins), build `jetbrains.plugins.tests.empty`.
66+- To test the build process with all plugins\* supported by all IDEs, build `jetbrains.plugins.tests.all`.
77+- To test only plugins for a specific IDE\*, build `jetbrains.ide-name.tests.plugins.all`.
88+- To test that plugins are correctly stored in the plugins directory, build `jetbrains.plugins.tests.stored-correctly`.
99+1010+\*: Plugins marked as broken in nixpkgs are skipped: When updating/fixing plugins, please check the `broken-plugins` in `plugins/tests.nix` and update it if needed.
411512## How to use plugins:
613 - Get the ide you want and call `jetbrains.plugins.addPlugins` with a list of plugins you want to add.
714 - The list of plugins can be a list of ids or names (as in `plugins/plugins.json`)
815 - Example: `jetbrains.plugins.addPlugins jetbrains.pycharm-professional [ "nixidea" ]`
99- - The list can also contain a drv giving a `.jar` or `.zip` (this is how you use a plugin not added to nixpkgs)
1616+ - The list can also contain drvs giving the directory contents of the plugin (this is how you use a plugin not added to nixpkgs) or a single `.jar` (executable). For an example, look at the implementation of `fetchPluginSrc` in `plugins/default.nix`.
10171118### How to add a new plugin to nixpkgs
1219 - Find the page for the plugin on https://plugins.jetbrains.com
···11-{ lib, stdenv }:
22-33-args:
44-55-# TODO(@wolfgangwalther): Remove substituteAllFiles after 25.05 branch-off.
66-lib.warn
77- "substituteAllFiles is deprecated and will be removed in 25.11. Use replaceVars for each file instead."
88- (
99- stdenv.mkDerivation (
1010- {
1111- name = if args ? name then args.name else baseNameOf (toString args.src);
1212- builder = builtins.toFile "builder.sh" ''
1313- set -o pipefail
1414-1515- eval "$preInstall"
1616-1717- args=
1818-1919- pushd "$src"
2020- echo -ne "${lib.concatStringsSep "\\0" args.files}" | xargs -0 -n1 -I {} -- find {} -type f -print0 | while read -d "" line; do
2121- mkdir -p "$out/$(dirname "$line")"
2222- substituteAll "$line" "$out/$line"
2323- done
2424- popd
2525-2626- eval "$postInstall"
2727- '';
2828- preferLocalBuild = true;
2929- allowSubstitutes = false;
3030- }
3131- // args
3232- )
3333- )
-29
pkgs/build-support/substitute/substitute-all.nix
···11-{ lib, stdenvNoCC }:
22-# see the substituteAll in the nixpkgs documentation for usage and constraints
33-args:
44-let
55- # keep this in sync with substituteAll
66- isInvalidArgName = x: builtins.match "^[a-z][a-zA-Z0-9_]*$" x == null;
77- invalidArgs = builtins.filter isInvalidArgName (builtins.attrNames args);
88-in
99-# TODO(@wolfgangwalther): Remove substituteAll, the nix function, after 25.05 branch-off.
1010-lib.warn "substituteAll is deprecated and will be removed in 25.11. Use replaceVars instead." (
1111- if invalidArgs == [ ] then
1212- stdenvNoCC.mkDerivation (
1313- {
1414- name = if args ? name then args.name else baseNameOf (toString args.src);
1515- builder = ./substitute-all.sh;
1616- inherit (args) src;
1717- preferLocalBuild = true;
1818- allowSubstitutes = false;
1919- }
2020- // args
2121- )
2222- else
2323- throw ''
2424- Argument names for `pkgs.substituteAll` must:
2525- - start with a lower case ASCII letter
2626- - only contain ASCII letters, digits and underscores
2727- Found invalid argument names: ${lib.concatStringsSep ", " invalidArgs}.
2828- ''
2929-)
···1515 hash = "sha256-VQ0LmKhFsC12qoXCFHxtV5E+J7eRvZMVH0j+5r8pDk8=";
1616 };
17171818- # 0.3.0 has been tagged before the actual Cargo.lock bump, resulting in an inconsistent lock file.
1919- # To work around this, the Cargo.lock below is from the commit right after the tag:
2020- # https://github.com/nrempel/sleek/commit/18c5457a813a16e3eebfc1c6f512131e6e8daa02
2121- postPatch = ''
2222- ln -s --force ${./Cargo.lock} Cargo.lock
2323- '';
2424-2525- cargoLock.lockFile = ./Cargo.lock;
1818+ useFetchCargoVendor = true;
1919+ cargoHash = "sha256-vq4e/2+YfMw2n8ZMYPa/3HtNk9pCtXWN/u1MzhBkZJQ=";
26202721 meta = with lib; {
2822 description = "CLI tool for formatting SQL";
···3636 env = {
3737 GEN_ARTIFACTS = "artifacts";
3838 OPENSSL_NO_VENDOR = true;
3939+ # to not have "unknown hash" in help output
4040+ TYPST_VERSION = finalAttrs.version;
3941 };
40424143 # Fix for "Found argument '--test-threads' which wasn't expected, or isn't valid in this context"
···178178 # AssertionError: 2.1376906810000946 not less than 2.0
179179 "test_recursive_pad"
180180181181+ # Since updated onnx to 1.18.0:
182182+ # onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Load model from ...
183183+ # Unsupported model IR version: 11, max supported IR version: 10
184184+ "test_quant_128"
185185+181186 # Require internet access
182187 "test_benchmark_openpilot_model"
183188 "test_bn_alone"
···16201620 qtcurve = throw "'qtcurve' has been renamed to/replaced by 'libsForQt5.qtcurve'"; # Converted to throw 2024-10-17
16211621 qtile-unwrapped = python3.pkgs.qtile; # Added 2023-05-12
16221622 quantum-espresso-mpi = quantum-espresso; # Added 2023-11-23
16231623+ quaternion-qt5 = throw "'quaternion-qt5' has been removed as quaternion dropped Qt5 support with v0.0.97.1"; # Added 2025-05-24
16231624 quickbms = throw "'quickbms' has been removed due to being unmaintained for many years."; # Added 2025-05-17
16241625 quicklispPackages = throw "Lisp packages have been redesigned. See 'lisp-modules' in the nixpkgs manual."; # Added 2024-05-07
16251626 quicklispPackagesABCL = throw "Lisp packages have been redesigned. See 'lisp-modules' in the nixpkgs manual."; # Added 2024-05-07
···18061807 strawberry-qt5 = throw "strawberry-qt5 has been replaced by strawberry-qt6"; # Added 2024-11-22
18071808 strelka = throw "strelka depends on Python 2.6+, and does not support Python 3."; # Added 2025-03-17
18081809 subberthehut = throw "'subberthehut' has been removed as it was unmaintained upstream"; # Added 2025-05-17
18101810+ substituteAll = throw "`substituteAll` has been removed. Use `replaceVars` instead."; # Added 2025-05-23
18111811+ substituteAllFiles = throw "`substituteAllFiles` has been removed. Use `replaceVars` for each file instead."; # Added 2025-05-23
18091812 suidChroot = throw "'suidChroot' has been dropped as it was unmaintained, failed to build and had questionable security considerations"; # Added 2025-05-17
18101813 suitesparse_4_2 = throw "'suitesparse_4_2' has been removed as it was unmaintained upstream"; # Added 2025-05-17
18111814 suitesparse_4_4 = throw "'suitesparse_4_4' has been removed as it was unmaintained upstream"; # Added 2025-05-17
···19451948 unifiStable = throw "'unifiStable' has been removed since UniFi no longer has LTS and stable releases. Use `pkgs.unifi` instead."; # Converted to throw 2024-04-11
19461949 unl0kr = throw "'unl0kr' is now included with buffybox. Use `pkgs.buffybox` instead."; # Removed 2024-12-20
19471950 untrunc = throw "'untrunc' has been renamed to/replaced by 'untrunc-anthwlock'"; # Converted to throw 2024-10-17
19511951+ unzoo = throw "'unzoo' has been removed since it is unmaintained upstream and doesn't compile with newer versions of GCC anymore"; # Removed 2025-05-24
19481952 uq = throw "'uq' has been removed due to lack of upstream maintenance"; # Added 2025-01-25
19491953 urxvt_autocomplete_all_the_things = throw "'urxvt_autocomplete_all_the_things' has been renamed to/replaced by 'rxvt-unicode-plugins.autocomplete-all-the-things'"; # Converted to throw 2024-10-17
19501954 urxvt_bidi = throw "'urxvt_bidi' has been renamed to/replaced by 'rxvt-unicode-plugins.bidi'"; # Converted to throw 2024-10-17