diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/jupyter')
-rw-r--r-- | nixpkgs/pkgs/applications/editors/jupyter/default.nix | 18 | ||||
-rw-r--r-- | nixpkgs/pkgs/applications/editors/jupyter/kernel.nix | 74 |
2 files changed, 92 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/editors/jupyter/default.nix b/nixpkgs/pkgs/applications/editors/jupyter/default.nix new file mode 100644 index 000000000000..2bca120c1deb --- /dev/null +++ b/nixpkgs/pkgs/applications/editors/jupyter/default.nix @@ -0,0 +1,18 @@ +# Jupyter notebook with the given kernel definitions + +{ python3 +, jupyter-kernel +, definitions ? jupyter-kernel.default +}: + +let + + jupyterPath = (jupyter-kernel.create { inherit definitions; }); + +in + +with python3.pkgs; toPythonModule ( + notebook.overridePythonAttrs(oldAttrs: { + makeWrapperArgs = ["--set JUPYTER_PATH ${jupyterPath}"]; + }) +) diff --git a/nixpkgs/pkgs/applications/editors/jupyter/kernel.nix b/nixpkgs/pkgs/applications/editors/jupyter/kernel.nix new file mode 100644 index 000000000000..205c32d5f806 --- /dev/null +++ b/nixpkgs/pkgs/applications/editors/jupyter/kernel.nix @@ -0,0 +1,74 @@ +{ lib, stdenv, python3}: + +let + + default = { + python3 = let + env = (python3.withPackages (ps: with ps; [ ipykernel ])); + in { + displayName = "Python 3"; + argv = [ + "${env.interpreter}" + "-m" + "ipykernel_launcher" + "-f" + "{connection_file}" + ]; + language = "python"; + logo32 = "${env.sitePackages}/ipykernel/resources/logo-32x32.png"; + logo64 = "${env.sitePackages}/ipykernel/resources/logo-64x64.png"; + }; + }; + +in +{ + inherit default; + + # Definitions is an attribute set. + + create = { definitions ? default }: with lib; stdenv.mkDerivation { + + name = "jupyter-kernels"; + + src = "/dev/null"; + + unpackCmd = "mkdir jupyter_kernels"; + + installPhase = '' + mkdir kernels + + ${concatStringsSep "\n" (mapAttrsToList (kernelName: unfilteredKernel: + let + allowedKernelKeys = ["argv" "displayName" "language" "interruptMode" "env" "metadata" "logo32" "logo64"]; + kernel = filterAttrs (n: v: (any (x: x == n) allowedKernelKeys)) unfilteredKernel; + config = builtins.toJSON ( + kernel + // {display_name = if (kernel.displayName != "") then kernel.displayName else kernelName;} + // (optionalAttrs (kernel ? interruptMode) { interrupt_mode = kernel.interruptMode; }) + ); + logo32 = + if (kernel.logo32 != null) + then "ln -s ${kernel.logo32} 'kernels/${kernelName}/logo-32x32.png';" + else ""; + logo64 = + if (kernel.logo64 != null) + then "ln -s ${kernel.logo64} 'kernels/${kernelName}/logo-64x64.png';" + else ""; + in '' + mkdir 'kernels/${kernelName}'; + echo '${config}' > 'kernels/${kernelName}/kernel.json'; + ${logo32} + ${logo64} + '') definitions)} + + mkdir $out + cp -r kernels $out + ''; + + meta = { + description = "Wrapper to create jupyter notebook kernel definitions"; + homepage = https://jupyter.org/; + maintainers = with maintainers; [ aborsu ]; + }; + }; +} |