6  Customizing Jupyter

If you want to customize some feature of the JupyterHub or JupyterLab, you can do this by passing in *.json or *.py configuration files. In py-rocket-base, these are in the jupyter_server_config.d and jupyter_notebook_config.d directories in the conda notebook environment. These directories contain the json that specifies the configurations:

/srv/conda/envs/notebook/
└── etc/
    └── jupyter/
        └── jupyter_server_config.d/
            ├── security.json
            ├── extensions.json
            └── custom.json
        └── jupyter_notebook_config.d/
            └── custom.json

If you want to change these configurations, you need to either update the file with the configuration or add a new configuration file. You can add either .json or .py configurations files to the same directory.

For example, if you want to allow hidden files to be shown in the file browser in Jupyter Lab. Add

custom_jupyter_server_config.json

{
    "ContentsManager": {
        "allow_hidden": true
    }
}

and then copy this into jupyter_server_config.d and jupyter_notebook_config.d via code in the Dockerfile or in postBuild. We copy both to notebook server config and jupyter server config, because either can be used in the JupyterHub.

Dockerfile

COPY custom_jupyter_server_config.json custom_jupyter_server_config.json
RUN cp custom_jupyter_server_config.json ${NB_PYTHON_PREFIX}/etc/jupyter/jupyter_server_config.d/ && \
    cp custom_jupyter_server_config.json ${NB_PYTHON_PREFIX}/etc/jupyter/jupyter_notebook_config.d/ && \
    rm custom_jupyter_server_config.json

Alternatively, you can add a postBuild file to your repo and py-rocket-base will automatically run this when you image builds.

postBuild

#!/bin/bash -l
set -euo pipefail

cp custom_jupyter_server_config.json ${NB_PYTHON_PREFIX}/etc/jupyter/jupyter_server_config.d/
cp custom_jupyter_server_config.json ${NB_PYTHON_PREFIX}/etc/jupyter/jupyter_notebook_config.d/