Skip to content

🌲 Explore switchable theme: Everforest #201

Description

@martinciu

🎯 Goal

Add Everforest (Dark Medium β€” Sainnhe's recommended default) as a
ninth selectable theme via the theme-set <name> fish switcher.
Machinery landed in #185; Gruvbox reference implementation in #193.

Variant pick: Dark Medium. Hard / Soft contrast change bg /
bg_dim only β€” accents stay identical. Light variants out of scope
(parallel reasoning to #188's deferral).

🎨 Palette (Dark Medium)

  • bg/surface: bg0 #2d353b, bg1 #343f44, bg2 #3d484d, bg3 #475258, bg4 #4f585e
  • fg: fg #d3c6aa, grey0 #7a8478, grey1 #859289, grey2 #9da9a0
  • accents: red #e67e80, orange #e69875, yellow #dbbc7f, green #a7c080, aqua #83c092, blue #7fbbb3, purple #d699b6
  • statusline: statusline1 (green) #a7c080, statusline2 (blue) #7fbbb3, statusline3 (red) #e67e80

πŸ“ Architecture

Machinery is settled (#185). Slot in following the Gruvbox shape (#193).

πŸ› οΈ Work breakdown

  • `.config/themes/everforest.tmux` β€” semantic `@color_*` map
  • `.config/themes/delta-everforest.gitconfig` β€” probe `bat --list-themes | grep -i everforest`; vendor `.tmTheme` from `sainnhe/sonokai` or `sainnhe/everforest` if missing
  • `.config/ghostty/theme-everforest.ghostty` β€” Ghostty 1.0+ likely ships "Everforest Dark" (verify with `ghostty +list-themes | grep -i everforest`); vendor if missing
  • `.config/starship-everforest.toml` β€” `pastel_rose = '#d699b6'` (Everforest purple/pink β€” closest rose analogue)
  • `.config/glow/glamour-everforest.json`
  • `.config/gh-dash/config-everforest.yml`
  • `.config/lnav/configs/installed/theme-everforest.json` β€” probe; vendor theme-defs if missing
  • nvim: `sainnhe/everforest` plugin spec (the canonical Vimscript port; or `neanias/everforest-nvim` for a Lua-native alternative); extend resolver
  • Extend `theme-set.fish` switch (`case everforest`) + completion + `test-theme-switch.sh` round-trip

βš–οΈ Tradeoff

Win: green-tinted warm palette, often described as "Gruvbox's
gentler cousin". Lower-contrast than Gruvbox so easier on the eyes for
long sessions; distinct identity through its green-leaning fg
(#d3c6aa).

Loss: Everforest's red #e67e80 and orange #e69875 are even
closer in hue than Gruvbox's
(#cc241d red vs #d65d0e orange).
The unique-accent rule walk-through from #188 applies more sharply
here β€” strongly consider widening the PR chip's separation.

🚦 Open questions

  • Red vs orange collision (sharper than Gruvbox's):
    • Status-quo: PR chip orange #e69875, red #e67e80 defined but
      unused on the bar β†’ no visible collision, just a tight palette.
    • Alternative: repaint PR chip to aqua #83c092 to widen the
      palette spread and free up orange/red for future pins.
    • Recommendation: keep PR chip orange in v1 (matches Solarized /
      Mocha / Dracula / Gruvbox's positional semantic); revisit if the
      visual check after merge reads as flat.
  • Chip text inversion: muted warm palette β†’ dark-on-accent
    (@color_light_fg = '#2d353b' bg0). Same logic as Gruvbox.
  • nvim plugin pick: `sainnhe/everforest` is the author's canonical
    Vimscript port. `neanias/everforest-nvim` is a Lua reimplementation
    with treesitter-native highlights β€” slightly faster startup, more
    granular config. Default to author's canonical for fidelity; revisit
    if startup time matters.
  • Hard vs Medium vs Soft contrast: Medium is the author's
    recommended default. Hard is most popular among Gruvbox refugees who
    want more contrast; Soft for low-light workflows. Pick Medium for v1.
  • Unique-accent rule mapping (clean β€” seven distinct hues
    including aqua):
    • session chip (blue): blue #7fbbb3
    • active window pin (green): green #a7c080
    • PR chip (orange): orange #e69875 (see collision note above)
    • git main chip (violet): purple #d699b6
    • git wt chip (yellow): yellow #dbbc7f

🧠 Lessons

See consolidated lessons in #188 and the Gruvbox PR (#193). The red /
orange collision walk-through from #188 applies more sharply here.

πŸ”— Links

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions