Theming Architecture
Your family
Theming runs in two stages. switchwall.sh writes palette files to ~/.local/state/quickshell/user/generated/, then applycolor.sh hands them to each app.
Palette generation
Section titled “Palette generation”- Inputs: a wallpaper (
switchwall.sh --image), a seed colour (--color), light or dark (--mode), a scheme (--scheme), and iRiS’s surface (iris-surface.json) when iRiS is the family and its apps follow Material. Presets inmodules/common/ThemePresets.qmlwritecolors.jsonandpalette.jsondirectly. inir-accel material-colors, called byswitchwall.sh, is the only palette generator. It renders the templates in~/.config/matugen(installed fromdefaults/matugen/) with{{colors.<token>.<mode>.<prop>}}placeholders. matugen is gone, but the paths keep its name.
| File | Use |
|---|---|
colors.json |
Shell and UI palette, read by MaterialThemeLoader.qml |
palette.json |
Shell palette, read by most target modules |
app-palette.json |
Palette for the app targets |
terminal.json |
Terminal palette |
material_colors.scss |
Compatibility values for the terminal, editor and Zed targets |
theme-meta.json |
source, mode and scheme |
palette.json and terminal.json override matching values from material_colors.scss.
Target application
Section titled “Target application”applycolor.shruns every enabled target module.MaterialThemeLoader.qml, the installer and the Settings button for open terminals call it.apply-targets.shruns the targets you name (inir theme apply).- Manifests are in
scripts/colors/targets/, modules inscripts/colors/modules/. See Theming Targets and Theming Modules.
Runtime
Section titled “Runtime”services/ThemeService.qmlpicks the theme. Auto themes runswitchwall.sh. A manual change also runssystem24_palette.shfor Vesktop whenenableVesktopis on.services/MaterialThemeLoader.qmlreadscolors.jsonandapp-palette.json, and debounces theapplycolor.shrun.services/Lume.qmlkeeps text readable over the wallpaper. It readsWallpaperLuma, not these files.