前言¶
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。