Skip to main content

Mechanicum Dark Theme

GitHub Actions npm version PyPI version Total PyPI downloads JupyterLab 4 Brought To You By KOLOMOLO Donate PayPal

A dark JupyterLab theme in the look of the Adeptus Mechanicus: crimson cloth, gold embroidery, steel and parchment

From the weakness of the light theme, the Omnissiah delivered us.

The flesh is weak, and so are tired eyes. This theme honours the Machine God with as much ornament as one browser tab can carry, and it still lets a tech-priest read code at three in the morning. The machine spirit of JupyterLab has been consulted. It did not object.

The theme dresses the frame of JupyterLab in ornament and leaves the places where you read and write plain. It is a sibling of jupyterlab_galaxalabs_steel_dark_theme and has the same project structure.

The notebook in the Mechanicum theme

The launcher in the Mechanicum theme

Litany against the light theme

From the glare of the white background, Omnissiah, deliver us.
From the unpinned dependency, deliver us.
From the kernel that dies and leaves no traceback, deliver us.
From the notebook that ran yesterday and does not run today, deliver us.
From the seed that nobody fixed, deliver us.

Recite it once before a long training run. Recite it twice before a demo.

What the theme changes

  • Text areas - the editor, the notebook, the terminal and the file list are flat and nearly black, with parchment-coloured text. No pattern lies behind text
  • Panels and toolbars - crimson cloth with gold stitching
  • Top bar - the Cog Mechanicum as the icon in the top-left corner, the menu in capitals, and a frieze of Latin mottos in the free middle of the bar
  • Fonts - the theme sets no font: all text keeps the font of JupyterLab
  • Activity bars - plain iron; the open panel's icon stands on crimson
  • Tabs of the main area - the open tab is a crimson banner with a thin gold edge, on a bar of plain iron
  • Launcher - a thin strip of riveted steel across the top: the Cog Mechanicum, a skull that is half bone and half machine in a gear, between the words ADEPTUS and MECHANICUS in gold, steel plates with a gold rail beside it and hazard stripes at both ends; section titles over an embroidered band, cards as stitched patches with gears in the corners
  • Notebook - headings in gold with an embroidered band, a red first letter in the title, gears as list bullets, a crimson ribbon and a purity seal on the active cell
  • Dialogs and menus - cloth with a stitched hem; a purity seal hangs in the corner of every dialog
  • Status bar - iron, with AVE OMNISSIAH in binary in the free middle of the bar

Reading comfort

A blinded adept computes nothing. The ornament must not make the lab harder to use. Three rules hold everywhere:

  • Contrast - every text and code colour has a contrast of 4.8 or more against the editor background; body text has 10 or more
  • No bright areas - no large area is brighter than the crimson of the cloth. Selected rows are crimson with a gold thread, and no row is a block of gold
  • No motion - the theme has no animation
Code element Colour Contrast on the editor background
Text, variables parchment #cfc09c 10.3
Keywords rubric red #dc7560 6.0
Definitions bright gold #e3c878 11.3
Strings olive #a3b673 8.4
Numbers amber #dba552 8.4
Built-ins verdigris #74b9ad 8.2
Comments faded ink #8f7f66 4.8

Files

  • style/variables.css - the colours and sizes of JupyterLab's theme variables
  • style/custom.css - small corrections of JupyterLab's own styles, shared with the steel theme
  • style/mechanicum.css - the ornament
  • style/images/ - the images of the ornament. The gear, band, seal, frieze and binary strip are SVG drawings. The three parts of the launcher strip and the emblem of the top bar were designed with the image model Z-Image-Turbo. The hanging and the cloth texture are raster images that were generated for the Mechanicum banner project and reduced for this theme
  • tools/images.py - generates drafts of the launcher strip and of the emblem with the image model and composes the chosen drafts into the images of the theme. Its head says how to run it. The model misspells words, so every letter of a draft is read before the draft is chosen

Names and symbols

The theme follows the look of Warhammer 40,000. Its names and symbols belong to Games Workshop. The theme is a fan work and has no connection to Games Workshop.

Requirements

The machine spirit asks for little:

  • JupyterLab >= 4.0.0
  • a browser, and a will that does not break at the sight of crimson

Install

pip install jupyterlab-mechanicum-dark-theme

Then perform the rite of activation:

  1. Reload the browser page if JupyterLab was open during the installation. The machine spirit must wake again before it learns of the theme
  2. Choose Settings → Theme → Mechanicum Dark Theme
  3. Light a candle and apply sacred oil to the keyboard. This step is optional and has no measured effect

Uninstall

The cult records this act as tech-heresy. The command works all the same:

pip uninstall jupyterlab-mechanicum-dark-theme

Contributing

Development install

Note: You will need NodeJS to build the extension package.

  • invoke make to build the .whl package
  • invoke make clean to run cleanup & uninstall
  • invoke make install to build and install extension
  • invoke make uninstall to uninstall extension

make install raises the patch number of the version in package.json on every build.

The canticle of the build has three verses. Sing them in order:

  1. Burn incense before make install. If the build fails, burn more incense and read the log
  2. Thank the machine spirit when the wheel is built. It did the work
  3. Never edit the built files by hand. The Omnissiah sees it, and so does the next build

Checking a change

Test a change of the styles in JupyterLab before reporting it complete: the launcher, a notebook with rendered Markdown and an error output, a text file in the editor, an open menu, the command palette and a dialog.


Ave Omnissiah. May your kernels never die and your seeds stay fixed.

Metadata

Release files for jupyterlab-mechanicum-dark-theme 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jupyterlab-mechanicum-dark-theme 1.0.1
File Size Uploaded
jupyterlab_mechanicum_dark_theme-1.0.1.tar.gz 946.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jupyterlab-mechanicum-dark-theme 1.0.1
File Interpreter ABI Platform
jupyterlab_mechanicum_dark_theme-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / jupyterlab_mechanicum_dark_theme-1.0.1.tar.gz

Download URL jupyterlab_mechanicum_dark_theme-1.0.1.tar.gz
Size 946.9 kB
Tags Source
SHA-256 checksum
How to use checksums
041c58cdf84e9357fca60b53279edb603e8d54a31b8cf056f263cfa0fb817b79
BLAKE2b-256 checksum
How to use checksums
069620ff5a9f365e2d2486a50d82efc48fe5c0cae09bbc58179f65c1968b6d3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / jupyterlab_mechanicum_dark_theme-1.0.1-py3-none-any.whl

Download URL jupyterlab_mechanicum_dark_theme-1.0.1-py3-none-any.whl
Size 189.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1e955a5e5f81bd051d5057ad081ebc063ae6af2a03cb66857cab0aecba4ed6f6
BLAKE2b-256 checksum
How to use checksums
3b8f667aacaaaaa94375f0d2045f1941d9dcf872ce52b097638428debefecd7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page