nix: basic packaging

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964c848d4871ead297560a06c2e1dd2f14d
This commit is contained in:
raf 2025-10-06 20:42:51 +03:00
commit 6abac69e75
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
3 changed files with 199 additions and 0 deletions

76
nix/kmod.nix Normal file
View file

@ -0,0 +1,76 @@
{
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";
};
}