diff --git a/mkosi/__init__.py b/mkosi/__init__.py index b694e971b..7dd5eb23f 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -1491,20 +1491,31 @@ def build_microcode_initrd(context: Context) -> list[Path]: return [microcode] -def finalize_kernel_modules_include(context: Context, *, include: Sequence[str], host: bool) -> set[str]: - final = {i for i in include if i not in ("default", "host")} - if "default" in include: - with chdir(context.resources / "mkosi-initrd"): - # TODO: figure out a way to propagate all relevant settings, not just arch - _, _, [initrd] = parse_config( - ["--architecture", str(context.config.architecture)], - resources=context.resources, - ) - final.update(initrd.kernel_modules_include) - if host or "host" in include: - final.update(loaded_modules()) +def finalize_kernel_modules_include(context: Context, *, include: Sequence[str], host: bool) -> list[str]: + final = [] + + host_included = False + if host: + final.extend(loaded_modules()) + host_included = True + + for p in include: + if p == "default": + with chdir(context.resources / "mkosi-initrd"): + # TODO: figure out a way to propagate all relevant settings, not just arch + _, _, [initrd] = parse_config( + ["--architecture", str(context.config.architecture)], + resources=context.resources, + ) + final.extend(initrd.kernel_modules_include) + elif p == "host" and not host_included: + final.extend(loaded_modules()) + host_included = True + else: + final.append(p) - return final + # deduplicate while maintaining ordering + return list({k: None for k in final}) def build_kernel_modules_initrd(context: Context, kver: str) -> Path: