nix/systems/nixos-fw16/mini_kernel.nix

47 lines
1.8 KiB
Nix

{ inputs
, lib
, pkgs
, ...
}:
let
mainVersions = lib.importJSON "${inputs.chaotic}/pkgs/linux-cachyos/versions.json";
mainConfig = import "${inputs.chaotic}/pkgs/linux-cachyos/config-nix/cachyos.x86_64-linux.nix";
usedModules = builtins.readFile ./modprobed.db;
toLowerParts = list: (lib.lists.unique
(lib.lists.flatten
(builtins.map
(elem: (lib.strings.splitString "_" (lib.strings.toLower elem)))
list)));
usedModuleNames = builtins.map (x: lib.strings.toLower x) (lib.strings.splitString "\n" usedModules);
usedModuleNameParts = toLowerParts usedModuleNames;
filterParts = [ "crypto" "intel" "hid" "drm" "x86" "64" "" ];
usedModuleNamePartsFiltered = (lib.lists.partition (elem: !(builtins.elem elem filterParts)) usedModuleNameParts).right;
usedModuleNamePartsTrace = builtins.trace usedModuleNameParts usedModuleNamePartsFiltered;
filteredConfig = builtins.listToAttrs (
builtins.map
(attr:
let
no_conf_key = builtins.replaceStrings [ "CONFIG_" ] [ "" ] attr.name;
in
{
name = attr.name;
value =
if
attr.value
== "m"
&& !(builtins.elem (lib.strings.toLower no_conf_key) usedModuleNames)
&& ((lib.lists.intersectLists (toLowerParts [ no_conf_key ]) usedModuleNamePartsFiltered) == [ ])
then "n"
else attr.value;
})
(builtins.attrValues (builtins.mapAttrs (name: value: { inherit name value; }) mainConfig))
);
mkCachyKernel = attrs: pkgs.callPackage ./pkgs-for.nix ({ versions = mainVersions; } // attrs);
mainKernel = mkCachyKernel {
inherit inputs;
taste = "linux-cachyos";
kConfig = filteredConfig;
withUpdateScript = "stable";
};
in
mainKernel