nix-files/pkgs/additional/linux-postmarketos-exynos5/default.nix

107 lines
3.4 KiB
Nix

{ lib
, linux ? linux_6_1, linux_6_1
, linuxManualConfig
, optimizeForSize ? false
, useEdpPanel ? false #< use `edp-panel` driver in snow device tree (fails to fix graphics)
, revertPanelSimplePatch ? false #< revert the commit which removed B116XW03 panel from panel-edp driver (fixes display output)
, sane-kernel-tools
, writeTextFile
#v nixpkgs calls `.override` on the kernel to configure additional things
, features ? []
, randstructSeed ? ""
, ...
}@args:
let
defconfigPmos = builtins.readFile ./config-postmarketos-exynos5.arm7;
patches = {
useEdpPanel = {
name = "snow: use edp-panel driver";
patch = ./snow-panel-fix.patch;
};
revertPanelSimplePatch = {
name = "revert ad3e33fe071dffea07279f96dab4f3773c430fe2, and get snow to use edp-panel again";
patch = ./snow-panel-revert-b116xw03.patch;
};
};
# remove CONFIG_LOCALVERSION else nixpkgs complains about mismatched modDirVersion
withoutOsFlavor = defconfig: lib.replaceStrings
[ ''CONFIG_LOCALVERSION="-postmarketos-exynos5"'' ]
[ ''CONFIG_LOCALVERSION='' ]
defconfig
;
# XXX(2024/06/06): if this module is loaded before udev, then kernel panic.
# see: <repo:NixOS/mobile-nixos:devices/families/mainline-chromeos/default.nix>
withModuleFixes = defconfig: lib.replaceStrings
[ ''CONFIG_BATTERY_SBS=y'' ]
[ ''CONFIG_BATTERY_SBS=m'' ]
defconfig
;
withOptimizations = defconfig: if optimizeForSize then
lib.replaceStrings
[ ''CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y'' ]
# XXX(2024/06/06): if the bzImage is too large, it fails to boot.
# probably an issue with the uboot relocations; not sure exactly what the size limit is.
# XXX(2024/06/08): it now boots fine with the stock optimizations, though the difference in size is only 500KiB (about 10%).
# perhaps this was mis-diagnosed
[ ''CONFIG_CC_OPTIMIZE_FOR_SIZE=y'' ]
defconfig
else
defconfig
;
withNixosRequirements = defconfig: defconfig + ''
#
# Extra nixpkgs-specific options
# nixos/modules/system/boot/systemd.nix wants CONFIG_DMIID
# nixos/modules/services/hardware/udev.nix wants CONFIG_MODULE_COMPRESS_ZSTD
#
CONFIG_DMIID=y
CONFIG_MODULE_COMPRESS_ZSTD=y
CONFIG_DRM_LIMA=y
CONFIG_DRM_MALI_DISPLAY=m
#
# Extra sane-specific options
#
CONFIG_SECURITY=y
CONFIG_SECURITY_LANDLOCK=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,selinux,smack,tomoyo,apparmor,bpf";
'';
defconfigStr = withNixosRequirements (
withOptimizations (
withModuleFixes (
withoutOsFlavor (
defconfigPmos
)
)
)
);
in (linuxManualConfig {
inherit (linux) extraMakeFlags modDirVersion src version;
inherit features randstructSeed;
kernelPatches = (args.kernelPatches or []) ++ lib.optionals useEdpPanel [
patches.useEdpPanel
] ++ lib.optionals revertPanelSimplePatch [
patches.revertPanelSimplePatch
];
configfile = writeTextFile {
name = "config-postmarketos-exynos5.arm7";
text = defconfigStr;
};
# nixpkgs requires to know the config as an attrset, to do various eval-time assertions.
# this forces me to include the defconfig inline, instead of fetching it the way i do all the other pmOS kernel stuff.
config = sane-kernel-tools.parseDefconfig defconfigStr;
}).overrideAttrs (base: {
passthru = (base.passthru or {}) // {
sanePatches = patches;
};
})