Data-driven Style and Typography for JupyterLab powered by JSS.
We're trying some things out here, and invite you test it out, but make no guarantees that it is good or even works. What we mean by that is covered in the shouty text at the bottom of the LICENSE.
If something is broken, become a contributor and raise an issue, but we cannot guarantee any kind of response time. Similarly, PRs will be reviewed on a time-permitting basis.
- JupyterLab >=3
- Python >=3.7
for specific JupyterLab compatibility, see the changelog.
pip install jupyterlab-fonts
# or
conda install -c conda-forge jupyterlab-fonts
We're sorry to see you go!
pip uninstall jupyterlab-fonts
# or
conda uninstall jupyterlab-fonts
To change your default fonts, from the main menu, select Settings ▶ Fonts ▶ Code ▶ Font (or Size or Line Height) and the value you'd like.
Some features of Content, i.e. your rendered Markdown and HTML, are also available, and more will hopefully be added over time.
You can view all available font configurations by selecting Settings ▶ Fonts ▶ Global Fonts.... These values will be stored in your JupyterLab settings.
When viewing a notebook, you can change just the fonts for that notebook by clicking
in the Notebook toolbar (right now, next to cell type). The font, style
changes, and its license information will be stored in the Notebook metadata.
This can rapidly increase the size of your notebook file, and can make it harder to use in collaboration. We're looking into some alterate approaches.
You can pretty much do anything you want from the Fonts section of
Advanced Settings... even things entirely unrelated to fonts. There's no guarantee
that super-customized styles will work nicely with the Font Editor!
Here's an example of changing how the Notebook looks when in Presentation Mode.
{
"styles": {
":root": {
"--jp-code-font-family": "'Fira Code Regular', 'Source Code Pro', monospace",
"--jp-code-font-size": "19px"
},
".jp-mod-presentationMode .jp-Notebook": {
"& .CodeMirror": {
"fontSize": "32px"
},
"& .jp-InputPrompt, & .jp-OutputPrompt": {
"display": "none"
}
}
}
}
Note the use of &
, which allows for nesting selectors, similar to other CSS
preprocessors like LESS.
All JSON-compatible features of the plugins included in
jss-preset-default
are enabled, with the default settings, and at present will be
wrapped in a @global
selector.
overrides.json
allows for simple, declarative configuration of JupyterLab core and
third-party extensions, even after the lab server has been started.
{ '@deathbeds/jupyterlab-fonts:fonts': {} }
# that stuff up there
In binder, one might deploy this with a postBuild
script:
#!/usr/bin/env bash
cp overrides.json $NB_PYTHON_PREFIX/share/jupyter/lab/settings
Similarly, this is a well-known file to JupyterLite, making it straightforward to do light customization without needing to build and distribute a theme plugin.