Native Loupedeck Live integration for Omarchy. It turns the deck into an Omarchy control surface without the discontinued vendor app, Wine, or global keyboard/input permissions.
- Touch keys: Terminal, browser, Files, Omarchy menu, screenshot, clipboard, fullscreen, floating window, workspace navigation, close window, and lock.
- Round buttons 1-8: Hyprland workspaces 1-8.
- Top knobs: output and microphone volume; press to mute.
- Center knobs: display brightness and workspace navigation.
- Bottom knobs: cycle/focus windows; press to raise/fullscreen.
- Touch-key labels, colors, physical-button LEDs, brightness, and haptics.
All actions are ordinary Omarchy, Hyprland, PipeWire, and brightness commands.
They are declared as executable/argument arrays in mapping.mjs and executed
without a shell.
| Device | USB ID | Status |
|---|---|---|
| Loupedeck Live | 2ec2:0004 |
Supported |
| Loupedeck Live S | 2ec2:0006 |
Not yet mapped |
| Loupedeck CT | 2ec2:0003 / 2ec2:0007 |
Not yet mapped |
Tested on Omarchy 4.0.2 with Loupedeck Live firmware 0.2.5.
git clone https://github.com/brkovski123/omarchy-loupedeck.git ~/.local/src/omarchy-loupedeck
cd ~/.local/src/omarchy-loupedeck
./install.shThe installer:
- copies the controller to
~/.local/share/omarchy-loupedeck; - installs locked Node dependencies with
npm ci; - asks for
sudoonly to install a device-specific udev rule; - enables a user service tied to the graphical session.
Unplug and reconnect the deck if it was already connected. No logout is normally required.
Edit ~/.local/share/omarchy-loupedeck/mapping.mjs, then restart:
systemctl --user restart omarchy-loupedeckCommands are arrays such as:
{ label: "TERM", color: "#7aa2f7", command: ["omarchy", "launch", "terminal"] }systemctl --user status omarchy-loupedeck
journalctl --user -u omarchy-loupedeck -f
./diagnose.sh- The udev rule applies only to the Loupedeck Live serial interface.
- Access is granted to the active local session through
uaccess. - The controller does not join the
inputgroup or access/dev/uinput. - Commands use
spawn(..., { shell: false }); configuration is not evaluated by a command shell. - Dependencies are locked in
package-lock.json.
Review mapping.mjs before installation if you prefer a smaller action set.
./uninstall.shDevice communication is powered by the unofficial foxxyz/loupedeck library.
MIT