Frost-rA9/dsh-theme-everforest ↗★ 0

@local/dsh-theme-everforest

为Web界面提供六种Everforest配色主题。 适合喜爱Everforest森林系配色、需要调整界面色彩深浅的用户。

套件
@local/dsh-theme-everforest
相容性
待驗證
版本
1.0.0
授權
NOASSERTION
最近更新
2026年10月2日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Frost-rA9/dsh-theme-everforest

Everforest for the Harness web interface

Six complete Everforest palettes for the Harness web interface. A palette has a depth (hard, medium or soft) and a plane (light or dark); the picker in Settings → General chooses the depth, and the Appearance setting chooses the plane.

The pack is a Harness client plugin bundle: one host row with no behavior of its own, and one self-contained browser module that owns the palette token layer and the settings row.

Package@local/dsh-theme-everforest
Client entryclient.js (window.__ModuleLoader__.load)
Palette surfacectx.theme.overrideTokens('@local/dsh-theme-everforest', …)
Settings rowsettings.general.item, id everforest, order 13
PersistencelocalStorage['dsh-theme-everforest.depth']
Tokens covered154 (every base-sheet alias, specific and themed-chrome token, plus syntax)

Install

From a Harness session, install the bundle with the plugin manager:

plugin_manager install_bundle
  target: /absolute/path/to/dsh-theme-everforest

The target must be the absolute path of a clone of this repository.

You can also install it from the Plugin Manager page in the web interface by pointing at this directory. The bundle declares no dependencies and no install scripts.

After installing, open Settings → General → Everforest and pick a depth. Refresh the page the first time the bundle appears.

Choose a palette

The row offers seven choices, and each one sets both the depth and the host theme preference:

ChoiceWhat it does
DefaultRemoves the Everforest layer, and the built-in Harness palette returns
Dark Hard / Medium / SoftEverforest’s dark planes, and pins Appearance to Dark
Light Hard / Medium / SoftEverforest’s light planes, and pins Appearance to Light

Choosing a variant sets two things: the depth, which this browser keeps in localStorage and defaults to medium on first run, and the host theme preference through ctx.theme.setTheme. The installed token layer carries a value for both schemes, so the three Appearance choices (Light, Dark, System) keep working and decide which half of the layer paints. Select System with a depth and the page follows the operating system, painting Light Medium by day and Dark Medium at night.

Depth is a per-browser choice. The theme service persists only the three built-in preferences, and this pack deliberately declares no host Config, which would add a build-time dependency to a plugin that needs none.

Repository layout

The bundle is a single host row plus one browser module, with the checks and the palettes documented alongside:

client.js               palette data, token rules, token layer, settings row
index.js                host half (no behavior)
cordis.patch.yml        inserts the single loader row
icon.svg                Plugin Manager artwork
locale/{en,zh}.json     Plugin Manager title and description
tools/check.mjs         coverage, color, contrast and manifest validator
tools/base-tokens.json  vendored base token list, from the Harness theme bundle
docs/PALETTE.md         upstream palette provenance and the six planes
docs/MAPPING.md         token group to palette slot rules, and contrast tuning

Run the checks

The repository ships no build step; you’ll only need these commands:

node --check client.js          # browser half syntax
node --check index.js           # host half syntax
node tools/check.mjs            # full validation, non-zero exit on failure

tools/check.mjs loads client.js with a shimmed window and validates the generated layers: token coverage against tools/base-tokens.json, color validity, and text contrast on the base, raised and sidebar surfaces in all six palettes. The contrast checks use the WCAG (Web Content Accessibility Guidelines) thresholds recorded in docs/MAPPING.md.

Regenerate the vendored base token list after a Harness upgrade changes its theme bundle:

THEME_PACKAGE=@deepseek-ai/dsh-client-ui-theme
DSH_LIB="$(dirname "$(readlink -f "$(command -v dsh)")")/../node_modules"
node tools/check.mjs --extract \
  --from "$DSH_LIB/@deepseek-ai/dsh/node_modules/@deepseek-ai/$THEME_PACKAGE"

The extractor reads lib/client.js in that package for the --dsw-alias-*, --dsw-specific-*, themed chrome and --shiki-* names, and scans the surrounding packages for var(--dsw-static-*) reads, so the static patch list tracks what components consume.

Known limits

Four limits are worth knowing before you install it:

  • First-paint flash: The Harness boot stylesheet colors the canvas from the durable scheme before any plugin runs, so the Everforest background appears once this browser module loads. It’s cosmetic, and unavoidable for a per-browser choice.
  • The layer is a default, not an override: Components that shade a token on a deeper selector, such as the Plugin Manager destructive button, keep their own color.
  • Untouched properties: --dsw-focus-ring-color (interaction behavior), shadows, radii and fonts stay as they are. --dsw-static-neutral-00 and --dsw-static-neutral-bluish-00 stay pure white, because their consumers use them as a translucent white highlight.
  • Per-browser depth: The choice lives in this browser origin and does not sync through the profile settings document.

License

MIT. Palette values and the syntax mapping derive from Everforest by sainnhe (MIT); see LICENSE and docs/PALETTE.md.