Vibeleaderboard
Index / tool
Visit github.com
Category
Developer Tools
Rank
Pricing
Open Source
Type
TOOL
Builder
wez
GitHub
645 stars
Date

About

Keyboard input remapper for Linux and Wayland systems, written in Rust by @wez (creator of WezTerm).

What it does

It intercepts events from one selected input device, tracks which keys are currently pressed, applies ordered TOML rules, then sends the resulting key state through a virtual device. Rules support chords, many-to-many mappings, and keys that behave differently when tapped or held.

Why it's ranked here

A strong choice when desktop-level shortcuts are insufficient. Working below graphical applications makes one configuration effective across Wayland, X11, and the Linux console. Its focused rule model handles useful cases such as tap-versus-hold Caps Lock and modifier chords, though setup requires low-level device permissions.

What's good

The configuration stays compact while covering dual-role keys, chords, and multiple output keys. Device and key discovery commands reduce setup guesswork. More specific active chords receive priority, modifiers are emitted in a deliberate order, and optional physical-device matching distinguishes keyboards that share the same reported name.

Tradeoffs

It needs root access or explicit permissions for input and virtual-device interfaces, then takes exclusive control of the selected device. Rule order affects behavior, and taps use a fixed 200 millisecond threshold. There is no built-in configuration GUI, and key presses cannot launch commands.

How to use it well

Use it for persistent, system-wide keyboard transformations on Linux, especially laptop layouts, compact keyboards, dual-role modifiers, and application-independent chords. Start with the device and key inspection commands, keep specific chord rules before broader mappings, and run it through a supported service manager. Choose another tool when the goal is command execution or built-in visual editing.

Technical notes+

Cargo.toml defines a Rust 2021 binary using clap, serde, toml, evdev-rs, libc, logging, and error-handling crates. src/main.rs exposes ListDevices, ListKeys, DebugEvents, and Remap variants, including device overrides, startup delay, and polling for a missing device. src/mapping.rs parses TOML into DualRole and Remap variants, placing all dual-role mappings before regular mappings. src/remapper.rs grabs the evdev device, creates a UInputDevice, tracks pressed keys in HashMap and HashSet collections, prioritizes larger matching chords, emits modifiers first on press and last on release, and uses a 200 millisecond tap cutoff. src/deviceinfo.rs scans /dev/input event devices and supports phys-based disambiguation. evremap.service supplies a restartable systemd example. Makefile invokes cargo nextest run, while .github/workflows/rust.yml runs cargo test.

Observed

License
MIT License
Primary language
Rust
Interface
Command-line binary with device listing, key listing, event debugging, and remapping commands
Configuration
TOML rules for dual-role keys and many-to-many key remapping
Platform support
Linux input stack, effective across Wayland, X11, and the Linux console
Build and install surface
Built from source with Cargo and libevdev development packages; service examples cover systemd, Runit, and OpenRC
Runtime access
Requires root or user access to evdev and uinput

Read from README.md, Makefile, Cargo.toml, src/main.rs, src/mapping.rs, src/remapper.rs, src/deviceinfo.rs, LICENSE.md, .rustfmt.toml, evremap.service, pixelbookgo.toml, .github/FUNDING.yml, .github/dependabot.yml, .github/workflows/fmt.yml, .github/workflows/rust.yml.

What it can do

  • Remap individual keys to different keys

    Keyboard key pressesDifferent keyboard key events

  • Map key combinations to different key combinations

    Multiple simultaneous key pressesDifferent key combination events

  • Create custom keyboard shortcuts

    Key sequence configurationCustom keyboard shortcut mappings

  • Apply different key mappings per application

    Application-specific configuration rulesContext-aware key remapping

  • Intercept and modify keyboard input system-wide

    Raw keyboard events from hardwareModified keyboard events to applications

  • Load and apply remapping configuration files

    Configuration files with mapping rulesActive keyboard remapping behavior

Tags

linuxwaylandkeyboardrustremap

Tech Stack

Rust

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.