Repository navigation
Home
Tablet support for niri: multi-finger touchscreen gestures, an on-screen keyboard that adapts to screen orientation, and automatic display rotation. Everything needed to run a niri session with the keyboard detached.

It works as a small patch series on top of a current niri release (currently
v26.04 + 20 patches), maintained here and rebuilt each time a new niri
release comes out. Upstream is also working on
configurable gesture binds; when
that lands, this patchset can be retired.
git clone https://github.com/GGEZUS/niri-tablet.git
cd niri-tablet
./update-niri-tablet.shThat builds and installs the patched niri on Arch. Other distros: see Installation. After installing, copy the shipped gesture config (Configuration) and, if you want the on-screen keyboard and auto-rotation, the helpers under OSK and auto-rotation.
config/gestures.kdl in the repo is the config this scheme is developed and
daily-driven on. Copying it in gives you exactly this:
| Gesture | Action (as shipped) |
|---|---|
| 3-finger swipes | |
| horizontal drag | resize the focused window's width, live, tracking your fingers 1:1 |
| vertical drag | workspace carousel (animated) |
| tap | maximize / restore the focused column |
| 3-finger hold + swipe | |
| rest ~400ms, then swipe left/right | move the focused window one column left/right |
| rest ~400ms, then swipe up/down | move the focused window one workspace up/down |
4-finger swipes (one finger more than fingers; 4 by default) |
|
| tap | window overview |
| flick down | close the focused window |
| flick up | toggle the focused window fullscreen |
| flick left / flick right | unbound by default: they fall back to the horizontal drag (resize/move-view); examples commented in the config |
| Edge swipes | |
| one finger, swiping up from the bottom edge | toggle the on-screen keyboard |
| one finger, swiping down from the top edge | toggle the overview |
| one finger, swiping inward from the left edge | focus the column to the left |
| one finger, swiping inward from the right edge | focus the column to the right |
| Corner swipes | |
| one finger, swiping diagonally from a corner | unbound on purpose: pick your own |
Nothing is locked in: every gesture takes any niri action, same as keybinds. The details, thresholds, and fallback rules are on Gestures; the full config syntax on Configuration.
- Installation - Arch, NixOS, and other distros; how to verify the patched binary is running
- Updating - the bundled updater and what it does
- Gestures - reference for every gesture, how recognition works, what falls back to what
-
Configuration - the full
gestures {}node reference - EasySetup - the GUI configurator: pick actions, test them live, export and import schemes
- OSK and auto-rotation - the optional helpers (work on stock niri too)
- Troubleshooting - common problems, debug logging, and how to file useful bug reports
- Development - patch series, rebase workflow, design notes for anyone hacking on the gesture code
- Microsoft Surface Go 2
- ThinkPad T480
License: GPL-3.0-only (the patches modify niri, also GPL-3.0-only). Credits are on Development and in the README.