前言¶
DSH 的理念是「一切皆插件」,插件数量多了之后,界面本身的观感就变得不太可控:控制台是深色,Web UI 是另一套令牌,左边会话列表和右侧跳转条的状态全靠颜色区分,长期用下来很难一眼看出哪个会话在跑、哪个在等人回复。想改外观,又怕改主题把官方改版后的界面弄坏。
dsh-eva-skin 就是为这个场景做的一套纯客户端皮肤:墨线描边、硬投影、CRT 扫描线、会话状态轨,全部靠覆盖官方设计令牌实现,不渲染组件、不注册服务、不碰官方类名。它由 luwendi-qq 维护,npm 包名为 @winstonlu/dsh-eva-skin,当前版本 1.0.56,许可证 MIT。
下面介绍它的能力边界、安装方式、配置项和自定义底图的做法。
它能做什么¶
插件只往 <head> 里放一张样式表,通过覆盖官方 --dsw-* 设计令牌生效。因为不依赖 CSS-in-JS 哈希类名,官方改版、换类名、加页面,最坏情况是一条装饰失效,不会把界面改坏。实际效果:
- 配色固定为 EVA 色板:初号机紫
#7B4BD8、零号机蓝#2E6BE6、二号机红#E8322D、荧光绿#B4FF39、警示黄#FFD400,墨黑描边#04040A。 - 形状统一为方角 + 墨线,投影用无模糊硬投影(
box-shadow: n n 0),不做模糊晕染。 - 全屏 CRT 扫描线,可以关掉;选中标签页改成墨底荧光字。
- 左栏会话行加 3px 状态轨:绿=运行中(带呼吸动画)、黄=已完成、红=等你回复。
- 右侧跳转条用荧光绿刻度,悬停变亮,当前条为警示黄。
- 底图可选一张压暗的背景图,默认关闭。
需要说明的是,插件不覆盖任何组件结构,只用到两个锚点:侧栏会话行的 data-row-key^="session:" 和跳转条的官方语义锚点。其他样式都是令牌级别的替换。
安装与启用¶
插件市场里搜 dsh-eva-skin 即可,或让 agent 直接装:
plugin_manager install_bundle @winstonlu/dsh-eva-skin
如果没有 npm 包,走 git:
plugin_manager install_bundle git+https://github.com/luwendi-qq/dsh-eva-skin#<commit>
本地开发用的装法:
plugin_manager install_bundle file:/绝对路径/winstonlu-dsh-eva-skin-1.0.0.tgz
装完在插件页启用,刷新一次页面就能看到效果。纯 CSS 改动只需刷新,不必重启。卸载走插件页按钮,或者:
plugin_manager remove_bundle @winstonlu/dsh-eva-skin
dispose() 会移除样式表、开关属性、底图层和角标,不残留。
配置项¶
在 profile 的 cordis.patch.yml 里给 dsh-eva-skin 那一行加 config,全部可选:
- id: dsh-eva-skin
config:
scanlines: true # 扫描线,默认 true
hardShadow: true # 无模糊硬投影,默认 true
forceDark: false # 强制暗色,默认 false
backdrop: false # 背景图,默认 false
如果打算自己写插件,有个坑要提前避开:配置要从 apply(ctx, config) 的第二个参数拿。cordis 里 config 是服务,没在 inject 里声明就读 ctx.config 会抛 cannot get property "config" without inject;apply 抛错后条目永远停在 loading,桌面端启动审计会把非 active 条目当致命错误,直接重启 app。
自定义底图¶
插件包内默认内嵌一张本地 AI 生成的同人风格插画(WebP 数据存在 lib/client.js 里)。想换图就跑仓库里的脚本:
./tools/set-background.sh 你的图.png 0.95 # 第二个参数是亮度,省略默认 0.62
# 输出 ~/.dsh/backups/pkgs/dsh-eva-skin-<version>.tgz
plugin_manager install_bundle file:~/.dsh/backups/pkgs/dsh-eva-skin-<version>.tgz
脚本会把图压到 1536 宽、转 WebP q74,内嵌进 lib/client.js 再打进包里。如果不打算内嵌图片(比如要发布到公共 npm),先跑 ./tools/strip-background.sh,它会把 data URI 换回纯 CSS 渐变底,包体从约 130KB 降到约 25KB。
开发流程用这三行:
node --check lib/client.js
node ~/.dsh/dsh-runtimes/dsh-primary-runtime/dependencies/pnpm/bin/pnpm.cjs pack --pack-destination ~/.dsh/backups/pkgs
plugin_manager install_bundle file:$HOME/.dsh/backups/pkgs/winstonlu-dsh-eva-skin-<ver>.tgz
改完刷新页面即可(unlag 刷新按钮,或在右键菜单里允许 agent 自己刷新)。
兼容性与注意事项¶
- 需要 DSH
>=0.2.0-rc.2(engines.dsh)。 - 仅 Web 客户端(
dsh.client.platform: "web");桌面端和浏览器端共用同一份 UI。 - 插件以当前 dsh 进程权限运行,安装前建议先读一遍源码和
LICENSE。许可证是 MIT,但 EVA / 新世纪福音战士的角色与机体版权归 khara / 庵野秀明所有,本项目只是配色致敬,不包含任何官方素材。 - 纯外观插件,不改行为、不注册服务,如果只是想换风格可以装;对状态轨、跳转条颜色有强依赖的自动化脚本,改之前先确认语义锚点没变。
如果你的需求只是让 Web UI 看起来更接近 EVA 的赛璐璐质感,这套皮肤的实现方式和代价都比较透明:一个样式表、几个可选开关、一条可选的底图流程。目录页在 https://www.skillhub.cn/plugins/luwendi-qq/dsh-eva-skin,源码在 https://github.com/luwendi-qq/dsh-eva-skin。