aboutsummaryrefslogtreecommitdiff
path: root/docs/wiki/Configuration:-Input.md
diff options
context:
space:
mode:
authorKent Daleng <lolexplode@gmail.com>2025-08-17 16:05:41 +0200
committerGitHub <noreply@github.com>2025-08-17 17:05:41 +0300
commitdc93f1c1fd7b67e2da5af2ffada732b9ddeb2d6a (patch)
treea2f2938a7df17c196be7016dc5fe1fc9f75fb484 /docs/wiki/Configuration:-Input.md
parenta6febb86aa5af0df7bf2792ca027ef95a503d599 (diff)
downloadniri-dc93f1c1fd7b67e2da5af2ffada732b9ddeb2d6a.tar.gz
niri-dc93f1c1fd7b67e2da5af2ffada732b9ddeb2d6a.tar.bz2
niri-dc93f1c1fd7b67e2da5af2ffada732b9ddeb2d6a.zip
github wiki replacement / mkdocs-docs (#2147)
* Add wiki based on mkdocs * wording fixes * fix github bg color on narrow * Fix left sidebar section headers being bigger than pages * fix hover accent * fix list rendering on fractional layout * fix videos * fix automatic full links * remove redundant commented css * improve dark mode contrast * update pygments for better child node coloring * update logo * remove blank lines * add systemd language hint --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
Diffstat (limited to 'docs/wiki/Configuration:-Input.md')
-rw-r--r--docs/wiki/Configuration:-Input.md379
1 files changed, 379 insertions, 0 deletions
diff --git a/docs/wiki/Configuration:-Input.md b/docs/wiki/Configuration:-Input.md
new file mode 100644
index 00000000..c9ca0ba2
--- /dev/null
+++ b/docs/wiki/Configuration:-Input.md
@@ -0,0 +1,379 @@
+### Overview
+
+In this section you can configure input devices like keyboard and mouse, and some input-related options.
+
+There's a section for each device type: `keyboard`, `touchpad`, `mouse`, `trackpoint`, `tablet`, `touch`.
+Settings in those sections will apply to every device of that type.
+Currently, there's no way to configure specific devices individually (but that is planned).
+
+All settings at a glance:
+
+```kdl
+input {
+ keyboard {
+ xkb {
+ // layout "us"
+ // variant "colemak_dh_ortho"
+ // options "compose:ralt,ctrl:nocaps"
+ // model ""
+ // rules ""
+ // file "~/.config/keymap.xkb"
+ }
+
+ // repeat-delay 600
+ // repeat-rate 25
+ // track-layout "global"
+ numlock
+ }
+
+ touchpad {
+ // off
+ tap
+ // dwt
+ // dwtp
+ // drag false
+ // drag-lock
+ natural-scroll
+ // accel-speed 0.2
+ // accel-profile "flat"
+ // scroll-factor 1.0
+ // scroll-method "two-finger"
+ // scroll-button 273
+ // scroll-button-lock
+ // tap-button-map "left-middle-right"
+ // click-method "clickfinger"
+ // left-handed
+ // disabled-on-external-mouse
+ // middle-emulation
+ }
+
+ mouse {
+ // off
+ // natural-scroll
+ // accel-speed 0.2
+ // accel-profile "flat"
+ // scroll-factor 1.0
+ // scroll-method "no-scroll"
+ // scroll-button 273
+ // scroll-button-lock
+ // left-handed
+ // middle-emulation
+ }
+
+ trackpoint {
+ // off
+ // natural-scroll
+ // accel-speed 0.2
+ // accel-profile "flat"
+ // scroll-method "on-button-down"
+ // scroll-button 273
+ // scroll-button-lock
+ // left-handed
+ // middle-emulation
+ }
+
+ trackball {
+ // off
+ // natural-scroll
+ // accel-speed 0.2
+ // accel-profile "flat"
+ // scroll-method "on-button-down"
+ // scroll-button 273
+ // scroll-button-lock
+ // left-handed
+ // middle-emulation
+ }
+
+ tablet {
+ // off
+ map-to-output "eDP-1"
+ // left-handed
+ // calibration-matrix 1.0 0.0 0.0 0.0 1.0 0.0
+ }
+
+ touch {
+ // off
+ map-to-output "eDP-1"
+ }
+
+ // disable-power-key-handling
+ // warp-mouse-to-focus
+ // focus-follows-mouse max-scroll-amount="0%"
+ // workspace-auto-back-and-forth
+
+ // mod-key "Super"
+ // mod-key-nested "Alt"
+}
+```
+
+### Keyboard
+
+#### Layout
+
+In the `xkb` section, you can set layout, variant, options, model and rules.
+These are passed directly to libxkbcommon, which is also used by most other Wayland compositors.
+See the `xkeyboard-config(7)` manual for more information.
+
+```kdl
+input {
+ keyboard {
+ xkb {
+ layout "us"
+ variant "colemak_dh_ortho"
+ options "compose:ralt,ctrl:nocaps"
+ }
+ }
+}
+```
+
+> [!TIP]
+>
+> <sup>Since: 25.02</sup>
+>
+> Alternatively, you can directly set a path to a .xkb file containing an xkb keymap.
+> This overrides all other xkb settings.
+>
+> ```kdl
+> input {
+> keyboard {
+> xkb {
+> file "~/.config/keymap.xkb"
+> }
+> }
+> }
+> ```
+
+> [!NOTE]
+>
+> <sup>Since: next release</sup>
+>
+> If the `xkb` section is empty (like it is by default), niri will fetch xkb settings from systemd-localed at `org.freedesktop.locale1` over D-Bus.
+> This way, for example, system installers can dynamically set the niri keyboard layout.
+> You can see this layout in `localectl` and change it with `localectl set-x11-keymap`, for example:
+>
+> ```sh
+> $ localectl set-x11-keymap "us" "" "colemak_dh_ortho" "compose:ralt,ctrl:nocaps"
+> $ localectl
+> System Locale: LANG=en_US.UTF-8
+> LC_NUMERIC=ru_RU.UTF-8
+> LC_TIME=ru_RU.UTF-8
+> LC_MONETARY=ru_RU.UTF-8
+> LC_PAPER=ru_RU.UTF-8
+> LC_MEASUREMENT=ru_RU.UTF-8
+> VC Keymap: us-colemak_dh_ortho
+> X11 Layout: us
+> X11 Variant: colemak_dh_ortho
+> X11 Options: compose:ralt,ctrl:nocaps
+> ```
+>
+> By default, `localectl` will set the TTY keymap to the closest match of the XKB keymap.
+> You can prevent that with a `--no-convert` flag, for example: `localectl set-x11-keymap --no-convert "us,ru"`.
+>
+> These settings are picked up by some other programs too, like GDM.
+
+When using multiple layouts, niri can remember the current layout globally (the default) or per-window.
+You can control this with the `track-layout` option.
+
+- `global`: layout change is global for all windows.
+- `window`: layout is tracked for each window individually.
+
+```kdl
+input {
+ keyboard {
+ track-layout "global"
+ }
+}
+```
+
+#### Repeat
+
+Delay is in milliseconds before the keyboard repeat starts.
+Rate is in characters per second.
+
+```kdl
+input {
+ keyboard {
+ repeat-delay 600
+ repeat-rate 25
+ }
+}
+```
+
+#### Num Lock
+
+<sup>Since: 25.05</sup>
+
+Set the `numlock` flag to turn on Num Lock automatically at startup.
+
+You might want to disable (comment out) `numlock` if you're using a laptop with a keyboard that overlays Num Lock keys on top of regular keys.
+
+```kdl
+input {
+ keyboard {
+ numlock
+ }
+}
+```
+
+### Pointing Devices
+
+Most settings for the pointing devices are passed directly to libinput.
+Other Wayland compositors also use libinput, so it's likely you will find the same settings there.
+For flags like `tap`, omit them or comment them out to disable the setting.
+
+A few settings are common between input devices:
+
+- `off`: if set, no events will be sent from this device.
+
+A few settings are common between `touchpad`, `mouse`, `trackpoint`, and `trackball`:
+
+- `natural-scroll`: if set, inverts the scrolling direction.
+- `accel-speed`: pointer acceleration speed, valid values are from `-1.0` to `1.0` where the default is `0.0`.
+- `accel-profile`: can be `adaptive` (the default) or `flat` (disables pointer acceleration).
+- `scroll-method`: when to generate scroll events instead of pointer motion events, can be `no-scroll`, `two-finger`, `edge`, or `on-button-down`.
+ The default and supported methods vary depending on the device type.
+- `scroll-button`: <sup>Since: 0.1.10</sup> the button code used for the `on-button-down` scroll method. You can find it in `libinput debug-events`.
+- `scroll-button-lock`: <sup>Since: next release</sup> when enabled, the button does not need to be held down. Pressing once engages scrolling, pressing a second time disengages it, and double click acts as single click of the the underlying button.
+- `left-handed`: if set, changes the device to left-handed mode.
+- `middle-emulation`: emulate a middle mouse click by pressing left and right mouse buttons at once.
+
+Settings specific to `touchpad`s:
+
+- `tap`: tap-to-click.
+- `dwt`: disable-when-typing.
+- `dwtp`: disable-when-trackpointing.
+- `drag`: <sup>Since: 25.05</sup> can be `true` or `false`, controls if tap-and-drag is enabled.
+- `drag-lock`: <sup>Since: 25.02</sup> if set, lifting the finger off for a short time while dragging will not drop the dragged item. See the [libinput documentation](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag).
+- `tap-button-map`: can be `left-right-middle` or `left-middle-right`, controls which button corresponds to a two-finger tap and a three-finger tap.
+- `click-method`: can be `button-areas` or `clickfinger`, changes the [click method](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html).
+- `disabled-on-external-mouse`: do not send events while external pointer device is plugged in.
+
+Settings specific to `touchpad` and `mouse`:
+
+- `scroll-factor`: <sup>Since: 0.1.10</sup> scales the scrolling speed by this value.
+
+Settings specific to `tablet`s:
+
+- `calibration-matrix`: <sup>Since: 25.02</sup> set to six floating point numbers to change the calibration matrix. See the [`LIBINPUT_CALIBRATION_MATRIX` documentation](https://wayland.freedesktop.org/libinput/doc/latest/device-configuration-via-udev.html) for examples.
+
+Tablets and touchscreens are absolute pointing devices that can be mapped to a specific output like so:
+
+```kdl
+input {
+ tablet {
+ map-to-output "eDP-1"
+ }
+
+ touch {
+ map-to-output "eDP-1"
+ }
+}
+```
+
+Valid output names are the same as the ones used for output configuration.
+
+<sup>Since: 0.1.7</sup> When a tablet is not mapped to any output, it will map to the union of all connected outputs, without aspect ratio correction.
+
+### General Settings
+
+These settings are not specific to a particular input device.
+
+#### `disable-power-key-handling`
+
+By default, niri will take over the power button to make it sleep instead of power off.
+Set this if you would like to configure the power button elsewhere (i.e. `logind.conf`).
+
+```kdl
+input {
+ disable-power-key-handling
+}
+```
+
+#### `warp-mouse-to-focus`
+
+Makes the mouse warp to newly focused windows.
+
+Does not make the cursor visible if it had been hidden.
+
+```kdl
+input {
+ warp-mouse-to-focus
+}
+```
+
+By default, the cursor warps *separately* horizontally and vertically.
+I.e. if moving the mouse only horizontally is enough to put it inside the newly focused window, then the mouse will move only horizontally, and not vertically.
+
+<sup>Since: 25.05</sup> You can customize this with the `mode` property.
+
+- `mode="center-xy"`: warps by both X and Y coordinates together.
+So if the mouse was anywhere outside the newly focused window, it will warp to the center of the window.
+- `mode="center-xy-always"`: warps by both X and Y coordinates together, even if the mouse was already somewhere inside the newly focused window.
+
+```kdl
+input {
+ warp-mouse-to-focus mode="center-xy"
+}
+```
+
+#### `focus-follows-mouse`
+
+Focuses windows and outputs automatically when moving the mouse over them.
+
+```kdl
+input {
+ focus-follows-mouse
+}
+```
+
+<sup>Since: 0.1.8</sup> You can optionally set `max-scroll-amount`.
+Then, focus-follows-mouse won't focus a window if it will result in the view scrolling more than the set amount.
+The value is a percentage of the working area width.
+
+```kdl
+input {
+ // Allow focus-follows-mouse when it results in scrolling at most 10% of the screen.
+ focus-follows-mouse max-scroll-amount="10%"
+}
+```
+
+```kdl
+input {
+ // Allow focus-follows-mouse only when it will not scroll the view.
+ focus-follows-mouse max-scroll-amount="0%"
+}
+```
+
+#### `workspace-auto-back-and-forth`
+
+Normally, switching to the same workspace by index twice will do nothing (since you're already on that workspace).
+If this flag is enabled, switching to the same workspace by index twice will switch back to the previous workspace.
+
+Niri will correctly switch to the workspace you came from, even if workspaces were reordered in the meantime.
+
+```kdl
+input {
+ workspace-auto-back-and-forth
+}
+```
+
+#### `mod-key`, `mod-key-nested`
+
+<sup>Since: 25.05</sup>
+
+Customize the `Mod` key for [key bindings](./Configuration:-Key-Bindings.md).
+Only valid modifiers are allowed, e.g. `Super`, `Alt`, `Mod3`, `Mod5`, `Ctrl`, `Shift`.
+
+By default, `Mod` is equal to `Super` when running niri on a TTY, and to `Alt` when running niri as a nested winit window.
+
+> [!NOTE]
+> There are a lot of default bindings with Mod, none of them "make it through" to the underlying window.
+> You probably don't want to set `mod-key` to Ctrl or Shift, since Ctrl is commonly used for app hotkeys, and Shift is used for, well, regular typing.
+
+```kdl
+// Switch the mod keys around: use Alt normally, and Super inside a nested window.
+input {
+ mod-key "Alt"
+ mod-key-nested "Super"
+}
+```