Repository navigation
Installation
This guide walks you through installing keydo on Linux, macOS, and Windows.
Note
keydo runs as a system daemon and requires low-level access to input devices. Make sure you meet the prerequisites for your platform before proceeding.
| Platform | Requirements |
|---|---|
| Linux | Root / sudo access; uinput kernel module available |
| macOS | macOS 13.0 or later; Accessibility permissions granted to the binary |
| Windows | Windows 10/11; Visual Studio Build Tools 2019+ with the "Desktop development with C++" workload (build from source only) |
A Rust toolchain (2024 edition) is required to build from source.
Clone the repository and compile a release build with Cargo:
git clone https://github.com/argenkiwi/keydo.git
cd keydo
cargo build --releaseThen install the binary into your Cargo bin directory:
cargo install --path .Make sure the Cargo bin directory is on your PATH:
| Platform | Default Cargo bin path |
|---|---|
| Linux / macOS | ~/.cargo/bin |
| Windows | %USERPROFILE%\.cargo\bin |
keydo needs to run as a background daemon. Use the built-in install subcommand to register it with your platform's service manager.
# Copy the binary to the system path
sudo cp ~/.cargo/bin/keydo /usr/local/bin/
# Register and start the daemon (supports systemd and runit)
sudo /usr/local/bin/keydo installImportant
The installer automatically creates a keydo system group and configures the IPC socket at /run/keydo/socket with 0660 permissions. Add your user to this group so you can use the CLI without root:
sudo usermod -aG keydo $USERLog out and back in for the group change to take effect.
# systemd
systemctl status keydo
# runit
sv status keydokeydo installThis registers keydo as a user-level launchd service that starts automatically at login.
Important
Accessibility permissions are required. After running the installer, go to:
System Settings → Privacy & Security → Accessibility
Add the keydo binary (~/.cargo/bin/keydo) to the list and enable it. Without this, keydo cannot capture or inject key events.
launchctl list | grep keydoOpen an elevated Command Prompt (Run as Administrator) and run:
keydo installThis registers keydo to start automatically at logon via the Windows Task Scheduler / startup mechanism.
Warning
To remap keys inside elevated (admin) windows, the daemon itself must also run elevated. Start the registered task from an elevated prompt or adjust the task settings in Task Scheduler.
keydo uses the same configuration syntax as keyd. Place a .conf file in the appropriate directory for your platform:
| Platform | Configuration directory |
|---|---|
| Linux | /etc/keyd/ |
| macOS | ~/.config/keydo/ |
| Windows |
%APPDATA%\keydo\ (user) or C:\ProgramData\keyd\ (system-wide) |
Minimal example (default.conf):
[ids]
*
[main]
# Caps Lock → Escape when tapped, Control when held
capslock = overload(nav, esc)
[nav]
h = left
j = down
k = up
l = rightAfter saving the file, reload keydo to apply changes:
keydo reloadFor a full reference of the configuration syntax, see the keyd documentation.
-
Linux: Check the service logs with
journalctl -u keydo(systemd) or inspect runit's log directory. -
macOS: Run
keydo daemonin the foreground to see error output directly. Ensure Accessibility permissions are granted. -
Windows: Run
keydo daemonin an elevated command prompt to see error output.
-
Linux: Verify your user is in the
keydogroup and that you have logged out and back in. - macOS: Re-check Privacy & Security → Accessibility. If you moved or replaced the binary, you may need to re-add it.
- Windows: The daemon must run elevated to capture input inside elevated windows.
If input locks up, press and hold Backspace + Enter + Escape simultaneously to instantly terminate the daemon and restore default keyboard behaviour.
To remove the service registration:
# Linux / macOS / Windows
keydo uninstallThen remove the binary from your PATH and delete any configuration files you no longer need.