Touchpad edge gestures for Linux/Wayland. Use the edges to control volume, adjust brightness, switch workspaces, or run any command. The center stays available for normal pointer movement.
Gestures start with a finger on the touchpad's left, right, top, or bottom edge. Swipes, taps, and double taps run an action when you lift your finger; sliders repeat an action as you move along an edge.
On an x86_64 Linux desktop with systemd, run:
curl -fsSL https://raw.githubusercontent.com/assembledev/edgepad/main/install.sh | shThe installer puts edgepad in ~/.local/bin, creates a config, sets up device
access, and starts a user service. It asks for sudo to install the udev rules.
Make sure ~/.local/bin is on your PATH.
To preview the changes, append -s -- --dry-run to sh. Run the installer again
to update; it keeps your config.
NixOS: follow the Nix setup. Use both the NixOS module for device access and the Home Manager module for configuration and the user service.
Check that edgepad is ready:
edgepad statusWith the installer’s default config, slide a finger up or down along the left
edge. You should see a volume-up or volume-down notification. The examples
require notify-send and a desktop notification service; they don't change your
volume or other settings yet.
If nothing happens, run edgepad doctor to check device access, missing commands,
and service health.
Edit ~/.config/edgepad/edgepad.toml. For example, this complete config makes the
left edge a volume slider and a tap on the top edge toggle media playback:
device = "auto"
[[sliders]]
zone = "left"
up = ["pamixer", "-i", "3"]
down = ["pamixer", "-d", "3"]
[[gestures]]
zone = "top"
direction = "tap"
action = ["playerctl", "play-pause"]Install pamixer and playerctl for this example, or replace them with commands
you use. Each array contains the command followed by its arguments. Edgepad does
not run commands through a shell.
Reload after editing:
systemctl --user reload edgepad.serviceIf the config is invalid, edgepad keeps the previous one and logs the error. Home Manager users should edit their Nix configuration and apply it instead.
See the configuration guide for swipes, double taps, edge widths, and sensitivity settings, or start from the full example config.
If pointer movement behaves incorrectly, stop edgepad to release the touchpad:
systemctl --user stop edgepad.serviceFor other problems, check the diagnostics and logs:
edgepad doctor
journalctl --user -u edgepad.service -bIf more than one touchpad is found, run edgepad devices, set device to the
chosen /dev/input/eventX path in your config, and restart the service. Device
changes require a restart rather than a reload.
Start it again with systemctl --user start edgepad.service.
Report a bug with the relevant
logs; the capture guide explains how to record a gesture
for debugging.
For installations made with the release installer:
curl -fsSL https://raw.githubusercontent.com/assembledev/edgepad/main/install.sh | sh -s -- --uninstallYour config is kept. Add --purge to remove it too.
- Configuration — gesture bindings and tuning.
- Nix — installation, modules, and development shell.
- Device discovery and event capture.
- Input forwarding, double-tap recognition, and replay format — implementation and testing.
From a checkout, run nix develop to get the Rust toolchain, then:
cargo build --locked
cargo fmt --check
cargo clippy --locked --all-targets -- -D warnings
cargo test --lockedMIT or Apache-2.0, at your option.