Files
gotta-scroll-fast/README.md
T
2026-03-25 16:01:19 +00:00

128 lines
2.7 KiB
Markdown

# gotta-scroll-fast
Host-side **scroll acceleration** toolkit for Linux/Wayland.
This project is a fork/reimplementation inspired by [maccel](https://github.com/Gnarus-G/maccel), but it is a **separate tool** focused on scroll acceleration.
## credit and licensing
- Original inspiration/source: https://github.com/Gnarus-G/maccel
- Attribution details: `NOTICE.md`
- License: **GPL-2.0-or-later** (`LICENSE`)
## components
- `gsf` - parameter CLI + TUI
- `gsfd` - evdev -> uinput scroll acceleration daemon
- applies acceleration curves to wheel/hwheel (including hi-res wheel events)
- suppresses low-res wheel duplicates when hi-res events are present in the same frame
## development
```bash
nix develop
cargo build
```
## quick start (functional)
1) List devices:
```bash
cargo run -p gsf-daemon -- --list-devices
```
2) Pick your trackball device and run dry-run first:
```bash
cargo run -p gsf-daemon -- --device /dev/input/eventX --dry-run
```
3) Tune parameters (separate terminal):
```bash
cargo run -p gsf-cli -- set mode natural
cargo run -p gsf-cli -- set param sens-mult 1.0
cargo run -p gsf-cli -- set param decay-rate 0.1
cargo run -p gsf-cli -- set param limit 1.5
```
or launch TUI:
```bash
cargo run -p gsf-cli -- tui
```
4) Run live daemon:
```bash
cargo run -p gsf-daemon -- --device /dev/input/eventX
```
Tip: auto-pick by name substring:
```bash
cargo run -p gsf-daemon -- --match-name ploopy
```
## config + state paths
Default config path:
- `~/.config/gsf/config.json`
- override with `GSF_CONFIG_PATH`
Default speed stats path:
- `$XDG_RUNTIME_DIR/gsf-speed.txt` (if available)
- fallback `/tmp/gsf-speed.txt`
- override with `GSF_STATS_PATH`
## runtime requirements
- Linux with evdev/uinput
- `/dev/uinput` available
- permissions to read source event device and write uinput
For NixOS notes, see `DEV_SETUP.md`.
## nixos module
This flake now exports:
- `packages.<system>.default` (contains `gsf` + `gsfd`)
- `nixosModules.default` (`hardware.gsf`)
Example:
```nix
# flake input
inputs.gsf.url = "github:<you>/gotta-scroll-fast";
# module import + config
{
imports = [ inputs.gsf.nixosModules.default ];
hardware.gsf = {
enable = true;
device = "/dev/input/by-id/usb-...-event-mouse";
inputGroupUsers = [ "thomasgl" ];
# extraArgs = [ "--match-name" "ploopy" ];
};
}
```
`hardware.gsf` intentionally does **not** provide declarative accel parameters.
Manage those via your dotfiles (`~/.config/gsf/config.json`) and `gsf` CLI/TUI.
## systemd user service (manual alternative)
A starting unit file exists at:
- `packaging/systemd/user/gsfd.service`
Copy to `~/.config/systemd/user/gsfd.service`, adjust device selection args, then:
```bash
systemctl --user daemon-reload
systemctl --user enable --now gsfd
```