README and packaging/ now describe bakery (CI + ISO bake) as canonical
instead of the old pacman package.yml flow. Pin bread-theme and
bread-utils to bread-ecosystem v0.7.1; rev-pin bread-screenshots because
that crate is not in the tag. Update the essential-keybinds guide to
match the BOS skel (nautilus, lock, breadshot).
Replaces the dev/beta branch split with one trunk (main): dev-track
builds still publish on every push, but the beta track now publishes
from a vX.Y.Z-rc.N prerelease tag instead of a separately-maintained
beta branch. Removes the branch nobody reliably kept in sync.
bread-theme's shared .title rule (1.4em bold) was a bare class selector
that also matched libadwaita's internal row/window-title labels, which
carry the same "title" class. That's what inflated breadman's settings
row titles to ~24px. Scoping the name to .page-title here (the only
consumer of the old class) and bumping bread-theme to the dev branch
where the rename lives.
Same fix as breadbar's wifi add-network dialog: a bare gtk4::Window with
no titlebar falls back to GTK's own minimal CSD (flat bar, plain
system-font title, square corners) — a real HeaderBar (which picks up
the window's title automatically) plus matching dark/rounded theming on
window.wizard-dialog makes this look like part of the app instead of a
stray window from a different decade.
Didn't hit the accent-button rendering quirk noted in breadbar's dialog
fix — this wizard's buttons are plain option/close buttons, no
suggested-action/confirm-button in play.
One more view: "troubleshoot-wizard" opens ui::troubleshoot_wizard
directly (normally only reachable via Home's "Something's wrong?"
button), using the same on_build-hook pattern as breadbar/breadman's
add-dialogs — open() now takes a callback run before .present(), the
only point connect_map can still catch the map. The real call site
(ui::home) passes a no-op.
Deliberately not covered: the onboarding tour (ui::tour) — it's a live,
multi-step walkthrough that overlays callouts on the real desktop as the
user does real things, which has no meaningful single-screenshot
representation in an isolated environment with no real desktop for it
to point at. guide_view and keybind_viewer aren't separate views either
— both render embedded inside the Learn/Home tabs already captured.
Three views ("home", "learn", "ask") — one per tab in the Home/Learn/Ask
Stack, switched via the same set_visible_child_name the tab switcher
itself uses, then captured as a full known-size canvas (the window is a
plain top-level, not layer-shell).
Plumbed through breadhelp's own cli::Action/parse() (three more fields,
same shape as force_onboard/autostart/suggest) rather than clap, matching
the app's existing non-clap idiom.
The HANDLES_COMMAND_LINE + thread_local HANDLE singleton architecture
needed one addition beyond the usual NON_UNIQUE-flag fix: every
invocation (including a --screenshot one) normally forwards to the
already-built window over D-Bus and reuses it — worse than the plain
GApplication case in the other apps, since here it's not just "message
the existing instance" but literally switching tabs on and re-capturing
the operator's real, live help-center window. NON_UNIQUE is now set
whenever --screenshot is present in argv (checked before the
Application is even built, since cli::parse() only runs per-invocation
inside connect_command_line).
Adds bakery.toml (binaries, license_file, desktop_file, data_archive for
the guide content directory) and the standard three-track CI workflows,
mirroring the pattern used across the rest of the bread ecosystem.
Also fixes the tour/troubleshooting-symptoms loaders (tour.rs,
troubleshoot.rs) to check the bakery-writable user content root
(~/.local/share/breadhelp/content) before the system path a pacman
package would have used — the main ContentStore already did this via
user_content_root(), these two were the last holdouts still hardcoded to
/usr/share/breadhelp only.
config.rs's config_dir/load_doc/save_doc/atomic_write were a byte-for-byte
copy of bos-settings/src/config/mod.rs's versions (own doc comment said as
much) introduced in the same fix pass that added them there — now both
delegate to bread_utils::tomlcfg/bread_utils::atomic instead of each
carrying their own copy (path dependency for now, see the TODO in
Cargo.toml).
Also: services/hyprland.rs::query_json used a bare Command::output() with
no timeout, so an unresponsive hyprctl (Hyprland wedged/reloading) could
block clients()/monitors()/layers() indefinitely — switched to
bread_utils::proc::run_json with a 3s cap.
Builds clean; all 8 existing tests pass.
Same discipline as the matching bos-settings fix: state.toml writes went
straight to the target path with no backup and no atomicity, so a crash,
power loss, or disk-full error mid-write could leave the file truncated
or corrupted with no way back.
config::atomic_write now writes to a temp file in the same directory,
renames it over the target (atomic within one filesystem), and backs up
whatever was there before to <path>.bak first. save_doc() goes through it.
Added tests covering the backup/no-leftover-tmp-file behavior and a
save_doc -> load_doc round trip.
makepkg without -s doesn't auto-resolve deps; the pacman -Syu step must
list every runtime dep the PKGBUILD declares. gtk4/glib2 happened to
already be listed for a different reason (build toolchain), but
gtk4-layer-shell and hicolor-icon-theme were missing, failing the v0.2.0
CI run before it ever built anything.
Adds the release/CI machinery bos-settings already has in its own repo:
Forgejo package.yml (tag -> build -> publish to [breadway]) and
mirror.yml (Forgejo -> GitHub). PKGBUILD updated for the flattened
layout and dropped -p breadhelp now that this isn't a workspace member.
Replaces the old in-window onboarding wizard with a real screen-wide
tour: dim + spotlight cutout around the actual on-screen component
(breadbar, breadbox), floating callout teaching the shortcut, and
event-driven confirmation via real Hyprland/breadd signals instead of
click-through fakery.
bos-settings moves to git.breadway.dev/Breadway/bos-settings (full history
preserved via git-filter-repo) so its release cadence is decoupled from
BOS's own. breadhelp takes its place as this repo's workspace member: a
GTK4 onboarding/help center replacing the old bos-welcome/bos-keybinds
bash scripts with searchable guides, an interactive keybind viewer
(sourced from the new keybinds.toml, not parsed out of hyprland.lua or
hardcoded), a troubleshooting wizard with one-click fixes, and a proper
first-run tour. bos-netcheck extracts bos-welcome's network-check half,
which still needs to run every login independent of breadhelp's own
first-run gating.
hyprland.lua's keybinds/settings/monitors/autostart are now JSON-driven
(binds.json/settings.json/monitors.json/autostart.json) with every
loader pcall-wrapped and falling back to hardcoded defaults per field on
bad or missing config, so bread* apps (bos-settings' new editors, and
breadhelp's keybind viewer) can read/write this config without ever
being able to leave the compositor unable to start.
CI's package.yml now builds breadhelp instead of bos-settings on tag
push; bos-settings needs its own equivalent workflow in its new repo
(not yet set up).