mirror of
https://github.com/IHaskell/IHaskell.git
synced 2025-04-13 01:46:07 +00:00
110 lines
4.3 KiB
Nix
110 lines
4.3 KiB
Nix
{
|
|
description = "A Haskell kernel for IPython.";
|
|
|
|
inputs.nixpkgs24_11.url = "github:NixOS/nixpkgs/release-24.11";
|
|
inputs.nixpkgsMaster.url = "github:NixOS/nixpkgs/master";
|
|
inputs.flake-utils.url = "github:numtide/flake-utils";
|
|
inputs.hls = {
|
|
url = "github:haskell/haskell-language-server";
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
};
|
|
inputs.nix-filter.url = "github:numtide/nix-filter";
|
|
|
|
nixConfig = {
|
|
extra-substituters = [ "https://ihaskell.cachix.org" ];
|
|
extra-trusted-public-keys = [ "ihaskell.cachix.org-1:WoIvex/Ft/++sjYW3ntqPUL3jDGXIKDpX60pC8d5VLM="];
|
|
};
|
|
|
|
outputs = { self, nixpkgs24_11, nixpkgsMaster, flake-utils, hls, nix-filter, ... }:
|
|
flake-utils.lib.eachDefaultSystem (system: let
|
|
baseOverlay = _self: _super: { inherit nix-filter; };
|
|
pkgsMaster = import nixpkgsMaster { inherit system; overlays = [baseOverlay]; };
|
|
|
|
jupyterlab = pkgsMaster.python3.withPackages (ps: [ ps.jupyterlab ps.notebook ]);
|
|
|
|
# Map from GHC version to release function
|
|
versions = let
|
|
mkVersion = pkgsSrc: compiler: overlays: extraArgs: {
|
|
name = compiler;
|
|
value = (import pkgsSrc { inherit system; overlays = [baseOverlay] ++ overlays; }).callPackage ./nix/release.nix ({
|
|
inherit compiler;
|
|
} // extraArgs);
|
|
};
|
|
in
|
|
pkgsMaster.lib.listToAttrs [
|
|
(mkVersion nixpkgs24_11 "ghc96" [(import ./nix/overlay-9.6.nix)] {})
|
|
(mkVersion nixpkgs24_11 "ghc98" [(import ./nix/overlay-9.8.nix)] {})
|
|
(mkVersion nixpkgsMaster "ghc910" [(import ./nix/overlay-9.10.nix)] {})
|
|
];
|
|
|
|
# Helper function for building environments with a given set of packages
|
|
mkEnvs = prefix: packages: pkgsMaster.lib.mapAttrs' (version: releaseFn: {
|
|
name = prefix + version;
|
|
value = (releaseFn {
|
|
# Note: this can be changed to other Jupyter systems like jupyter-console
|
|
extraEnvironmentBinaries = [ jupyterlab ];
|
|
systemPackages = p: with p; [
|
|
gnuplot # for the ihaskell-gnuplot runtime
|
|
];
|
|
inherit packages;
|
|
});
|
|
}) versions;
|
|
|
|
# Basic envs with Jupyterlab and IHaskell
|
|
envs = mkEnvs "ihaskell-env-" (_: []);
|
|
|
|
# Envs with Jupyterlab, IHaskell, and all display packages
|
|
displayEnvs = mkEnvs "ihaskell-env-display-" (p: with p; map (n: builtins.getAttr n p) (import ./nix/displays.nix));
|
|
|
|
# Executables only, pulled from passthru on the envs
|
|
exes = pkgsMaster.lib.mapAttrs' (envName: env: {
|
|
name = builtins.replaceStrings ["-env"] [""] envName;
|
|
value = env.ihaskellExe;
|
|
}) envs;
|
|
|
|
devShells = pkgsMaster.lib.mapAttrs' (version: releaseFn: {
|
|
name = "ihaskell-dev-" + version;
|
|
value = pkgsMaster.callPackage ./nix/mkDevShell.nix {
|
|
inherit hls system version;
|
|
haskellPackages = (releaseFn {}).haskellPackages;
|
|
ihaskellOverlay = (releaseFn {}).ihaskellOverlay;
|
|
};
|
|
}) versions;
|
|
|
|
in {
|
|
packages = envs // displayEnvs // exes // devShells // rec {
|
|
# For easily testing that everything builds
|
|
allEnvs = pkgsMaster.linkFarm "ihaskell-envs" envs;
|
|
allDisplayEnvs = pkgsMaster.linkFarm "ihaskell-display-envs" displayEnvs;
|
|
allExes = pkgsMaster.linkFarm "ihaskell-exes" exes;
|
|
allDevShells = pkgsMaster.linkFarm "ihaskell-dev-shells" devShells;
|
|
|
|
# To use in CI
|
|
inherit jupyterlab;
|
|
print-nixpkgs-master = pkgsMaster.writeShellScriptBin "print-nixpkgs-master.sh" "echo ${pkgsMaster.path}";
|
|
};
|
|
|
|
# Run the acceptance tests on each env
|
|
checks = pkgsMaster.lib.mapAttrs (envName: env:
|
|
pkgsMaster.stdenv.mkDerivation {
|
|
name = envName + "-check";
|
|
src = pkgsMaster.callPackage ./nix/ihaskell-src.nix {};
|
|
nativeBuildInputs = with pkgsMaster; [jq bash];
|
|
doCheck = true;
|
|
checkPhase = ''
|
|
mkdir -p home
|
|
export HOME=$(pwd)/home
|
|
bash ./test/acceptance.nbconvert.sh ${env}/bin/jupyter nbconvert
|
|
'';
|
|
installPhase = ''
|
|
touch $out
|
|
'';
|
|
}
|
|
) envs;
|
|
|
|
defaultPackage = self.packages.${system}.ihaskell-env-ghc96;
|
|
|
|
devShell = self.packages.${system}.ihaskell-dev-ghc96;
|
|
});
|
|
}
|