nix/systems/nixos-fw16/mini_kernel.nix

51 lines
1.8 KiB
Nix

{ inputs
, lib
, pkgs
, ...
}:
let
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))
);
patchConfigStep1 = lib.attrsets.mapAttrs ((name: value: {
${builtins.removePrefix "CONFIG_" name} = value;
})
filteredConfig);
patchConfigFinal = lib.attrsets.filterAttrs ((n: v: v == "n") patchConfigStep1);
patch = {
name = "disable-unused-kmods";
patch = null;
extraStructuredConfig = patchConfigFinal;
};
in
{
patch = patch;
}