Skip to content

feat(theme): add Gaia Aether palette - #49

Open
ykzird wants to merge 2 commits into
leboiko:masterfrom
ykzird:feat/gaia-aether-theme
Open

ykzird wants to merge 2 commits into
leboiko:masterfrom
ykzird:feat/gaia-aether-theme

Conversation

@ykzird

@ykzird ykzird commented Sep 21, 2026

Copy link
Copy Markdown

Summary

Adds a ninth built-in theme, Gaia Aether, to the Theme enum: Gruvbox
warmth (cream #f2e5bc text, moss and amber hues) on a blue-grey #181c22
surface, with a dusty-mauve accent. It matches the AETHER / G.A.I.A v2
desktop palette I already use everywhere else, so a document read in this
viewer sits in the same colours as the rest of the desktop.

Follows the documented extension path in src/theme/mod.rs — one enum
variant, one Tokens constructor in src/theme/themes.rs, one dispatch arm
in src/theme/tokens.rs — so nothing else needed touching. The settings
modal, config parsing, and the syntect mapping pick it up automatically.

Changes

  • src/theme/mod.rs — Theme::GaiaAether variant, Theme::ALL, label()
    ("Gaia Aether"), and syntax_theme_name()
    ("base16-eighties.dark", the warm dark bucket shared with Dracula/Gruvbox Dark).
  • src/theme/themes.rs — gaia_aether(), with the source-palette names
    carried through as comments.
  • src/theme/tokens.rs — dispatch arm.
  • README.md — theme count updated to nine, new bullet in the Themes list,
    gaia_aether added to the config.toml example.
  • CHANGELOG.md — ## [Unreleased] entry.

Three slots deliberately depart from the source palette, because the literal
values fail this crate's existing contrast audit — the details are in the
gaia_aether() doc comment and the changelog entry:

Slot Source value Used Why
accent.primary #a0607a #c98fa0 No foreground reaches AA on #a0607a (ceiling 3.76:1); it carries on_accent text in the status and tab bars. Source value stays as accent.alt.
state.selection_bg #261a28 #503a4a Source sits 0.16 luminance units from the surface, under MIN_SELECTION_DELTA (3.0) — an invisible selection.
state.focus — #c98fa0 6.45:1 against the base surface.

Test Plan

  • Existing tests pass (cargo test --workspace) — 1621 pass, 3 ignored, 0 fail, on Linux
  • New tests added where appropriate — none needed; the audit tests in
    src/theme/mod.rs::tests and src/theme/tokens.rs::tests iterate
    Theme::ALL, so the new variant is pinned to the same WCAG AA floor, focus
    visibility, and selection-distinctness checks as every other theme
  • Manually tested on macOS / Linux (specify which) — Linux only (Arch, rustc 1.98.1); macOS untested
  • If a Mermaid block changed, verified rendering in TUI and via mermaid-text CLI — no Mermaid change

Also run locally, per CONTRIBUTING.md:

  • cargo fmt --all -- --check — clean
  • cargo clippy --all-targets -- -D warnings — clean

Manual check: launched the viewer against this repo's README.md, opened the
settings modal (c), confirmed Gaia Aether appears as the ninth entry and
applies live, and compared the rendered output against the desktop palette
(dark blue-grey surface, cream reading text, mauve selection highlight, moss
and cyan headings).

Checklist

  • CHANGELOG.md entry added (root for markdown-tui-explorer, crate-local for mermaid-text)
  • No new clippy warnings (cargo clippy --all-targets -- -D warnings)
  • Documentation updated if public API changed — README theme section; no public API change
  • Version bumped in Cargo.toml if user-visible — left to your release commit, since your release flow bumps the version in a separate release: commit and I did not want to guess the next number

Linked Issue

None — no issue for this; happy to open one first if you would rather review
it as an issue than as a PR.

Gruvbox warmth on a blue-grey surface, with a dusty-mauve accent, matching
the AETHER / G.A.I.A v2 desktop theme.

Three slots deviate from the source palette because its literal values fail
the crate's own contrast audit: accent.primary uses the source magenta
(#c98fa0) since no foreground reaches AA on #a0607a, state.selection_bg is
a lightened selection (#503a4a) to clear MIN_SELECTION_DELTA, and
state.focus is the magenta accent at 6.45:1 on the base surface.
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