{ config, pkgs, ... }: let appEnv = pkgs.python3.withPackages (p: with p; [ jupyterhub jupyterlab jupyterhub-systemdspawner jupyter-collaboration ]); in { services.nginx.virtualHosts."jupyter.moonythm.dev" = config.satellite.proxy config.services.jupyterhub.port { proxyWebsockets = true; }; services.jupyterhub = { enable = true; port = 8420; jupyterhubEnv = appEnv; jupyterlabEnv = appEnv; extraConfig = '' c.Authenticator.allowed_users = {'adrielus', 'prescientmoon'} c.Authenticator.admin_users = {'adrielus', 'prescientmoon'} c.Spawner.notebook_dir='${config.users.users.pilot.home}/projects/notebooks' c.SystemdSpawner.mem_limit = '2G' c.SystemdSpawner.cpu_limit = 2.0 ''; # {{{ Python 3 kernel kernels.python3 = let env = (pkgs.python3.withPackages (pythonPackages: with pythonPackages; [ ipykernel pandas scikit-learn ])); in { displayName = "Python 3 for machine learning"; argv = [ "${env.interpreter}" "-m" "ipykernel_launcher" "-f" "{connection_file}" ]; language = "python"; logo32 = "${env}/${env.sitePackages}/ipykernel/resources/logo-32x32.png"; logo64 = "${env}/${env.sitePackages}/ipykernel/resources/logo-64x64.png"; }; # }}} }; environment.persistence."/persist/state".directories = [ "/var/lib/${config.services.jupyterhub.stateDirectory}" ]; }