|
All checks were successful
check / check (push) Successful in 1m29s
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. |
||
|---|---|---|
| .forgejo/workflows | ||
| .github | ||
| breadbox | ||
| breadbox-shared | ||
| breadbox-sync | ||
| ci | ||
| packaging | ||
| .gitignore | ||
| AGENTS.md | ||
| bakery.toml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.example.toml | ||
| CONTRIBUTING.md | ||
| EVENTS.md | ||
| LICENSE | ||
| README.md | ||
breadbox
A GTK4 app launcher for Hyprland / Wayland on Arch Linux.
breadbox-shared shared types (DesktopEntry, IconCache, Config)
breadbox-sync standalone icon resolution + caching binary
breadbox GTK4 layer-shell launcher
Features
- Layer-shell window, centered 600 px wide, keyboard-exclusive
- Reads the active Hyprland workspace and sorts apps by context priority
- Fuzzy filtering as you type; Enter launches, Escape closes
- App icons loaded from the resolved icon cache (see
breadbox-sync) - pywal accents from
~/.cache/wal/colors.json; background/surface/overlay/foreground stay fixed BOS dark - User CSS override at
~/.config/breadbox/style.css - Toggle/dismiss: running a second instance kills the first
Build dependencies
gtk4 (pacman -S gtk4)
gtk4-layer-shell (pacman -S gtk4-layer-shell)
librsvg (pacman -S librsvg) # for SVG icon support
rust (stable) (rustup toolchain install stable)
Build
# debug
cargo build
# release (recommended — put both binaries on $PATH)
cargo build --release
# binaries are at target/release/breadbox and target/release/breadbox-sync
Install to ~/.cargo/bin (or anywhere on your PATH):
cargo install --path breadbox
cargo install --path breadbox-sync
Configuration
Copy and edit the example config:
mkdir -p ~/.config/breadbox
cp config.example.toml ~/.config/breadbox/config.toml
The [[context]] blocks map Hyprland workspace names to app priority lists.
Workspace name "default" is the catch-all fallback.
[[context]]
name = "default"
priority = ["firefox", "code", "obsidian", "kitty"]
[[context]]
name = "2"
priority = ["slack", "discord"]
CSS theming
breadbox applies pywal colors automatically when ~/.cache/wal/colors.json is
present. To override or extend the theme:
~/.config/breadbox/style.css
This file is loaded at the highest CSS priority level, so any rule here wins.
Icon sync
breadbox-sync resolves icons for all installed apps and writes them to
~/.cache/breadbox/. Run it once before first launch:
breadbox-sync
Icon resolution order:
- System icon theme (
~/.local/share/icons,/usr/share/icons,/usr/share/pixmaps) — 64 px > 48 px PNG, then SVG - Flathub media server — for reverse-DNS app IDs (e.g.
org.gnome.Gedit) - icon.horse — downloaded and cached
application-x-executablefallback from system theme
Systemd service (run on login)
cp packaging/breadbox-sync.service ~/.config/systemd/user/
systemctl --user enable --now breadbox-sync.service
The service runs breadbox-sync once at login (after network is up) and logs
to journald. Re-run manually after installing new apps:
systemctl --user start breadbox-sync.service
# or just:
breadbox-sync
Hyprland keybind
Add to ~/.config/hypr/hyprland.conf:
bind = $mainMod, SPACE, exec, breadbox
Pressing the keybind again while the launcher is open dismisses it.
Licence
MIT — see LICENSE.