idris2: Put prelude in seperate derivation

This commit is contained in:
Ross Smyth
2025-10-21 12:47:02 -04:00
parent 622489c23a
commit 4290359712
11 changed files with 118 additions and 13 deletions
+5
View File
@@ -0,0 +1,5 @@
{ mkPrelude, prelude }:
mkPrelude {
name = "base";
dependencies = [ prelude ];
}
+12
View File
@@ -0,0 +1,12 @@
{
mkPrelude,
prelude,
base,
}:
mkPrelude {
name = "contrib";
dependencies = [
prelude
base
];
}
+12
View File
@@ -0,0 +1,12 @@
{
mkPrelude,
prelude,
base,
}:
mkPrelude {
name = "linear";
dependencies = [
prelude
base
];
}
+14
View File
@@ -0,0 +1,14 @@
{
mkPrelude,
prelude,
base,
linear,
}:
mkPrelude {
name = "network";
dependencies = [
prelude
base
linear
];
}
+6
View File
@@ -20,6 +20,12 @@ let
};
# Prelude libraries
mkPrelude = callPackage ./mkPrelude.nix { }; # Build helper
prelude = callPackage ./prelude.nix { };
base = callPackage ./base.nix { };
linear = callPackage ./linear.nix { };
network = callPackage ./network.nix { };
contrib = callPackage ./contrib.nix { };
test = callPackage ./test.nix { };
libidris2_support = callPackage ./libidris2_support.nix { };
idris2-unwrapped = callPackage ./unwrapped.nix { };
+6
View File
@@ -0,0 +1,6 @@
{
mkPrelude,
}:
mkPrelude {
name = "prelude";
}
+14
View File
@@ -0,0 +1,14 @@
{
mkPrelude,
prelude,
base,
contrib,
}:
mkPrelude {
name = "test";
dependencies = [
prelude
base
contrib
];
}
+18 -1
View File
@@ -121,9 +121,26 @@ stdenv.mkDerivation (finalAttrs: {
wrapped = testers.testVersion {
package = finalAttrs.finalPackage.withPackages (p: [ p.idris2Api ]);
};
prelude = testers.runCommand {
name = "idris2-prelude-wrapped";
script = ''
local packages=$(idris2 --list-packages)
if ! [[ $packages =~ "contrib" ]]; then
exit 1
fi
touch "$out"
'';
nativeBuildInputs = [
(finalAttrs.finalPackage.withPackages (_: [ ]))
];
};
}
// (callPackage ./tests.nix {
idris2 = finalAttrs.finalPackage;
idris2 = finalAttrs.finalPackage.withPackages (_: [ ]);
idris2Packages = idris2Packages.override { idris2 = finalAttrs.finalPackage; };
});
+20 -2
View File
@@ -3,17 +3,34 @@
makeBinaryWrapper,
symlinkJoin,
idris2-unwrapped,
prelude,
linear,
base,
network,
contrib,
test,
extraPackages ? [ ],
}:
let
preludeLibs = [
prelude
linear
base
network
contrib
test
];
supportLibrariesPath = lib.makeLibraryPath [ idris2-unwrapped.libidris2_support ];
supportSharePath = lib.makeSearchPath "share" [ idris2-unwrapped.libidris2_support ];
packagePath = lib.makeSearchPath "idris2-${idris2-unwrapped.version}" (
preludeLibs ++ extraPackages
);
in
symlinkJoin {
inherit (idris2-unwrapped) version;
pname = "idris2-wrapped";
paths = [ idris2-unwrapped ] ++ extraPackages;
paths = [ idris2-unwrapped ];
nativeBuildInputs = [ makeBinaryWrapper ];
@@ -22,12 +39,13 @@ symlinkJoin {
--set CHEZ "${lib.getExe idris2-unwrapped.chez}" \
--suffix IDRIS2_LIBS ':' "${supportLibrariesPath}" \
--suffix IDRIS2_DATA ':' "${supportSharePath}" \
--suffix IDRIS2_PACKAGE_PATH ':' "$out/idris2-${idris2-unwrapped.version}" \
--suffix IDRIS2_PACKAGE_PATH ':' ${packagePath} \
--suffix LD_LIBRARY_PATH ':' "${supportLibrariesPath}" \
--suffix DYLD_LIBRARY_PATH ':' "${supportLibrariesPath}"
'';
passthru = {
prelude = preludeLibs;
unwrapped = idris2-unwrapped;
src = idris2-unwrapped.src;
}
@@ -49,8 +49,8 @@ let
idrName = "idris2-${idris2.version}";
libSuffix = "lib/${idrName}";
libDirs = libs: (lib.makeSearchPath libSuffix libs) + ":${idris2}/${idrName}";
supportDir = "${idris2}/${idrName}/lib";
drvAttrs = removeAttrs attrs [
supportDir = "${idris2.libidris2_support}/lib";
drvAttrs = builtins.removeAttrs attrs [
"ipkgName"
"idrisLibraries"
];
@@ -6,17 +6,18 @@
}:
let
globalLibraries =
globalLibrariesPath =
let
idrName = "idris2-${idris2Packages.idris2.version}";
libSuffix = "lib/${idrName}";
in
[
"\\$HOME/.nix-profile/lib/${idrName}"
"/run/current-system/sw/lib/${idrName}"
"${idris2Packages.idris2}/${idrName}"
];
globalLibrariesPath = builtins.concatStringsSep ":" globalLibraries;
lib.makeSearchPath idrName (
[
"\\$HOME/.nix-profile/lib/"
"/run/current-system/sw/lib/"
"${idris2Packages.idris2}"
]
++ idris2Packages.idris2.prelude
);
inherit (idris2Packages) idris2Api;
lspLib = idris2Packages.buildIdris {