Skip to content

Instantly share code, notes, and snippets.

@MMesch
Last active January 14, 2020 12:06
Show Gist options
  • Save MMesch/45256a435c9f78158445214a56527f68 to your computer and use it in GitHub Desktop.
Save MMesch/45256a435c9f78158445214a56527f68 to your computer and use it in GitHub Desktop.
data Haskell jupyter shell: hasktorch + hmatrix + monad-bayes + hvega + others
_: pkgs:
let
ihaskellSrc = pkgs.fetchFromGitHub {
owner = "gibiansky";
repo = "IHaskell";
rev = "2318ee2a90cfc98390651657aec434586b963235";
sha256 = "0svjzs81i77s710cfb7pxkfdi979mhjazpc2l9k9ha752spz04cj";
};
monadBayesSrc = pkgs.fetchFromGitHub {
owner = "adscib";
repo = "monad-bayes";
rev = "fb87bf039bab35dcc82de8ccf8963a7a576af355";
sha256 = "0jz7lswdzxzn5zzwypdawdj7j0y20aakmqggv9pw4sknajdqqqyf";
};
hVegaSrc = pkgs.fetchFromGitHub {
owner = "DougBurke";
repo = "hvega";
rev = "hvega-0.4.0.0";
sha256 = "1pg655a36nsz7h2l1sbyk4zzzjjw4dlah8794bc0flpigr7iik13";
};
overrides = self: hspkgs:
let
callDisplayPackage = name:
hspkgs.callCabal2nix
"ihaskell-${name}"
"${ihaskellSrc}/ihaskell-display/ihaskell-${name}"
{};
dontCheck = pkgs.haskell.lib.dontCheck;
dontHaddock = pkgs.haskell.lib.dontHaddock;
in
{
monad-bayes = hspkgs.callCabal2nix "monad-bayes" "${monadBayesSrc}" {};
hvega = hspkgs.callCabal2nix "hvega" "${hVegaSrc}/hvega" {};
ihaskell-hvega = hspkgs.callCabal2nix "ihaskell-hvega" "${hVegaSrc}/ihaskell-hvega" {};
ihaskell = pkgs.haskell.lib.overrideCabal
(hspkgs.callCabal2nix "ihaskell" ihaskellSrc {})
(_drv: {
preCheck = ''
export HOME=$(${pkgs.pkgs.coreutils}/bin/mktemp -d)
export PATH=$PWD/dist/build/ihaskell:$PATH
export GHC_PACKAGE_PATH=$PWD/dist/package.conf.inplace/:$GHC_PACKAGE_PATH
'';
configureFlags = (_drv.configureFlags or []) ++ [
# otherwise the tests are agonisingly slow and the kernel times out
"--enable-executable-dynamic"
];
doHaddock = false;
});
ghc-parser = hspkgs.callCabal2nix "ghc-parser" "${ihaskellSrc}/ghc-parser" {};
ipython-kernel = hspkgs.callCabal2nix "ipython-kernel" "${ihaskellSrc}/ipython-kernel" {};
ihaskell-aeson = callDisplayPackage "aeson";
ihaskell-blaze = callDisplayPackage "blaze";
ihaskell-charts = callDisplayPackage "charts";
ihaskell-diagrams = callDisplayPackage "diagrams";
ihaskell-gnuplot = callDisplayPackage "gnuplot";
ihaskell-graphviz = callDisplayPackage "graphviz";
ihaskell-hatex = callDisplayPackage "hatex";
ihaskell-juicypixels = callDisplayPackage "juicypixels";
ihaskell-magic = callDisplayPackage "magic";
ihaskell-plot = callDisplayPackage "plot";
ihaskell-rlangqq = callDisplayPackage "rlangqq";
ihaskell-static-canvas = callDisplayPackage "static-canvas";
ihaskell-widgets = callDisplayPackage "widgets";
# Marked as broken in this version of Nixpkgs.
chell = hspkgs.callHackage "chell" "0.4.0.2" {};
patience = hspkgs.callHackage "patience" "0.1.1" {};
# Version compatible with ghc-lib-parser.
hlint = hspkgs.callHackage "hlint" "2.2.1" {};
# Tests not passing.
Diff = dontCheck hspkgs.Diff;
zeromq4-haskell = dontCheck hspkgs.zeromq4-haskell;
funflow = dontCheck hspkgs.funflow;
# Haddocks not building.
ghc-lib-parser = dontHaddock hspkgs.ghc-lib-parser;
# Missing dependency.
aeson = pkgs.haskell.lib.addBuildDepends hspkgs.aeson [ self.contravariant ];
};
in
{
haskell = pkgs.haskell // {
packages = pkgs.haskell.packages // {
"ghc865" = pkgs.haskell.packages.ghc865.override (old: {
overrides =
pkgs.lib.composeExtensions
(old.overrides or (_: _: {}))
overrides;}
);
};
};
}
let
jupyterLib = builtins.fetchGit {
url = https://github.com/tweag/jupyterWith;
rev = "70f1dddd6446ab0155a5b0ff659153b397419a2d";
};
nixpkgsPath = jupyterLib + "/nix";
haskTorchSrc = builtins.fetchGit {
url = https://github.com/hasktorch/hasktorch;
rev = "dc62f1e1152f9e7fa66f7f9e78f385514715b816";
ref = "master";
};
hasktorchOverlay = (import (haskTorchSrc + "/nix/shared.nix") { compiler = "ghc865"; }).overlayShared;
haskellOverlay = import ./haskell-overlay.nix;
pkgs = import nixpkgsPath {overlays = [ hasktorchOverlay haskellOverlay ]; config={allowUnfree=true; allowBroken=true;};};
jupyter = import jupyterLib {pkgs=pkgs;};
ihaskellWithPackages = jupyter.kernels.iHaskellWith {
#extraIHaskellFlags = "--debug";
haskellPackages = pkgs.haskell.packages.ghc865;
name = "hasktorch";
packages = p: with p; [
libtorch-ffi_cpu
inline-c
inline-c-cpp
hasktorch-examples_cpu
hasktorch_cpu
matrix
hmatrix
monad-bayes
hvega
statistics
vector
ihaskell-hvega
aeson
aeson-pretty
formatting
foldl
histogram-fill
funflow
JuicyPixels
];
};
jupyterlabWithKernels =
jupyter.jupyterlabWith {
kernels = [ ihaskellWithPackages ];
directory = jupyter.mkDirectoryWith {
extensions = [
"jupyterlab-ihaskell"
];
};
};
in
jupyterlabWithKernels.env
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment