IHaskell/release.nix

77 lines
2.8 KiB
Nix
Raw Normal View History

{ packages ? (_: []), systemPackages ? (_: []), pkgs ? import <nixpkgs> {}, rtsopts ? "-M3g -N2" }:
2017-07-10 00:19:17 +08:00
let
src = pkgs.lib.cleanSource ./.;
displays = self: builtins.listToAttrs (
map
(display: { name = display; value = self.callCabal2nix display "${src}/ihaskell-display/${display}" {}; })
[
"ihaskell-aeson"
"ihaskell-blaze"
"ihaskell-charts"
"ihaskell-diagrams"
"ihaskell-gnuplot"
"ihaskell-hatex"
"ihaskell-juicypixels"
"ihaskell-magic"
"ihaskell-plot"
"ihaskell-rlangqq"
"ihaskell-static-canvas"
"ihaskell-widgets"
]);
dontCheck = pkgs.haskell.lib.dontCheck;
2017-10-02 00:01:07 +08:00
stringToReplace = "setSessionDynFlags\n flags";
replacementString = "setSessionDynFlags $ flip gopt_set Opt_BuildDynamicToo\n flags";
2017-07-10 00:19:17 +08:00
haskellPackages = pkgs.haskellPackages.override {
overrides = self: super: {
2017-09-04 23:07:18 +08:00
ihaskell = pkgs.haskell.lib.overrideCabal (
self.callCabal2nix "ihaskell" src {}) (_drv: {
doCheck = false;
postPatch = ''
substituteInPlace ./src/IHaskell/Eval/Evaluate.hs --replace \
2017-10-02 00:01:07 +08:00
'${stringToReplace}' '${replacementString}'
2017-09-04 23:07:18 +08:00
'';
});
2017-08-18 21:25:51 +08:00
ghc-parser = self.callCabal2nix "ghc-parser" "${src}/ghc-parser" {};
ipython-kernel = self.callCabal2nix "ipython-kernel" "${src}/ipython-kernel" {};
2017-07-10 00:19:17 +08:00
} // displays self;
};
ihaskell = haskellPackages.ihaskell;
ihaskellEnv = haskellPackages.ghcWithPackages (self: with self; [
ihaskell
ihaskell-aeson
ihaskell-blaze
ihaskell-charts
ihaskell-diagrams
ihaskell-gnuplot
ihaskell-hatex
ihaskell-juicypixels
ihaskell-magic
ihaskell-plot
# ihaskell-rlangqq
ihaskell-static-canvas
# ihaskell-widgets
] ++ packages self);
jupyter = pkgs.python3.buildEnv.override {
2017-09-04 21:40:10 +08:00
extraLibs = let ps = pkgs.python3Packages; in [ ps.jupyter ps.notebook ];
2017-07-10 00:19:17 +08:00
};
ihaskellSh = pkgs.writeScriptBin "ihaskell-notebook" ''
#! ${pkgs.stdenv.shell}
export GHC_PACKAGE_PATH="$(echo ${ihaskellEnv}/lib/*/package.conf.d| tr ' ' ':'):$GHC_PACKAGE_PATH"
export PATH="${pkgs.stdenv.lib.makeBinPath ([ ihaskell ihaskellEnv jupyter ] ++ systemPackages pkgs)}"
${ihaskell}/bin/ihaskell install -l $(${ihaskellEnv}/bin/ghc --print-libdir) --use-rtsopts="${rtsopts}" && ${jupyter}/bin/jupyter notebook
2017-07-10 00:19:17 +08:00
'';
profile = "${ihaskell.pname}-${ihaskell.version}/profile/profile.tar";
in
pkgs.buildEnv {
name = "ihaskell-with-packages";
paths = [ ihaskellEnv jupyter ];
postBuild = ''
. "${pkgs.makeWrapper}/nix-support/setup-hook"
ln -s ${ihaskellSh}/bin/ihaskell-notebook $out/bin/
for prg in $out/bin"/"*;do
wrapProgram $prg --set PYTHONPATH "$(echo ${jupyter}/lib/*/site-packages)"
done
'';
}