Introduction

DeepSeek Harness (DSH)’s built-in Web GUI only offers three options: Light / Dark / Follow System. If you are used to color schemes like Catppuccin or Nord in your editors and terminals, switching to the DSH interface might feel like the colors aren’t “yours.” Editing the stylesheet is of course feasible, but changes get mixed with the built-in styles, and you have to redo the matching every time the upstream updates. The dsh-theme-pack introduced below takes a different path: without touching the stylesheet, it registers semantic tokens via DSH’s theme contract, allowing the Web GUI to switch to 16 sets of community-popular color schemes.

What is this?

dsh-theme-pack is a DSH plugin maintained by math-lrz, under the MIT license, targeting DSH’s web profile, providing 16 sets of third-party theme skins. It solves the problem mentioned above: providing a batch of ready-made appearance options for the Web GUI that take effect immediately upon selection, without invading DSH’s own style system.

Theme List

The 16 themes come from these color families; where the source palette defines both light and dark variants, both Light / Dark versions are available:

  • Catppuccin Mocha / Latte
  • Gruvbox Dark / Light
  • Everforest
  • Rosé Pine / Dawn
  • Solarized Dark / Light
  • Kanagawa
  • Tokyo Night / Tokyo Night Storm
  • Night Owl
  • Nord
  • Dracula
  • One Dark

Core Features

Zero Intrusion. It does not rewrite any stylesheet; it only overrides the semantic tokens exposed by the DSH theme contract, --dsw-alias-* / --dsw-specific-* (80 per set). Uncovered tokens automatically fall back to the built-in palette, ensuring the skin doesn’t clash with base styles.

No Build Chain. The client bundle is a hand-written lazy CJS (window.__ModuleLoader__.load), directly loadable without needing tsdown / vite.

Built-in Selector. It injects a “Theme Skins (16 sets)” panel into Settings → General. Selecting a color dot instantly changes the skin, with both Chinese and English copy available.

Single Data Source. All colors for the 16 themes are derived from a single palette file src/palettes.mjs, with mapping rules concentrated in src/tokens.mjs.

How it Works

DSH’s theme contract provides ThemeRuntime.register({ id, colorScheme, tokens }) for registering third-party themes. The plugin’s client bundle uses this to register 16 themes. Each registration is attached to ctx.effect, and themes are recycled in reverse order when the plugin is unloaded. The lib/index.mjs on the host side is a no-op plugin, existing only to provide a loadable entry for the cordis Loader.

Installation and Enablement

Prerequisites: DSH is installed and a web profile is available (run dsh web).

  1. Install the plugin into the web profile. Use pnpm for git dependencies:
dsh plugin --profile web add git+https://github.com/math-lrz/dsh-theme-pack.git

You can also install via npm; it mounts automatically upon completion, no need for manual insertion:

dsh plugin --profile web add dsh-theme-pack
  1. If manual mounting is needed, edit %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml and append a loader insertion. Note that name must be the package name, not a file:/// path:
- insert:
    - id: dsh-theme-pack
      name: 'dsh-theme-pack'
  1. Refresh the browser page. Patch changes trigger a hot reload, usually no need to restart dsh web.

Daily Usage

After the steps above, open Settings → General → Appearance, and the “Theme Skins (16 sets)” panel will appear at the bottom: 16 color dot squares. Clicking one instantly changes the skin. The built-in Light / Dark / Follow System options remain available and can be switched back to at any time.

Want to Add Your Own Theme

Thanks to the single data source design, the cost of extending is very low:

  1. Add a palette object to src/palettes.mjs;
  2. Run node scripts/build.mjs.

Token mapping, selector, copy, and preview page are all automatically derived.

Known Limitations

  • Theme selection is not persisted (upstream limitation): The built-in settings schema for ui-theme.preference only recognizes light / dark / system; third-party theme IDs are only valid within the process. After refreshing the page, you will return to the built-in appearance and need to select again.
  • Remote (non-local) browsers can also select themes, but they are also not persisted.
  • Mask-type tokens (--dsw-alias-bg-mask-*) deliberately use built-in default values and are not included in the skin mapping.

Suitable Scenarios and Notes

Suitable for:

  • People who use the DSH Web GUI daily and want to bring their editor color habits over;
  • People who want more appearance options but don’t want to rewrite style sheets;
  • People who want to add themes to their taste starting from a single palette file.

Notes:

  • The plugin runs with the permissions of the current dsh process. It is recommended to browse the repository source code before installing to ensure the code and license are fine. This plugin is under the MIT license; copyright of each theme’s palette belongs to the original theme authors (maintainers of open-source color schemes like Catppuccin, Gruvbox, Everforest, Rosé Pine, Solarized, Kanagawa, Tokyo Night, Night Owl, Nord, Dracula, One Dark, etc.).
  • Due to upstream settings schema limitations, theme selection cannot currently be persisted. You will need to select again after refreshing the page; please have this expectation before use.

Conclusion

In short: One installation command plus a patch string allows the DSH Web GUI to switch to 16 sets of community-popular color schemes; no touching of style sheets, no need for a build chain, and registered themes are recycled in reverse order when uninstalled.

  • GitHub Repository: https://github.com/math-lrz/dsh-theme-pack
  • Community Plugin Directory: https://www.skillhub.cn/plugins/math-lrz/dsh-theme-pack