thomas.koppandClaude Opus 5 4ea70c669e feat: Gruvbox Dark theme for Yazi 26.9, icons included
Panel chrome, filetype colours and the full 725-entry icon table.

The icon table is Yazi's preset with every glyph colour remapped onto the
Gruvbox palette: nearest neighbour in Oklab with lightness weighted down so
hue drives the match, chromatic and greyish sources matched from separate
pools, and target tones below 3:1 contrast on #282828 excluded. 221 upstream
colours collapse onto 19 Gruvbox tones, dimmest icon at 3.48:1.

regen-icons.py reproduces the mapping against a newer Yazi preset.

Uses the current schema ([mgr]/[tabs]/[pick]/[cmp]), not the pre-25.x one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 12:20:12 +02:00

yazi-gruvbox

A Gruvbox Dark theme.toml for Yazi — including the icon table, so the devicons in front of your files stop looking like a paint spill on an otherwise muted colour scheme.

Written against Yazi 26.9. It uses the current schema ([mgr], [tabs], [pick], [cmp], [indicator], …), not the pre-25.x one — older Gruvbox themes floating around still use [manager] and [select] and will throw errors on a current Yazi.

What it covers

Panel chrome, status bar, tabs, mode indicator, which-key, confirm/spot/notify popups, picker, input, completion, task manager, help — plus:

File and directory names ([filetype]):

directories #83a598 blue
regular files #ebdbb2 fg1
executables #b8bb26 green
archives #fe8019 orange
images #fabd2f yellow
audio / video #d3869b purple
PDF / doc #8ec07c aqua
orphan symlinks red background

Icons ([icon]): all 725 entries of Yazi's preset table, every glyph colour remapped to its nearest Gruvbox tone.

How the icon colours were derived

Yazi's preset ships 725 icon entries using 221 distinct colours from the nvim-tree/devicons palette — saturated web colours that clash badly with Gruvbox's muted ground.

regen-icons.py maps each of them onto the Gruvbox palette:

  • Nearest neighbour in Oklab, so the match is perceptual rather than a naive RGB distance.
  • Lightness weighted down (0.7) in the distance metric, so hue drives the result. Docker blue stays blue, Ruby red stays red, instead of everything collapsing toward whatever tone happens to be equally bright.
  • Chromatic and greyish sources are matched from separate pools (split at Oklab chroma 0.04). Without that split a vivid magenta can land on grey, and white can land on orange.
  • Low-contrast targets are excluded. #cc241d (2.69:1) and #7c6f64 (3.03:1) on #282828 were dropped from the target palette — icons are non-text, so 3:1 is the bar. The dimmest icon now sits at 3.48:1.

221 colours end up on 19 Gruvbox tones. Icons stay colourful and stay distinguishable; they just stop shouting.

Install

git clone https://git.opennerds.org/templis/yazi-gruvbox
cp yazi-gruvbox/theme.toml ~/.config/yazi/theme.toml

theme.toml overrides Yazi's built-in theme-dark.toml; anything it does not set keeps the default.

Optional: Gruvbox syntax highlighting in previews

Not shipped here — the usual Gruvbox .tmTheme for Yazi is AGPL-3.0 and would pull this repository along with it (see THIRD-PARTY.md). To get it:

curl -o ~/.config/yazi/Gruvbox-Dark.tmTheme \
  https://raw.githubusercontent.com/poperigby/gruvbox-dark-yazi/main/Gruvbox-Dark.tmTheme

Then uncomment in theme.toml:

[mgr]
syntect_theme = "~/.config/yazi/Gruvbox-Dark.tmTheme"

Keeping the icon table current

The [icon] block replaces Yazi's preset table wholesale. Icons added by later Yazi releases will not show up until it is regenerated:

git clone --depth 1 https://github.com/sxyazi/yazi
awk '/^\[icon\]/{f=1} f' yazi/yazi-config/preset/theme-dark.toml > icons-src.toml
./regen-icons.py icons-src.toml      # writes icon-gruvbox.toml

Then replace the [icon] block in theme.toml with the generated file. The script prints which Gruvbox tone each source colour landed on.

Licence

MIT — see LICENSE. Derived icon data is MIT as well; notices in THIRD-PARTY.md.

S
Description
Gruvbox Dark theme for Yazi — panel colours, remapped icon table, own tmTheme, and sharper PDF previews
https://git.shron.de/templis/yazi-gruvbox
Readme MIT
54 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 79.1%
Lua 20.9%