templates/jupyter/flake.nix

68 lines
2.3 KiB
Nix

{
description = "A jupyter flake, with a custom haskell kernel and proper pdflatex LaTeX export supoprt";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (sys:
let pkgs = import nixpkgs { system = sys; };
python = pkgs.python310;
latex = pkgs.texlive.combine {
inherit (pkgs.texlive)
scheme-basic # Base
tcolorbox pgf environ etoolbox pdfcol parskip caption float upquote eurosym ucs fancyvrb grffile adjustbox hyperref titling booktabs enumitem ulem soul rsfs jknapltx cm-super # Other packages needed by jupyter.
tikz-among-us; # extra packages
};
jupyter-config = python.pkgs.buildPythonPackage rec {
name = "jupyter-config";
format = "other";
src = ./jupyter-config ;
installPhase = ''
find . -type f -exec sed -i 's|<pdflatex>|${latex}/bin/pdflatex|g' {} +
mkdir -p $out/etc/jupyter/
cp -r . $out/etc/jupyter/
'';
};
jupyter-ihaskell = python.pkgs.buildPythonPackage rec {
name = "jupyter-ihaskell";
format = "other";
unpackPhase = ": 3"; # we don't have any sources
nativeBuildInputs = [ (python.withPackages (ps: with ps; [ jupyter jupyter-core ])) ];
# for some reason, ihaskell wants to create $HOME/.ihaskell
# we set $HOME to $out, and then remove the .ihaskell file
installPhase = ''
mkdir -p $out
HOME=$out ${pkgs.ihaskell}/bin/ihaskell install --prefix=$out
rm -rf $out/.ihaskell
'';
};
python-environment = (pkgs.python310.withPackages (ps: with ps; [
ipympl numpy matplotlib scipy
jupyter-core jupyter
jupyter-config jupyter-ihaskell
]));
in rec {
packages.latex = latex;
packages.python-environment = python-environment;
packages.default = pkgs.writeScriptBin "start-notebook" ''
env PATH=$PATH:${latex}/bin:${pkgs.pandoc}/bin ${python-environment}/bin/jupyter-notebook
'';
devShells.default = pkgs.mkShell {
packages = [ python-environment latex ];
};
}
);
}