A small Wayland keystroke visualizer.
test.mp4
- Zig 0.17.0 (for 0.16.0, see tag
0.3.0) - a Wayland compositor with
wlr-layer-shell-unstable-v1.
System dependencies:
- cairo
- libinput
- pango
- udev
- wayland
- xkbcommon
Build-only dependency:
wayland-protocols— needed to generate thexdg-shell,viewporter, andfractional-scale-v1protocol bindings at build time, not required at runtime.
yay -S keywisp-gitzig build -Doptimize=ReleaseSafe --prefix ~/.localThis installs Keywisp as ~/.local/bin/keywisp. Make sure ~/.local/bin is in
your PATH.
Keywisp needs read access to the input devices on seat0. On systems using an
input group, add your user to it and then log out and back in:
sudo usermod -aG input "$USER"Start the overlay with:
keywispPointer buttons and scroll events are optional. Enable them with -B and -S:
keywisp -B -SKeywisp includes four themes:
| Theme | Appearance |
|---|---|
dark |
Dark panel (default) |
light |
Light panel |
wisp-dark |
Floating dark keycaps with soft shadows |
wisp-light |
Floating light keycaps with soft shadows |
Select a theme with, for example:
keywisp --theme wisp-darkCommand-line options can override theme colors and adjust the position, font, spacing, and other appearance settings.
Example:
keywisp --theme wisp-light \
--position top-right \
--margin 32 \
--max-width 720 \
--font "Serif Bold 12"Run the following command for all available options:
keywisp --helpEnable signal control with -c / --signal-control:
keywisp -cFrom another terminal or a WM script:
pkill -USR1 -x keywisp # pause and clear the display
pkill -USR2 -x keywisp # resumeThese commands affect all matching instances; use kill -USR1 PID /
kill -USR2 PID to target one.
Without -c, these signals normally terminate Keywisp. If both are pending,
pause takes priority.
See the polkit examples for niri, Hyprland, and Sway scripts that pause while an authentication window is focused and resume when focus leaves it.
Keywisp can run in --stdout mode and be used as a Waybar custom module.
Each keystroke line is printed to stdout and picked up by the bar. An example
configuration is provided in examples/waybar-config.jsonc:
Keywisp was inspired by DreamMaoMao/wshowkeys.
Keywisp is available under the MIT License.

