Skip to content

Configuration Input

github-actions[bot] edited this page Oct 28, 2026 · 5 revisions

Input

input key Type Default Meaning
focus-follows-mouse boolean false Focus visible windows under the pointer without raising them or scrolling; click or use keyboard focus to reveal a window
xkb-layout nonempty string "us" XKB layout
xkb-variant string "" XKB variant
xkb-options string array [] XKB options
repeat-rate integer > 0 25 Repeats per second
repeat-delay-ms integer ≥ 0 600 Delay before repeat

With focus-follows-mouse enabled, moving into a visible part of another window changes keyboard focus without raising it or moving the scrolling viewport. If you select a window with a shortcut, moving the pointer within its current window keeps that selection until you cross into another window or click. Clicking or using directional focus brings the selected window into view.

In Overview (Super+Tab), click a window preview or a miniature inside a workspace card to activate that exact window. Hover highlights the target; directional focus keys move the selection, Enter activates it, and Escape dismisses Overview. Clicking a workspace card's background switches workspaces while keeping Overview open. Previews follow layout order and use the configured shell font and colors.

The touchpad keys tap, natural-scroll and disable-while-typing default to true. Set disable-while-mouse-connected #true to pause a built-in touchpad while an external mouse is connected. It defaults to false and uses libinput's external-mouse policy on supported touchpads, including when a mouse is plugged in or removed during the session. The toggle is also in Settings → Keyboard & mouse. These device settings apply to DRM sessions; nested previews use the host's physical input settings.

Touchpad accel-speed is independent of the mouse setting. It accepts −1.0 to 1.0 and defaults to 0.0. Both speed controls are available in Settings and reload immediately in a hardware session.

input {
    touchpad {
        accel-speed 0.0
        disable-while-mouse-connected #true
    }
    mouse {
        natural-scroll #false
        accel-speed 0.0
        // accel-profile "flat"
        left-handed #false
        middle-emulation #false
        scroll-factor 1.0
        drag-threshold 4.0
        scroll-cooldown-ms 150
    }
}

Mouse settings are separate from touchpad settings and reload live. accel-speed accepts -1.0 to 1.0; accel-profile accepts adaptive or flat, and follows the device default when omitted. scroll-factor scales application wheel scrolling (0.01–100). drag-threshold is the distance before a window drag starts (0–100 logical pixels). scroll-cooldown-ms limits repeated wheel bindings (0–5000 ms); zero allows each accumulated tick to run its action.

Workspace swipes and left/right window-focus swipes follow your fingers and settle when released. Up goes to the next workspace on the current monitor, down to the previous; left focuses the window to the right, and right focuses the window to the left. Workspace swipes skip workspaces owned by other monitors and stop at the first/last workspace. Short or cancelled navigation swipes slide back; diagonal swipes do not navigate. Navigation pauses while locked, during window grabs, or when an application inhibits shortcuts.

Assign swipes in Settings → Keyboard & mouse → Shortcuts using the same actions and arguments as keyboard bindings. Choose a "Customize swipe" button to add an override. The gesture keys are Swipe3Up, Swipe3Down, Swipe3Left, and Swipe3Right; 4 or 5 fingers are also supported. Changes reload live:

binding keys="Swipe3Up" action="toggle-overview"
binding keys="Swipe3Left" action="move" argument="left"
binding keys="Swipe3Down" disabled=#true

spawn uses a named entry from commands, just like keyboard shortcuts. To disable a direction in Settings, set its action to none and leave Argument empty. In KDL, disabled=#true removes the default binding. Swipes do not use keyboard modifiers or physical key matching. The trigger is automatically recognized from its name. Gesture navigation uses native touchpad events in a hardware session.

Applications can receive native touchpad gestures through the pointer-gestures protocol: unbound swipes, pinch translation/scale/rotation, and holds. Gestures follow pointer focus and are cancelled when that focus leaves the application. Configured three-to-five-finger navigation stays owned by the desktop. Active input capture takes precedence over local touchpad gesture delivery.

Adjust recognition distance in Settings → Keyboard & mouse, or with swipe-threshold 80 under input.touchpad (integer 16–1000 logical pixels).

Horizontal focus swipes pan continuously across the scrolling strip, so one gesture can pass several columns and reverse before the fingers lift. Focus stays on the original window during the drag, then follows the destination selected by momentum and the workspace's Minimal, Center or Paged policy. The threshold also controls pan sensitivity: four times that distance moves one viewport width. Reduced motion keeps direct finger tracking and snaps to the release destination without a spring animation.

Mouse bindings

Super+MouseLeft drags a window and Super+MouseRight resizes it. Both work with floating windows and tiled windows in scrolling or tree layouts. Drag a tiled window to another window's edge to place it beside that window, or to its center to join a tab group. Top and bottom drops into a tabbed column show its windows as rows. Drag across monitors to move to the workspace shown there. While dragging, right-click to switch between floating and tiling. Scroll or hold the pointer at a horizontal screen edge to reach other scrolling columns. Escape cancels the operation; releasing the initiating button finishes it. Fullscreen windows keep their current layout until you leave fullscreen.

Mouse bindings use the same actions, overrides and named binding modes as keyboard bindings. Ordinary actions use the current keyboard focus; pointer-move and pointer-resize operate on the window under the pointer. Client popup grabs, pointer constraints, shortcut inhibition and session locking take precedence.

binding "Alt+MouseLeft" action="pointer-move"
binding "Alt+MouseRight" action="pointer-resize"
binding "Super+MouseLeft" disabled=#true
binding "Super+WheelUp" action="workspace-previous"
binding "Super+WheelDown" action="workspace-next"
binding "Super+TouchpadScrollLeft" action="focus" argument="left"
binding "Super+MouseBack" action="focus-last-window"

Buttons include MouseLeft, MouseRight, MouseMiddle, MouseBack and MouseForward, or mouse:272 through mouse:287 for Linux mouse button codes. Wheel directions are WheelUp, WheelDown, WheelLeft and WheelRight. Touchpad scroll bindings use the TouchpadScroll prefix with the same directions. Only a bound scroll axis is intercepted; the other axis still reaches the client. High-resolution wheel steps accumulate into ticks. An intercepted touchpad scroll keeps its event ownership until the gesture stops, even if modifiers change.

Clone this wiki locally