The full-screen overlay window sets `window { background-color: transparent }`
in its app CSS (APPLICATION priority), but `bind_window_auto` re-broadcasts
the shared component sheet — which includes `window { background-color: @bg }`
— as a widget-tree provider at STYLE_PROVIDER_PRIORITY_USER - 10. Provider
priority is the primary cascade key, so that outranks the app rule regardless
of selector specificity: the "transparent overlay" fills the screen with an
opaque @bg (#0c0c0c) rectangle, hiding the whole desktop behind the launcher.
Guaranteed to bite under a VM's software renderer where there's no GL context
to paper over it.
Bind the app sheet too, via bind_window_auto_with_app_css (rides at USER - 9,
back above the shared window rule) — same pattern breadbar and breadhelp
already use. Verified with a headless pixman sway + solid-colour background:
the overlay region outside the panel now shows the desktop through.
breadsearch and breadclip use the same new_overlay_window + bind_window_auto
pattern and need the same fix.
breadbox's launcher is now a thin host over the `bread-launcher` crate
(bread-ecosystem v0.7.5) — the same core breadbar's embedded capsule
uses — instead of a private implementation:
- `breadbox-shared` becomes a re-export shim over `bread_launcher`
(`DesktopEntry`, `LaunchHistory`, `config_dir`, `LAUNCHER_APP`); the
local fuzzy-match / ranking / desktop-file parsing is deleted.
- `run_ui` builds `bread_launcher::gtk::ResultsList` for the results
list and calls `bread_launcher::do_launch` / `load_sorted_entries`;
the hand-rolled row/icon/score code is gone.
- Launcher geometry and style come from the active shell-theme manifest
(`bread_theme::shell`, via the new `src/theme.rs` accessor mirroring
breadbar's) — width, radius, panel alpha, top margin, icon size,
footer wording. The Daylight / liquid-motion look is the manifest's
job now, not hardcoded CSS.
- Keeps `main`'s recent improvements on top of the branch work: the
overlay window + outside-click come from `bread_utils::gtk_popup`
(`new_overlay_window` / `bind_window_auto` / `close_on_outside_click`),
replacing the manual layer-shell + GestureClick boilerplate.
- Embedded-open redirect: when the active theme embeds the launcher
(spotlight capsule), breadbox emits `bread.box.open_requested` on the
bus instead of mapping its own window; falls back to its own overlay
when breadd is unreachable.
- Pins: bread-theme / bread-utils / bread-screenshots / bread-launcher
→ v0.7.5 (bread-launcher and `bread_theme::shell` first ship there).
`.cargo/` gitignored — the local sibling-checkout source override
(`fa85fc1`) is no longer needed now that v0.7.5 is tagged.
Reconciles the long-lived `feature/launcher-core` (13 commits, incl.
`feature/launcher-theming`) with `main`'s independent launcher redesign
(`feature/liquid-motion` + `bread_utils::gtk_popup` adoption). Applied
as one squashed reconciliation rather than a 13-commit rebase because
the two lines rewrote the same ~200-line `run_ui`/`build_css` region
in incompatible directions.
cargo build --locked / test --locked / clippy --all-targets --locked
-D warnings all clean.
Replace the hand-rolled layer-shell window, visible-row Up/Down
navigation, and click-outside-to-close gesture with the shared
helpers already used by breadclip. Keep singleton::toggle_or_kill
and bind_window_auto.
Repoint bread-theme, bread-utils, and bread-screenshots at tag v0.7.2
on git.breadway.dev. Drop the 69ce2d67 rev pin now that screenshots
is on a tagged release.
Link bread-utils bread-client (tag v0.7.1) from the breadbox crate.
Fire-and-forget via BreadClient; silent if breadd is down. No command
verbs — breadbox is not a daemon. EVENTS.md is the contract (app id box).
Repoint bread-theme and bread-utils at git.breadway.dev tag v0.7.1
(no github.com). bread-screenshots is not on that tag yet, so rev-pin
it instead of tracking branch=main.
Replace the homegrown PID-file toggle with bread-utils::singleton so
the launcher still dismisses on a second keybind without the TOCTOU
window. Screenshot mode still skips the lock.
README now documents the fixed BOS dark fallback (not Catppuccin
Mocha). Drop the unused GitHub Actions release workflow; Forgejo is
canonical. CONTRIBUTING already documents single-trunk.
Ports breadbox onto the shared, pinned CI build image (following the
pattern proven in breadpad): ci/build.sh delegates to bread-ecosystem's
own ci/build.sh, pinned by commit sha in ci/bread-ecosystem.rev, instead
of building directly on the bare self-hosted runner. Also adds
check.yml to run clippy/test on feature/fix branches ahead of the
dev-track release build.
No ci/deps.txt: breadbox's Cargo.toml pulls in nothing beyond what the
shared Containerfile already installs (gtk4, gtk4-layer-shell). The
librsvg system dep in bakery.toml is a runtime gdk-pixbuf loader for
SVG icons, not a Cargo build dependency.
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.
Same pattern as breadbar's screenshot mode (see bread-ecosystem's
bread-capture orchestrator): render the launcher panel, capture it via
bread-screenshots, then exit. Only one view worth capturing here
("launcher") since breadbox has no separate layer surfaces or popovers —
just the search box + app list over a full-screen transparent overlay —
so a full known-size canvas capture is enough, no geometry tracking
needed.
Also fixes a real footgun in the existing PID-file toggle: it kills
whatever process is holding breadbox.pid, which on this machine is
typically the real, already-running breadbox. A screenshot run now skips
toggle_or_continue() entirely instead of fighting over (and killing) the
operator's real instance.
bakery already fully covers what the PKGBUILD provided (binary, systemd
--user service where applicable, dependency declarations) except a LICENSE
copy, which bakery.toml's new license_file field now closes. Removes
packaging/arch/ and .forgejo/workflows/package.yml; adds the LICENSE
artifact to each release/dev-release/beta-release workflow's prepare
step. Not pacman-installed inside BOS today (BOS already consumes these
apps exclusively via build-local.sh's skel-staging), so this only removes
the option to `pacman -S` outside of BOS/bakery.
Documents the dev/beta/main branch and release-track workflow shared
across the bread ecosystem. See bread-ecosystem's docs/release-channels.md
for the full policy this implements.
Beta is now a real stabilization branch: publishes on every push to
`beta` (mirroring dev's model, auto-versioned X.Y.Z-beta.<ts>+<sha>,
base version from the latest published tag) instead of a manual
beta-v* tag. Fixes made during the freeze land via fix/<issue> branches
merged into `beta` directly. The gen-index.sh clone for beta pulls
bread-ecosystem's default branch (main) rather than pinning to dev,
since beta is the more stable track and main now carries the
TRACK-aware script.
Cargo.toml can drift stale relative to the actual last release (observed
on breadbox/breadpad/breadcrumbs/breadpaper), which made the auto-bumped
dev version sort as OLDER than what's already installed — bakery's semver
check correctly refused those "updates". Deriving the base version from
git ls-remote --tags instead is self-healing regardless of Cargo.toml
drift, with a Cargo.toml fallback only for a repo with no tags yet.
The fixed /tmp/bread-ecosystem-ci path races when multiple repos' dev/beta
workflows run close together on the same self-hosted runner — one job's
rm -rf/clone can stomp another's in-progress checkout, causing the
regenerate-index step to fail intermittently. Switch to mktemp -d.
Adds dev-release.yml (publishes on every push to dev) and beta-release.yml
(publishes on a beta-v* tag), mirroring the pattern landing in
bread-ecosystem/bread. See bread-ecosystem/docs/release-channels.md for
the three-track policy.
Use bread-theme 0.2.7's luminance-picked ink (@on-*): a selected/hovered row set
its background to `surface` but kept the pywal foreground, so the highlighted
item went unreadable when `surface` came out light. Colour is now set per surface
(panel, search box, row states) and labels inherit it.
Switch to bread_theme::gtk::apply_app_css so breadbox picks up `bread-theme
reload` (and rebuilds from the fresh palette on each launch).
Apply bread_theme::gtk::apply_shared() before breadbox's own CSS so fonts,
palette, and generic widgets come from the shared ecosystem stylesheet. Keep
only launcher-specific rules (launcher-bg, searchentry, rows). Bump bread-theme
dep to v0.2.6.
- packaging/arch/PKGBUILD: builds and publishes breadbox to [breadway] repo
- .forgejo/workflows/mirror.yml: mirrors every push/tag to GitHub
- .forgejo/workflows/package.yml: builds on tag, publishes to Forgejo registry
Requires FORGEJO_TOKEN and GITHUB_MIRROR_TOKEN secrets in Forgejo.
Track per-app launch counts in ~/.cache/breadbox/history.json. When a
query is active, sort visible results by fuzzy match quality (exact >
prefix > contains > subsequence) then by launch count descending, so
the most relevant and most-used app rises to the top. The base list
(no query) also surfaces most-launched apps above unvisited ones.