feat(helium): switch to the GTK theme with KWin title buttons

Helium now takes its colors from Breeze GTK instead of a generated
theme extension, which reset the GTK theme on every launch.

- Import window_decorations.css from gtk.css so Helium, which doesn't
  load kde-gtk-config's GTK module, draws the KWin title buttons
  instead of Breeze GTK's round ones.
- Add chromium.css to give the compact layout's address bar and
  button segment the title bar color, so the tab strip is one color.
- Disable WaylandWpColorManagerV1 so KWin doesn't lift Helium's dark
  grays (40 -> 44) and the strip matches KDE title bars.
- Drop the Helium theme from build.py and the helium package.
This commit is contained in:
tri committed 2026-11-03 22:18:52 +07:00
1 parent b14133bbec
commit 09c1e312cb
9 files changed
+74 -184

No files matched your search

+28 -18
View File
@@ -23,11 +23,11 @@ stow -d kde -t "$HOME" theme
```
`apply.sh` regenerates the app themes, applies the global theme, hides the
line under the title bar, turns off the wallpaper accent color and publishes
the T3 Code theme and installs the VS Code extension. Restart Helium
afterwards; T3 Code switches on its own. In VS Code, pick "Darwin Breeze Dark"
once under Preferences → Color Theme; after later color changes, run Developer:
Reload Window.
line under the title bar, turns off the wallpaper accent color, gives Helium
the KWin title buttons and an even tab strip, publishes the T3 Code theme and
installs the VS Code extension. Restart Helium afterwards; T3 Code switches on its own. In VS
Code, pick "Darwin Breeze Dark" once under Preferences → Color Theme; after
later color changes, run Developer: Reload Window.
Telegram has to import its theme by hand: Settings → Chat Settings → Chat
background → Choose from file, then pick
@@ -49,7 +49,7 @@ Edit it, then run `./kde/theme/apply.sh` again. Everything else follows:
| Qt / KDE apps | the color scheme itself |
| GTK apps | Breeze GTK, which `kde-gtk-config` syncs from the scheme |
| Tray icons in `kde/tray-icons/` | `ColorScheme-Text`, recolored by Plasma |
| Helium | `../helium/.local/share/helium-themes/`, generated by `build.py` |
| Helium | Breeze GTK, through Helium's GTK theme (see [Helium notes](#helium-notes)) |
| T3 Code | `t3/darwin-breeze.json`, generated by `build.py` and published with `t3 theme set` |
| VS Code | `vscode/package.json` and `vscode/themes/`, generated by `build.py`, packed into `darwin-breeze.vsix` and installed by `apply.sh` |
| Telegram | `telegram/DarwinBreezeDark.tdesktop-theme`, built by `build.py` and imported by hand |
@@ -81,7 +81,7 @@ are built by `build.py` instead. Don't edit generated files by hand.
are, without gamma compensation, so code looks the same in both apps.
- The terminal palette is generated from the color scheme.
- VS Code is Electron, so its workbench colors get the same gamma
compensation as Helium and T3 Code.
compensation as T3 Code.
- The `.vsix` isn't committed; `build.py` packs it from `vscode/`.
## Telegram notes
@@ -94,24 +94,34 @@ are built by `build.py` instead. Don't edit generated files by hand.
colors, are kept as night has them.
- The chat list, top bar and compose bar use the window color; the chat
behind the bubbles and the folder strip use the darker view color.
- Telegram is a Qt app, so unlike Helium and T3 Code it needs no gamma
- Telegram is a Qt app, so unlike T3 Code and VS Code it needs no gamma
compensation.
- The `.tdesktop-theme` is a zip, so it isn't committed; `build.py` builds it
from the night palette and the color scheme.
## Helium notes
- Helium loads the theme from `~/.local/share/helium-themes/darwinbreeze`
through `--load-extension` in `kde/helium/.config/helium-browser-flags.conf`.
Install it separately with `stow -d kde -t "$HOME" helium`.
- In Helium's compact layout the active tab and the toolbar segments on either
side share one theme color, so the toolbar is the same color as the tab
strip and inactive tabs are drawn lighter, as Dolphin does.
- Helium uses the GTK theme (Settings → Appearance → Theme: GTK) with "Use
system title bar and borders" off, so the tab strip doubles as the title
bar. Its colors come from Breeze GTK, which `kde-gtk-config` syncs from
the scheme; there is no Helium theme to generate.
- With the system title bar off, Helium draws the window buttons through
GTK. `kde-gtk-config` renders the KWin buttons into
`~/.config/gtk-3.0/window_decorations.css`, but hands that file to GTK apps
through a GTK module that Helium doesn't load, so Helium would show Breeze
GTK's own round buttons instead. `apply.sh` imports the file from `gtk.css`
so Helium picks it up too.
- In the compact layout, the address bar takes GTK's text field color and the
segment with the extension and window buttons takes the window color, which
Chromium resolves to the darker view color. `.config/gtk-3.0/chromium.css`
gives both the title bar color, and `apply.sh` imports it from `gtk.css`.
Chromium adds a `chromium` class to every GTK node it reads colors from, so
the rules reach Helium and no other GTK app.
- Chromium tags its output as sRGB and KWin shows it with a gamma 2.2 curve,
which lifts dark grays (40 becomes 44). `build.py` writes pre-compensated
values for Helium and T3 Code (both Chromium), so the theme files say 35
where the screen shows 40.
- Under Settings → Appearance the theme must be Classic, not GTK or QT.
which lifts dark grays (40 becomes 44). T3 Code and VS Code get
pre-compensated colors from `build.py`; Helium instead runs with
`--disable-features=WaylandWpColorManagerV1`, so its surfaces go untagged
and show the GTK colors as they are.
## When the colors don't show up