Skip to content
dsh.fish
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

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source