Documentation

ScrollShift

ScrollShift is a developmental Linux utility for intent-aware mouse-wheel scrolling: precise under slow input, strongly accelerated under rapid input, while preserving normal pointer behaviour.

Status: active dogfooding. Transparent capture, forced-crash recovery, receiver reconnect and suspend/resume have real-hardware evidence on the primary Linux test machine. Ubuntu/GNOME on Wayland has also passed an initial application matrix across Chrome, VS Code, the terminal and Files; one PDF viewer remained usable but showed weaker, jumpier acceleration. Broader desktop and hardware coverage remains the current frontier.

The goal

ScrollShift intercepts wheel events below the application layer, estimates scrolling intent from physical wheel cadence, and transforms only wheel motion before forwarding it through a virtual Linux input device. Fine-grained output may help transitions, but acceleration—not animation for its own sake—is the primary product goal.

physical mouse
    ↓
evdev input
    ↓
ScrollShift
    ↓
velocity / acceleration model
    ↓
uinput virtual pointer
    ↓
libinput → desktop → application

Design principles

  • Fail safely. Losing ScrollShift must not mean losing control of the pointer.
  • Preserve semantics. Movement, buttons and unsupported input should pass through unchanged.
  • Stay compositor-agnostic where possible. Prefer the Linux input layer over application-specific hooks.
  • Preserve intent. Slow input should remain slow and precise; rapid spins should become unmistakably faster.
  • Measure the feel. Latency, stopping and reversal behaviour matter more than decorative animation.

Architecture →