Same pattern as breadbar/breadbox: render the clipboard-history panel,
capture it via bread-screenshots, then exit. One view ("history"), full
known-size canvas capture since the panel isn't its own layer surface.
active_window()/focused_monitor() (used to anchor the panel next to the
real focused window) both resolve to None inside bread-capture's isolated
environment (HYPRLAND_INSTANCE_SIGNATURE is deliberately unset there), so
the panel falls back to its already-existing centered layout — exactly
the deterministic behavior a screenshot needs, with no screenshot-mode-
specific positioning logic required.
Also fixes the same singleton footgun as breadbox: toggle_or_kill()
kills whatever's holding breadclip's single-instance lock, which is
typically the real running instance. A screenshot run now skips it
entirely instead of fighting over (and killing) the operator's real
clipboard panel.
|
||
|---|---|---|
| .forgejo/workflows | ||
| breadclip | ||
| breadclip-core | ||
| breadclipd | ||
| contrib | ||
| .gitignore | ||
| bakery.toml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| EVENTS.md | ||
| LICENSE | ||
| README.md | ||
breadclip
A Wayland clipboard history manager for Hyprland. It consists of two binaries:
breadclipd— a background daemon that watches the clipboard and persists entries to a local SQLite database.breadclip— a GTK4 Layer Shell popup for browsing and recalling clipboard history.
Requirements
- Rust toolchain (edition 2021)
- GTK 4.12+
gtk4-layer-shellwl-clipboard(wl-pasteandwl-copymust be on$PATH)- Hyprland (or any Wayland compositor with Layer Shell support, though the panel-positioning logic is Hyprland-specific)
Build
git clone https://git.breadway.dev/breadway/breadclip
cd breadclip
cargo build --release
The compiled binaries are at target/release/breadclip and target/release/breadclipd.
Install
Copy the binaries to somewhere on your $PATH, e.g.:
cp target/release/breadclip target/release/breadclipd ~/.local/bin/
systemd user service
A unit file is provided in contrib/:
cp contrib/breadclipd.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now breadclipd
Hyprland keybind
Add the contents of contrib/hyprland.conf to your hyprland.conf:
layerrule = blur, breadclip
layerrule = ignorezero, breadclip
bind = $mainMod, V, exec, breadclip
The layerrule lines enable the frosted-glass blur effect behind the panel.
Usage
Start the daemon (or let the systemd unit handle it):
breadclipd
Open the clipboard history popup:
breadclip
Running breadclip a second time while it is open closes it (toggle behaviour).
Keyboard shortcuts
| Key | Action |
|---|---|
Up / Down |
Move selection |
Enter |
Copy selected entry to clipboard and close |
Delete |
Remove selected entry from history |
Escape |
Close without copying |
Clicking an entry copies it and closes the popup. Clicking outside the panel closes it.
Filtering and search
The popup has three filter chips — All, Text, Images — and a search box. The search box filters text entries by content; image entries only appear under the Images filter.
Data storage
History is stored under $XDG_DATA_HOME/breadclip/ (typically ~/.local/share/breadclip/):
| Path | Contents |
|---|---|
history.db |
SQLite database of all entries |
images/ |
PNG files for image entries |
The daemon keeps at most 200 text entries and 50 image entries, trimming oldest entries automatically.
Privacy
history.dband every file underimages/are created with0600permissions (owner read/write only), regardless of your umask.- breadclipd never persists clipboard content flagged as sensitive by a password manager. If a clipboard offer advertises the
x-kde-passwordManagerHintMIME type — the convention used by KeePassXC, Bitwarden, and other password managers to mark content they own — that copy is skipped entirely and never reaches the database. - That said, this is still a plaintext SQLite database of everything else you copy. Anything copied by an app that doesn't set the hint (e.g. copying a password from a terminal or a non-integrated app) will be stored like any other text entry. Treat
history.dbas sensitive, and don't rely on it as your only safeguard.
Theming
breadclip inherits its colour palette from bread-theme. The panel renders with an 80% opaque background so Hyprland's layerrule = blur can show a frosted-glass effect behind it.