# dsh-appearance-glass [English](README.md) | **简体中文** | [繁體中文](README.zh-TW.md) DSH 界面透明度插件,外加内置壁纸。 只有纯 alpha,**没有任何模糊、饱和或高光**(1.1 起移除了「模式」与液态玻璃)。 ![插件图标](icon.svg) [![2 分鐘宣傳片](preview/promo-poster.jpg)](https://github.com/david0304git/dsh-appearance-glass/releases/download/v1.1.1/promo-2min.mp4) ▶ 2 分鐘宣傳片(1920×1080,MIT,可自由轉載) | | | | --- | --- | | 设置位置 | **设置 → 界面外观**(独立的 `settings.section` 页面,排在「通用设置」之后、「模型」之前) | | 同一份面板 | **设置 → 插件 → dsh-appearance-glass**(`plugins.bundle.config`) | | 写到哪里 | profile 的 `cordis.patch.yml`(`config:` 段),**改完立即生效、不需要重启** | | 不影响 | DSH 任何源码;卸载后整层效果完全撤除 | ## 你能得到什么 - **四个区域各自可调的不透明度** —— 主界面/侧栏/卡片与输入框/菜单与浮层。 滑杆上的数值是**合成后**的结果:写 20% 就真的看到 20%(算法见下)。 - **内置壁纸** —— 三个色块、底色、强度、五组配色,外加实时预览; 预览的每个 mock 表面都吃官方 token,叠层数与真实界面一致。 - **一个总开关** —— 关掉「启用」就能立刻对比,不需要卸载。 ![界面外观设置页](preview/wallpaper-after.jpg) ## 安装 ```sh dsh plugin --profile web add dsh-appearance-glass # 从 npm 安装 dsh plugin --profile web add github:david0304git/dsh-appearance-glass # 从 GitHub 安装 ``` 需要 `dsh >= 0.2.0`(`engines.dsh`),实测版本 0.2.1-rc.2。 唯一的 peer 依赖是 `@deepseek-ai/schemastery`(由宿主提供,标记为 `optional`),不需要另外安装。 ### 在插件市场里找到它 - **官方 Discover**:`plugin_market` 读的是**你自己添加的索引 URL**(DSH 默认不加任何索引)。两个现成的: - `https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json` —— awesome-dsh-plugin 清单的 format-1 索引 - `https://awesome-dsh-plugin.com/index.json` - **dsh-market**(`dshmarket`):只安装 awesome-dsh-plugin 清单里的插件,所以本插件要先被收录。 ## 设置页结构 1. **标题栏** —— 标题、`本 profile 已自定义` 徽章、写入状态、**启用**(官方 `Switch`)、**恢复默认** 2. **界面不透明度** —— 四根滑杆(主界面/侧栏/卡片与输入框/菜单与浮层)+ **同步** 按钮(把主界面的值一次应用到其他三项) 3. **透视背景** —— 自动/内置壁纸/纯透明 4. **内置壁纸** —— 实时预览,然后四列对齐的控件:**色块**(三颗颜色 pill)、**底色**(颜色 pill + 跟随深浅色)、**强度**(滑杆 pill)、**配色**(五张 44px 渐变卡,命中时外圈一圈 focus 蓝) ## 参数 | 字段 | 范围 | 默认 | 说明 | | --- | --- | --- | --- | | `enabled` | 布尔 | `true` | 总开关;`false` 时不动任何 token | | `opacityBase` | 0–100 % | 68 | 主界面(对话区底色实际被叠了两层,见下节) | | `opacitySidebar` | 0–100 % | 68 | 侧栏与其选中态(官方在栏上另加一层 40% 底色) | | `opacitySurface` | 0–100 % | 68 | 卡片、输入框、消息气泡、代码块 | | `opacityOverlay` | 0–100 % | 72 | 菜单、tooltip、toast、浮层 | | `backdrop` | `auto` / `wallpaper` / `none` | `auto` | `auto`=桌面版用系统窗口材质,其他环境铺壁纸 | | `wallpaperA/B/C` | `#rrggbb` 或 `auto` | `auto` | 三颗色块;`auto` 跟随深浅色 | | `wallpaperBase` | `#rrggbb` 或 `auto` | `auto` | 底色;`auto`=浅色 `#e9f0ff`/深色 `#0b0f1c` | | `wallpaperStrength` | 10–100 | 58 | 色块强度(第二、三颗自动比第一颗弱) | ## 为什么滑杆数值就是合成后的透明度 同一块底色常被叠好几层:macOS 下官方的 `.centerCol` 与对话区 root **各画一次** `--dsw-alias-bg-base`。 直接把 token 设成 68%,实际看到的是 `1-(1-0.68)² = 89.8%` —— 这就是「调到最低还是看不透」的原因。 所以插件用真实层数反推单层值(`a = 1-(1-target)^(1/depth)`): | 区域 | 真实叠层 | 滑杆 20% 时写入 | 实际合成 | | --- | --- | --- | --- | | 主界面 | 2 | 11% | 20.0% | | 侧栏 | ~1.4 | 13% | ~20% | | 卡片/输入框 | 1 | 20% | 20.0% | | 菜单/浮层 | 1 | 20% | 20.0% | 同一区内的相对加权(delta)也会跟着目标值等比缩小,低透明度时不会被拉回去。 ## 为什么 macOS 上是「真的透」 DSH 桌面版主窗口以 `vibrancy: 'sidebar'` + `backgroundColor: '#00000000'` 创建,官方 CSS 在 `html[data-platform=darwin]` 下把 html/body 背景设成 transparent。**桌面材质一直都在,只是被各面板的 不透明背景盖住**;本插件把那些表面的 token 换成半透明色,原生材质就透出来 —— 不是 CSS 假装的效果。 > 系统窗口材质本身的模糊**关不掉**:那是 Electron 主进程的窗口属性,renderer 端没有任何 IPC 能改 > (`DESKTOP_IPC` 只有主题色与 Windows 标题栏上色)。想要完全零模糊,请用浏览器打开 DSH。 ## 实现方式 - 主要手段是 **theme token 覆写**(`ctx.theme.overrideTokens`):官方组件自己消费 `--dsw-*`, 所以不依赖任何 hash 过的 class 名。 - 只有壁纸会碰 ``(`background-image`)。插件**不对任何容器加 `backdrop-filter`** —— 容器一旦有它,就会成为 `position: fixed` 子元素的 containing block,而 DSH 的菜单用 CSS anchor positioning 就地渲染,会有定位风险。 - UI 全部由官方元件组成(selector pill 36px、`--dsw-radius-md`、`--dsw-alias-bg-module-platform`), 菜单用官方 `Menu`、开关用官方 `Switch`;取不到时退化成原生 `