mirror of
https://github.com/xddxdd/nix-cachyos-kernel.git
synced 2026-07-03 19:18:07 +02:00
Initial commit
This commit is contained in:
commit
0279735e43
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
result
|
||||
result*
|
||||
trace.txt*
|
||||
.gcroots
|
||||
.vscode
|
||||
.direnv
|
||||
*.log
|
||||
.pre-commit-config.yaml
|
||||
update-git-commits.txt
|
||||
*.cmp
|
||||
*.fetchlog
|
||||
95
flake.lock
Normal file
95
flake.lock
Normal file
@ -0,0 +1,95 @@
|
||||
{
|
||||
"nodes": {
|
||||
"cachyos-kernel": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1764950048,
|
||||
"narHash": "sha256-Dgc/8jbcMYeOr8xgd/yVFTL+8uNmAHAPyTsVu6G4jeA=",
|
||||
"owner": "CachyOS",
|
||||
"repo": "linux-cachyos",
|
||||
"rev": "b76feee309500d7ba6a955760ed4a8e698902ba3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "CachyOS",
|
||||
"repo": "linux-cachyos",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"cachyos-kernel-patches": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1765190459,
|
||||
"narHash": "sha256-TJJKd86jDyighG3Jx8MNyiuQTpEIMAsA2GkWpqttwFg=",
|
||||
"owner": "CachyOS",
|
||||
"repo": "kernel-patches",
|
||||
"rev": "6dfdbc7f8f3ee4d9f5dc8adfb0672ef5d8e1e3d5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "CachyOS",
|
||||
"repo": "kernel-patches",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763759067,
|
||||
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1765183668,
|
||||
"narHash": "sha256-TBA7CE44IHYfvOPBWcyLncpVrrKEiXWPdOrF8CD6W84=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "fc2de1563f89f0843eba27f14576d261df0e3b80",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable-small",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1761765539,
|
||||
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"cachyos-kernel": "cachyos-kernel",
|
||||
"cachyos-kernel-patches": "cachyos-kernel-patches",
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
44
flake.nix
Normal file
44
flake.nix
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
description = "CachyOS Kernels";
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
|
||||
cachyos-kernel = {
|
||||
url = "github:CachyOS/linux-cachyos";
|
||||
flake = false;
|
||||
};
|
||||
cachyos-kernel-patches = {
|
||||
url = "github:CachyOS/kernel-patches";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
outputs =
|
||||
{ self, flake-parts, ... }@inputs:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } (
|
||||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
rec {
|
||||
# Legacy packages contain linux-cachyos-* and linuxPackages-cachyos-*
|
||||
legacyPackages = pkgs.callPackage ./kernel-cachyos {
|
||||
inherit inputs;
|
||||
};
|
||||
# Packages only contain linux-cachyos-* due to Flake schema requirements
|
||||
packages = lib.filterAttrs (_: lib.isDerivation) legacyPackages;
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
81
helpers.nix
Normal file
81
helpers.nix
Normal file
@ -0,0 +1,81 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
rec {
|
||||
# https://github.com/NixOS/nixpkgs/pull/129806
|
||||
# https://github.com/lovesegfault/nix-config/blob/master/nix/overlays/linux-lto.nix
|
||||
|
||||
noBintools = {
|
||||
bootBintools = null;
|
||||
bootBintoolsNoLibc = null;
|
||||
};
|
||||
hostLLVM = pkgs.pkgsBuildHost.llvmPackages.override noBintools;
|
||||
buildLLVM = pkgs.pkgsBuildBuild.llvmPackages.override noBintools;
|
||||
|
||||
ltoMakeflags = [
|
||||
"LLVM=1"
|
||||
"LLVM_IAS=1"
|
||||
"CC=${buildLLVM.clangUseLLVM}/bin/clang"
|
||||
"LD=${buildLLVM.lld}/bin/ld.lld"
|
||||
"HOSTLD=${hostLLVM.lld}/bin/ld.lld"
|
||||
"AR=${buildLLVM.llvm}/bin/llvm-ar"
|
||||
"HOSTAR=${hostLLVM.llvm}/bin/llvm-ar"
|
||||
"NM=${buildLLVM.llvm}/bin/llvm-nm"
|
||||
"STRIP=${buildLLVM.llvm}/bin/llvm-strip"
|
||||
"OBJCOPY=${buildLLVM.llvm}/bin/llvm-objcopy"
|
||||
"OBJDUMP=${buildLLVM.llvm}/bin/llvm-objdump"
|
||||
"READELF=${buildLLVM.llvm}/bin/llvm-readelf"
|
||||
"HOSTCC=${hostLLVM.clangUseLLVM}/bin/clang"
|
||||
"HOSTCXX=${hostLLVM.clangUseLLVM}/bin/clang++"
|
||||
];
|
||||
|
||||
stdenvLLVM =
|
||||
let
|
||||
mkLLVMPlatform =
|
||||
platform:
|
||||
platform
|
||||
// {
|
||||
linux-kernel = platform.linux-kernel // {
|
||||
makeFlags = (platform.linux-kernel.makeFlags or [ ]) ++ ltoMakeflags;
|
||||
};
|
||||
};
|
||||
|
||||
stdenv' = pkgs.overrideCC hostLLVM.stdenv hostLLVM.clangUseLLVM;
|
||||
in
|
||||
stdenv'.override (old: {
|
||||
hostPlatform = mkLLVMPlatform old.hostPlatform;
|
||||
buildPlatform = mkLLVMPlatform old.buildPlatform;
|
||||
extraNativeBuildInputs = [
|
||||
hostLLVM.lld
|
||||
pkgs.patchelf
|
||||
];
|
||||
});
|
||||
|
||||
kernelModuleLLVMOverride =
|
||||
kernelPackages_:
|
||||
kernelPackages_.extend (
|
||||
_final: prev:
|
||||
lib.mapAttrs (
|
||||
n: v:
|
||||
if
|
||||
builtins.elem "LLVM=1" kernelPackages_.kernel.commonMakeFlags
|
||||
&& !(builtins.elem n [ "kernel" ])
|
||||
&& lib.isDerivation v
|
||||
&& ((v.overrideAttrs or null) != null)
|
||||
then
|
||||
v.overrideAttrs (old: {
|
||||
makeFlags = (old.makeFlags or [ ]) ++ kernelPackages_.kernel.commonMakeFlags;
|
||||
postPatch = (if (old.postPatch or null) == null then "" else old.postPatch) + ''
|
||||
if [ -f Makefile ]; then
|
||||
substituteInPlace Makefile --replace "gcc" "cc"
|
||||
fi
|
||||
'';
|
||||
})
|
||||
else
|
||||
v
|
||||
) prev
|
||||
);
|
||||
|
||||
}
|
||||
46
kernel-cachyos/default.nix
Normal file
46
kernel-cachyos/default.nix
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
inputs,
|
||||
callPackage,
|
||||
lib,
|
||||
linux_latest,
|
||||
linux,
|
||||
...
|
||||
}:
|
||||
let
|
||||
mkCachyKernel = callPackage ./mkCachyKernel.nix { inherit inputs; };
|
||||
|
||||
batch =
|
||||
{
|
||||
pnameSuffix,
|
||||
version,
|
||||
src,
|
||||
configVariant,
|
||||
...
|
||||
}:
|
||||
[
|
||||
(mkCachyKernel {
|
||||
pnameSuffix = "${pnameSuffix}";
|
||||
inherit version src configVariant;
|
||||
lto = false;
|
||||
})
|
||||
(mkCachyKernel {
|
||||
pnameSuffix = "${pnameSuffix}-lto";
|
||||
inherit version src configVariant;
|
||||
lto = true;
|
||||
})
|
||||
];
|
||||
|
||||
batches = [
|
||||
(batch {
|
||||
pnameSuffix = "latest";
|
||||
inherit (linux_latest) version src;
|
||||
configVariant = "linux-cachyos";
|
||||
})
|
||||
(batch {
|
||||
pnameSuffix = "lts";
|
||||
inherit (linux) version src;
|
||||
configVariant = "linux-cachyos-lts";
|
||||
})
|
||||
];
|
||||
in
|
||||
builtins.listToAttrs (lib.flatten batches)
|
||||
88
kernel-cachyos/mkCachyKernel.nix
Normal file
88
kernel-cachyos/mkCachyKernel.nix
Normal file
@ -0,0 +1,88 @@
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
callPackage,
|
||||
buildLinux,
|
||||
stdenv,
|
||||
kernelPatches,
|
||||
linuxKernel,
|
||||
...
|
||||
}:
|
||||
{
|
||||
pnameSuffix,
|
||||
version,
|
||||
src,
|
||||
configVariant,
|
||||
lto,
|
||||
}:
|
||||
let
|
||||
helpers = callPackage ../helpers.nix { };
|
||||
inherit (helpers) stdenvLLVM ltoMakeflags kernelModuleLLVMOverride;
|
||||
|
||||
splitted = lib.splitString "-" version;
|
||||
ver0 = builtins.elemAt splitted 0;
|
||||
major = lib.versions.pad 2 ver0;
|
||||
|
||||
cachyosConfigFile = "${inputs.cachyos-kernel.outPath}/${configVariant}/config";
|
||||
|
||||
# buildLinux doesn't accept postPatch, so adding config file early here
|
||||
patchedSrc = stdenv.mkDerivation {
|
||||
pname = "linux-cachyos-${pnameSuffix}-src";
|
||||
inherit version src;
|
||||
patches = [
|
||||
kernelPatches.bridge_stp_helper.patch
|
||||
kernelPatches.request_key_helper.patch
|
||||
"${inputs.cachyos-kernel-patches.outPath}/${major}/all/0001-cachyos-base-all.patch"
|
||||
];
|
||||
postPatch = ''
|
||||
for DIR in arch/*/configs; do
|
||||
install -Dm644 ${cachyosConfigFile} $DIR/cachyos_defconfig
|
||||
done
|
||||
'';
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
dontFixup = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r * $out/
|
||||
'';
|
||||
};
|
||||
|
||||
kernelPackage = buildLinux {
|
||||
pname = "linux-cachyos-${pnameSuffix}";
|
||||
inherit version;
|
||||
src = patchedSrc;
|
||||
stdenv = if lto then stdenvLLVM else stdenv;
|
||||
|
||||
extraMakeFlags = lib.optionals lto ltoMakeflags;
|
||||
|
||||
defconfig = "cachyos_defconfig";
|
||||
|
||||
modDirVersion = "${ver0}";
|
||||
|
||||
# Clang has some incompatibilities with NixOS's default kernel config
|
||||
ignoreConfigErrors = lto;
|
||||
|
||||
structuredExtraConfig =
|
||||
with lib.kernel;
|
||||
(
|
||||
{
|
||||
NR_CPUS = lib.mkForce (option (freeform "8192"));
|
||||
}
|
||||
// lib.optionalAttrs lto {
|
||||
LTO_NONE = no;
|
||||
LTO_CLANG_THIN = yes;
|
||||
}
|
||||
);
|
||||
|
||||
extraMeta = {
|
||||
description = "Linux CachyOS Kernel" + lib.optionalString lto " with Clang+ThinLTO";
|
||||
};
|
||||
};
|
||||
in
|
||||
[
|
||||
(lib.nameValuePair "linux-cachyos-${pnameSuffix}" kernelPackage)
|
||||
(lib.nameValuePair "linuxPackages-cachyos-${pnameSuffix}" (
|
||||
kernelModuleLLVMOverride (linuxKernel.packagesFor kernelPackage)
|
||||
))
|
||||
]
|
||||
14
kernel-cachyos/packages.nix
Normal file
14
kernel-cachyos/packages.nix
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
mode ? null,
|
||||
callPackage,
|
||||
lib,
|
||||
linuxKernel,
|
||||
sources,
|
||||
...
|
||||
}:
|
||||
let
|
||||
kernels = callPackage ./default.nix { inherit mode sources; };
|
||||
in
|
||||
lib.mapAttrs (n: v: linuxKernel.packagesFor v) (
|
||||
lib.filterAttrs (n: nv: !lib.hasSuffix "configfile" n) kernels
|
||||
)
|
||||
Loading…
Reference in New Issue
Block a user