diff --git a/nixos/modules/hardware/hid-fanatecff.nix b/nixos/modules/hardware/hid-fanatecff.nix new file mode 100644 index 000000000000..b227eff5fb3c --- /dev/null +++ b/nixos/modules/hardware/hid-fanatecff.nix @@ -0,0 +1,19 @@ +{ lib, config, ... }: + +let + cfg = config.hardware.hid-fanatecff; + inherit (config.boot.kernelPackages) hid-fanatecff; + inherit (lib) maintainers mkEnableOption mkIf; +in +{ + options.hardware.hid-fanatecff = { + enable = mkEnableOption "hid-fanatecff, a Linux kernel driver that aims to add support for Fanatec devices"; + }; + + config = mkIf cfg.enable { + boot.extraModulePackages = [ hid-fanatecff ]; + services.udev.packages = [ hid-fanatecff ]; + }; + + meta.maintainers = with maintainers; [ rake5k ]; +} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index d6725e526a32..8211bb7ebc24 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -74,6 +74,7 @@ ./hardware/gpgsmartcards.nix ./hardware/graphics.nix ./hardware/hackrf.nix + ./hardware/hid-fanatecff.nix ./hardware/i2c.nix ./hardware/infiniband.nix ./hardware/inputmodule.nix diff --git a/pkgs/os-specific/linux/hid-fanatecff/default.nix b/pkgs/os-specific/linux/hid-fanatecff/default.nix new file mode 100644 index 000000000000..9ccdb93cc322 --- /dev/null +++ b/pkgs/os-specific/linux/hid-fanatecff/default.nix @@ -0,0 +1,56 @@ +{ + lib, + stdenv, + fetchFromGitHub, + kernel, + kernelModuleMakeFlags, + bashNonInteractive, + linuxConsoleTools, + nix-update-script, +}: + +let + moduleDir = "lib/modules/${kernel.modDirVersion}/kernel/drivers/hid"; +in +stdenv.mkDerivation (finalAttrs: { + pname = "hid-fanatecff"; + version = "0.2.2"; + + src = fetchFromGitHub { + owner = "gotzl"; + repo = "hid-fanatecff"; + tag = finalAttrs.version; + hash = "sha256-aVuTnrxw7zWMZ1U21DUKDvcYlIp7iHJHaX8ijmUd/TE="; + }; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + postPatch = '' + mkdir -p $out/{lib/udev/rules.d,${moduleDir}} + + sed -i '/depmod/d' Makefile + substituteInPlace Makefile \ + --replace-fail '/etc/udev/rules.d' "$out/lib/udev/rules.d" + + substituteInPlace fanatec.rules \ + --replace-fail '/usr/bin/evdev-joystick' '${lib.getExe' linuxConsoleTools "evdev-joystick"}' \ + --replace-fail '/bin/sh' '${lib.getExe bashNonInteractive}' + ''; + + makeFlags = kernelModuleMakeFlags ++ [ + "KVERSION=${kernel.modDirVersion}" + "KERNEL_SRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "MODULEDIR=$(out)/${moduleDir}" + ]; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Linux module driver for Fanatec driving wheels"; + homepage = "https://github.com/gotzl/hid-fanatecff"; + license = lib.licenses.gpl2Only; + maintainers = with lib.maintainers; [ rake5k ]; + platforms = lib.platforms.linux; + mainProgram = "hid-fanatecff"; + }; +}) diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 43335fb607bd..d0273b4efa10 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -463,6 +463,8 @@ in nct6687d = callPackage ../os-specific/linux/nct6687d { }; + hid-fanatecff = callPackage ../os-specific/linux/hid-fanatecff { }; + new-lg4ff = callPackage ../os-specific/linux/new-lg4ff { }; zenergy = callPackage ../os-specific/linux/zenergy { };