{ lib, callPackage, linuxPackagesFor, _kernelPatches ? [], }: let linux-asahi-pkg = { stdenv, lib, fetchFromGitHub, buildLinux, ... }: buildLinux rec { inherit stdenv lib; pname = "linux-asahi-fairydust"; version = "6.18.4"; modDirVersion = version; extraMeta.branch = "6.18"; src = fetchFromGitHub { owner = "AsahiLinux"; repo = "linux"; rev = "19a39556851eb80470b760452f946b8cac046363"; hash = "sha256-86TT1VcBAYB66My5QqMI5xsa3IMzNKrL/zkhEGtRvnI="; }; kernelPatches = [ { name = "Asahi config"; patch = null; structuredExtraConfig = with lib.kernel; { # Needed for GPU ARM64_16K_PAGES = yes; ARM64_MEMORY_MODEL_CONTROL = yes; ARM64_ACTLR_STATE = yes; # Might lead to the machine rebooting if not loaded soon enough APPLE_WATCHDOG = yes; APPLE_MAILBOX = yes; APPLE_RTKIT = yes; APPLE_RTKIT_HELPER = yes; RUST_APPLE_RTKIT = yes; RUST_FW_LOADER_ABSTRACTIONS = yes; # Can not be built as a module, defaults to no APPLE_M1_CPU_PMU = yes; # Defaults to 'y', but we want to allow the user to set options in modprobe.d HID_APPLE = module; APPLE_PMGR_MISC = yes; APPLE_PMGR_PWRSTATE = yes; }; features.rust = true; } ] ++ _kernelPatches; }; linux-asahi = callPackage linux-asahi-pkg {}; in lib.recurseIntoAttrs (linuxPackagesFor linux-asahi)