Skip to content

Theme families: Ayu, Kanagawa, Everforest, Flexoki, Night Owl (#401) - #418

Merged
raiseCatError merged 3 commits into
devfrom
feature/v021-themes
Oct 18, 2026
Merged

raiseCatError merged 3 commits into
devfrom
feature/v021-themes

Conversation

@raiseCatError

Copy link
Copy Markdown
Owner

Stacked on #417 (modules) → #416 → #415 → #414 → #413 → #412 → #411. Merge in order.

What

Twelve bundled variants in five new families, all from MIT-licensed upstream sources pinned to a commit. Values were extracted from the raw files, not from memory or summaries. Sources, revisions, licenses (copyright lines read from each LICENSE) and the role mapping are in docs/design/theme-families.md.

Family Variants Source (revision)
Ayu Dark, Mirage (default), Light ayu-theme/ayu-colors themes/*.yaml (d461f029): base palette, editor/UI fg, panel bg, accent tint, error
Kanagawa Wave (default), Dragon, Lotus rebelot/kanagawa.nvim colors.lua + themes.lua (bb85e4bf): each theme's own fun/keyword/string/type/identifier/bg_p2/nontext/comment/bg_visual/ok/error
Everforest Dark, Light (medium) sainnhe/everforest palette.md (85a86eb6)
Flexoki Dark, Light kepano/flexoki README (8d723bac): 400 accents and base tiers for dark, 600 for light, as documented
Night Owl Night Owl, Light Owl sdras/night-owl-vscode-theme theme JSON (cc291eba)
  • These themes recolor NMSh's own prompt fills and chrome only. The host terminal's colors and configuration are never touched.
  • Every role fill passes the existing 4.5:1 module-text contrast test.
  • Light variants keep NMSh's text tiers, as the existing light families do.
  • Existing ids, stored preferences and the Lavender default are unchanged. Family defaults: Ayu Mirage, Kanagawa Wave, Everforest Dark, Flexoki Dark, Night Owl.
  • Theme Studio: the Built-in list grew to 43 entries, so it gains / to filter by name, family or dark/light (each word must match). Enter keeps the filter, and Esc clears it before Esc closes. Text typed into the filter never triggers the Chroma toggle.

Deferred, with reasons

  • Oxocarbon: its grays are computed at runtime in HSLuv by the theme's own code. Reproducing them would mean running that code or re-implementing it, and approximations are out.
  • GitHub Primer: its values come from a built @primer/primitives release, not from the theme repository.
  • Material/Palenight and classic Monokai: licensing and canonical source not verified.
  • Tier 2 families.

#336

The editor's dialogs (#414) already use the existing action-control renderer. No other v0.21 surface needed a new control, so nothing else was consolidated (noted in the ledger).

Tests

  • themeFamilies.test.ts: the new family ids and variant names; spot checks against the upstream files; the filter's behavior. The existing per-variant tests (valid hex, 4.5:1 contrast on every fill, distinct adjacent fills, light variants keep text tiers) cover all twelve.
  • 114 theme- and palette-related test files pass.

Not verified

Physical checks: docs/testing/v021-physical-qa.md section 7 (dark and light terminals, 256-color, NO_COLOR, host untouched). Not run.

Refs #401, #336, #410

Twelve variants with colors copied exactly from each project's MIT-licensed
source at a recorded revision (sources, revisions, licenses and role mapping
in docs/design/theme-families.md). Every role fill keeps 4.5:1 module text
contrast; light variants keep NMSh's text tiers. Existing ids and saved
choices are unchanged; Lavender stays the default.

Oxocarbon (grays computed at runtime in HSLuv), GitHub Primer (values from a
built primitives release), Material/Palenight and Monokai (licensing not
verified) are deferred with reasons. Theme Studio's Built-in list gains / to
filter by name, family or dark/light; Esc clears the filter before closing.
@raiseCatError
raiseCatError changed the base branch from feature/v021-modules to dev October 18, 2026 14:14
@raiseCatError
raiseCatError merged commit 0ea7ca3 into dev Oct 18, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant