diff --git a/machines/moby/default.nix b/machines/moby/default.nix index 8916f3cc..88fe8025 100644 --- a/machines/moby/default.nix +++ b/machines/moby/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, mobile-nixos, ... }: +{ config, pkgs, lib, mobile-nixos, ... }: { imports = [ # (import "${mobile-nixos}/lib/configuration.nix" { @@ -52,7 +52,72 @@ sane.impermanence.enable = true; sane.gui.phosh.enable = true; + # pinephone uses the linux dtb at arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi + # - this includes sun50i-a64.dtsi + # - and sun50i-a64-cpu-opp.dtsi + # - no need to touch the allwinner-h6 stuff: that's the SBC pine product + # - i think it's safe to ignore sun9i stuff, but i don't know what it is boot.kernelPackages = pkgs.linuxPackages_5_18; + boot.kernelPatches = + let + # use the last commit on the 5.18 branch (5.18.14) + # manjaro's changes between kernel patch versions tend to be minimal if any. + manjaroBase = "https://gitlab.manjaro.org/manjaro-arm/packages/core/linux/-/raw/25bd828cd47b1c6e09fcbcf394a649b89d2876dd"; + manjaroPatch = name: sha256: { + inherit name; + patch = pkgs.fetchpatch { + inherit name; + url = "${manjaroBase}/${name}?inline=false"; + inherit sha256; + }; + }; + in [ + # the idea for patching off Manjaro's kernel comes from jakewaksbaum: + # - https://git.sr.ht/~jakewaksbaum/pi/tree/af20aae5653545d6e67a459b59ee3e1ca8a680b0/item/kernel/default.nix + # - he later abandoned this, i think because he's using the Pinephone Pro which received mainline support. + (manjaroPatch + "1001-arm64-dts-allwinner-add-hdmi-sound-to-pine-devices.patch" + "sha256-DApd791A+AxB28Ven/MVAyuyVphdo8KQDx8O7oxVPnc=" + ) + # these patches below are critical to enable wifi (RTL8723CS) + # - the alternative is a wholly forked kernel by megi/megous: + # - https://xnux.eu/howtos/build-pinephone-kernel.html#toc-how-to-build-megi-s-pinehpone-kernel + # - i don't know if these patches are based on megi's or original + (manjaroPatch + "2001-Bluetooth-Add-new-quirk-for-broken-local-ext-features.patch" + "sha256-CExhJuUWivegxPdnzKINEsKrMFx/m/1kOZFmlZ2SEOc=" + ) + (manjaroPatch + "2002-Bluetooth-btrtl-add-support-for-the-RTL8723CS.patch" + "sha256-dDdvOphTcP/Aog93HyH+L9m55laTgtjndPSE4/rnzUA=" + ) + (manjaroPatch + "2004-arm64-dts-allwinner-enable-bluetooth-pinetab-pinepho.patch" + "sha256-o43P3WzXyHK1PF+Kdter4asuyGAEKO6wf5ixcco2kCQ=" + ) + # XXX: this one has a Makefile, which hardcodes /sbin/depmod: + # - drivers/staging/rtl8723cs/Makefile + # - not sure if this is problematic? + (manjaroPatch + "2005-staging-add-rtl8723cs-driver.patch" + "sha256-6ywm3dQQ5JYl60CLKarxlSUukwi4QzqctCj3tVgzFbo=" + ) + { + # defconfig options. this method comes from here: + # - https://discourse.nixos.org/t/the-correct-way-to-override-the-latest-kernel-config/533/9 + name = "sane-moby-defconfig"; + patch = null; + extraStructuredConfig = with lib.kernel; { + CONFIG_RTL8723CS = module; + # maybe: CONFIG_RTL_ODM_WLAN_DRIVER + # maybe: CONFIG_RTL_TRIBAND_SUPPORT + # maybe: CONFIG_SDIO_HCI + # maybe: CONFIG_USB_HCI + # maybe: CONFIG_RTL8XXXU=m + # maybe: CONFIG_RTL8XXXU_UNTESTED=y + }; + } + ]; boot.loader.efi.canTouchEfiVariables = false; # mobile.bootloader.enable = false;