Skip to content

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.

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:

VariantSourceRendered undertext on base
nebelungMocha(the tree root)11.3:1
nebelung-high-contrastMochahigh-contrast/19.9:1
nebelung-latteLattelatte/7.0:1
nebelung-latte-high-contrastLattelatte-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.

Twelve steps from near-black to soft white — the bones of the theme.

#d7d7d7text
#c3c3c3subtext1
#aeaeaesubtext0
#9a9a9aoverlay2
#858585overlay1
#717171overlay0
#5c5c5csurface2
#494949surface1
#343434surface0
#202020base
#191919mantle
#121212crust

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
#b5bff8lavender

nebelung ships a rendered theme for 50+ tools, generated from the palette with Whiskers. A sampling:

ToolToolToolTool
GhosttyKittyAlacrittyStarship
zellijtmuxbtopbat
deltafzflsdyazi
lazygitglowhelixZen browser
SlackObsidianVS Code / Cursorzsh-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

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:

KnobMeaningDefault
neutralHueHue (degrees) of the grey tint — 70° is a faint warm graphite70
neutralChromaStrength of that tint; 0 is pure neutral grey0
accentChromaScaleHow much accents are calmed (0.9 = 10% less saturated)0.9

Then regenerate and re-render:

Terminal window
./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.