valw

macOS-style screenshots for niri on Wayland: the whole screen, a region, a window, a zoomable freeze-frame, a Cmd+Shift+5-style toolbar, a floating preview you can drag into other apps, and a built-in markup editor. Written in Rust, packaged with Nix.

Install

Run it once:

nix run git+https://git.userevolt.app/elars/valw -- doctor

As a package from the flake (packages.<system>.default), or with the home-manager module:

# flake.nix
inputs.valw.url = "git+https://git.userevolt.app/elars/valw";

# a home-manager module
{ inputs, ... }:
{
  imports = [ inputs.valw.homeModules.default ];

  programs.valw = {
    enable = true;
    settings = {
      preview.timeout_secs = 3;
      sound.volume = 0.4;
      capture.window_shadow = true;
    };
  };
}

settings becomes ~/.config/valw/config.toml. valw checks it while the configuration is built, so a typo or a bad value fails the rebuild instead of surprising you later. The toolbar's remembered choices live in ~/.local/state/valw/toolbar.toml and stay writable.

Bind it in niri

binds {
    Print           { spawn "valw" "screen"; }
    Mod+Shift+S     { spawn "valw" "region"; }
    Mod+Shift+W     { spawn "valw" "window"; }
    Mod+Shift+Z     { spawn "valw" "zoom"; }
    Mod+Shift+T     { spawn "valw" "toolbar"; }
}

Commands

Command What it does
valw screen [--all] The focused output (or every output)
valw region Drag a region; Shift locks an axis, Alt grows from the centre, Space moves it; Space before dragging switches to window mode
valw window Click a window
valw zoom Freeze the screen and zoom: wheel, drag, f flashlight, c capture the view, 0 reset, Esc
valw toolbar Pick a mode from a floating bar, with a timer and options
valw edit FILE The markup editor (clicking a preview opens it)
valw doctor What the compositor and system support

Capture commands take --clipboard-only, -o PATH (- for stdout), --delay SECS, --cursor and --no-preview.

Configuration

Every key is optional; these are the defaults.

[save]
directory = "~/Pictures/Screenshots"
filename = "Screenshot %Y-%m-%d at %H.%M.%S.png"
copy_to_clipboard = true

[capture]
show_cursor = false
window_shadow = false

[preview]
enabled = true
timeout_secs = 5

[zoom]
scroll_step = 1.15
flashlight_radius = 180

[editor]
backend = "builtin"   # or "satty"

[sound]
enabled = true
volume = 0.6
combo_reset_secs = 5

Logs are in ~/.local/state/valw/logs/.

S
Description
very fucking desk-helper
Readme
1.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 93.7%
Luau 3.5%
Nix 2.4%
GLSL 0.3%