OmaVibes gives you cozy typing sound effects with over 40+ sounds, gamified typing stats with ranks, detailed analytics, random playback, and volume control for the Omarchy bar.
test-compressed.mp4
Note: Enable sound in the above preview video
I didn't originally plan on releasing this.
I created OmaVibes because I wanted cozy typing sounds while typing, but I couldn't afford a mechanical keyboard sound setup. So I decided to build my own solution.
OmaVibes originally started with a Walker-based implementation, and eventually evolved into an Omarchy plugin with a proper bar interface, soundpack browser, search, random playback, per-pack volume control, persistent settings, and built-in typing stats and analytics.
Hopefully you enjoy it.
OmaVibes is an Omarchy bar widget that plays cozy typing sound effects whenever you type.
It comes with over 40+ sounds across the bundled soundpacks, along with search, random playback, volume control, a typing profile, gamified ranks, achievements, and detailed typing analytics.
OmaVibes uses wayvibes as its typing sound runtime. It listens for keyboard input and plays the selected sound effects while you type. The required runtime is bundled with OmaVibes, so no separate wayvibes installation is required.
- Omarchy 4 (Quattro)
- A working Quickshell-based Omarchy shell
- Keyboard input access for
wayvibes
Depending on your system configuration, wayvibes may require your user to be part of the input group:
sudo usermod -aG input $USERLog out and back in after changing the group.
Once OmaVibes is published:
omarchy plugin add mshareef-git.omavibes --enableClone the repository into the Omarchy plugin directory:
git clone https://github.com/mshareef-git/omavibes.git \
~/.config/omarchy/plugins/omavibesValidate the plugin:
omarchy plugin validate ~/.config/omarchy/plugins/omavibesEnable the plugin on the right side of the bar:
omarchy plugin enable mshareef-git.omavibes rightRestart the shell if necessary:
omarchy restart shellClick the OmaVibes keyboard icon in the Omarchy top bar.
Use the settings cog in the bottom-right corner of the panel to choose which
keyboard OmaVibes listens to. It lists every keyboard-capable input device,
including virtual keyboards. OmaVibes saves a stable /dev/input/by-id path
when one is available, then uses that selection the next time playback starts.
Use the search field to filter the available soundpacks by name.
Click any soundpack in the list to start playing it.
The currently selected soundpack is highlighted and marked with a check.
Open Profile to see your typing progression.
The profile includes:
- Current rank
- Progress toward the next rank
- Lifetime words
- Lifetime typing time
- Lifetime key presses
- Active days
- Longest streak
- Personal records
- Completed achievements
Your rank is based on lifetime words typed and becomes progressively harder as you move upward.
Open Stats for detailed typing analytics.
Stats include:
- Day / Week / Month views
- Words typed
- Typing time
- Typing vs idle time
- Typing activity
- Words heatmap
- Consistency
- Daily average
- Best day
- Longest streak
- Lifetime totals
- Most-used keys
- Key frequency visualization
- Keyboard usage heatmap
- Backspace rate
- Keystrokes per word
- Words per typing hour
OmaVibes stores aggregate statistics such as word totals, typing time, and key-press counts.
It does not store the actual text you type, typed sentences, key sequences, or per-key timestamps.
Analytics are stored locally on the device.
Click Random to choose a random soundpack.
When a search is active, random playback uses the currently filtered soundpacks.
Click Turn Off to stop the currently playing typing sounds.
Use the volume slider to adjust the current soundpack's volume from 1 to 10.
Each soundpack can have its own saved volume level.
OmaVibes includes the bundled soundpacks inside the packs/ directory.
The soundpacks are included with the plugin so OmaVibes works immediately after installation without requiring users to download additional soundpacks.
OmaVibes also supports user soundpacks through:
~/wayvibes/<pack-name>/
A custom soundpack can contain the audio files required by wayvibes together with its config.json.
When a matching user soundpack exists, OmaVibes can use the user version instead of the bundled version.
- Omarchy bar integration β Open OmaVibes directly from the top bar.
- 40+ typing sounds β A collection of cozy typing sound effects across the bundled soundpacks.
- Soundpack browser β Browse the available soundpacks from one panel.
- Search β Filter soundpacks instantly by name.
- One-click playback β Select a soundpack to start playing it immediately.
- Random playback β Pick a random soundpack from the available collection.
- Turn Off β Stop the currently playing typing sounds.
- Volume control β Adjust the volume from 1 to 10.
- Per-pack volume β Each soundpack remembers its own volume setting.
- Persistent settings β Soundpack and volume settings are preserved across shell restarts.
- Profile β See your lifetime typing progress, current rank, progress toward the next rank, personal records, and completed achievements.
- Gamified ranks β Lifetime words typed determine your rank, with increasingly difficult tiers to climb.
- Achievements β Unlock typing milestones based on lifetime words, key presses, typing days, and streaks.
- Detailed analytics β Explore daily, weekly, monthly, and lifetime typing statistics.
- Key analytics β See your most-used keys, key frequency, keyboard usage, and other typing statistics.
- Theme-aware interface β Uses Omarchy/Quickshell styling and the active bar font and theme colors.
- Local analytics β Typing statistics stay on the device, and the actual text you type is never stored.
- Bundled runtime β Includes the
wayvibesexecutable and bundled soundpacks, so a separatewayvibesinstallation is not required.
OmaVibes is implemented as an Omarchy bar widget using Quickshell.
BarWidget.qml
|
+-- Panel.qml
|
+-- OmaVibesState.qml
|
+-- Soundpack selection
+-- Search and filtering
+-- Random playback
+-- Volume control
+-- Profile and rank progression
+-- Typing statistics
+-- Key analytics
+-- Persistent settings
+-- wayvibes process control
The bundled wayvibes executable is located at:
bin/wayvibes
The bundled soundpacks are located at:
packs/
OmaVibes stores its persistent plugin state at:
~/.local/state/omarchy/omavibes.json
Typing analytics are stored at:
~/.local/state/omarchy/omavibes-analytics.json
omavibes/
βββ BarWidget.qml
βββ Panel.qml
βββ OmaVibesState.qml
βββ manifest.json
βββ qmldir
βββ README.md
βββ LICENSE
βββ preview.png
βββ bin/
β βββ wayvibes
βββ packs/
β βββ <soundpacks>/
βββ third_party/
βββ wayvibes/
From the plugin directory, validate the plugin with:
omarchy plugin validate .Run QML linting against the Omarchy shell:
qmllint -I "$OMARCHY_PATH/shell" \
BarWidget.qml \
Panel.qml \
OmaVibesState.qmlAfter making changes, restart the Omarchy shell:
omarchy restart shellRebuild the bundled Wayvibes runtime when changing its source:
./third_party/wayvibes/build.shTest the following:
- Bar icon appears correctly
- Panel opens and closes correctly
- Profile opens correctly
- Stats opens correctly
- Soundpack selection works
- Search filtering works
- Random playback works
- Turn Off works
- Volume control works
- Per-pack volume is preserved
- Typing statistics update correctly
- Key analytics update correctly
- Rank progress updates correctly
- Completed achievements appear correctly
- Shell restart does not break the plugin
- Plugin can be disabled and enabled again
- Plugin can be removed cleanly
Disable the plugin:
omarchy plugin disable mshareef-git.omavibesRemove the plugin:
omarchy plugin remove mshareef-git.omavibesRemoving the plugin does not remove user data stored outside the plugin directory, such as:
~/.local/state/omarchy/omavibes.json
~/.local/state/omarchy/omavibes-analytics.json
~/wayvibes/
These can be removed separately if no longer needed.
Built for Omarchy Quattro.
Omarchy: https://omarchy.org/
OmaVibes is licensed under the MIT License.
See LICENSE for the complete license text.