mirror of github.com/Breadway/breadshot
Find a file
Breadway 5e4cbc83c9 Timeout-guard hyprctl JSON queries
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.
2026-07-17 09:53:54 +08:00
.forgejo/workflows CI: migrate release workflow from GitHub Actions to Forgejo Actions 2026-07-03 14:10:13 +08:00
src Timeout-guard hyprctl JSON queries 2026-07-17 09:53:54 +08:00
.gitignore Initial commit 2026-07-02 20:59:24 +08:00
bakery.toml Initial commit 2026-07-02 20:59:24 +08:00
Cargo.lock Timeout-guard hyprctl JSON queries 2026-07-17 09:53:54 +08:00
Cargo.toml Timeout-guard hyprctl JSON queries 2026-07-17 09:53:54 +08:00
LICENSE Initial commit 2026-07-02 20:59:24 +08:00
Makefile Initial commit 2026-07-02 20:59:24 +08:00
README.md Initial commit 2026-07-02 20:59:24 +08:00

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 tool
  • slurp — region/window selection
  • wl-copy (wl-clipboard) — clipboard write
  • hyprctl — 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.