Personal Nix setup

Merge branch 'yeetmouse' into pepper

+1 -1
flake.nix
···
packages = eachSystem (system: {
inherit (inputs.agenix.packages.${system}) agenix;
inherit (inputs.darwin.packages.${system}) darwin-rebuild;
-
});
+
} // (import ./lib/pkgs inputs.nixpkgs.legacyPackages.${system}));
apps = eachSystem (system: import ./lib/apps {
inherit lib;
+3
lib/pkgs/default.nix
···
+
pkgs: {
+
yeetmouse = import ./yeetmouse.nix pkgs;
+
}
+65
lib/pkgs/yeetmouse.nix
···
+
pkgs @ {
+
lib,
+
bash,
+
stdenv,
+
coreutils,
+
fetchFromGitHub,
+
kernel ? pkgs.linuxPackages_latest.kernel,
+
...
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "yeetmouse";
+
version = "ed39ee0457d330c751b689fe6e410acae8c40d4f";
+
+
src = fetchFromGitHub {
+
owner = "andyfilter";
+
repo = "yeetmouse";
+
rev = version;
+
sha256 = "sha256-8cr4WYX09ej81tRJOfEytnPGj51voDQA9tEH91ukC+s=";
+
};
+
+
setSourceRoot = "export sourceRoot=$(pwd)/source";
+
nativeBuildInputs = kernel.moduleBuildDependencies ++ [ pkgs.makeWrapper ];
+
buildInputs = [ pkgs.glfw3 ];
+
+
makeFlags = kernel.makeFlags ++ [
+
"-C"
+
"${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
+
"M=$(sourceRoot)/driver"
+
];
+
+
postUnpack = ''
+
cp -r $src/gui $sourceRoot/gui
+
chmod 755 -R $sourceRoot/gui
+
substituteInPlace $sourceRoot/driver/util.c \
+
--replace "#define NUM_USAGES 32" "#define NUM_USAGES 90"
+
'';
+
+
preBuild = ''
+
cp $sourceRoot/driver/config.sample.h $sourceRoot/driver/config.h
+
'';
+
+
LD_LIBRARY_PATH = "/run/opengl-driver/lib:${lib.makeLibraryPath buildInputs}";
+
+
postBuild = ''
+
make "-j$NIX_BUILD_CORES" -C $sourceRoot/gui "M=$sourceRoot/gui" "LIBS=-lglfw -lGL"
+
'';
+
+
postInstall = ''
+
install -Dm755 $sourceRoot/gui/YeetMouseGui $out/bin/yeetmouse
+
install -D $src/install_files/udev/99-leetmouse.rules $out/lib/udev/rules.d/98-leetmouse.rules
+
install -Dm755 $src/install_files/udev/leetmouse_bind $out/lib/udev/rules.d/leetmouse_bind
+
substituteInPlace $out/lib/udev/rules.d/98-leetmouse.rules \
+
--replace "PATH='/sbin:/bin:/usr/sbin:/usr/bin'" ""
+
patchShebangs $out/lib/udev/rules.d/leetmouse_bind
+
wrapProgram $out/lib/udev/rules.d/leetmouse_bind \
+
--prefix PATH : ${lib.makeBinPath [ bash coreutils ]}
+
substituteInPlace $out/lib/udev/rules.d/98-leetmouse.rules \
+
--replace "leetmouse_bind" "$out/lib/udev/rules.d/leetmouse_bind"
+
'';
+
+
buildFlags = [ "modules" ];
+
installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ];
+
installTargets = [ "modules_install" ];
+
}
+1 -14
modules/desktop/default.nix
···
./session.nix
./xdg.nix
./fonts.nix
+
./rawaccel.nix
];
config = mkIf cfg.enable {
···
networking.networkmanager = {
enable = mkDefault true;
wifi.powersave = true;
-
};
-
-
services = {
-
fwupd.enable = true;
-
pipewire = {
-
enable = true;
-
wireplumber.enable = true;
-
pulse.enable = true;
-
jack.enable = true;
-
alsa = {
-
enable = true;
-
support32Bit = true;
-
};
-
};
};
hardware = {
+44
modules/desktop/rawaccel.nix
···
+
{ lib, config, pkgs, ... }:
+
+
with lib;
+
let
+
cfg = config.modules.desktop;
+
yeetmouse = import ../../lib/pkgs/yeetmouse.nix pkgs;
+
in {
+
options.modules.desktop.rawaccel = {
+
enable = mkOption {
+
default = cfg.enable;
+
example = true;
+
description = "Whether to enable Yeetmouse (fork of Leetmouse / Rawaccel for Linux).";
+
type = types.bool;
+
};
+
};
+
+
config = mkIf cfg.rawaccel.enable {
+
boot.extraModulePackages = [ yeetmouse ];
+
environment.systemPackages = [ yeetmouse ];
+
services.udev = {
+
packages = [ yeetmouse ];
+
extraRules = let
+
echo = "${pkgs.coreutils}/bin/echo";
+
yeetmouseConfig = pkgs.writeShellScriptBin "yeetmouseConfig" ''
+
${echo} "2.89" > /sys/module/leetmouse/parameters/Acceleration
+
${echo} "4" > /sys/module/leetmouse/parameters/AccelerationMode
+
${echo} "0.4" > /sys/module/leetmouse/parameters/Exponent
+
${echo} "17.2" > /sys/module/leetmouse/parameters/InputCap
+
${echo} "6.54" > /sys/module/leetmouse/parameters/Midpoint
+
${echo} "7.53" > /sys/module/leetmouse/parameters/Offset
+
${echo} "0" > /sys/module/leetmouse/parameters/OutputCap
+
${echo} "0.17" > /sys/module/leetmouse/parameters/PreScale
+
${echo} "0.0514872" > /sys/module/leetmouse/parameters/RotationAngle
+
${echo} "3" > /sys/module/leetmouse/parameters/ScrollsPerTick
+
${echo} "0.56" > /sys/module/leetmouse/parameters/Sensitivity
+
${echo} "1" > /sys/module/leetmouse/parameters/UseSmoothing
+
${echo} "1" > /sys/module/leetmouse/parameters/update
+
'';
+
in ''
+
SUBSYSTEMS=="usb|input|hid", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceNumber}=="00", RUN+="${yeetmouseConfig}/bin/yeetmouseConfig"
+
'';
+
};
+
};
+
}
+11
modules/desktop/services.nix
···
printing.enable = true;
flatpak.enable = true;
colord.enable = true;
+
fwupd.enable = true;
+
pipewire = {
+
enable = true;
+
wireplumber.enable = true;
+
pulse.enable = true;
+
jack.enable = true;
+
alsa = {
+
enable = true;
+
support32Bit = true;
+
};
+
};
};
};
}
+52
modules/desktop/yeetmouse.nix
···
+
{ lib, config, user, pkgs, ... }:
+
+
with lib;
+
let
+
cfg = config.modules.desktop;
+
yeetmouse = import ../../lib/pkgs/yeetmouse.nix pkgs;
+
in {
+
options.modules.desktop.services = {
+
enable = mkOption {
+
default = cfg.enable;
+
example = true;
+
description = "Whether to enable services.";
+
type = types.bool;
+
};
+
};
+
+
config = mkIf cfg.services.enable {
+
users.users."${user}".extraGroups = [ "video" ];
+
+
services = {
+
printing.enable = true;
+
flatpak.enable = true;
+
colord.enable = true;
+
};
+
+
boot.extraModulePackages = [ yeetmouse ];
+
environment.systemPackages = [ yeetmouse ];
+
services.udev = {
+
packages = [ yeetmouse ];
+
extraRules = let
+
echo = "${pkgs.coreutils}/bin/echo";
+
yeetmouseConfig = pkgs.writeShellScriptBin "yeetmouseConfig" ''
+
${echo} "2.89" > /sys/module/leetmouse/parameters/Acceleration
+
${echo} "4" > /sys/module/leetmouse/parameters/AccelerationMode
+
${echo} "0.4" > /sys/module/leetmouse/parameters/Exponent
+
${echo} "17.2" > /sys/module/leetmouse/parameters/InputCap
+
${echo} "6.54" > /sys/module/leetmouse/parameters/Midpoint
+
${echo} "7.53" > /sys/module/leetmouse/parameters/Offset
+
${echo} "0" > /sys/module/leetmouse/parameters/OutputCap
+
${echo} "0.17" > /sys/module/leetmouse/parameters/PreScale
+
${echo} "0.0514872" > /sys/module/leetmouse/parameters/RotationAngle
+
${echo} "3" > /sys/module/leetmouse/parameters/ScrollsPerTick
+
${echo} "0.56" > /sys/module/leetmouse/parameters/Sensitivity
+
${echo} "1" > /sys/module/leetmouse/parameters/UseSmoothing
+
${echo} "1" > /sys/module/leetmouse/parameters/update
+
'';
+
in ''
+
SUBSYSTEMS=="usb|input|hid", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceNumber}=="00", RUN+="${yeetmouseConfig}/bin/yeetmouseConfig"
+
'';
+
};
+
};
+
}