dsh-plugin-gemini-theme
界面增强 活跃维护

dsh-plugin-gemini-theme

dingyi580/dsh-plugin-gemini-theme

采用Gemini设计风格的轻量网页主题皮肤插件,适配DeepSeek Harness网页客户端界面,视觉风格清爽统一,安装即用无需额外配置,交互细节贴近原生Gemini使用体验

1
Stars 标星
0
Forks 分支
1
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
575 KB
仓库大小
23 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:dingyi580/dsh-plugin-gemini-theme
git clone https://github.com/dingyi580/dsh-plugin-gemini-theme.git
git clone git@github.com:dingyi580/dsh-plugin-gemini-theme.git
README.md master

dsh-plugin-gemini-theme

English | 中文

A Gemini-styled skin for the DeepSeek Harness web client.

One stylesheet, layered over the client's own --dsw-* design tokens. The plugin contributes no DOM, no slot occupant and no service — installing it changes how the client looks, removing it restores the stock appearance, and nothing else in the stack knows the difference.

The hero screen

Install

dsh plugin --profile web add dsh-plugin-gemini-theme

Restart dsh web afterwards. Remove it the same way:

dsh plugin --profile web remove dsh-plugin-gemini-theme

What it restyles

The conversation ground and sidebar fill, the sidebar's capsule rows and round icon buttons, the new-chat pill, the hero greeting's scale, the composer's radius, fill and elevation, the blue backdrop glow behind it, the entrance animation when a blank session opens, and the fades at both ends of the scrolling regions.

Light and dark are both covered; the sheet follows whichever the client resolves.

A conversation

How it works

The sheet mounts as a <style> tag under the plugin's own lifetime. Rules reach their targets through the class form CSS modules compile to — [hash]_[local], so a rule is written [class*="_local"] — which is what lets a skin live outside the packages it restyles. It loads before every feature package's own stylesheet, so its component rules carry !important.

That substring match is also the main hazard: _local matches any module that happens to name a class the same way. Rules that could reach a second component are narrowed by a tag qualifier, a :has() on something only the intended target contains, or an ancestor only the intended tree has.

Colours and sizes were sampled per-pixel from a reference rather than estimated; the comments in the sheet record where each number came from.

Limitations

Anything needing new DOM is out of scope for a stylesheet and is not here:

  • The session header keeps its stock strip (title, mode chip, view tabs) rather than filing them behind one control.
  • The hero greeting is the client's own line, not a rotating one.
  • The sidebar opens in whatever state the client decides; the skin does not change its boot posture or width.
  • No top progress bar during a turn — that needs a DOM signal the client does not publish.

License

MIT