qwitch
qwitch adds keyboard layout switching with global, per-app, and per-window memory to Omarchy.
<p align="center"> <img src="screenshots/layouts-menu.png" alt="qwitch layouts menu" width="328"> </p> <p align="center"> <img src="screenshots/settings-menu.png" alt="qwitch settings menu" width="432"> </p>Features
- Add, edit, remove, and reorder XKB layouts with automatic saving.
- Switch layouts globally or remember them per application or live window.
- Display text, a flag, or both, with optional Omarchy OSD notifications.
- Detect real typing keyboards conservatively, with advanced device overrides.
- Show the native XKB switching shortcut configured in Hyprland.
Left-click the widget to switch layouts. Right-click to open the layout menu; use its gear button for settings. qwitch also replaces Omarchy's built-in keyboard-layout indicator while running.
Dependencies
Quickshell, Hyprland, xkbcli, and jq are included with Omarchy 4,
so no additional packages are required.
Switching shortcut
qwitch reads the native XKB group toggle from ~/.config/hypr/input.lua but
does not manage it. For Alt+Shift:
hl.config({
input = {
kb_options = "grp:alt_shift_toggle",
},
})
If kb_options already contains other comma-separated options, keep them and
replace only its grp:* entry.
Then reload and validate Hyprland:
hyprctl reload
hyprctl configerrors
Install
omarchy plugin add https://github.com/aloglu/qwitch.git
omarchy plugin enable io.github.aloglu.qwitch
Update
omarchy plugin update io.github.aloglu.qwitch
omarchy restart shell
Restarting the shell clears stale loaded QML. Updates are fast-forward-only; remove and re-add the plugin after rebasing or amending an installed revision.
Remove
omarchy plugin remove io.github.aloglu.qwitch
Development
Install the current committed checkout locally with:
omarchy plugin add "file://$HOME/workspaces/qwitch"
omarchy plugin enable io.github.aloglu.qwitch
Local installs clone committed HEAD; commit changes before installing. Run
the checks with:
omarchy plugin validate .
node --test --test-isolation=none tests/model.test.js tests/service.test.js tests/runtime.test.js
tests/run-qml-tests.sh
License
Released under the MIT License.