The nebelung palette
nebelung is a silver-mist Catppuccin variant — the blue pulled out of the neutral ramp and the accents calmed (chroma ×0.9), keeping perceptual lightness identical. The result is a fog-grey scheme named for a cat breed the colour of high fog. Grey is the point.
The source of truth is palette/nebelung.hex.json in the
nebelung repo.
The four variants
Section titled “The four variants”Those two rules never mention “dark”, so they work in either polarity: applied to
Catppuccin Latte instead of Mocha they give the same theme as a light one.
Crossed with a contrast axis, that’s four palettes — picked in the rice with
theme.flavor and theme.contrast:
| Variant | Source | Rendered under | text on base |
|---|---|---|---|
nebelung | Mocha | (the tree root) | 11.3:1 |
nebelung-high-contrast | Mocha | high-contrast/ | 19.9:1 |
nebelung-latte | Latte | latte/ | 7.0:1 |
nebelung-latte-high-contrast | Latte | latte-high-contrast/ | 9.9:1 |
Every variant keeps its flavor’s accents unchanged — contrast is a property of the neutrals only, so a high-contrast rice is the same theme read more easily rather than a different one. Each ratio is asserted in nebelung’s CI, and there’s a test that all twelve ramp steps stay distinct, because a boost pushed too far clamps two of them into the same colour and silently costs a level of hierarchy.
Each variant also renders as its own Catppuccin flavor, so its files are named
after it — Ghostty’s light theme is
latte/ghostty/themes/catppuccin-latte.conf. The swatches below are the default
variant; view any of them in the
interactive preview.
The neutral ramp
Section titled “The neutral ramp”Twelve steps from near-black to soft white — the bones of the theme.
#d7d7d7text#c3c3c3subtext1#aeaeaesubtext0#9a9a9aoverlay2#858585overlay1#717171overlay0#5c5c5csurface2#494949surface1#343434surface0#202020base#191919mantle#121212crustThe accents
Section titled “The accents”Fourteen calmed accents. mauve is the family default; set another with
nebelhaus.theme.accent.
#f3e1ddrosewater#efceceflamingo#f2c4e5pink#c9a8f1mauve — the family default#ed8fa9red#e6a3admaroon#f5b58epeach#f7e2b5yellow#abe1a6green#9be0d5teal#91dbe8sky#7dc6e7sapphire#8db4f3blue#b5bff8lavenderUsing it in your own tools
Section titled “Using it in your own tools”nebelung ships a rendered theme for 50+ tools, generated from the palette with Whiskers. A sampling:
| Tool | Tool | Tool | Tool |
|---|---|---|---|
| Ghostty | Kitty | Alacritty | Starship |
| zellij | tmux | btop | bat |
| delta | fzf | lsd | yazi |
| lazygit | glow | helix | Zen browser |
| Slack | Obsidian | VS Code / Cursor | zsh-syntax-highlighting |
Two ways to consume them:
-
Copy a rendered file. Build the flake’s output tree and grab the file for your tool — e.g. Ghostty’s theme, bat’s
.tmTheme, lazygit’s per-accent.yml. Each tool’s README section shows where its config expects the file. -
Consume the flake from your own Nix config:
inputs.nebelung.url = "github:nebelhaus/nebelung";# rendered themes:# ${nebelung.packages.${system}.default}/<tool>/...# raw palette (name → "#hex") for configs you generate yourself:# nebelung.palette
Tuning the palette
Section titled “Tuning the palette”The palette is computed in OKLCH space, so you can rewrite
hue and chroma while preserving perceptual lightness. Three knobs at the top of
scripts/generate-palette.mjs control the look:
| Knob | Meaning | Default |
|---|---|---|
neutralHue | Hue (degrees) of the grey tint — 70° is a faint warm graphite | 70 |
neutralChroma | Strength of that tint; 0 is pure neutral grey | 0 |
accentChromaScale | How much accents are calmed (0.9 = 10% less saturated) | 0.9 |
Then regenerate and re-render:
./build.sh # regenerate palette + render every tool → dist/./build.sh --no-gen # render only (palette unchanged)This is a change in the nebelung repo, not your host file — see the nebelung README for the full workflow.