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.
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.
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).
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.
- breadbox/Cargo.toml: depend on bread-theme with gtk feature
- breadbox/src/main.rs: remove local Palette + hex_to_rgba; use
bread_theme::{load_palette, hex_to_rgba, gtk::apply_user_css}
- bakery.toml: describes breadbox for bakery install
- release.yml: builds on hestia self-hosted runner, publishes binaries to
dl.breadway.dev and GitHub Releases on v* tags
Remove the wofi subprocess entirely. The launcher now renders its own
Wayland overlay window via gtk4 + gtk4-layer-shell: a SearchEntry at
the top with live fuzzy filtering, a ListBox of results below, and
keyboard navigation (Enter/Esc/arrows). Toggle (keybind press while
open closes it) is handled via a PID file in $XDG_RUNTIME_DIR.
Zero-dependency Rust rewrite of the breadboard launcher. Parses
.desktop files in-process (no awk subprocesses), builds a tab-separated
cache for wofi dmenu, and supports stale-while-revalidate background
rebuilds. Apps-only for now; icon support to be added later.