bread-ecosystem/bread-theme/CHANGELOG.md
Breadway fcba376038
Some checks failed
dev bakery / build (push) Failing after 1s
dev bread-theme / build (push) Failing after 1s
beta (rc) bakery / build (push) Has been skipped
beta (rc) bread-theme / build (push) Has been skipped
release bakery / build (push) Failing after 1s
release bread-theme / build (push) Failing after 1s
Build and publish package / package (push) Failing after 39s
Add per-output palettes and window-scoped theme binding
Each Hyprland/GDK connector can have its own palette and stylesheet
under $XDG_RUNTIME_DIR/bread/{palettes,themes}/. GTK apps bind a
widget-level provider so two windows in one process can follow
different wallpapers. Bump workspace version to 0.7.4 for the tag.
2026-08-16 13:20:00 +08:00

2.5 KiB
Raw Blame History

bread-theme changelog

0.7.4

Per-output (per-monitor) theming. Session-global theme.css remains the fallback / focused-monitor sheet; each Hyprland/GDK connector can now have its own palette and stylesheet. BOS still keeps bg/surface/overlay/fg fixed — only color16 come from the wallpaper.

On disk under $XDG_RUNTIME_DIR/bread/ (same fallback as shared_css_path):

  • palettes/<sanitized-output>.json — accents only (round-trips through from_wal_json / a color16 object; never persists pywal's light bg)
  • themes/<sanitized-output>.cssstylesheet() for that palette

New lib API:

  • themes_dir, palettes_dir, output_css_path, output_palette_path, sanitize_output
  • load_palette_for, write_output_palette, write_output_css, write_shared_css_from
  • palette_from_image (isolated wal -i, does not touch ~/.cache/wal), generate_output, palette_from_json
  • stylesheet_resolved — inlines @accent / @on-bg / … to hex so GTK's display-global @define-color cannot leak the wrong monitor's accent

GTK (gtk feature): bind_window, bind_window_with_app_css, output_for_widget, bind_window_auto, bind_window_auto_with_app_css. Widget-scoped providers at USER - 10 so they beat apply_shared but lose to user CSS. Existing apply_shared / apply_app_css / apply_css / apply_user_css are unchanged.

CLI: bread-theme generate-output <OUTPUT> --image <PATH> | --from-json <FILE> [--shared]. Does not write theme.css unless --shared.

Coordinated bump policy

bread-theme is consumed by breadbar, breadbox, breadpad, and the other GTK bread apps as a pinned git dependency. A breaking change to Palette, css_vars, or the gtk feature API requires dependents to bump their Cargo.toml git tag and cut a release together. Note the impact in this file before tagging.

0.7.4 adds per-output bind APIs (bind_window*, load_palette_for, generate_output). Apps that call those must pin tag = "v0.7.4".


theme-v0.1.0 (2026-06-06)

  • Initial extraction from breadpad-shared/src/theme.rs
  • Palette struct with color0color7 and Catppuccin Mocha default
  • load_palette() reads ~/.cache/wal/colors.json, falls back to default
  • css_vars(palette) emits @define-color block + font declaration
  • hex_to_rgba(hex, alpha) utility
  • tokens module with spacing scale, border radii, font sizes from BREAD_DESIGN_SYSTEM.md
  • gtk feature: apply_css() and apply_user_css() helpers for GTK4 CSS providers