Theming
The settings app is themed from the same matugen palette (Material You colours generated from your wallpaper) as the rest of your desktop, with a Light / Dark / System toggle. The design direction is clean and modern: generous whitespace, few colours (one accent plus status colours), simple rows, no gradients.
The theme toggle
Section titled “The theme toggle”A three-state control (Light / Dark / System, default System) sits at the bottom of the sidebar.
- The choice is persisted in
localStorageunderutter.theme. - System follows
prefers-color-schemelive. - Colours are CSS custom properties. A
.darkclass on<html>swaps the built-in light and dark palettes, and an inline script sets the class before first paint, so there is no flash.
Without a matugen palette the app uses a clean built-in palette: warm neutrals with the Utter
yellow (#f2c230 in light, #f7c948 in dark) as the single accent.
matugen integration
Section titled “matugen integration”If ~/.local/share/utter/colors.css exists (matugen output), its colours drive the semantic
tokens:
matugen → ~/.local/share/utter/colors.css → gui-tauri/src-tauri/src/theme.rs (notify watcher → "theme-changed")- The Rust side parses both GTK-style
@define-color <name> <hex>;lines and:root { --x: ... }custom properties, and maps them onto the semantic tokens--background,--foreground,--card,--primary,--primary-foreground,--secondary,--muted,--accent,--destructive,--borderand--ring. - A debounced (about 300 ms) file watcher re-reads the palette on change and emits
theme-changed; the frontend swaps the tokens live with a short transition. Change your wallpaper and the app follows without a restart. - A matugen palette only overrides the tokens when its lightness matches the selected mode. A dark palette is ignored in Light mode, so the toggle keeps working on a dark desktop.
- Set
UTTER_THEME_CSSto point at a different palette file (handy for tests).
Installing the matugen template
Section titled “Installing the matugen template”scripts/install-matugen-utter.sh # --dry-run supportedThe script is idempotent. It copies the template to
~/.config/matugen/templates/utter-colors.css, safely adds a [templates.utter] block to
~/.config/matugen/config.toml (backing it up first), and creates ~/.local/share/utter/.
Re-run your normal matugen command to regenerate the colours.
The block it adds looks like this. The installer writes absolute paths because matugen does not
reliably expand ~:
[templates.utter]input_path = "~/.config/matugen/templates/utter-colors.css"output_path = "~/.local/share/utter/colors.css"Accessibility
Section titled “Accessibility”matugen’s Material 3 roles pair every x colour with an on_x; text and icons always use the
on_* role, which keeps contrast correct in both schemes. matugen --contrast -1..1 tunes the
whole scheme; match the value you use for the rest of the desktop. Both light and dark are
emitted and follow the system.
Widgets
Section titled “Widgets”The optional Noctalia widget and on-screen display use Noctalia’s own theming, so they match the shell they live in. See Noctalia widget and OSD.