简介
DeepSeek Harness Web UI 的字体入口是两个 CSS 变量:--dsw-font-family(界面)与 --ds-font-family-code(代码),全部组件经 var() 消费。dsh-typography 把它们变成两组互相独立的选择:
- 界面字体 / 代码字体分开管:各自的预设卡片、导入编辑器与持久化状态,互不影响
- 在线预设:Inter + JetBrains Mono、IBM Plex Sans + Fira Code、Noto Sans SC(简中全覆盖);字体文件经 jsDelivr CDN 分发,离线自动回退系统字体栈
- 本地字体库:把任意
woff2/ttf/otf丢进%DSH_HOME%\typography\,刷新后一键应用 —— TTF 直接可用,无需转 woff2 - 可变字体友好:字重可选“可变·全字重”,生成
font-weight: 100 900的@font-face,粗细真实呈现 - 默认即放手:某组选“默认”时不输出任何样式,可与其它字体类插件共存
使用
本插件为双面插件(host 半边分发本地字体文件,浏览器半边提供注册表与设置行),安装后出现在 设置 → 通用 → 字体(界面 / 代码)。
安装方式:
DeepSeek Harness 有两个入口,各自有独立的 profile —— 在哪边用就装进哪边:
# DSH Desktop 桌面应用(默认端口 43120)
dsh plugin --profile desktop add github:Gan332/dsh-typography
# 命令行 dsh web(默认端口 3080)
dsh plugin --profile web add -w /path/to/dsh-typography
# 本地目录(profile 目录是 pnpm workspace 根,必须加 -w)
然后重启对应入口。桌面端注意:终端安装会记入一个恢复事务,重启应用后自动验证并清理;连续安装多个插件时需逐个重启。
切换字体: 每组点击卡片实时应用;“默认”恢复系统字体栈。
导入自定义字体: 在对应组的编辑区填写三项后点“添加”:
| 字段 | 说明 |
|---|---|
| 字体名 | 任意名称,用于在字体栈中引用(如 MiSans) |
| 字体链接 | 见下方“字体链接写法”,支持 woff2 / ttf / otf |
| 字重 | 400 常规 · 500 中等 · 600 半粗 · 700 粗体 · 可变·全字重。静态字体选与文件实际粗细一致的字重;可变字体(如 MiSans VF)选“可变·全字重”即可获得全部真实粗细 |
点“添加”后立即应用,刷新后仍生效;同一字体名 + 同一字重复加覆盖旧条目,“移除”删除。
本地字体库:
copy C:\Users\fish\Downloads\MiSansVF.ttf $env:USERPROFILE\.dsh\typography\
刷新页面 → 对应组 → 本地字体库 → 点击 MiSansVF。以“可变·全字重”接入,零转换。
字体链接写法 —— 优先推荐同源相对路径(与端口无关):
/plugins/dsh-typography/files/MiSansVF.ttf ✅ 推荐(同源路径)
http://127.0.0.1:43120/plugins/dsh-typography/... ⚠️ 可用,端口变化后失效
https://cdn.example.com/some-font.woff2 ✅ 外部 CDN 直链
插件 API
浏览器半边在 apply 时把注册表挂到根上下文,其它插件可用 ctx.get("typography") 消费:
const typography = ctx.get("typography")
// 两组独立选择:"ui" | "code"
typography?.select("code", "inter-jetbrains")
typography?.setCustom("ui", [
{ family: "MiSans", weight: "100 900", src: ["/plugins/dsh-typography/files/MiSansVF.ttf"] },
])
const off = typography?.subscribe((snapshot) => {
console.log(snapshot.ui.selected, snapshot.revision)
})
完整类型见 lib/types/client/index.d.ts。
工作原理
- 浏览器半边
apply时通过ctx.provide("typography", registry)挂出注册表;选择变更时重写注入的<style id="dsh-typography-style">:@font-face规则 + 仅覆盖非默认组的 CSS 变量 - host 半边通过
ctx.webServer注册/plugins/dsh-typography/files/*路由,分发%DSH_HOME%\typography下的字体文件(按扩展名给出font/woff2 | font/ttf | font/otf;?list=1返回索引 JSON) - 选择持久化在
localStorage(dsh-typography:prefs),启动时恢复;恢复时忽略已失效的预设 id - 设置行经
ctx.slots注册进 Settings → General 的 item 槽位(idtypography),文案走ctx.locale双语字典
已知限制
- 在线预设需要联网;离线时沿字体栈尾部回退系统字体
- 本地库文件名需以字母/数字开头(Unicode 字母即可,中文文件名可用)
- 少量组件硬编码了
Inter, var(--dsw-font-family)优先栈(如工作区浏览器),装了 Inter 的系统上这些位置仍显示 Inter - 与 dsh-fonts 同时安装时:任一组选中预设/自定义即以本组为准(本插件样式表排在其后);只想要其一可
dsh plugin --profile <name> remove <另一插件>
💝 致谢
- zhijun-dai/dsh-Fonts — 本项目的直接参考与灵感来源:bundle patch 层的组织方式(
cordis.patch.yml单条 insert)、dsh.client双面声明、设置行槽位集成、localStorage 持久化与“预设 + 自定义导入”的产品形态均借鉴自该仓库。dsh-Fonts 证明了 DSH 上可以做字体系统,本插件站在它的肩膀上,补充了界面/代码分组独立选择与本地字体库免转换能力。感谢作者 @zhijun-dai - DeepSeek Harness — 插件化架构与
dsh.client双面插件机制 - Fontsource — 在线预设的 webfont 分发
- 上游字体:Inter、JetBrains Mono、IBM Plex、Fira Code、Noto Sans SC — 均 OFL/SIL 授权
dsh-typography · MIT License
No comments yet. Be the first to write one.