Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 99 lines 2.6 kB view raw
1{ 2 lib, 3 stdenv, 4 python3, 5}: 6 7let 8 9 default = { 10 python3 = 11 let 12 env = (python3.withPackages (ps: with ps; [ ipykernel ])); 13 in 14 { 15 displayName = "Python 3"; 16 argv = [ 17 env.interpreter 18 "-m" 19 "ipykernel_launcher" 20 "-f" 21 "{connection_file}" 22 ]; 23 language = "python"; 24 logo32 = "${env}/${env.sitePackages}/ipykernel/resources/logo-32x32.png"; 25 logo64 = "${env}/${env.sitePackages}/ipykernel/resources/logo-64x64.png"; 26 }; 27 }; 28 29in 30{ 31 inherit default; 32 33 # Definitions is an attribute set. 34 35 create = 36 { 37 definitions ? default, 38 }: 39 stdenv.mkDerivation { 40 41 name = "jupyter-kernels"; 42 43 src = "/dev/null"; 44 45 unpackCmd = "mkdir jupyter_kernels"; 46 47 installPhase = '' 48 mkdir kernels 49 50 ${lib.concatStringsSep "\n" ( 51 lib.mapAttrsToList ( 52 kernelName: unfilteredKernel: 53 let 54 allowedKernelKeys = [ 55 "argv" 56 "displayName" 57 "language" 58 "interruptMode" 59 "env" 60 "metadata" 61 "logo32" 62 "logo64" 63 "extraPaths" 64 ]; 65 kernel = lib.filterAttrs (n: v: (lib.any (x: x == n) allowedKernelKeys)) unfilteredKernel; 66 config = builtins.toJSON ( 67 kernel 68 // { 69 display_name = if (kernel.displayName != "") then kernel.displayName else kernelName; 70 } 71 // (lib.optionalAttrs (kernel ? interruptMode) { interrupt_mode = kernel.interruptMode; }) 72 ); 73 extraPaths = 74 kernel.extraPaths or { } 75 // lib.optionalAttrs (kernel.logo32 != null) { "logo-32x32.png" = kernel.logo32; } 76 // lib.optionalAttrs (kernel.logo64 != null) { "logo-64x64.png" = kernel.logo64; }; 77 linkExtraPaths = lib.mapAttrsToList ( 78 name: value: "ln -s ${value} 'kernels/${kernelName}/${name}';" 79 ) extraPaths; 80 in 81 '' 82 mkdir 'kernels/${kernelName}'; 83 echo '${config}' > 'kernels/${kernelName}/kernel.json'; 84 ${lib.concatStringsSep "\n" linkExtraPaths} 85 '' 86 ) definitions 87 )} 88 89 mkdir $out 90 cp -r kernels $out 91 ''; 92 93 meta = { 94 description = "Wrapper to create jupyter notebook kernel definitions"; 95 homepage = "https://jupyter.org/"; 96 maintainers = with lib.maintainers; [ aborsu ]; 97 }; 98 }; 99}