2022-11-27 18:27:47 -05:00

63 lines
2.2 KiB
Nix

# the Asahi Linux kernel and options that must go along with it
{ config, pkgs, lib, ... }:
{
config = {
boot.kernelPackages = pkgs.callPackage ./package.nix {
crossBuild = config.boot.kernelBuildIsCross;
_16KBuild = config.boot.kernelBuildIs16K;
};
# we definitely want to use CONFIG_ENERGY_MODEL, and
# schedutil is a prerequisite for using it
# source: https://www.kernel.org/doc/html/latest/scheduler/sched-energy.html
powerManagement.cpuFreqGovernor = lib.mkOverride 800 "schedutil";
# our kernel config is weird and doesn't really have any modules
# remove?
# boot.initrd.availableKernelModules = lib.mkForce [];
boot.initrd.availableKernelModules = lib.mkForce [ "dm_crypt" ];
boot.kernelParams = [
"earlycon"
"console=ttySAC0,1500000"
"console=tty0"
"boot.shell_on_fail"
# Apple's SSDs are slow (~dozens of ms) at processing flush requests which
# slows down programs that make a lot of fsync calls. This parameter sets
# a delay in ms before actually flushing so that such requests can be
# coalesced. Be warned that increasing this parameter above zero (default
# is 1000) has the potential, though admittedly unlikely, risk of
# UNBOUNDED data corruption in case of power loss!!!! Don't even think
# about it on desktops!!
"nvme_apple.flush_interval=1000"
];
# U-Boot does not support EFI variables
boot.loader.efi.canTouchEfiVariables = lib.mkForce false;
# GRUB has to be installed as removable if the user chooses to use it
boot.loader.grub = lib.mkDefault {
version = 2;
efiSupport = true;
efiInstallAsRemovable = true;
device = "nodev";
};
};
options.boot.kernelBuildIsCross = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Set that the Asahi Linux kernel should be cross-compiled.";
};
options.boot.kernelBuildIs16K = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Set that the Asahi Linux kernel should be built with 16K pages and various
software patched to be compatible. Some software may still be broken.
'';
};
}