No description
- Rust 49.1%
- C 32.7%
- Nix 7.6%
- Shell 4.6%
- Astro 3.7%
- Other 2.3%
|
|
||
|---|---|---|
| .github/workflows | ||
| bench | ||
| cli | ||
| crates/core | ||
| daemon | ||
| driver | ||
| nix | ||
| packaging/systemd/user | ||
| site | ||
| tui | ||
| udev_rules | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| DEV_SETUP.md | ||
| dkms.conf | ||
| flake.lock | ||
| flake.nix | ||
| install.sh | ||
| LICENSE | ||
| maccel.install | ||
| maccel.sysusers | ||
| Makefile | ||
| module.nix | ||
| NOTICE.md | ||
| PKGBUILD | ||
| README.md | ||
| README_NIXOS.md | ||
| uninstall.sh | ||
gotta-scroll-fast
Host-side scroll acceleration toolkit for Linux/Wayland.
This project is a fork/reimplementation inspired by 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 + TUIgsfd- 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
nix develop
cargo build
quick start (functional)
- List devices:
cargo run -p gsf-daemon -- --list-devices
- Pick your trackball device and run dry-run first:
cargo run -p gsf-daemon -- --device /dev/input/eventX --dry-run
- Tune parameters (separate terminal):
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:
cargo run -p gsf-cli -- tui
- Run live daemon:
cargo run -p gsf-daemon -- --device /dev/input/eventX
Tip: auto-pick by name substring:
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/uinputavailable- 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(containsgsf+gsfd)nixosModules.default(hardware.gsf)
Example:
# 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:
systemctl --user daemon-reload
systemctl --user enable --now gsfd