Add bread_theme::shell manifest system (Phase 1)
Implements the shell theme manifest layer from THEME_SYSTEM_PLAN.md §4-5: ShellTheme/WindowSpec/Slots/Tokens/LayerRule types, TOML discovery (user -> system -> compiled-in builtin), one level of `extends` deep-merge, deny_unknown_fields validation naming the offending key, slot module-name validation, and css() token substitution with an extra.css overlay. load() never fails, falling back to the compiled-in builtin and logging once. Ships exactly one builtin manifest, liquid-motion, describing breadbar/breadbox as they exist today (not the design-doc demo, which disagrees with the code on bar side margin, launcher geometry, and the easing curves). Compositor rules and surface specs are keyed by layer-shell namespace and cover all five breadbar namespaces plus breadbox/breadbar-panel/breadbar-dismiss. watch() is gated behind the existing `gtk` feature (gio::FileMonitor is a gtk4 dependency); the rest of the module is gtk-free so bread and breadcrumbs can validate a theme without linking GTK. No consumer changes — breadbar/breadbox still use their own hardcoded values.
This commit is contained in:
parent
347f356b1d
commit
96aa6a513b
10 changed files with 2097 additions and 0 deletions
|
|
@ -12,6 +12,11 @@ keywords = ["theming", "pywal", "gtk4", "wayland"]
|
|||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
dirs = { workspace = true }
|
||||
# bread_theme::shell manifest parsing (theme.toml) — gtk-free, so `bread`
|
||||
# (daemon) and `breadcrumbs` (CLI) can validate a theme without linking GTK.
|
||||
toml = { workspace = true }
|
||||
anyhow = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
gtk4 = { version = "0.11", features = ["v4_12"], optional = true }
|
||||
# Rust bindings for libadwaita (GNOME's widget library on top of GTK4) — the
|
||||
# actual source of the modern GNOME look (grouped preference rows, real
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue