anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / editors / jupyter / kernel.nix
blobb036c7274d51deab736ad426eeb22ff310c9d2d0
1 { lib, stdenv, python3}:
3 let
5   default = {
6     python3 = let
7       env = (python3.withPackages (ps: with ps; [ ipykernel ]));
8     in {
9       displayName = "Python 3";
10       argv = [
11         env.interpreter
12         "-m"
13         "ipykernel_launcher"
14         "-f"
15         "{connection_file}"
16       ];
17       language = "python";
18       logo32 = "${env}/${env.sitePackages}/ipykernel/resources/logo-32x32.png";
19       logo64 = "${env}/${env.sitePackages}/ipykernel/resources/logo-64x64.png";
20     };
21   };
25   inherit default;
27   # Definitions is an attribute set.
29   create = { definitions ?  default }: stdenv.mkDerivation {
31     name = "jupyter-kernels";
33     src = "/dev/null";
35     unpackCmd = "mkdir jupyter_kernels";
37     installPhase =  ''
38       mkdir kernels
40       ${lib.concatStringsSep "\n" (lib.mapAttrsToList (kernelName: unfilteredKernel:
41         let
42           allowedKernelKeys = ["argv" "displayName" "language" "interruptMode" "env" "metadata" "logo32" "logo64" "extraPaths"];
43           kernel = lib.filterAttrs (n: v: (lib.any (x: x == n) allowedKernelKeys)) unfilteredKernel;
44           config = builtins.toJSON (
45             kernel
46             // {display_name = if (kernel.displayName != "") then kernel.displayName else kernelName;}
47             // (lib.optionalAttrs (kernel ? interruptMode) { interrupt_mode = kernel.interruptMode; })
48           );
49           extraPaths = kernel.extraPaths or {}
50             // lib.optionalAttrs (kernel.logo32 != null) { "logo-32x32.png" = kernel.logo32; }
51             // lib.optionalAttrs (kernel.logo64 != null) { "logo-64x64.png" = kernel.logo64; }
52           ;
53           linkExtraPaths = lib.mapAttrsToList (name: value: "ln -s ${value} 'kernels/${kernelName}/${name}';") extraPaths;
54         in ''
55           mkdir 'kernels/${kernelName}';
56           echo '${config}' > 'kernels/${kernelName}/kernel.json';
57           ${lib.concatStringsSep "\n" linkExtraPaths}
58         '') definitions)}
60       mkdir $out
61       cp -r kernels $out
62     '';
64     meta = {
65       description = "Wrapper to create jupyter notebook kernel definitions";
66       homepage = "https://jupyter.org/";
67       maintainers = with lib.maintainers; [ aborsu ];
68     };
69   };