YeetMouse kernel mouse acceleration driver packaged for NixOS.
| Project | AndyFilter/YeetMouse |
| License | GPL-2.0 |
| Tracked | Git commits (master) |
A Nix flake that builds the YeetMouse kernel module + GUI from upstream master with full CI infrastructure:
- Daily upstream tracking at 06:00 UTC — new commits on
masterland here within a day - Pre-build verification — fail-closed pipeline (eval → build → ELF check) before any push to
main - Dual-compiler kernel detection — auto-selects GCC vs LLVM/Clang to match CachyOS LTO and stock kernels
- Per-device profiles —
myModules.input.yeetmouse.devices.<dev>.enablewith bundled G502 libinput HWDB rule (flat-profile, prevents double acceleration) - Two integration paths — NixOS module (
hardware.yeetmouse) for module + udev + sensitivity; HM module (programs.yeetmouse) for the GUI
| Component | Type | Description |
|---|---|---|
yeetmouse-driver |
kernel module | Hardware-level mouse acceleration in kernel space (zero userspace latency); 8 modes (linear, power, classic, motivity, synchronous, natural, jump, LUT) |
yeetmouse-gui |
package | Real-time curve adjustment GUI |
nixosModules.default |
NixOS module | hardware.yeetmouse.* (sensitivity + mode params) + myModules.input.yeetmouse.* (toggles + per-device profiles like G502) + udev + systemd service for immediate parameter apply on mouse connect |
homeManagerModules.default |
HM module | GUI installation for the user |
- Kernel module for hardware-level mouse acceleration (runs in kernel space, zero userspace latency)
- GUI for real-time curve adjustment
- 8 acceleration modes: linear, power, classic, motivity, synchronous, natural, jump, LUT
- Dual compiler detection (GCC and LLVM/Clang for CachyOS LTO kernels)
- G502 libinput HWDB integration (flat profile to prevent double acceleration)
- Udev + systemd service for immediate parameter application on mouse connect
Add as a flake input:
{
inputs.yeetmouse = {
url = "github:Daaboulex/yeetmouse-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
}Then use the package:
{ pkgs, inputs, ... }:
{
environment.systemPackages = [ inputs.yeetmouse.packages.${pkgs.system}.default ];
}Add as a flake input:
yeetmouse = {
url = "github:Daaboulex/yeetmouse-nix";
inputs.nixpkgs.follows = "nixpkgs";
};Import the NixOS module and overlay:
imports = [ inputs.yeetmouse.nixosModules.default ];
nixpkgs.overlays = [ inputs.yeetmouse.overlays.default ];Enable in your host config:
myModules.input.yeetmouse = {
enable = true;
devices.g502.enable = true;
};
hardware.yeetmouse = {
sensitivity = 0.5;
mode.jump = {
acceleration = 2.0;
midpoint = 7.8;
};
};For the GUI, add the Home Manager module:
home-manager.sharedModules = [ inputs.yeetmouse.homeManagerModules.default ];git clone https://github.com/Daaboulex/yeetmouse-nix
cd yeetmouse-nix
nix develop # enter dev shell, installs pre-commit hooks
nix fmt # format flake + module
nix flake check --no-build # eval check
nix build # build the kernel module against the active kernel
nix build .#yeetmouse-gui # build the GUICI runs the same chain daily via .github/workflows/update.yml; manual updates rarely needed.
This packaging flake is GPL-2.0 licensed (matches upstream — kernel module licenses propagate). Upstream YeetMouse is GPL-2.0.
Maintained as part of the Daaboulex NixOS ecosystem.