476 lines
13 KiB
Nix
476 lines
13 KiB
Nix
{
|
|
cachyConfig,
|
|
fetchFromGitHub,
|
|
fetchurl,
|
|
lib,
|
|
stdenv,
|
|
kernel,
|
|
ogKernelConfigfile,
|
|
commonMakeFlags,
|
|
}:
|
|
let
|
|
version = if stdenv.isAarch64 then "6.12.47" else cachyConfig.versions.linux.version;
|
|
|
|
majorMinor = lib.versions.majorMinor version;
|
|
|
|
patches-src = fetchFromGitHub {
|
|
owner = "CachyOS";
|
|
repo = "kernel-patches";
|
|
inherit (cachyConfig.versions.patches) rev hash;
|
|
};
|
|
|
|
config-src = fetchFromGitHub {
|
|
owner = "CachyOS";
|
|
repo = "linux-cachyos";
|
|
inherit (cachyConfig.versions.config) rev hash;
|
|
};
|
|
|
|
src =
|
|
if cachyConfig.taste == "linux-cachyos-rc" then
|
|
fetchurl {
|
|
url = "https://git.kernel.org/torvalds/t/linux-${version}.tar.gz";
|
|
inherit (cachyConfig.versions.linux) hash;
|
|
}
|
|
else
|
|
(
|
|
if stdenv.isAarch64 then
|
|
let
|
|
tag = "stable_20250916";
|
|
hash = "sha256-Rjn+eWl5cLcc9wgjS3HYVaWM5eKMN3pPfPbsu+QGR/M=";
|
|
in
|
|
fetchurl {
|
|
url = "https://github.com/raspberrypi/linux/archive/refs/tags/${tag}.tar.gz";
|
|
hash = hash;
|
|
}
|
|
else
|
|
fetchurl {
|
|
url = "mirror://kernel/linux/kernel/v${lib.versions.major version}.x/linux-${
|
|
if version == "${majorMinor}.0" then majorMinor else version
|
|
}.tar.xz";
|
|
inherit (cachyConfig.versions.linux) hash;
|
|
}
|
|
);
|
|
|
|
schedPatches =
|
|
if cachyConfig.cpuSched == "eevdf" then
|
|
[ ]
|
|
else if cachyConfig.cpuSched == "hardened" then
|
|
[ ] # BORE disabled in CachyOS/linux-cachyos/commit/4ffae8ab9947f35495dfa7b62b7a22f023488dfb
|
|
else if (cachyConfig.cpuSched == "cachyos" || cachyConfig.cpuSched == "sched-ext") then
|
|
lib.optionals (lib.strings.versionOlder majorMinor "6.12") [
|
|
"${patches-src}/${majorMinor}/sched/0001-sched-ext.patch"
|
|
]
|
|
++ lib.optionals (cachyConfig.cpuSched == "cachyos" && version != "6.17-rc1") [
|
|
"${patches-src}/${majorMinor}/sched/0001-bore-cachy.patch"
|
|
]
|
|
else
|
|
throw "Unsupported cachyos _cpu_sched=${toString cachyConfig.cpuSched}";
|
|
|
|
patches = [
|
|
"${patches-src}/${majorMinor}/all/0001-cachyos-base-all.patch"
|
|
]
|
|
++ schedPatches
|
|
++ lib.optional (
|
|
cachyConfig.cpuSched == "hardened"
|
|
) "${patches-src}/${majorMinor}/misc/0001-hardened.patch";
|
|
|
|
# There are some configurations set by the PKGBUILD
|
|
pkgbuildConfig =
|
|
with cachyConfig;
|
|
basicCachyConfig
|
|
++ mArchConfig
|
|
++ cpuSchedConfig
|
|
++ [
|
|
"-m CONFIG_CRYPTO_BLAKE2B"
|
|
# _nr_cpus, defaults to empty, which later set this
|
|
"--set-val NR_CPUS 320"
|
|
|
|
# _per_gov, defaults to empty [but PERSONAL CHANGE to "y"]
|
|
"-d CPU_FREQ_DEFAULT_GOV_SCHEDUTIL"
|
|
"-e CPU_FREQ_DEFAULT_GOV_PERFORMANCE"
|
|
|
|
# _tcp_bbr3, defaults to "y"
|
|
"-m TCP_CONG_CUBIC"
|
|
"-d DEFAULT_CUBIC"
|
|
"-e TCP_CONG_BBR"
|
|
"-e DEFAULT_BBR"
|
|
"--set-str DEFAULT_TCP_CONG bbr"
|
|
"-m NET_SCH_FQ_CODEL"
|
|
"-e NET_SCH_FQ"
|
|
"-d DEFAULT_FQ_CODEL"
|
|
"-e DEFAULT_FQ"
|
|
"--set-str DEFAULT_NET_SCH fq"
|
|
|
|
# Nixpkgs don't support this
|
|
"-d CONFIG_SECURITY_TOMOYO"
|
|
]
|
|
++ ltoConfig
|
|
++ ticksHzConfig
|
|
++ tickRateConfig
|
|
++ preemptConfig
|
|
++ [
|
|
# _cc_harder, defaults to "y"
|
|
"-d CC_OPTIMIZE_FOR_PERFORMANCE"
|
|
"-e CC_OPTIMIZE_FOR_PERFORMANCE_O3"
|
|
|
|
# _lru_config, defaults to "standard"
|
|
"-e LRU_GEN"
|
|
"-e LRU_GEN_ENABLED"
|
|
"-d LRU_GEN_STATS"
|
|
|
|
# _vma_config, defaults to "standard"
|
|
"-e PER_VMA_LOCK"
|
|
"-d PER_VMA_LOCK_STATS"
|
|
]
|
|
++ hugePagesConfig
|
|
++ damonConfig
|
|
++ ntSyncConfig
|
|
++ hdrConfig
|
|
++ disableDebug
|
|
++ pageSizeConfig;
|
|
|
|
# _cachy_config, defaults to "y"
|
|
basicCachyConfig = lib.optional cachyConfig.basicCachy "-e CACHY";
|
|
|
|
# _processor_opt config, defaults to ""
|
|
mArchConfig =
|
|
if cachyConfig.mArch == null then
|
|
[ ]
|
|
else if cachyConfig.mArch == "NATIVE" then
|
|
[
|
|
"-d GENERIC_CPU"
|
|
"-d MZEN4"
|
|
"-e X86_NATIVE_CPU"
|
|
]
|
|
else if cachyConfig.mArch == "ZEN4" then
|
|
[
|
|
"-d GENERIC_CPU"
|
|
"-e MZEN4"
|
|
"-d X86_NATIVE_CPU"
|
|
]
|
|
else if builtins.match "GENERIC_V[1-4]" cachyConfig.mArch != null then
|
|
let
|
|
v = lib.strings.removePrefix "GENERIC_V" cachyConfig.mArch;
|
|
in
|
|
[
|
|
"-e GENERIC_CPU"
|
|
"-d MZEN4"
|
|
"-d X86_NATIVE_CPU"
|
|
"--set-val X86_64_VERSION ${v}"
|
|
]
|
|
else
|
|
throw "Unsuppoted cachyos mArch";
|
|
|
|
# _cpusched, defaults to "cachyos"
|
|
cpuSchedConfig =
|
|
if cachyConfig.cpuSched == "eevdf" then
|
|
[ ]
|
|
else if cachyConfig.cpuSched == "hardened" then
|
|
[ "-e SCHED_BORE" ]
|
|
else if cachyConfig.cpuSched == "sched-ext" then
|
|
[ "-e SCHED_CLASS_EXT" ]
|
|
else if cachyConfig.cpuSched == "cachyos" then
|
|
[
|
|
"-e SCHED_BORE"
|
|
"-e SCHED_CLASS_EXT"
|
|
]
|
|
else
|
|
throw "Unsupported cachyos scheduler";
|
|
|
|
# _HZ_ticks, defaults to "500"
|
|
ticksHzConfig =
|
|
if cachyConfig.ticksHz == 300 then
|
|
[
|
|
"-e HZ_300"
|
|
"--set-val HZ 300"
|
|
]
|
|
else
|
|
[
|
|
"-d HZ_300"
|
|
"--set-val HZ ${toString cachyConfig.ticksHz}"
|
|
"-e HZ_${toString cachyConfig.ticksHz}"
|
|
];
|
|
|
|
# _use_llvm_lto, defaults to "none"
|
|
ltoConfig =
|
|
if cachyConfig.useLTO == "thin" then
|
|
[
|
|
"-e LTO"
|
|
"-e LTO_CLANG"
|
|
"-e ARCH_SUPPORTS_LTO_CLANG"
|
|
"-e ARCH_SUPPORTS_LTO_CLANG_THIN"
|
|
"-d LTO_NONE"
|
|
"-e HAS_LTO_CLANG"
|
|
"-d LTO_CLANG_FULL"
|
|
"-e LTO_CLANG_THIN"
|
|
"-e HAVE_GCC_PLUGINS"
|
|
]
|
|
else if cachyConfig.useLTO == "full" then
|
|
[
|
|
"-e LTO"
|
|
"-e LTO_CLANG"
|
|
"-e ARCH_SUPPORTS_LTO_CLANG"
|
|
"-e ARCH_SUPPORTS_LTO_CLANG_THIN"
|
|
"-d LTO_NONE"
|
|
"-e HAS_LTO_CLANG"
|
|
"-e LTO_CLANG_FULL"
|
|
"-d LTO_CLANG_THIN"
|
|
"-e HAVE_GCC_PLUGINS"
|
|
]
|
|
else if cachyConfig.useLTO == "none" then
|
|
[ ]
|
|
else
|
|
throw "Unsupported cachyos _use_llvm_lto";
|
|
|
|
# _tickrate defaults to "full"
|
|
tickRateConfig =
|
|
if cachyConfig.tickRate == "idle" then
|
|
[
|
|
"-d HZ_PERIODIC"
|
|
"-d NO_HZ_FULL"
|
|
"-e NO_HZ_IDLE"
|
|
"-e NO_HZ"
|
|
"-e NO_HZ_COMMON"
|
|
]
|
|
else if cachyConfig.tickRate == "full" then
|
|
[
|
|
"-d HZ_PERIODIC"
|
|
"-d NO_HZ_IDLE"
|
|
"-d CONTEXT_TRACKING_FORCE"
|
|
"-e NO_HZ_FULL_NODEF"
|
|
"-e NO_HZ_FULL"
|
|
"-e NO_HZ"
|
|
"-e NO_HZ_COMMON"
|
|
"-e CONTEXT_TRACKING"
|
|
]
|
|
else
|
|
throw "Unsupported cachyos _tickrate";
|
|
|
|
# _preempt, defaults to "full"
|
|
preemptConfig =
|
|
if cachyConfig.preempt == "full" then
|
|
[
|
|
"-e PREEMPT_BUILD"
|
|
"-d PREEMPT_NONE"
|
|
"-d PREEMPT_VOLUNTARY"
|
|
"-e PREEMPT"
|
|
"-e PREEMPT_COUNT"
|
|
"-e PREEMPTION"
|
|
"-e PREEMPT_DYNAMIC"
|
|
]
|
|
else if cachyConfig.preempt == "server" then
|
|
[
|
|
"-e PREEMPT_NONE_BUILD"
|
|
"-e PREEMPT_NONE"
|
|
"-d PREEMPT_VOLUNTARY"
|
|
"-d PREEMPT"
|
|
"-d PREEMPTION"
|
|
"-d PREEMPT_DYNAMIC"
|
|
]
|
|
else
|
|
throw "Unsupported cachyos _preempt";
|
|
|
|
# _hugepage, defaults to "always"
|
|
hugePagesConfig =
|
|
if cachyConfig.hugePages == "always" then
|
|
[
|
|
"-d TRANSPARENT_HUGEPAGE_MADVISE"
|
|
"-e TRANSPARENT_HUGEPAGE_ALWAYS"
|
|
]
|
|
else if cachyConfig.hugePages == "madvise" then
|
|
[
|
|
"-d TRANSPARENT_HUGEPAGE_ALWAYS"
|
|
"-e TRANSPARENT_HUGEPAGE_MADVISE"
|
|
]
|
|
else
|
|
throw "Unsupported cachyos _hugepage";
|
|
|
|
pageSizeConfig =
|
|
if cachyConfig.pageSize == "16k" then
|
|
[
|
|
"-e CONFIG_SRAM"
|
|
"-e CONFIG_HISI_HIKEY_USB"
|
|
"-e CONFIG_OPEN_DICE"
|
|
"-e CONFIG_VCPU_STALL_DETECTOR"
|
|
"-e CONFIG_EEPROM_AT25"
|
|
"-e CONFIG_EEPROM_93XX46"
|
|
"-e CONFIG_TI_ST"
|
|
"-e CONFIG_SENSORS_LIS3_SPI"
|
|
"-e CONFIG_ECHO"
|
|
# RP1
|
|
"-e CONFIG_FIRMWARE_RP1"
|
|
"-e CONFIG_RP1_PIO"
|
|
"-e CONFIG_WS2812_PIO_RP1"
|
|
"-e CONFIG_PWM_PIO_RP1"
|
|
"-e CONFIG_PWM_RP1"
|
|
"-e CONFIG_PINCTRL_RP1"
|
|
"-e CONFIG_MFD_RP1"
|
|
"-e CONFIG_SENSORS_RP1_ADC"
|
|
"-e CONFIG_VIDEO_RP1_CFE"
|
|
"-e CONFIG_DRM_RP1_DSI"
|
|
"-e CONFIG_DRM_RP1_DPI"
|
|
"-e CONFIG_DRM_RP1_VEC"
|
|
"-e CONFIG_SND_RP1_AUDIO_OUT"
|
|
"-e CONFIG_COMMON_CLK_RP1"
|
|
"-e CONFIG_COMMON_CLK_RP1_SDIO"
|
|
"-e CONFIG_MBOX_RP1"
|
|
|
|
"-e CONFIG_PINCTRL_BCM2712"
|
|
"-e CONFIG_PINCTRL_BCM2835"
|
|
"-e CONFIG_ARCH_BCM"
|
|
"-e CONFIG_ARCH_BCM2835"
|
|
"-e CONFIG_ARCH_BRCMSTB"
|
|
"-e CONFIG_AHCI_BRCM"
|
|
"-e CONFIG_BRCMUTIL"
|
|
"-e CONFIG_BRCMSMAC"
|
|
"-e CONFIG_BRCMFMAC"
|
|
"-e CONFIG_BRCMFMAC_PROTO_BCDC"
|
|
"-e CONFIG_BRCMFMAC_PROTO_MSGBUF"
|
|
"-e CONFIG_BRCMFMAC_SDIO"
|
|
"-e CONFIG_BRCMFMAC_USB"
|
|
"-e CONFIG_BRCMFMAC_PCIE"
|
|
"-e CONFIG_BRCMDBG"
|
|
"-e CONFIG_BRCM_CHAR_DRIVERS"
|
|
"-e CONFIG_BCM2708_VCMEM"
|
|
"-e CONFIG_BCM_VCIO"
|
|
"-e CONFIG_GPIO_BCM_VIRT"
|
|
"-e CONFIG_GPIO_BRCMSTB"
|
|
"-e CONFIG_BRCM_USB_PINMAP"
|
|
"-e CONFIG_MMC_SDHCI_BRCMSTB"
|
|
"-e CONFIG_RTC_DRV_BRCMSTB"
|
|
"-e CONFIG_SOC_BRCMSTB"
|
|
"-e CONFIG_PWM_BRCMSTB"
|
|
"-e CONFIG_BCM2712_MIP"
|
|
"-e CONFIG_BCM7120_L2_IRQ"
|
|
"-e CONFIG_BRCMSTB_L2_IRQ"
|
|
"-e CONFIG_RESET_BRCMSTB"
|
|
"-e CONFIG_RESET_BRCMSTB_RESCAL"
|
|
"-e CONFIG_PHY_BRCM_USB"
|
|
"-e CONFIG_ARCH_BRCMSTB"
|
|
"-e CONFIG_ARM_BRCMSTB_AVS_CPUFREQ"
|
|
|
|
# Raspberry Pi
|
|
"-d CONFIG_ARM64_4K_PAGES"
|
|
"-e CONFIG_ARM64_16K_PAGES"
|
|
"-e CONFI`G_ARM_RASPBERRYPI_CPUFREQ"
|
|
"-e CONFIG_RASPBERRYPI_FIRMWARE"
|
|
"-e CONFIG_TOUCHSCREEN_RASPBERRYPI_FW"
|
|
"-e CONFIG_RASPBERRYPI_GPIOMEM"
|
|
"-e CONFIG_GPIO_RASPBERRYPI_EXP"
|
|
"-e CONFIG_SENSORS_RASPBERRYPI_HWMON"
|
|
"-e CONFIG_MFD_RASPBERRYPI_POE_HAT"
|
|
"-e CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY"
|
|
"-e CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2"
|
|
"-e CONFIG_VIDEO_RASPBERRYPI_PISP_BE"
|
|
"-e CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN"
|
|
"-e CONFIG_CLK_RASPBERRYPI"
|
|
"-e CONFIG_RASPBERRYPI_POWER"
|
|
"-e CONFIG_PWM_RASPBERRYPI_POE"
|
|
"-e CONFIG_RESET_RASPBERRYPI"
|
|
"-e CONFIG_ARCH_HAS_RESET_CONTROLLER"
|
|
"-e CONFIG_NVMEM_RASPBERRYPI_OTP"
|
|
"-e CONFIG_CPUFREQ_DT"
|
|
"-e CONFIG_CPUFREQ_DT_PLATDEV"
|
|
"-e CONFIG_ARM_SCPI_CPUFREQ"
|
|
"-e CONFIG_ARM_BRCMSTB_AVS_CPUFREQ"
|
|
"-e CONFIG_ARM_RASPBERRYPI_CPUFREQ"
|
|
"-e CONFIG_ARM_SCMI_CPUFREQ"
|
|
"-e KVM"
|
|
"-e NET_9P_USBG"
|
|
"-e GPIO_PALMAS"
|
|
"-e CROS_EC_PROTO"
|
|
]
|
|
else if cachyConfig.pageSize == "4k" then
|
|
[ ]
|
|
else
|
|
throw "Unsupported cachyos _hugepage";
|
|
|
|
# _damon, defaults to empty
|
|
damonConfig = lib.optionals cachyConfig.withDAMON [
|
|
"-e DAMON"
|
|
"-e DAMON_VADDR"
|
|
"-e DAMON_DBGFS"
|
|
"-e DAMON_SYSFS"
|
|
"-e DAMON_PADDR"
|
|
"-e DAMON_RECLAIM"
|
|
"-e DAMON_LRU_SORT"
|
|
];
|
|
|
|
# _ntsync, defaults to empty
|
|
ntSyncConfig = lib.optionals cachyConfig.withNTSync [ "-m NTSYNC" ];
|
|
|
|
# custom made
|
|
hdrConfig = lib.optionals cachyConfig.withHDR [ "-e AMD_PRIVATE_COLOR" ];
|
|
|
|
# https://github.com/CachyOS/linux-cachyos/issues/187
|
|
disableDebug =
|
|
lib.optionals
|
|
(
|
|
cachyConfig.withoutDebug && cachyConfig.cpuSched != "sched-ext" && cachyConfig.cpuSched != "cachyos"
|
|
)
|
|
[
|
|
"-d DEBUG_INFO"
|
|
"-d DEBUG_INFO_BTF"
|
|
"-d DEBUG_INFO_DWARF4"
|
|
"-d DEBUG_INFO_DWARF5"
|
|
"-d PAHOLE_HAS_SPLIT_BTF"
|
|
"-d DEBUG_INFO_BTF_MODULES"
|
|
"-d SLUB_DEBUG"
|
|
"-d PM_DEBUG"
|
|
"-d PM_ADVANCED_DEBUG"
|
|
"-d PM_SLEEP_DEBUG"
|
|
"-d ACPI_DEBUG"
|
|
"-d SCHED_DEBUG"
|
|
"-d LATENCYTOP"
|
|
"-d DEBUG_PREEMPT"
|
|
];
|
|
in
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
inherit src patches;
|
|
name = "linux-cachyos-config";
|
|
nativeBuildInputs = kernel.nativeBuildInputs ++ kernel.buildInputs;
|
|
|
|
makeFlags = commonMakeFlags;
|
|
|
|
postPhase = ''
|
|
${finalAttrs.passthru.extraVerPatch}
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
echo ${cachyConfig.taste}
|
|
cp "${config-src}/${cachyConfig.taste}/config" ".config"
|
|
make $makeFlags olddefconfig
|
|
patchShebangs scripts/config
|
|
scripts/config ${lib.concatStringsSep " " pkgbuildConfig}
|
|
make $makeFlags olddefconfig
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
cp .config $out
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = ogKernelConfigfile.meta // {
|
|
# at the time of this writing, they don't have config files for aarch64
|
|
platforms = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
};
|
|
|
|
passthru = {
|
|
inherit cachyConfig commonMakeFlags stdenv;
|
|
kernelPatches = patches;
|
|
extraVerPatch = ''
|
|
sed -Ei"" 's/EXTRAVERSION = ?(.*)$/EXTRAVERSION = \1${cachyConfig.versions.suffix}/g' Makefile
|
|
'';
|
|
};
|
|
})
|