wayshot(5)
πΈ NAME πΈ
okay so bestie, welcome to wayshot(5) β the config file manual π This is your guide to the Wayshot screenshot tool, made for compositors that implement zwlr_screencopy_v1, like sway and river. If that's your setup, you're literally in the right place β¨
π SYNTAX π
Wayshot's config file speaks TOML β that's the format, no cap. The full spec lives at https://toml.io/en/v1.0.0 if you wanna go read it (iconic of you tbh) π¦
π¦ LOCATION π¦
Heads up: Wayshot does not create the config file for you. She's not your mom π She just looks for one in these places, in this order:
- A path you hand her via the CLI option:
wayshot --config config.toml $XDG_CONFIG_HOME/wayshot/config.toml$HOME/.config/wayshot/config.toml
So yeah, you gotta make the file yourself. Main character behavior only π
π BASE π
This section is all about the [base] table of the config file. Let's go π
output = "<string>" | "None"β the name of the output you want to screenshot. The CLI option takes precedence over this one:wayshot --output "HDMI-A-1". Default:"None"(which means capture all outputs) πcursor = true | falseβ controls if the screenshot file should contain the cursor or not. The CLI option takes precedence:wayshot --cursor. Default:falsefreeze = true | falseβ whentrue, freeze the screen before interactive region (--geometry) or point (--color) selection, so you get a nice stable view β¨. Whenfalse, selection happens on the live display and the capture is taken after selection (same as--no-freeze). The CLI--no-freezetakes precedence. Default:truedelay = <integer> | unsetβ number of milliseconds to wait before taking the screenshot. When unset or omitted, no delay is applied. Super useful for letting windows or overlays pop up before the capture. The CLI--delaytakes precedence. Default: unset (no delay) β³clipboard = true | falseβ controls if the screenshot file should be copied into the clipboard. Wayshot persists in the background offering the image until the clipboard is overwritten π«Ά. The CLI option takes precedence:wayshot --clipboard. Requires the clipboard feature (enabled by default). Default:falsefile = true | falseβ controls if the screenshot file should be written on disk. The CLIFILEtakes precedence over it. If it's not used, then the[file]section'spathandname_formatare used as the path to save the file on disk. Examples:fileistrue, CLI without args:wayshot-> screenshot file saved inpath/name_format.encodingfileistrue, CLI withFILEargument:wayshot foo.png-> screenshot file saved in current directory asfoo.pngfileistrue, CLI withFILEargument as-(stdout):wayshot "-"-> screenshot file saved inpath/name_format.encodingfileisfalse, CLI without args:wayshot-> screenshot file is not saved anywhere π
Default: true
stdout = true | falseβ controls if the screenshot file should be sent to stdout. The CLI'sFILEtakes precedence:wayshot "-". Default:falselog_level = "info" | "trace" | "debug" | "warn" | "error"β the log level. Possible values:"info""trace""debug""warn""error"
Requires the logger feature (enabled by default). Default: "info"
notifications = true | falseβ controls if desktop notifications should be shown. When enabled, wayshot will show notifications for screenshot events (e.g., successful capture, errors) π. Requires the notifications feature (enabled by default). Default:true
π FILE π
This section documents the [file] table of the configuration file π
path = "<string>" | "None"β directory to save the screenshot file. Takes effect only if the[base]category'sfileistrueandFILEis not provided in the CLI. Refer to the[base]category'sfilefor examples π Default:"None"(current working directory)name_format = "<string>" | "None"β formatting of the screenshot file name to save on disk. Follows chrono formatting rules:https://docs.rs/chrono/latest/chrono/format/strftime/index.html. The CLI option takes precedence:wayshot --file-name-format "wayshot-%Y_%m_%d-%H_%M_%S". Default:"None"(fallbacks to"wayshot-%Y_%m_%d-%H_%M_%S")encoding = "png" | "jpg" | "ppm" | "qoi" | "webp" | "avif" | "jxl"β the screenshot file encoding. Examples:encodingisavif, CLI:wayshot foo-> screenshot file isfoo.avifencodingisavif, CLI:wayshot --encoding png foo-> screenshot file isfoo.pngencodingisavif, CLI:wayshot --encoding png foo.jpg-> screenshot file isfoo.jpgencodingisavif, CLI:wayshot --encoding png foo.jpg --encoding png-> screenshot file isfoo.png
Default: "png"
π ENCODING π
Encoding-specific configuration options, bestie β¨
Note: theavifandjxlformats are only available when the corresponding Cargo features are enabled (both are on by default). When a feature is disabled, the format is silently ignored and wayshot falls back to PNG. So don't be confused if your fancy format just... doesn't happen π
π PNG π
[encoding.png] compression = "default" | "fast" | "best" | "none" | "uncompressed" | 0-9β PNG compression level. Controls the trade-off between file size and encoding speed. For detailed documentation, see:https://docs.rs/image/latest/image/codecs/png/enum.CompressionType.html"default": Balanced compression and speed"fast": Faster encoding, larger files (minimal compression)"best": Slower encoding, smaller files (high compression level)"none"or"uncompressed": No compression whatsoever0-9: Detailed numeric compression level (0=no compression,9=maximum compression)
Default: "default"
[encoding.png] filter = "none" | "sub" | "up" | "avg" | "paeth" | "adaptive"β PNG filter type. Filters process image data to improve compression. For detailed documentation, see:https://docs.rs/image/latest/image/codecs/png/enum.FilterType.html"none": No filtering (best for low bit depth grayscale or low color count)"sub": Filters based on previous pixel in the same scanline"up": Filters based on the scanline above"avg": Filters based on average of left and right neighbor pixels"paeth": Algorithm using left, upper left, and above pixels"adaptive": Heuristic selection of filters per scanline (recommended)
Default: "adaptive"
π§ JXL π§
[encoding.jxl] lossless = true | falseβ enable lossless compression for JPEG-XL encoding. When set totrue, the image is compressed without any quality loss. Whenfalse, lossy compression is used with the specifieddistanceparameter. Default:false[encoding.jxl] distance = 0.0-25.0β target visual distance in JND (Just Noticeable Difference) units for lossy compression. Lower values result in higher quality but larger file sizes. This parameter is ignored whenlosslessis set totrueπ ββοΈ0.0: Mathematically lossless (same aslossless=true)1.0: Visually lossless (recommended default)0.5-3.0: Recommended range for most use cases3.0-25.0: Higher compression, noticeable quality loss
Default: 1.0
[encoding.jxl] effort = 1-10β encoder effort setting. Higher values allow more computation time for better compression. For lossless compression, higher effort generally produces smaller files. For lossy compression, higher effort should more accurately reach the target quality.1: Lightning (fastest)2: Thunder3: Falcon4: Cheetah5: Hare6: Wombat7: Squirrel (default, balanced)8: Kitten9: Tortoise10: Glacier (slowest, best compression)
Default: 7
π NOTIFICATION π
This section documents the [notification] table of the configuration file π
Requires the notifications feature (enabled by default).
action = "<string>"β command to execute when the user clicks the notification. The command is run exactly as provided with no arguments appended. If not set, opens the screenshot directory withxdg-open. Examples:action = "xdg-open /home/user/Pictures"-> opens a fixed folder
Default: xdg-open <screenshot directory>
icon = "<string>"β icon name passed to the notification daemon. The daemon resolves it against its own configured icon theme β notXDG_ICON_THEME. Set the theme in your daemon's configuration (e.g.icon_themeindunstrc). Examples:icon = "accessories-camera"(candy-icons theme)icon = "camera-photo"
Default: unset (daemon chooses its own default)
timeout_ms = <integer>β how long the notification stays visible, in milliseconds.-1: never expire0: use the notification server's default- positive integer: display for this many milliseconds
Default: 5000
app_name = "<string>"β application name field sent with the notification. Visible in some notification daemons and used for daemon-side filtering rules. Default:"wayshot"success_summary = "<string>"β title shown in the notification after a successful screenshot πΈ Default:"Screenshot Taken"failure_summary = "<string>"β title shown in the notification when a screenshot fails π Default:"Screenshot Failed"sound_name = "<string>"β XDG sound name hint sent with the notification. Only respected by notification daemons that implement the freedesktop sound hint (e.g. GNOME Shell, KDE Plasma). Standalone daemons such asdunstandmakoignore this field β use their scripting feature to play sounds instead π Example:sound_name = "message-new-instant". Default: unsettransient = true | falseβ whentrue, marks the notification as transient. Transient notifications are not stored in notification history or the notification center after dismissal. Support depends on the notification daemon. Default:falsecategory = "<string>"β notification category hint (freedesktop standard). Can be used by notification daemons for filtering or styling rules. Examples:category = "transfer.complete"category = "im.received"
Default: unset
β SEE ALSO β
okay that's the config tables covered, and there's still more coming bestie β don't go anywhere π
π AUTHORS π
Okay so who's behind all this magic? Bestie, it's Shinyzenith β say hi π
- Maintained by Shinyzenith
<aakashsensharma@gmail.com>β literally the main character keeping the whole thing alive π«Ά
And if you wanna peek behind the curtain and see what's cooking in development (iykyk π), the repo is right here:
- For more information about development, see <https://github.com/waycrate/wayshot>
That's the whole page, bestie β congrats, you ate that πβ¨
github.com/waycrate/wayshot Β· version/date vibes: 1980-01-01 Β· go forth and screenshot iconicly π
πΈ
π¦ where this page comes from
- nixpkgs unstable: wayshot 1.6.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms