About
WayVibes
Mechanical keyboard typing sounds for Noctalia on Wayland, powered by wayvibes.
Plugin
| Field | Value |
|---|---|
| ID | viksit-garg/wayvibes |
| Entries | Bar widget: wayvibes; panel: panel; service: daemon |
Requirements
WayVibes integrates with the standalone wayvibes CLI daemon:
- Noctalia 5.4.0 or newer (plugin API 43) running in a supported Wayland session. The legacy Quickshell-based Noctalia v4 cannot load this plugin.
wayvibes: installwayvibesonPATH(on Arch Linux:yay -S wayvibes-git, or install from source).pkill: standard Linux utility for process lifecycle management.pgrep: checks whether the background daemon started successfully. Bothpgrepandpkillare normally provided byprocps/procps-ng.sleep: waits briefly before checking daemon startup; normally provided by coreutils.- User membership in the
inputgroup to read keyboard events:
sudo usermod -aG input $USER
Log out and back in after adding your user to the input group.
For a clean CachyOS installation, follow the complete CachyOS setup and verification guide, including installation of the plugin and a soundpack. It does not assume an AUR helper or existing WayVibes configuration.
Usage
Enable viksit-garg/wayvibes in Noctalia Settings, then add the wayvibes widget to your bar. Enabling the plugin starts its headless daemon service, which discovers soundpacks and keyboards; typing audio starts only when you choose a pack or enable auto_start. Click the widget or run the following command to toggle the panel:
noctalia msg panel-toggle viksit-garg/wayvibes:panel
Open Input Device to confirm the selected keyboard, then choose a soundpack in Soundpacks. When no device is configured, the service automatically selects the first detected keyboard. If you use a remapper such as keyd, select its virtual keyboard instead when appropriate.
Features
- Soundpacks Library: Automatically detects Mechvibes and Wayvibes soundpacks located in
~/.local/share/soundpacks/,~/wayvibes/soundpacks/, or your custom configured directory. - Instant Playback & Search: Click any soundpack to switch audio playback immediately, or filter packs using the search bar.
- Random Playback: Hit the shuffle button to select a random soundpack from your collection.
- Volume Control: Adjust playback volume from level 1 to 10.
- Input Device Management: View detected keyboard input devices in the "Input Device" tab and select your active keyboard with one click.
Settings
| Setting | Type | Default | Description |
|---|---|---|---|
executable_path |
string |
wayvibes |
Command name or absolute path to the wayvibes binary. |
soundpacks_dir |
folder |
"" |
Optional custom directory containing soundpacks. |
default_volume |
int |
3 |
Default playback volume level (1-10). |
auto_start |
bool |
false |
Restore the last saved soundpack and volume when the service starts, including on login. |
glyph |
glyph |
keyboard |
Bar widget icon glyph. |
Notes
- Attribution: This plugin provides a native Noctalia desktop integration for wayvibes by Sahaj B, supporting soundpacks adhering to the open Mechvibes soundpack specification.
- Privacy: Keystroke event detection occurs strictly in memory through
wayvibesandlibevdev. No typed text, keystrokes, or key sequences are ever written to disk or transmitted over the network. - Soundpacks: Soundpacks are managed independently by the user in
~/.local/share/soundpacks/or~/wayvibes/soundpacks/, ensuring no proprietary or unverified audio assets are bundled into the plugin repository. - Device discovery: Reads
/proc/bus/input/devicesand matches the upstream daemon'sKEY_Akeyboard capability check. If that yields no keyboards, lists*-event-kbdentries in/dev/input/by-id. Discovery does not read keystroke events or invoke unsupported CLI options. - Device configuration: Reads and writes
$XDG_CONFIG_HOME/wayvibes/input_device, falling back to~/.config/wayvibes/input_devicewhen the environment variable is unset or empty. Unique kernel names useNAME:<name>; duplicate names and fallback device links usePATH:<path>. Legacyinput_device_nameorinput_device_pathfiles in that directory are migrated, and the migrated file is removed only after a successful replacement write. This configuration is shared with the standalone daemon. - Saved playback: Writes the selected pack's name, path, and volume to
state.jsoninnoctalia.pluginDataDir(). It does not copy soundpacks into the plugin directory. - Processes: Starts the configured
wayvibesexecutable with a soundpack path,-v, and-bg. Switching packs, changing volume during playback, and changing the active keyboard restart playback. Stop and restart usepkill -x wayvibes, which can also stop a separately started WayVibes daemon owned by the same user. Startup verification runssleepandpgrep -x wayvibes. Shell arguments containing user-selected paths are quoted. - Network: The plugin makes no network requests and does not download or execute remote code. The external daemon manages audio decoding; upstream may offer to convert unsupported audio using
ffmpeg, which is separate from plugin discovery and device configuration.
Development checks
Run the Noctalia settings linter and the service regression tests:
noctalia plugins lint /path/to/wayvibes
python3 tests/run.py --luau /path/to/luau
Python 3 and the Luau CLI are development tools, not runtime dependencies. The regression tests run the real service in Luau with an in-memory Noctalia host fixture; they do not access keyboard events, alter your configuration, or start or stop real daemons. See COMMUNITY_REVIEW.md for submission checks and remaining manual evidence.
Versions
| Version | Plugin API | Updated |
|---|---|---|
| v1.0.1 latest | 43 | Nov 2, 2026 |
Older versions stay installable on a Noctalia release whose plugin API is below the latest version's.