@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、幻方无官方从属关系)。

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

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

小夜