mirror of github.com/Breadway/breadshot
hyprctl_json used a bare Command::new("hyprctl").output() with no timeout,
used by every geometry_* helper (region/output/window/active_window/
active_output selection) — an unresponsive hyprctl could block screenshot
capture indefinitely. Switched to bread_utils::proc::run_json (path
dependency for now, see the TODO in Cargo.toml).
grim/slurp/wl-copy calls deliberately left untouched: several pipe binary
image data through stdin/stdout (e.g. grim -> wl-copy), which
bread_utils::proc's current run_with_stdin only accepts as &str — adapting
those safely would need a bytes-flavored variant, out of scope for this
pass to avoid risking a regression in image piping.
|
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .gitignore | ||
| bakery.toml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
breadshot
Wayland screenshot utility for the bread ecosystem. Wraps grim, slurp, and wl-copy with Hyprland-aware geometry resolution, clipboard integration, and desktop notifications.
Requirements
Required (must be in $PATH):
grim— Wayland screenshot toolslurp— region/window selectionwl-copy(wl-clipboard) — clipboard writehyprctl— Hyprland IPC (for window and monitor geometry)
Optional:
hyprpicker— screen freeze during selection (--freeze)notify-send— desktop notifications (silently skipped if absent)
Build and install
# build only
cargo build --release
# build and install to /usr/local/bin
make install
# install to a custom prefix
make install PREFIX=/usr
Usage
breadshot <mode> [options]
Modes
| Mode | Description |
|---|---|
region |
Interactive region selection |
window |
Click to select a window on the active workspaces |
output |
Click to select a monitor |
active-window |
Capture the currently focused window |
active-output |
Capture the monitor containing the active workspace |
Options
| Flag | Short | Description |
|---|---|---|
--clipboard-only |
-c |
Copy to clipboard only, do not save to disk |
--silent |
-s |
Suppress notifications |
--freeze |
-z |
Freeze screen during selection (requires hyprpicker) |
--output-dir <DIR> |
-o |
Override the save directory from config |
--filename <NAME> |
-f |
Override the output filename (without path) |
--config <FILE> |
Use a specific config file |
Examples
# interactive region selection, save and copy
breadshot region
# capture active window to clipboard only
breadshot active-window --clipboard-only
# region selection with screen frozen, saved to a custom path
breadshot region --freeze --output-dir ~/Desktop --filename capture.png
Configuration
Config file: ~/.config/breadshot/config.toml
All keys are optional. Missing keys fall back to the defaults shown below.
# Directory where screenshots are saved
save_dir = "~/Pictures/Screenshots"
# Suppress notifications globally
silent = false
# Freeze screen during selection by default (requires hyprpicker)
freeze = false
# Notification display duration in milliseconds
notif_timeout = 5000
# strftime format used to generate filenames
# Filename pattern: <date_format>_breadshot.png
date_format = "%Y-%m-%d-%H%M%S"
License
MIT — see LICENSE.