audit-schema-consumption.md's recurring defect: a key that validates but does nothing, five separate instances (css/extra.css overlay, tokens.font_family, tokens.font_fallback, tokens.font_size_base, tokens.accent_to). All five are consumed only by breadbar/breadbox, which this pass doesn't touch, so per the audit's own (a)/(b)/(c) choice this is (b): document the gap at both the schema accessor and every theme.toml site that sets the key, so the manifest states its design intent honestly instead of implying the value has an effect it doesn't. Also documents modules.clock.format/show_date (consumed only by ClockStyle::Plain, silently ignored by Flip/None) and bar.window.margin.bottom (parsed, never applied by breadbar) the same way.
178 lines
6.6 KiB
TOML
178 lines
6.6 KiB
TOML
# The second compiled-in builtin (bread-theme/src/shell/builtin.rs), demo 02
|
|
# in THEME_SYSTEM_PLAN.md — "Glass Workbench": a flush edge-to-edge bar with
|
|
# plain pill workspaces, a plain date+time clock, and cpu/ram chips instead
|
|
# of the media widget liquid-motion carries. Values are taken from
|
|
# bos-ui-demos/02-glass-workbench.html's <style> block; where the demo is
|
|
# silent on a number (bar-adjacent chip sizing, satellite offsets) this file
|
|
# scales liquid-motion's own numbers down by the same 36/44 bar-height ratio
|
|
# rather than inventing something unrelated to either source.
|
|
#
|
|
# Unlike liquid-motion, this builtin has no "as the code exists today" tether
|
|
# — it is new, so demo fidelity is the only source of truth. See Phase 5's
|
|
# task notes for the two exceptions: font (IBM Plex Sans is not installed on
|
|
# the dev machine, so this renders in fallback until the user installs
|
|
# ttf-ibm-plex) and colour (the demo's #7a9a88 sage is a *flat* accent, so it
|
|
# maps to the palette's `green` token for both accent_from and accent_to —
|
|
# never a literal hex value, or pywal theming breaks).
|
|
|
|
name = "Glass Workbench"
|
|
id = "glass-workbench"
|
|
|
|
[tokens]
|
|
# Declared-but-not-yet-consumed: see liquid-motion/theme.toml's identical
|
|
# note next to these three keys — neither breadbar nor breadbox reads them;
|
|
# the font that actually renders comes from bread_theme::stylesheet()'s own
|
|
# hardcoded constant instead.
|
|
font_family = "IBM Plex Sans"
|
|
font_fallback = "Inter, Noto Sans, sans-serif"
|
|
font_size_base = 13
|
|
radius_bar = 0
|
|
radius_card = 10
|
|
radius_sm = 6
|
|
radius_pill = 999
|
|
pad = 12
|
|
bg_alpha = 0.72
|
|
# The demo defines exactly one easing curve (`--spring: cubic-bezier(.22,
|
|
# 1.2, .36, 1)`), not liquid-motion's overshoot/settle pair — there's no
|
|
# digit-flip or trail-stretch here to want a bounce for. Both `spring` and
|
|
# `spring_settle` point at the demo's one curve rather than inventing a
|
|
# second value the demo never specifies.
|
|
spring = "cubic-bezier(0.22, 1.2, 0.36, 1)"
|
|
spring_settle = "cubic-bezier(0.22, 1.2, 0.36, 1)"
|
|
# Palette token NAMES, not hex — #7a9a88 is this palette's `green`. Equal
|
|
# from/to because the demo's accent is flat, not a gradient. accent_from IS
|
|
# read (Pill-style workspace fill, theme.rs); accent_to is declared-but-
|
|
# not-yet-consumed regardless of style — nothing reads it outside the
|
|
# breadbar Trail gradient this theme doesn't use, and even Trail hardcodes
|
|
# its own literal gradient rather than substituting it. See
|
|
# Tokens::accent_to's doc comment.
|
|
accent_from = "green"
|
|
accent_to = "green"
|
|
# Demo: `.ws button { height: 20px }`. Liquid-motion's chip_height (32) is
|
|
# tied to its 44px island; 20px is the demo's own number for this bar's
|
|
# workspace pills, and is reused for the bar's other small chips (cpu/ram/
|
|
# wifi/battery/control) so they all sit at the same height on the thinner
|
|
# 36px flush bar.
|
|
chip_height = 20
|
|
# No demo number for bar-icon size; scaled from liquid-motion's 24px by the
|
|
# same 36/44 bar-height ratio liquid-motion itself uses for its 44px bar.
|
|
icon_px = 18
|
|
# Flush edge-to-edge bar: a full border would draw a stray line along the
|
|
# top/side screen edges a floating island doesn't have to worry about. See
|
|
# Tokens::bar_border's doc comment.
|
|
bar_border = "bottom"
|
|
|
|
[bar.window]
|
|
anchors = ["top", "left", "right"]
|
|
width = "fill"
|
|
height = 36
|
|
margin = { top = 0, left = 0, right = 0 }
|
|
exclusive = "auto"
|
|
keyboard = "none"
|
|
layer = "top"
|
|
|
|
[bar.slots]
|
|
# No media module — demo 02 has no media widget at all (plan §1 table).
|
|
# breadbar must tolerate the omission: `media_widget` is still built and
|
|
# registered under the "media" module name (main.rs), it just never appears
|
|
# in any of this theme's slot lists, so it's never appended anywhere.
|
|
left = ["workspaces"]
|
|
centre = ["clock"]
|
|
right = ["cpu", "ram", "wifi", "battery", "control"]
|
|
drawer = []
|
|
|
|
[modules.workspaces]
|
|
style = "pill"
|
|
show_empty = true
|
|
|
|
[modules.clock]
|
|
style = "plain"
|
|
format = "%H:%M"
|
|
show_date = true
|
|
|
|
[launcher]
|
|
mode = "overlay"
|
|
width = 560
|
|
top = "64px"
|
|
radius = 12
|
|
icon_px = 32
|
|
row_anim = "stagger"
|
|
rule = "hairline"
|
|
footer = "count_results"
|
|
# Declared-but-not-consumed, exactly like liquid-motion's own launcher block:
|
|
# breadbox's Phase 4b-i wiring only reads mode/width/top/radius/icon_px.
|
|
# row_anim/rule/footer are this theme's demo-derived aspirations breadbox
|
|
# does not implement yet; sections/modes describe today's actual (trivial,
|
|
# apps-only) behaviour but are equally unread by any code path.
|
|
sections = false
|
|
modes = ["apps"]
|
|
|
|
# Same four satellite namespaces as liquid-motion, keyed identically so the
|
|
# two manifests validate against the same [compositor.*] keyspace. Offsets
|
|
# are liquid-motion's own numbers re-derived from this bar's actual edge
|
|
# instead of the island's: liquid-motion's bar bottom edge sits at
|
|
# margin.top(12) + height(44) = 56px, and its breadbar-notif/-panel top
|
|
# offset (64) is that plus an 8px gap, while breadbar-dismiss (56) sits
|
|
# flush against it with no gap. This bar's edge is margin.top(0) +
|
|
# height(36) = 36px, so the same two relationships give 44 (36 + 8) and 36.
|
|
[surfaces."breadbar-notif"]
|
|
anchor = "top_right"
|
|
offset = [16, 44]
|
|
width = 320
|
|
layer = "overlay"
|
|
|
|
[surfaces."breadbar-osd"]
|
|
# Independent of bar height (an OSD pill near the bottom of the screen) —
|
|
# unchanged from liquid-motion.
|
|
anchor = "bottom_centre"
|
|
offset = 80
|
|
width = 180
|
|
layer = "overlay"
|
|
|
|
[surfaces."breadbar-panel"]
|
|
anchor = "top_right"
|
|
offset = [16, 44]
|
|
width = "auto"
|
|
layer = "overlay"
|
|
|
|
[surfaces."breadbar-dismiss"]
|
|
anchor = "fill"
|
|
offset = 36
|
|
width = "fill"
|
|
layer = "overlay"
|
|
|
|
# Appearance-only, never placement/workspace/focus (plan §12 Layer B
|
|
# boundary) — identical to liquid-motion's rules. Blur *strength* is global
|
|
# (plan §9 known limit), so this theme cannot independently match the demo's
|
|
# per-surface blur radii (20px bar / 16px launcher / 22px popovers / 6px
|
|
# window borders); only on/off, ignore_alpha and slide direction are
|
|
# per-namespace knobs this system actually has.
|
|
[compositor."breadbar"]
|
|
blur = true
|
|
ignore_alpha = 0.2
|
|
blur_popups = true
|
|
animation = "slide top"
|
|
|
|
[compositor."breadbar-osd"]
|
|
blur = true
|
|
ignore_alpha = 0.2
|
|
animation = "slide bottom"
|
|
|
|
[compositor."breadbar-notif"]
|
|
blur = true
|
|
ignore_alpha = 0.2
|
|
animation = "slide right"
|
|
|
|
[compositor."breadbar-panel"]
|
|
blur = true
|
|
ignore_alpha = 0.2
|
|
animation = "slide right"
|
|
|
|
[compositor."breadbar-dismiss"]
|
|
no_anim = true
|
|
|
|
[compositor."breadbox"]
|
|
blur = true
|
|
ignore_alpha = 0.2
|
|
|
|
# No `css = "..."` overlay — compiled-in builtin, same as liquid-motion.
|