Bundle
dsh-font-plugin
DSH dual-face plugin: font family and ligature controls for the Web UI. Host half registers a settings namespace; browser half renders the config card in Settings > Plugins with system-font selection and applies the fonts live. Bundle + dsh.client package.
- Source
- wtksana
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 5 days ago
Readme
# dsh-font-plugin
A [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/deepseek-harness) plugin: font family and ligature controls for the Web UI, rendered in **Settings → Plugins → Plugin configuration** with the official card style.
## Features
- **Font Family : Editor** — overrides `--dsw-font-family` (UI + Markdown body text)
- **Font Family : Code** — overrides `--ds-font-family-code` (code blocks / commands / logs)
- **Font Ligatures** — `Auto` (theme default) / `On` / `Off`
Font families are entered as **comma-separated font stacks** (e.g. `MiSans, Microsoft YaHei, sans-serif`); quoted or unquoted names both work, and single names are quoted automatically with a system fallback. Saving stores exactly what you typed (a value equal to the official default is still written — an override is marked by the field's **presence in the user layer**, per the official plugin-configuration contract); **Reset** returns a field to the theme default.
> Weight and size are provided by the official theme settings (Appearance) since dsh 0.1.2; this plugin intentionally leaves those to the official surface.
Defaults mirror the official `@deepseek-ai/dsh-client-ui-theme` base stylesheet. Changes apply **after Save** and persist in the dsh settings document (`$DSH_HOME/settings.yaml`, namespace `dsh-font`). UI copy is localized (`zh` / `en`) through the official `ctx.locale` mechanism.
## Install
### From npm
```sh
dsh plugin --profile web add dsh-font-plugin
```
### From GitHub
```sh
dsh plugin --profile web add github:wtksana/dsh-font-plugin
```
Prebuilt bundles (`lib/`) are committed, so no build step or `prepare` authorization is required at install time.
### Local development
```sh
dsh plugin --profile web add ./path/to/dsh-font-plugin
```
Then start dsh (restart required after bundle edits, since client bundle revisions are computed at boot):
```sh
dsh --profile web
```
## Configuration
Open **Settings → Plugins → Plugin configuration** in the Web UI, expand the `dsh-font-plugin` card, edit the fields and press **Save**.
Or edit `$DSH_HOME/settings.yaml` directly:
```yaml
dsh-font:
editorFont: MiSans
codeFont: MiSans
ligatures: auto
```
`dsh plugin remove dsh-font-plugin` uninstalls both the package and its patch layer.
## Development notes
This package is a **dual-face** plugin:
- `lib/index.js` — host half: registers the `dsh-font` settings namespace via `ctx.settings.register('dsh-font', FontSettingsSchema, { applies: 'live' })`. The schema is exported as `FontSettingsSchema`, deliberately **not** as `Config`: Cordis validates a row's own config against a plugin's `Config` export, and a settings schema with a required field would fail the row at boot.
- `lib/client.js` — browser half: `dsh.client` bundle (`__ModuleLoader__.load` + `exports.apply`). The style tags are created at factory **materialization** with `data-plugin` / `data-plugin-css` markers so the client module system inventories them for HMR teardown; the card registers into `settings.plugin.item` keyed by the namespace, and fonts apply via CSS variables with `!important` (the ui-theme base stylesheet may inject after our style tag).
Card semantics follow the official plugin-configuration contract: a field counts as **overridden** by its presence in the raw user layer, a **Reset** stages a clear (targeting the composition `base`, falling back to the bundled default), and saving a value equal to the official default still **stores** it instead of silently clearing it. The bundled defaults (`DEFAULT_CFG`, `FONT_TOKENS`) mirror the host schema defaults and the ui-theme base stylesheet — when you change a default, update both halves.
Client bundle revisions are computed at boot — restart dsh after bundle edits.
## License
MIT
Install
dsh plugin --profile web add github:wtksana/dsh-font-plugin
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-font-plugin from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.