A Wayland native snapshot and editor tool, inspired by Snappy on macOS. Works great with grim, slurp and sway. But can easily work with other screen copy tools that can output a final image to stdout. See below.
Output of grim (or any tool outputing an image file):
grim -g "$(slurp)" - | swappy -f -Swappshot a PNG file:
swappy -f "~/Desktop/my-gnome-saved-file.png"Print final surface to stdout (useful to pipe with other tools):
grim -g "$(slurp)" - | swappy -f - -o - | pngquant -Grab a swappshot from a specific window under Sway, using swaymsg and jq:
grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)" - | swappy -f -The config file is located at $XDG_CONFIG_HOME/swappy/config or at $HOME/.config/swappy/config.
The file follows the GLib conf format. See the man page for details. There is example config file here.
The following lines can be used as swappy's default:
[Default]
save_dir=$HOME/Desktop
save_filename_format=swappy-%Y%m%d-%H%M%S.png
show_panel=false
line_size=5
text_size=20
text_font=sans-serif
save_diris where swappshots will be saved, can contain env variables and must exist in your filesystemsave_filename_format: is the filename template, if it contains a date format, this will be parsed into a timestamp. Format is detailed in strftime(3). If this date format is missing, filename will have no timestampshow_panelis used to toggle the paint panel on or off upon startupline_sizeis the default line size (must be between 1 and 50)text_sizeis the default text size (must be between 10 and 50)text_fontis the font used to render text, its format is pango friendly
Ctrl+b: Toggle Paint Panel
b: Switch to Brusht: Switch to Textr: Switch to Rectangleo: Switch to Ellipsea: Switch to Arrowd: Switch to Blur (dstands for droplet)
R: Use Red ColorG: Use Green ColorB: Use Blue ColorC: Use Custom ColorMinus: Reduce Stroke SizePlus: Increase Stroke SizeEqual: Reset Stroke Sizek: Clear Paints (cannot be undone)
Ctrl: Center Shape (Rectangle & Ellipse) based on draw start
Ctrl+z: UndoCtrl+Shift+zorCtrl+y: RedoCtrl+s: Save to file (see man page)Ctrl+c: Copy to clipboardEscapeorqorCtrl+w: Quit swappy
- Copy: If you don't have wl-clipboard installed, copy to clipboard won't work if you close swappy (the content of the clipboard is lost). This because GTK 3.24 has not implemented persistent storage on wayland backend yet. We need to do it on the Wayland level, or wait for GTK 4. For now, we use
wl-copyif installed and revert togtkclipboard if not found. - Fonts: Swappy relies on Font Awesome 5 being present to properly render the icons. On Arch you can simply install those with:
sudo pacman -S otf-font-awesome
Install dependencies (on Arch, name can vary for other distros):
- meson
- ninja
- cairo
- pango
- gtk
- glib2
- scdoc
Optional dependencies:
wl-clipboard(to make sure the copy is saved if you close swappy)otf-font-awesome(to draw the paint icons properly)
Then run:
meson build
ninja -C buildThis section is for developers, maintainers and translators.
To add support to a new locale or when translations are updated:
- Update
src/po/LINGUAS(when new locales are added) - Generate a new
pofile (ignore and do not commit potential noise in other files):
ninja -C build swappy-update-poTo rebuild the base template (should happen less often):
ninja -C build swappy-potSee the meson documentation for details.
Pull requests are welcome. This project uses conventional commits to automate changelog generation.
We rely on standard-version which is part of the JavaScript ecosystem but works well with any project.
npx standard-version --sign
git push --follow-tags
# Do the release on Github with manual steps, then:
./script/sign-post-release
Release tarballs are signed with this PGP key: F44D05A50F6C9EB5C81BCF966A6B35DBE9442683
MIT