diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index 67c5a13421b..c49cf223383 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -252,6 +252,15 @@
set autoSubUidGidRange = true.
+
+
+ idris2 now requires
+ --package when using packages
+ contrib and network,
+ while previously these idris2 packages were automatically
+ loaded.
+
+
services.thelounge.private was removed in
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index 35316a28319..4903774ad6e 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -83,6 +83,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- Normal users (with `isNormalUser = true`) which have non-empty `subUidRanges` or `subGidRanges` set no longer have additional implicit ranges allocated. To enable automatic allocation back set `autoSubUidGidRange = true`.
+- `idris2` now requires `--package` when using packages `contrib` and `network`, while previously these idris2 packages were automatically loaded.
+
- `services.thelounge.private` was removed in favor of `services.thelounge.public`, to follow with upstream changes.
## Other Notable Changes {#sec-release-22.05-notable-changes}
diff --git a/pkgs/development/compilers/idris2/default.nix b/pkgs/development/compilers/idris2/default.nix
index 4bf8f7e4af6..9c7a9e53a2e 100644
--- a/pkgs/development/compilers/idris2/default.nix
+++ b/pkgs/development/compilers/idris2/default.nix
@@ -1,18 +1,27 @@
-{ lib
-, stdenv
+# Almost 1:1 copy of idris2's nix/platform.nix. Some work done in their flake.nix
+# we do here instead.
+{ stdenv
+, lib
+, chez
+, chez-racket
+, clang
+, gmp
, fetchFromGitHub
, makeWrapper
-, clang
-, chez
-, gmp
+, gambit
+, nodejs
, zsh
, callPackage
}:
# NOTICE: An `idris2WithPackages` is available at: https://github.com/claymager/idris2-pkgs
+let
+ # Taken from Idris2/idris2/flake.nix. Check if the idris2 project does it this
+ # way, still, every now and then.
+ platformChez = if stdenv.system == "x86_64-linux" then chez else chez-racket;
# Uses scheme to bootstrap the build of idris2
-stdenv.mkDerivation rec {
+in stdenv.mkDerivation rec {
pname = "idris2";
version = "0.5.1";
@@ -23,14 +32,10 @@ stdenv.mkDerivation rec {
sha256 = "sha256-6CTn8o5geWSesXO7vTrrV/2EOQ3f+nPQ2M5cem13ZSY=";
};
- # We do not add any propagatedNativeBuildInputs because we do not want the
- # executables idris2 produces to depend on the nix-store. As such, it is left
- # to the user to guarantee chez (or any other codgen dependency) is available
- # in the path during compilation of programs with idris2.
strictDeps = true;
- nativeBuildInputs = [ makeWrapper clang chez ]
+ nativeBuildInputs = [ makeWrapper clang platformChez ]
++ lib.optional stdenv.isDarwin [ zsh ];
- buildInputs = [ gmp ];
+ buildInputs = [ platformChez gmp ];
prePatch = ''
patchShebangs --build tests
@@ -43,44 +48,40 @@ stdenv.mkDerivation rec {
buildFlags = [ "bootstrap" "SCHEME=scheme" ];
checkTarget = "test";
+ checkInputs = [ gambit nodejs ]; # racket ];
+ checkFlags = [ "INTERACTIVE=" ];
# TODO: Move this into its own derivation, such that this can be changed
# without having to recompile idris2 every time.
postInstall = let
- includedLibs = [ "base" "contrib" "network" "prelude" ];
name = "${pname}-${version}";
- packagePaths =
- builtins.map (l: "$out/${name}/${l}-${version}") includedLibs;
- additionalIdris2Paths = builtins.concatStringsSep ":" packagePaths;
+ globalLibraries = [
+ "\\$HOME/.nix-profile/lib/${name}"
+ "/run/current-system/sw/lib/${name}"
+ "$out/${name}"
+ ];
+ globalLibrariesPath = builtins.concatStringsSep ":" globalLibraries;
in ''
# Remove existing idris2 wrapper that sets incorrect LD_LIBRARY_PATH
rm $out/bin/idris2
- # Move actual idris2 binary
+ # The only thing we need from idris2_app is the actual binary
mv $out/bin/idris2_app/idris2.so $out/bin/idris2
-
- # After moving the binary, there is nothing left in idris2_app that isn't
- # either contained in lib/ or is useless to us.
rm $out/bin/idris2_app/*
rmdir $out/bin/idris2_app
-
# idris2 needs to find scheme at runtime to compile
- # idris2 installs packages with --install into the path given by PREFIX.
- # Since PREFIX is in nix-store, it is immutable so --install does not work.
- # If the user redefines PREFIX to be able to install packages, idris2 will
- # not find the libraries and packages since all paths are relative to
- # PREFIX by default.
- # We explicitly make all paths to point to nix-store, such that they are
- # independent of what IDRIS2_PREFIX is. This allows the user to redefine
- # IDRIS2_PREFIX and use --install as expected.
+ # idris2 installs packages with --install into the path given by
+ # IDRIS2_PREFIX. We set that to a default of ~/.idris2, to mirror the
+ # behaviour of the standard Makefile install.
# TODO: Make support libraries their own derivation such that
# overriding LD_LIBRARY_PATH is unnecessary
- # TODO: Maybe set IDRIS2_PREFIX to the users home directory
wrapProgram "$out/bin/idris2" \
- --set-default CHEZ "${chez}/bin/scheme" \
+ --set-default CHEZ "${platformChez}/bin/scheme" \
+ --run 'export IDRIS2_PREFIX=''${IDRIS2_PREFIX-"$HOME/.idris2"}' \
--suffix IDRIS2_LIBS ':' "$out/${name}/lib" \
--suffix IDRIS2_DATA ':' "$out/${name}/support" \
- --suffix IDRIS2_PATH ':' "${additionalIdris2Paths}" \
- --suffix ${if stdenv.isDarwin then "DYLD_LIBRARY_PATH" else "LD_LIBRARY_PATH"} ':' "$out/${name}/lib"
+ --suffix IDRIS2_PACKAGE_PATH ':' "${globalLibrariesPath}" \
+ --suffix DYLD_LIBRARY_PATH ':' "$out/${name}/lib" \
+ --suffix LD_LIBRARY_PATH ':' "$out/${name}/lib"
'';
# Run package tests
diff --git a/pkgs/development/compilers/idris2/tests.nix b/pkgs/development/compilers/idris2/tests.nix
index 1e84ca6b77a..a8d48c26ca6 100644
--- a/pkgs/development/compilers/idris2/tests.nix
+++ b/pkgs/development/compilers/idris2/tests.nix
@@ -50,6 +50,7 @@ in {
# Data.Vect.Sort is available via --package contrib
use-contrib = testCompileAndRun {
testName = "use-contrib";
+ packages = [ "contrib" ];
code = ''
module Main