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

27
flake.lock generated Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1759381078,
"narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

96
flake.nix Normal file
View file

@ -0,0 +1,96 @@
{
inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
outputs = {
self,
nixpkgs,
}: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
lib = nixpkgs.lib;
in {
packages."${system}" = let
inherit (pkgs.linuxPackages_latest) kernel;
kmod = pkgs.callPackage ./nix/kmod.nix {inherit kernel;};
in {
inherit kernel kmod;
};
nixosConfigurations."gamma" = let
inherit (lib) nixosSystem;
inherit (lib.modules) mkDefault;
in
nixosSystem {
system = null;
modules = [
({modulesPath, ...}: {
imports = [(modulesPath + "/profiles/qemu-guest.nix")];
networking.hostName = "gamma";
boot = {
growPartition = false;
kernelParams = ["console=ttyAMA0,115200n8" "console=tty0"];
consoleLogLevel = mkDefault 7; # ground control to kernel
};
# Empty password
# root can login without a password
users.extraUsers.root.initialHashedPassword = "";
# Nixpkgs options
nixpkgs.pkgs = pkgs; # discard everything else, follow flake `pkgs`
# Packages
environment.systemPackages = [pkgs.microfetch];
# Bootable
fileSystems."/boot" = {
device = "/dev/vda1";
fsType = "vfat";
};
fileSystems."/" = {
device = "/dev/vda2";
fsType = "ext4";
};
boot.loader.grub = {
efiSupport = true;
efiInstallAsRemovable = true;
device = "nodev";
};
# Kernel fun
boot = {
# Use kernel package defined in flake.nix
kernelPackages = pkgs.linuxPackagesFor self.packages.${system}.kernel; # exposed kernel
# Get test module from flake outputs
extraModulePackages = [self.packages.${system}.kmod];
# Load module from package.
# Alternatively, `$ modprobe test` would work too
kernelModules = ["deepcool"];
};
# Make it smaller
documentation = {
doc.enable = false;
man.enable = false;
nixos.enable = false;
info.enable = false;
};
# Get out.
programs = {
bash.completion.enable = false;
command-not-found.enable = false;
};
# Shut up.
system.stateVersion = "25.11";
})
];
};
};
}

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";
};
}