No description
  • Rust 95%
  • Nix 5%
Find a file
2026-06-18 13:57:14 +02:00
assets/icons feat(icon): add placeholder tray icon while waiting for first poll 2026-06-18 13:27:31 +02:00
nix tweak(nix): uaccess should be enough 2026-05-14 12:34:29 +02:00
src feat(menu): launch hardening + dropped-handle bug in main 2026-06-18 13:57:14 +02:00
.envrc first commit 2026-02-21 20:10:11 +01:00
.gitignore first commit 2026-02-21 20:10:11 +01:00
build.rs feat(icon): add placeholder tray icon while waiting for first poll 2026-06-18 13:27:31 +02:00
Cargo.lock feat(lock): env vars -> euid 2026-06-18 13:30:47 +02:00
Cargo.toml feat(lock): env vars -> euid 2026-06-18 13:30:47 +02:00
flake.lock first commit 2026-02-21 20:10:11 +01:00
flake.nix first commit 2026-02-21 20:10:11 +01:00
LICENSE first commit 2026-02-21 20:10:11 +01:00
README.md fix(readme): formatting 2026-02-23 18:40:56 +01:00

LIGHTCRAZY

Linux control software for the Pulsar X2 CrazyLight.

This project was created solely for personal use. But I figured I might aswell release it on the off-chance that someone else finds it useful!

Features

  • DPI: 400 / 800 / 1600 / 3200 / 6400 / 12800
  • Polling rate: 125 8000 Hz
  • Lift-off distance: Low (0.7 mm), Medium (1 mm), High (2 mm)
  • Debounce time: 0 20 ms
  • Toggle: Angle Snap, Ripple Control, Motion Sync, Turbo Mode
  • Battery level and charging status via system tray
  • Low-battery desktop notifications (configurable threshold & alarm)
  • Terminal UI for settings (--options)

Installation

NixOS

# flake.nix
inputs.lightcrazy = {
  url = "github:cnsta/lightcrazy";
  inputs.nixpkgs.follows = "nixpkgs";
};
# configuration.nix
hardware.lightcrazy = {
  enable = true;        # installs package + udev rules
  service = {
    enable = true;      # systemd user service
  };
};

Build from source

cargo build --release

Runtime dependencies: libudev, libdbus. On NixOS these are handled by the package derivation.

Usage

lightcrazy            # start tray service (default)
lightcrazy --options  # open settings panel (starts tray if not running)

Settings are stored in ~/.config/lightcrazy/settings.json and applied to the device on startup.

USB permissions

On non-NixOS systems, create /etc/udev/rules.d/99-lightcrazy.rules:

SUBSYSTEM=="usb",    ATTRS{idVendor}=="3710", ATTRS{idProduct}=="3414", MODE="0666", TAG+="uaccess"
SUBSYSTEM=="usb",    ATTRS{idVendor}=="3710", ATTRS{idProduct}=="5406", MODE="0666", TAG+="uaccess"
KERNEL=="hidraw*",   ATTRS{idVendor}=="3710", ATTRS{idProduct}=="3414", MODE="0666", TAG+="uaccess"
KERNEL=="hidraw*",   ATTRS{idVendor}=="3710", ATTRS{idProduct}=="5406", MODE="0666", TAG+="uaccess"
sudo udevadm control --reload-rules && sudo udevadm trigger

Troubleshooting

Since I exclusively use NixOS and Hyprland, these are the only environments that have been thoroughly tested. Feel free to open an issue if you encounter bugs.

Device not found: check lsusb | grep 3710, verify udev rules

Tray not visible: requires a StatusNotifier-compatible desktop (KDE, GNOME with AppIndicator extension, most others). Check journalctl --user -u lightcrazy.

Settings panel opens in wrong terminal: set TERMINAL or TERM in your environment.

Credits

Disclaimer

This project is not affiliated with Pulsar Gaming Gears or AplusX Inc.