@kongxiangyiren/dhs-theme-plugin:DSH Web 界面的主題管理插件

前言

DSH 的 Web 界面默認只有跟隨系統、淺色、深色三檔外觀,想換個配色,沒有現成的入口。@kongxiangyiren/dhs-theme-plugin 補的就是這塊:在「設置」里加一個「主題」大分類,內置森林綠、海洋藍兩套主題,也允許上傳自己寫的 JS 主題,點一下就切換,數據落在磁盤上,換瀏覽器不丟。下面介紹它的功能、安裝和用法。

這是什麼

這是一個 DSH 主題管理插件,作者 kongxiangyiren,當前版本 0.0.3,MIT 許可證。DSH 的理念是「一切皆插件」,這個插件就是在界面這一層做的擴展:它做兩件事,一是提供內置主題,二是給想自己動手的人留一條上傳自定義主題的通路。

核心功能

  • 「設置 → 主題」大分類:在設置裏新增與「通用」平級的主題分類。
  • 內置主題:森林綠、海洋藍兩套,覆蓋 13 個 alias token,附帶質感特效 CSS(輝光、網格/波紋、暗角、霓虹光帶)。
  • 上傳自定義 JS 主題:__ModuleLoader__.load 格式的單文件,支持 overrideTokens 改色、注入 CSS、slots 註冊 UI 組件,factory 內可用 require("react"),無文件大小限制。
  • 點擊切換:上傳的主題直接出現在主列表,點一下即應用;切到內置主題會自動停用上傳主題,同一時刻只有一個生效。
  • 磁盤持久化:Host 半部註冊 webServer 路由 GET/POST /api/theme-plugin,數據存在 DSH home 下,與瀏覽器無關。

安裝與啓用

先裝插件:

dsh plugin --profile web add @kongxiangyiren/dhs-theme-plugin

這條命令會把包加入 profile 的 dsh.profile.bundles 層列表。不想走 npm 的話,也可以從 git 直裝——包是純 JS、沒有 prepare 腳本,不需要 allowBuilds 授權:

dsh plugin --profile web add git+https://github.com/kongxiangyiren/dhs-theme-plugin

裝完正常啓動:

npx @deepseek-ai/dsh web

不需要了就卸載:

dsh plugin --profile web remove @kongxiangyiren/dhs-theme-plugin

日常使用

1、打開「設置 → 主題」。
2、點擊列表項切換:跟隨系統 / 淺色 / 深色 / 森林綠 / 海洋藍 / 已上傳主題。
3、想用自己的主題,點「選擇 JS 文件」,選一個主題腳本。
4、「已上傳主題」區可以看每個主題的狀態(應用中 / 未應用),也可以刪除。

倉庫的 examples/ 目錄帶了兩個可以直接上傳的示例主題:cyberpunk-theme.js 是黑底熒光綠的終端風,帶網格、掃描線、霓虹光帶和 glitch;nekogirl-theme.js 是粉色貓娘風,演示了 require("react") 加 slots 註冊 UI 組件的寫法。注意這些示例不隨 npm 包發佈,要去 GitHub 倉庫裏取。

自己寫一個主題

上傳的文件必須是瀏覽器 bundle 格式(與 dsh.client 包相同),入口掛在 window.__ModuleLoader__.load 上。下面是一個最小的改色主題:

window.__ModuleLoader__.load({
  id: 'my-theme',
  factory: require => {
    var module = { exports: {} };
    var exports = module.exports;
    function apply(ctx) {
      ctx.effect(
        () =>
          ctx.theme.overrideTokens('my-theme', {
            '--dsw-alias-bg-base': { light: '#ffffff', dark: '#0f1115' },
            '--dsw-alias-brand-primary': { light: '#7c3aed', dark: '#a78bfa' }
          }),
        'my-theme tokens'
      );
    }
    exports.apply = apply;
    return module.exports;
  }
});

apply 收到的迷你 ctx 提供 theme / slots / effect / on / once / timeout / interval / get / console,factory 內支持 require("react")。上面這段只做了 overrideTokens 改色,再配合注入 CSS 或用 slots 註冊組件,就能做出風格更重的主題。寫好後回到「設置 → 主題」上傳,主題會出現在主列表裏。

數據存放在哪裏

上傳的每個主題以獨立 .js 文件存儲,索引單獨放:

  • 主題文件:~/.dsh/dhs-theme-plugin-themes/<id>-<hash>.js
  • 索引(元數據 + 選中狀態):~/.dsh/dhs-theme-plugin.json

索引內容大致是:

{
  "themes": [{ "id": "my-theme", "name": "my-theme", "file": "my-theme-a1b2c3.js", "active": true }],
  "selected": "ocean"
}

active 記錄啓用狀態,selected 記憶森林綠、海洋藍這類主題的選中項。舊版把源碼內嵌在索引裏的數據,會在首次讀取時自動拆分爲獨立文件。因爲數據都在磁盤的 DSH home 下,換一個瀏覽器打開,主題設置還在。

使用注意

1、上傳的 JS 會在頁面中直接執行,只應使用可信文件。插件以當前 dsh 進程的權限運行,安裝前建議先看一遍源碼和許可證。
2、Host 半部的改動需要重啓應用才能生效。
3、示例主題不隨包發佈,需要從 GitHub 倉庫的 examples/ 目錄獲取。

小結

這個插件做的事不復雜:加一個主題分類,內置兩套配色,留一條上傳自定義主題的通路,數據落盤。適合想在 DSH Web 界面上做點個性化、或者想試手寫主題的人。源碼和示例在 GitHub:https://github.com/kongxiangyiren/dhs-theme-plugin;社區插件目錄頁:https://www.skillhub.cn/plugins/kongxiangyiren/dhs-theme-plugin(社區獨立維護,與 DeepSeek、幻方無官方從屬關係)。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜