You are not logged in.
Hi,
I would like to share Seekey, a small keyboard visualizer for Wayland, written in C.
It displays recent key presses as floating bubbles on the screen. I originally made it for my niri setup because I wanted an overlay that could remain at a fixed position without being managed as a normal tiled window, taking keyboard focus, or opening a configuration window every time it starts.
Existing keyboard visualizers can often be configured to provide similar behavior, but I wanted something with sensible layer-shell behavior out of the box.
Screenshot

Links
Project repository:
https://github.com/Nakanomk/Seekey
AUR packages:
seekey — stable version
seekey-git — latest development version
Main features
Uses gtk4-layer-shell on compositors such as niri, Hyprland, Sway, river, Wayfire and labwc.
Remains anchored at a configurable screen position instead of becoming a normal tiled window.
Does not claim keyboard focus, and mouse clicks pass through the overlay.
Falls back to a transparent regular window on desktops without layer-shell support, such as GNOME and KDE.
Configurable position, margins, display duration, fade timing, font, colors and key icons.
Includes several built-in themes and supports custom themes.
Supports Matugen color references.
Provides a terminal-based configuration editor.
Can optionally display mouse buttons as well as keyboard input.
Installation
The stable package can be built from the AUR:
git clone https://aur.archlinux.org/seekey.git
cd seekey
makepkg -siFor the current development version:
git clone https://aur.archlinux.org/seekey-git.git
cd seekey-git
makepkg -siIt can also be built directly from the source repository:
git clone https://github.com/Nakanomk/Seekey.git
cd Seekey
make
./seekey --init-config
./seekey --config-tui
./seekeyThe two configuration commands are optional. Running
./seekeydirectly should be enough to see the default appearance.
Input permissions and privacy
Seekey reads input events through libevdev from
/dev/input/event*, rather than receiving keyboard input from the Wayland protocol. Therefore, the user running it must have permission to read the relevant input devices.
The repository includes documentation for setting up the required udev rule and permissions. Please review the rule rather than granting unrestricted permissions to the input devices.
Seekey only keeps enough recent input in memory to display it temporarily. It does not write typed text to disk or transmit it over the network. Nevertheless, software with access to evdev input devices is security-sensitive, so users are encouraged to inspect the source and packaging.
Feedback wanted
My primary environment is niri, so testing on other compositors would be particularly useful. I would especially appreciate reports concerning:
Hyprland, Sway, river, Wayfire and labwc
GNOME and KDE fallback behavior
Multiple-monitor configurations
Non-US keyboard layouts
High-DPI or fractional-scaling setups
Input permission and udev behavior
Bug reports, packaging feedback, code review and pull requests are all welcome. This is still a young project, and it's mostly vibe-coded, so criticism of the implementation and defaults would be helpful.
Thanks for taking a look.
Last edited by nkns1114 (2026-07-30 08:56:33)
Offline