rewrite README with new image references
118
README.md
@@ -1,18 +1,15 @@
|
|||||||
# Monobiome
|
# Monobiome
|
||||||
`monobiome` is a minimal, balanced color palette for use in terminals and text
|
`monobiome` is a minimal, balanced color palette for use in terminals and text
|
||||||
editors. It was designed in OKLCH space to achieve perceptual uniformity across
|
editors. It was designed in OKLCH space to achieve perceptual uniformity across
|
||||||
all hues at various levels of luminance, and does so for _five_ monotone bases
|
all hues at various levels of luminance, and does so for eight monotone bases
|
||||||
and _five_ accent colors (plus one gray "default"). Each of the monotone base
|
and eight accent colors (plus one zero chroma default base). Each of the
|
||||||
colors (named according to a natural biome whose colors they loosely resemble)
|
monotone base colors (named according to a natural biome whose colors they
|
||||||
are designed to achieve identical contrast with the accents, and thus any one
|
loosely resemble) are designed to achieve identical contrast with the accents,
|
||||||
of the options can be selected to change the feeling of the palette without
|
and thus any one of the options can be selected to change the feeling of the
|
||||||
sacrificing readability.
|
palette without sacrificing readability.
|
||||||
|
|
||||||

|

|
||||||
_(Preview of default light and dark theme variants)_
|
_(Preview of light and dark alpine theme variants)_
|
||||||
|
|
||||||
See screenshots for the full set of theme variants in [THEMES](THEMES.md) (also
|
|
||||||
discussed below).
|
|
||||||
|
|
||||||
The name "monobiome" connects the palette to its two key sources of
|
The name "monobiome" connects the palette to its two key sources of
|
||||||
inspiration:
|
inspiration:
|
||||||
@@ -27,42 +24,79 @@ inspiration:
|
|||||||
grass, basically).
|
grass, basically).
|
||||||
|
|
||||||
## Palette
|
## Palette
|
||||||
The `monobiome` palette consists of four monotone bases and five accent colors,
|
The `monobiome` palette is fundamentally a set of parameterized curves in OKLCH
|
||||||
each of which is anchored by hue and spread uniformly across lightness levels
|
color space. Each color identity has one monotone curve and one accent curve,
|
||||||
15 to 95 (in OKLCH space).
|
both of which have fixed hue values and vary from 10% to 98% lightness.
|
||||||
|
Monotone curves have fixed chroma, whereas the accent curves' chroma varies
|
||||||
|
smoothly as a function of lightness within sRGB gamut bounds.
|
||||||
|
|
||||||

|
| Chroma curves | Color trajectories |
|
||||||
|
|---|---|
|
||||||
|
|  |  |
|
||||||
|
|
||||||
The chroma curve for each accent is carefully designed to vary smoothly across
|
| Palette |
|
||||||
the lightness spectrum, with the goal of retaining strong color identity in all
|
|---|
|
||||||
settings. Additionally, as alluded to above, the (WCAG 2) contrast ratio
|
|  |
|
||||||
between any choice of monotone background at a given lightness level and the
|
|
||||||
accent colors is virtually identical ($\pm 0.1$). Put another way, the relative
|
There are eight monotone-accent pairs, plus a single grey trajectory:
|
||||||
contrast between accents depends only on the _lightness_ of the background
|
|
||||||
monotone, not its hue. *(Note that this is not generally the case; at a fixed
|
| Monotone / biome | Accent color | Hue |
|
||||||
lightness level, the contrast between two colors depends on their hue.)*
|
| --- | --- | --- |
|
||||||
|
| alpine | grey | n/a |
|
||||||
|
| badlands | red | 29 |
|
||||||
|
| chaparral | orange | 62.5 |
|
||||||
|
| savanna | yellow | 104 |
|
||||||
|
| grassland | green | 148 |
|
||||||
|
| reef | cyan | 205 |
|
||||||
|
| tundra | blue | 262 |
|
||||||
|
| heathland | violet | 306 |
|
||||||
|
| moorland | magenta | 350 |
|
||||||
|
|
||||||
|
The `alpine`/`grey` curve has zero chroma (and is thus invariant to hue),
|
||||||
|
varying only in lightness from dark to light grey.
|
||||||
|
|
||||||
## Concrete themes
|
## Concrete themes
|
||||||
|
|
||||||

|
| Dark themes | Light themes |
|
||||||
|
|---|---|
|
||||||
|
|  |  |
|
||||||
|
|
||||||

|
Themes are derived from the `monobiome` palette by selecting a monotone base
|
||||||
|
(the "biome"), a base lightness, and a contrast level. Although one can use
|
||||||
|
arbitrary contrast metrics, OKLCH distance (Euclidean distance in OKLab)
|
||||||
|
is designed to capture perceptual distinction. As such, perceptually uniform
|
||||||
|
themes under arbitrary monotones can be generated by calculating the accent
|
||||||
|
colors equidistant from that base. This is equivalent to determining the points
|
||||||
|
at which a sphere centered at the monotone base intersects with the accent
|
||||||
|
curves; the radius of such a sphere effectively determines the theme contrast,
|
||||||
|
and the colors on the sphere surface are equally perceptually distinct relative
|
||||||
|
to the background.
|
||||||
|
|
||||||
Themes are derived from the `monobiome` palette by varying both the monotone
|
The following plots show the intersection of the sphere centered at a fixed
|
||||||
hue (the "biome") and the extent of the background/foreground lightness (the
|
background color (`alpine` biome with a lightness of 20) under variable radii:
|
||||||
"harshness"). This is done for both light and dark schemes, and in each case
|
|
||||||
accent colors are selected at a lightness level that ensures each meet a
|
|
||||||
minimum contrast relative to the primary background. The following diagram
|
|
||||||
shows each of the 36 resulting combinations:
|
|
||||||
|
|
||||||

|
| | `-l 20 -d 0.3` | `-l 20 -d 0.4` | `-l 20 -d 0.5` |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Color visualization |  |  |  |
|
||||||
|
| Editor preview |  |  |  |
|
||||||
|
|
||||||
|
In short, the base lightness (`-l`) dictates the brightness of the background,
|
||||||
|
and the contrast (`-d`) controls how perceptually distinct the accent colors
|
||||||
|
appear with respect to that background. These are free parameters of the
|
||||||
|
`monobiome` model: themes can be generated under arbitrary settings that meet
|
||||||
|
user preferences.
|
||||||
|
|
||||||
The "soft" harshness level uses monotone shades closer to the mid-shade
|
The "soft" harshness level uses monotone shades closer to the mid-shade
|
||||||
(lightness level 55), whereas "hard" harshness uses shades further from it.
|
(lightness level 55), whereas "hard" harshness uses shades further from it.
|
||||||
Once the biome and harshness level are chosen, we're left with a bounded
|
Once the biome and harshness level are chosen, we're left with a bounded
|
||||||
monotone range over which common theme elements can be defined. For example,
|
monotone range over which common theme elements can be defined.
|
||||||
the following demonstrates how background and foreground elements are chosen
|
|
||||||
for the `monobiome` Vim themes:
|
## Applications
|
||||||
|
When generating full application themes, fixed lightness steps are used in the
|
||||||
|
chosen monotone trajectory to establish consistent levels of distinction
|
||||||
|
between background layers. For example, the following demonstrates how
|
||||||
|
background and foreground elements are chosen for the `monobiome` vim/neovim
|
||||||
|
themes:
|
||||||
|
|
||||||
.
|
[DESIGN](DESIGN.md).
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
This repo provides the 36 theme files for `kitty`, `vim`/`neovim`, and `fzf` in
|
This repo provides *relative* theme templates for `kitty`, `vim`/`neovim`, and
|
||||||
the `app-config/` directory. You can also find raw palette colors in
|
`fzf` in the `templates/apps` directory, along with *concrete* themes in
|
||||||
`colors/monobiome.toml` if you want to use them to define themes for other
|
`app-config/`. You can also find raw palette colors in `templates/apps/groups/`
|
||||||
applications.
|
if you want to use them to define static themes for other applications.
|
||||||
|
|
||||||
Each of the files in the `app-config/` directory are named according to
|
Each of the files in the `app-config/` directory are named according to
|
||||||
|
|
||||||
@@ -93,7 +127,7 @@ Each of the files in the `app-config/` directory are named according to
|
|||||||
```
|
```
|
||||||
|
|
||||||
For example, `monobiome-tundra-dark-soft.vim` is the Vim theme file for the
|
For example, `monobiome-tundra-dark-soft.vim` is the Vim theme file for the
|
||||||
dark `tundra` variant with the soft harshness level.
|
dark `tundra` variant with a soft harshness level.
|
||||||
|
|
||||||
## Applications
|
## Applications
|
||||||
- `kitty`
|
- `kitty`
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 4.1 MiB |
|
Before Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 4.8 MiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
BIN
images/curves/cstar-curves-v140.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 3.5 MiB |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 982 B |
|
Before Width: | Height: | Size: 981 B |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 5.1 MiB |
BIN
images/oklch/mb_b20_d30.gif
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
images/oklch/mb_b20_d40.gif
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
images/oklch/mb_b20_d50.gif
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 562 KiB After Width: | Height: | Size: 29 KiB |
BIN
images/palette_grid.png
Normal file
|
After Width: | Height: | Size: 562 KiB |
BIN
images/render/v140-demo-alpine-dark-d0.3.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
images/render/v140-demo-alpine-dark-d0.4.png
Normal file
|
After Width: | Height: | Size: 153 KiB |
BIN
images/render/v140-demo-alpine-dark-d0.5.png
Normal file
|
After Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 6.2 MiB |
BIN
images/repo_preview_banner.png
Normal file
|
After Width: | Height: | Size: 521 KiB |
|
Before Width: | Height: | Size: 953 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 266 KiB |
|
Before Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 214 KiB |
|
Before Width: | Height: | Size: 207 KiB |
|
Before Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 213 KiB |
|
Before Width: | Height: | Size: 212 KiB |
BIN
images/trajectories.gif
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
@@ -6,8 +6,24 @@ build-backend = "setuptools.build_meta"
|
|||||||
name = "monobiome"
|
name = "monobiome"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
description = "Monobiome color palette"
|
description = "Monobiome color palette"
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
authors = [
|
||||||
|
{ name="Sam Griesemer", email="git@olog.io" },
|
||||||
|
]
|
||||||
|
readme = "README.md"
|
||||||
|
license = "MIT"
|
||||||
|
keywords = [
|
||||||
|
"tempate-engine",
|
||||||
|
"color-palette",
|
||||||
|
]
|
||||||
|
classifiers = [
|
||||||
|
"Programming Language :: Python",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
"Development Status :: 3 - Alpha",
|
||||||
|
|
||||||
|
"Intended Audience :: Developers",
|
||||||
|
"Intended Audience :: End Users/Desktop",
|
||||||
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"coloraide>=5.1",
|
"coloraide>=5.1",
|
||||||
"imageio[ffmpeg]>=2.37.2",
|
"imageio[ffmpeg]>=2.37.2",
|
||||||
@@ -22,20 +38,35 @@ dependencies = [
|
|||||||
"scipy>=1.16.2",
|
"scipy>=1.16.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependency-groups]
|
|
||||||
dev = [
|
|
||||||
"ipykernel>=7.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
monobiome = "monobiome.__main__:main"
|
monobiome = "monobiome.__main__:main"
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
dev = [
|
||||||
|
"ipykernel",
|
||||||
|
]
|
||||||
|
doc = [
|
||||||
|
"furo",
|
||||||
|
"myst-parser",
|
||||||
|
"sphinx",
|
||||||
|
"sphinx-togglebutton",
|
||||||
|
"sphinx-autodoc-typehints",
|
||||||
|
]
|
||||||
|
test = [
|
||||||
|
"pytest",
|
||||||
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://doc.olog.io/monobiome"
|
Homepage = "https://doc.olog.io/monobiome"
|
||||||
Documentation = "https://doc.olog.io/monobiome"
|
Documentation = "https://doc.olog.io/monobiome"
|
||||||
Repository = "https://git.olog.io/olog/monobiome"
|
Repository = "https://git.olog.io/olog/monobiome"
|
||||||
Issues = "https://git.olog.io/olog/monobiome/issues"
|
Issues = "https://git.olog.io/olog/monobiome/issues"
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"ipykernel>=7.0.1",
|
||||||
|
]
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
include = ["monobiome*"]
|
include = ["monobiome*"]
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,17 @@ prefix=${1:-}
|
|||||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
render_script="$script_dir/render.sh"
|
render_script="$script_dir/render.sh"
|
||||||
|
|
||||||
biomes=(alpine badlands chaparral savanna grassland tundra reef heathland moorland)
|
biomes=(alpine) # badlands chaparral savanna grassland tundra reef heathland moorland)
|
||||||
modes=(light)
|
modes=(dark)
|
||||||
|
distances=(0.3 0.4 0.5)
|
||||||
|
|
||||||
for biome in "${biomes[@]}"; do
|
for biome in "${biomes[@]}"; do
|
||||||
for mode in "${modes[@]}"; do
|
for mode in "${modes[@]}"; do
|
||||||
|
for dist in "${distances[@]}"; do
|
||||||
echo "Applying $biome-$mode theme"
|
echo "Applying $biome-$mode theme"
|
||||||
monobiome scheme "$mode" "$biome" \
|
monobiome scheme "$mode" "$biome" \
|
||||||
-d 0.42 \
|
-d "$dist" \
|
||||||
-l 90 \
|
-l 20 \
|
||||||
-o ~/.config/symconf/groups/theme/monobiome-none.toml
|
-o ~/.config/symconf/groups/theme/monobiome-none.toml
|
||||||
symconf config \
|
symconf config \
|
||||||
-a kitty,nvim \
|
-a kitty,nvim \
|
||||||
@@ -25,7 +27,7 @@ for biome in "${biomes[@]}"; do
|
|||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
echo "Taking screenshot..."
|
echo "Taking screenshot..."
|
||||||
"$render_script" 1920 1440 "images/render/$prefix-$biome-$mode.png" nvim \
|
"$render_script" 1920 1440 "images/render/$prefix-$biome-$mode-d$dist.png" nvim \
|
||||||
+':highlight Cursor blend=100' \
|
+':highlight Cursor blend=100' \
|
||||||
+':set guicursor=n:block-Cursor' \
|
+':set guicursor=n:block-Cursor' \
|
||||||
+':silent! setlocal nonumber nocursorline signcolumn=no foldcolumn=no' \
|
+':silent! setlocal nonumber nocursorline signcolumn=no foldcolumn=no' \
|
||||||
@@ -33,3 +35,4 @@ for biome in "${biomes[@]}"; do
|
|||||||
examples/class.py
|
examples/class.py
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
done
|
||||||
|
|||||||