diff --git a/.gitignore b/.gitignore index 1f44393f..0f2b06ae 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ cabal.sandbox.config .tmp1 .tmp2 .tmp3 -.stack-work \ No newline at end of file +.stack-work +result diff --git a/release.nix b/release.nix new file mode 100644 index 00000000..9dea2d12 --- /dev/null +++ b/release.nix @@ -0,0 +1,69 @@ +{ packages ? (_: []), systemPackages ? (_: []) }: + +let + pkgs = import {}; + 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; + haskellPackages = pkgs.haskellPackages.override { + overrides = self: super: { + ihaskell = dontCheck ( + self.callCabal2nix "ihaskell" src { bin-package-db = null; }); + ghc-parser = self.callCabal2nix "ghc-parser" "${src}/ghc-parser" {}; + ipython-kernel = self.callCabal2nix "ghc-parser" "${src}/ipython-kernel" {}; + } // 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 { + extraLibs = with pkgs.python3Packages; [ ipython ipykernel jupyter_client notebook ]; + }; + 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) && ${jupyter}/bin/jupyter notebook + ''; + 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 + ''; +}