nix: basic packaging
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I6a6a6964c848d4871ead297560a06c2e1dd2f14d
This commit is contained in:
parent
3294fff13c
commit
6abac69e75
3 changed files with 199 additions and 0 deletions
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal 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
96
flake.nix
Normal 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
76
nix/kmod.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue