{ description = "gotta-scroll-fast (gsf) - host-side scroll acceleration toolkit"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: let eachSystem = flake-utils.lib.eachDefaultSystem; in { nixosModules.default = import ./nix/module.nix; } // eachSystem (system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = false; }; gsfTools = pkgs.callPackage ./nix/package.nix { src = self; }; in { packages.default = gsfTools; packages.gsf-tools = gsfTools; apps.gsf = flake-utils.lib.mkApp { drv = gsfTools; name = "gsf"; }; apps.gsfd = flake-utils.lib.mkApp { drv = gsfTools; name = "gsfd"; }; devShells.default = pkgs.mkShell { packages = with pkgs; [ rustc cargo rustfmt clippy rust-analyzer rustPlatform.rustLibSrc pkg-config gcc clang gnumake git evtest libinput wev jq ripgrep fd jj ]; shellHook = '' export RUST_SRC_PATH="${pkgs.rustPlatform.rustLibSrc}" echo echo "✅ gsf dev shell ready" echo " Rust: $(rustc --version)" echo " Cargo: $(cargo --version)" echo " JJ: $(jj --version | head -n1)" echo if [ -e /dev/uinput ]; then echo "uinput: present at /dev/uinput" ls -l /dev/uinput else echo "uinput: /dev/uinput not found" echo " enable with: boot.kernelModules = [ \"uinput\" ];" fi echo ''; }; }); }