{ lib, stdenv, linuxPackages_latest, kernel ? linuxPackages_latest.kernel, ... }: let pname = "deepcool"; version = "0.1.0"; in stdenv.mkDerivation { inherit pname version; src = let fs = lib.fileset; sp = ../.; in fs.toSource { root = sp; fileset = fs.unions [ (sp + /deepcool.c) (sp + /Makefile) ]; }; enableParallelBuilding = true; nativeBuildInputs = kernel.moduleBuildDependencies; hardeningDisable = ["pic" "format"]; env = { KVERSION = kernel.modDirVersion; INSTALL_MOD_PATH = builtins.placeholder "out"; }; buildPhase = '' runHook preBuild echo "Kernel version: $KVERSION" make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \ M=$(pwd) \ modules runHook postBuild ''; installPhase = '' runHook preInstall echo "Module Installation Path: $INSTALL_MOD_PATH" make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \ M=$(pwd) \ modules_install runHook postInstall ''; postInstall = '' if [ -d $out/lib/modules/${kernel.modDirVersion}/extra ]; then mkdir -p $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/hid find $out/lib/modules/${kernel.modDirVersion}/extra -name "*.ko*" \ -exec mv {} $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/hid/ \; rmdir $out/lib/modules/${kernel.modDirVersion}/extra 2>/dev/null || true fi ''; passthru = { inherit kernel; kernelVersion = kernel.modDirVersion; moduleName = "deepcool_digital"; modulePath = "kernel/drivers/hid/deepcool_digital.ko"; }; meta = { description = "Linux kernel module for Deepcool Digital USB HID devices"; license = lib.licenses.gpl2Plus; maintainers = []; platforms = lib.platforms.linux; broken = lib.versionOlder kernel.version "5.10"; }; }