Foraya is a custom color scheme blending three themes:
- Everforest Hard supplies the base/surface structure. Its own
published
bg0value,#272E33, is the anchor background color for the whole scheme (the darkest of the user's two favorite schemes). - Ayu Dark supplies the cursor, LSP diagnostic hints, and VCS colors
(the
specialpalette block) — a smaller structural thread than in earlier drafts, no longer the background. - Gruvbox supplies vivid, warm, saturated accent colors (the "vivid" accent track).
- Everforest supplies muted, soft, natural-toned accent colors (the "muted" accent track, and the default).
The philosophy mirrors the repo's existing hand-built Gruvforest kitty
theme (files/dotfiles/kitty/.config/kitty/themes/custom.conf, a
Gruvbox+Everforest blend) — warm accents on a cool backdrop — just widened
to three source themes.
Everything lives under theming/foraya/:
palette.yml— the single source of truth for every color token.generate.py— the CLI that renders per-app config files from it.targets.yml— maps each template to thefiles/dotfiles/<app>/...file it writes.templates/*.j2— one Jinja2 template per app.lib/colorspace.py— derives the soft/hard contrast tiers from the medium tier via an HSL lightness shift, rather than hand-baking three full palettes.
Do not hand-edit the generated output files (anything under
files/dotfiles/<app>/.../foraya* or themes/foraya*, plus
i3blocks/.config/i3blocks/config, polybar/.config/polybar/colors-foraya.ini,
and starship/.config/starship.toml, which the generator owns outright).
Edit palette.yml and regenerate instead.
python3 theming/foraya/generate.py --contrast hard --accent muted
--contrast {soft,medium,hard}(defaulthard) — background darkness.hardis the anchor (#272E33, Everforest Hard's ownbg0);medium/softare computed at render time by shifting lighter.--accent {vivid,muted}(defaultmuted) —vividpulls the 7 semantic accent colors from Gruvbox,mutedpulls them from Everforest. Ayu's own accent (gold#E6B450, used for the cursor and a few UI highlights) is fixed regardless of this knob.--apps kitty,nvim,...— regenerate a subset only (default: all 8).--dry-run— print what would change, write nothing.--diff— print a diff before writing.
nvim, kitty, alacritty, tmux, i3 (+ i3blocks), polybar, rofi, starship,
dolphin (via a generated KDE/Qt .colors scheme, see below).
Deferred to a later pass: waybar, wofi, swaync, VS Code, ranger, zsh, hyprland, weston.
Most apps have a "foraya" theme file that coexists with other theme files until you flip one line:
| App | Activation |
|---|---|
| kitty | include themes/foraya.conf in kitty.conf |
| alacritty | import = ["~/.config/alacritty/themes/foraya.toml"] in alacritty.toml |
| tmux | source-file ~/.tmux-foraya.conf in .tmux.conf |
| i3 | include themes/foraya in config |
| rofi | @theme "~/.config/rofi/themes/foraya.rasi" in config.rasi |
| nvim | colorscheme foraya in lua/settings/init.lua |
| dolphin | ColorScheme=Foraya under [General] in ~/.config/kdeglobals |
polybar (colors-foraya.ini via include-file), i3blocks
(config), and starship (starship.toml) have no include mechanism,
so the generator owns those files outright — regenerating them is
activating them.
Dolphin's .colors scheme renders to
files/dotfiles/dolphin/.local/share/color-schemes/Foraya.colors (KDE
looks for color schemes there) and is activated from a separate,
hand-maintained files/dotfiles/dolphin/.config/kdeglobals — the same
"generator owns the palette, a hand-edited one-line include activates it"
split used everywhere else.
files/dotfiles/nvim/.config/nvim/lua/settings/init.lua(lines ~6-53) has pre-existing hardcodednvim_set_hloverrides in a mix of Gruvbox/Nord/ad-hoc hex (Noice, Notify, Telescope floats, GitGutter). These run aftercolorscheme forayaand will visually clash with it. Update them to pull fromrequire("foraya.palette")in a follow-up.- Second pass apps (waybar, wofi, swaync, VS Code, ranger, zsh, hyprland, weston) are not yet templated.