3 Commits

Author SHA1 Message Date
4a5f8cbb39 remove readme description of symconf dependence 2025-12-29 23:05:06 -08:00
eb02be9582 fix README links to template files 2025-12-28 17:43:01 -08:00
74c22552df fix a few README typos 2025-12-20 04:56:12 -08:00
3 changed files with 36 additions and 35 deletions

View File

@@ -30,12 +30,12 @@ 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 |
|---|---|
| Chroma curves | Color trajectories |
|-------------------------------------------------------|------------------------------------------|
| ![Chroma curves](images/curves/cstar-curves-v140.png) | ![Trajectories](images/trajectories.gif) |
| Palette |
|---|
| Palette |
|--------------------------------|
| ![Palette](images/palette.png) |
Chroma curves are designed specifically to establish a distinct role for each
@@ -60,8 +60,8 @@ varying only in lightness from dark to light grey.
## Themes
| Dark themes | Light themes |
|---|---|
| Dark themes | Light themes |
|----------------------------------------|------------------------------------------|
| ![Dark themes](images/dark_themes.png) | ![Light themes](images/light_themes.png) |
Themes are derived from the `monobiome` palette by selecting a monotone base
@@ -78,10 +78,10 @@ to the background.
The following plots show the intersection of the sphere centered at a fixed
background color (`alpine` biome with a lightness of 20) under variable radii:
| | `-l 20 -d 0.3` | `-l 20 -d 0.4` | `-l 20 -d 0.5` |
|---|---|---|---|
| Color visualization | ![](images/oklch/mb_b20_d30.gif) | ![](images/oklch/mb_b20_d40.gif) | ![](images/oklch/mb_b20_d50.gif) |
| Editor preview | ![](images/render/v140-demo-alpine-dark-d0.3.png) | ![](images/render/v140-demo-alpine-dark-d0.4.png) | ![](images/render/v140-demo-alpine-dark-d0.5.png) |
| | `-l 20 -d 0.3` | `-l 20 -d 0.4` | `-l 20 -d 0.5` |
|---------------------|---------------------------------------------------|---------------------------------------------------|---------------------------------------------------|
| Color visualization | ![](images/oklch/mb_b20_d30.gif) | ![](images/oklch/mb_b20_d40.gif) | ![](images/oklch/mb_b20_d50.gif) |
| Editor preview | ![](images/render/v140-demo-alpine-dark-d0.3.png) | ![](images/render/v140-demo-alpine-dark-d0.4.png) | ![](images/render/v140-demo-alpine-dark-d0.5.png) |
In short, the base lightness (`-l`) dictates the brightness of the background,
and the contrast (`-d`) controls how perceptually distinct the accent colors
@@ -146,11 +146,6 @@ the `monobiome` CLI:
Running these commands in sequence from the repo root should work
out-of-the-box, after having installed the CLI tool.
The `monobiome` CLI
produces the scheme file for requested parameters, and the [`symconf`][3] CLI
pushes palette colors through the scheme and into the app templates to yield a
concrete theme.
## Applications
This repo provides palette-agnostic theme templates for `kitty`,
`vim`/`neovim`, and `fzf` in the `templates/` directory. Pre-generated
@@ -178,7 +173,7 @@ One can set these themes for the provided applications as follows:
```
Themes are generated using the [`kitty` theme
template](templates/apps/kitty/templates/active.theme).
template](templates/kitty/active.theme).
- `vim`/`neovim`
@@ -193,7 +188,7 @@ One can set these themes for the provided applications as follows:
```
Themes are generated using the [`vim` theme
template](templates/apps/nvim/templates/theme.vim).
template](templates/nvim/theme.vim).
- `fzf`
@@ -206,7 +201,7 @@ One can set these themes for the provided applications as follows:
```
Themes are generated using the [`fzf` theme
template](templates/apps/fzf/templates/active.theme).
template](templates/fzf/active.theme).
- Firefox
@@ -214,13 +209,11 @@ One can set these themes for the provided applications as follows:
add-ons][2], and switch between light/dark schemes based on system settings.
You can also download raw XPI files for each theme in `app-config/firefox/`,
each of which is generated using the [Firefox `manifest.json`
template](templates/apps/firefox/templates/none-dark.manifest.json).
template](templates/firefox/auto-manifest.json).
Static [light][4] and [dark][5] themes are additionally available (i.e., that
don't change with system settings).
![Firefox theme previews](images/firefox/themes.png)
## CLI installation
A brief theme generation guide was provided in the [Generation
section](#generation), making use of the `monobiome` CLI. This tool can be
@@ -232,7 +225,7 @@ uv tool install monobiome
pipx install monobiome
```
The `monobiome` has provides three subcommands:
`monobiome` provides three subcommands:
- `monobiome palette`: generate palette files from raw parameterized curves
@@ -295,6 +288,14 @@ The `monobiome` has provides three subcommands:
output file to write filled template
```
## Config management
The `monobiome` CLI tool attempts to provide the minimal functionality needed
to produce customized themes for individual applications. If seeking a more
holistic, system-wide approach, you might consider using [`symconf`][3], a
general-purpose application config manager. `symconf` provides the templating
subsystem used for `monobiome` internals, and can be configured to apply live
theme updates to many apps with a single command line invocation.
[1]: https://github.com/isa/TextMate-Themes/blob/master/monoindustrial.tmTheme
[2]: https://addons.mozilla.org/en-US/firefox/collections/18495484/monobiome/

View File

@@ -17,7 +17,7 @@ def register_parser(subparsers: _SubparserType) -> None:
type=str,
default="hex",
choices=["hex", "oklch"],
help="Color notation to export (either hex or oklch)",
help="color notation to export (either hex or oklch)",
)
parser.add_argument(
"-f",
@@ -25,13 +25,13 @@ def register_parser(subparsers: _SubparserType) -> None:
type=str,
default="toml",
choices=["json", "toml"],
help="Format of palette file (either JSON or TOML)",
help="format of palette file (either JSON or TOML)",
)
parser.add_argument(
"-o",
"--output",
type=str,
help="Output file to write palette content",
help="output file to write palette content",
)
parser.set_defaults(func=handle_palette)

View File

@@ -16,13 +16,13 @@ def register_parser(subparsers: _SubparserType) -> None:
"mode",
type=str,
choices=["dark", "light"],
help="Scheme mode (light or dark)"
help="scheme mode (light or dark)"
)
parser.add_argument(
"biome",
type=str,
choices=list(monotone_h_map.keys()),
help="Biome setting for scheme."
help="biome setting for scheme"
)
parser.add_argument(
"-m",
@@ -30,7 +30,7 @@ def register_parser(subparsers: _SubparserType) -> None:
type=str,
default="oklch",
choices=["wcag", "oklch", "lightness"],
help="Metric to use for measuring swatch distances."
help="metric to use for measuring swatch distances"
)
# e.g., wcag=4.5; oklch=0.40; lightness=40
@@ -39,13 +39,13 @@ def register_parser(subparsers: _SubparserType) -> None:
"--distance",
type=float,
default=0.40,
help="Distance threshold for specified metric",
help="distance threshold for specified metric",
)
parser.add_argument(
"-o",
"--output",
type=str,
help="Output file to write scheme content",
help="output file to write scheme content",
)
# these params remain rooted in lightness; no need to accommodate metric
@@ -58,13 +58,13 @@ def register_parser(subparsers: _SubparserType) -> None:
"--l-base",
type=int,
default=20,
help="Minimum lightness level (default: 20)",
help="minimum lightness level (default: 20)",
)
parser.add_argument(
"--l-step",
type=int,
default=5,
help="Lightness step size (default: 5)",
help="lightness step size (default: 5)",
)
# gaps
@@ -72,19 +72,19 @@ def register_parser(subparsers: _SubparserType) -> None:
"--fg-gap",
type=int,
default=50,
help="Foreground lightness gap (default: 50)",
help="foreground lightness gap (default: 50)",
)
parser.add_argument(
"--grey-gap",
type=int,
default=30,
help="Grey lightness gap (default: 30)",
help="grey lightness gap (default: 30)",
)
parser.add_argument(
"--term-fg-gap",
type=int,
default=65,
help="Terminal foreground lightness gap (default: 60)",
help="terminal foreground lightness gap (default: 60)",
)
parser.set_defaults(func=handle_scheme)