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).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
makepkg's debug split produced a -debug pkg; the upload's head -1 could
grab it instead of the main package. !debug yields a single package.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Forgejo runner injects GITHUB_SERVER_URL as http://localhost:3002, which
is unreachable from inside the job container. Use the public URL instead.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 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.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The backdrop approach failed because a GTK4 window with no child widget
gets an empty Wayland input region, so pointer events passed straight
through it rather than being delivered to the GestureClick handler.
Replace with a single full-screen window (anchored to all 4 edges,
transparent background). The launcher UI (vbox) is 700 px wide,
halign=Center, valign=Start — visually identical to before. A
GestureClick on the window closes it when (x,y) falls outside the
vbox's allocation rectangle; clicks inside the vbox reach child widgets
normally and don't trigger the close path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
EventControllerFocus::connect_leave was firing whenever the pointer left
the launcher surface because Hyprland's focus-follows-mouse hands keyboard
focus back to the window under the cursor (OnDemand mode).
Fix: introduce a full-screen transparent backdrop window at Layer::Top.
The launcher sits at Layer::Overlay (above it), so the backdrop never
intercepts launcher clicks. Clicking anywhere outside the launcher hits
the backdrop and closes both windows via a shared Rc<dyn Fn()> callback.
The launcher returns to KeyboardMode::Exclusive so the compositor can no
longer steal focus on pointer leave. EventControllerFocus is removed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- KeyboardMode::Exclusive → OnDemand: with Exclusive the compositor
never sends wl_keyboard::leave, so EventControllerFocus::connect_leave
never fires. OnDemand lets Hyprland hand focus back on click-outside.
- Move EventControllerKey from search to window, capture phase: bubble
phase on SearchEntry let its own handlers consume Enter and arrows
first. Capture phase on the window intercepts all keys before any
widget sees them, so Enter/Up/Down/Esc always reach our handler.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch KeyboardMode to Exclusive so Hyprland hands keyboard focus to
breadbox immediately on creation. Add an EventControllerFocus on the
window that calls close() the moment focus leaves (click outside,
alt-tab, compositor focus change, etc.).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>