# @dsh-external/dsh-theme-switch DSH theme switch: auto-detects installed skin/theme plugins and offers one-click, official-style switching under **Settings → Plugins → Skins**. [中文说明](README.md) [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com) ## Install ```sh dsh plugin --profile web add github:kinmat-A/dsh-theme-switch ``` Restart `dsh web` afterwards (or install it from the dsh-market plugin, which hot-activates it), then open **Settings → Plugins → Skins**. ## Usage Switch skins from **Settings → Plugins → Skins**; after switching, refresh the browser page (Ctrl+F5) for the new skin to appear. ## Screenshots The skins tab (Settings → Plugins → Skins), dark theme: ![dsh-theme-switch skins tab](https://cdn.jsdelivr.net/gh/kinmat-A/dsh-theme-switch@main/docs/screenshot-en.png) > Note: the themes shown in the screenshot are for display only. ## Features - **Auto-detection**: scans the profile's `dependencies` and `bundles`, recognizing skins by package name / `skin.json` / bundle-patch rows. Missed skins can be added via `config.themes`. - **Mutually exclusive switching**: clicking a skin's button enables it and disables all the others; clicking it again disables it. - **Official fallback**: when every skin is off, the official DSH look applies automatically (the panel's "Official DSH skin" row has a matching button). - **Instant and restart-proof**: switches are written to the home-layer patch `~/.dsh/cordis.patch.yml`, which the dsh boot flow watches live and replays on every startup — no restart needed. ## Development ```sh pnpm install # first time (needs network) pnpm run build:client # build the client (tsdown) ``` ## Structure - `lib/index.js` — host entry (plain ESM, zero dependencies): skin detection, home-patch read/write, HTTP API. - `src/client/index.tsx` → `lib/client.js` — official-style settings tab (`--dsw-alias-*` tokens + primitives). - API: `GET /@dsh-external/dsh-theme-switch/api/themes`, `POST …/api/toggle {id}` (`id: "__official__"` disables every skin). License: BSD-3-Clause