diff --git a/hosts/raspberry-pi5/hardware.nix b/hosts/raspberry-pi5/hardware.nix index b1d8e86..82f3b80 100644 --- a/hosts/raspberry-pi5/hardware.nix +++ b/hosts/raspberry-pi5/hardware.nix @@ -84,11 +84,14 @@ in { ]; boot = { - kernelPackages = pkgs.linuxPackages_rpi4; + kernelPackages = pkgs.linuxPackages_rpi5; supportedFilesystems = mkForce ["vfat"]; kernelParams = [ "kunit.enable=0" + "console=ttyS0,115200n8" + "console=tty0" + "ip=192.168.178.26::192.168.178.1:255.255.255.0:raspberry:end0:any" "boot.shell_on_fail" "nohibernate" diff --git a/outputs.nix b/outputs.nix index 21dd35a..8d57c08 100644 --- a/outputs.nix +++ b/outputs.nix @@ -49,6 +49,7 @@ in inherit (pkgs) mk-enc-usb mk-encrypted-drive; inherit (pkgs) gotosocial mpd-headless; inherit (pkgs) kitty-terminfo; + inherit (pkgs) linux_rpi5; inherit (inputs.home-manager-unstable.packages."${system}") home-manager; }; } diff --git a/overlay/default.nix b/overlay/default.nix index 47f0b5b..d497583 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -12,6 +12,15 @@ final: prev: rec { vault = prev.vault-bin; + linux_rpi5 = final.callPackage ./linux-rpi5.nix { + kernelPatches = with final.kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + }; + + linuxPackages_rpi5 = final.linuxPackagesFor linux_rpi5; + mpd-headless = (prev.mpdWithFeatures.override { ffmpeg = final.ffmpeg_6-headless; diff --git a/overlay/linux-rpi5.nix b/overlay/linux-rpi5.nix new file mode 100644 index 0000000..1e940bb --- /dev/null +++ b/overlay/linux-rpi5.nix @@ -0,0 +1,82 @@ +{ + lib, + fetchFromGitHub, + buildLinux, + fetchpatch, + ... +} @ args: let + # NOTE: raspberrypifw & raspberryPiWirelessFirmware should be updated with this + modDirVersion = "6.6.31"; + tag = "stable_20240529"; +in + lib.overrideDerivation (buildLinux (args + // { + version = "${modDirVersion}-${tag}"; + inherit modDirVersion; + + src = fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = tag; + hash = "sha256-4Rc57y70LmRFwDnOD4rHoHGmfxD9zYEAwYm9Wvyb3no="; + }; + + defconfig = "bcm2712_defconfig"; + + features = + { + efiBootStub = false; + } + // (args.features or {}); + + kernelPatches = + (args.kernelPatches or []) + ++ [ + # Fix "WARNING: unmet direct dependencies detected for MFD_RP1", and + # subsequent build failure. + # https://github.com/NixOS/nixpkgs/pull/268280#issuecomment-1911839809 + # https://github.com/raspberrypi/linux/pull/5900 + { + name = "drm-rp1-depends-on-instead-of-select-MFD_RP1.patch"; + patch = fetchpatch { + url = "https://github.com/peat-psuwit/rpi-linux/commit/6de0bb51929cd3ad4fa27b2a421a2af12e6468f5.patch"; + hash = "sha256-9pHcbgWTiztu48SBaLPVroUnxnXMKeCGt5vEo9V8WGw="; + }; + } + + # Fix `ERROR: modpost: missing MODULE_LICENSE() in <...>/bcm2712-iommu.o` + # by preventing such code from being built as module. + # https://github.com/NixOS/nixpkgs/pull/284035#issuecomment-1913015802 + # https://github.com/raspberrypi/linux/pull/5910 + { + name = "iommu-bcm2712-don-t-allow-building-as-module.patch"; + patch = fetchpatch { + url = "https://github.com/peat-psuwit/rpi-linux/commit/693a5e69bddbcbe1d1b796ebc7581c3597685b1b.patch"; + hash = "sha256-8BYYQDM5By8cTk48ASYKJhGVQnZBIK4PXtV70UtfS+A="; + }; + } + ]; + + extraMeta = { + platforms = with lib.platforms; arm ++ aarch64; + hydraPlatforms = ["aarch64-linux"]; + }; + } + // (args.argsOverride or {}))) (_oldAttrs: { + postConfigure = '' + # The v7 defconfig has this set to '-v7' which screws up our modDirVersion. + sed -i $buildRoot/.config -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/' + sed -i $buildRoot/include/config/auto.conf -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/' + ''; + + postFixup = '' + dtbDir=$out/dtbs/broadcom + + rm $dtbDir/bcm283*.dtb + copyDTB() { + cp -v "$dtbDir/$1" "$dtbDir/$2" + } + + copyDTB bcm2711-rpi-4-b.dtb bcm2838-rpi-4-b.dtb + ''; + }) diff --git a/profiles/nixos/logitech.nix b/profiles/nixos/logitech.nix index dbb2423..f547563 100644 --- a/profiles/nixos/logitech.nix +++ b/profiles/nixos/logitech.nix @@ -1 +1,6 @@ -{...}: { hardware.logitech.wireless = { enable = true; enableGraphical = true; }; } \ No newline at end of file +{...}: { + hardware.logitech.wireless = { + enable = true; + enableGraphical = true; + }; +} diff --git a/profiles/nixos/remoteBuilders.nix b/profiles/nixos/remoteBuilders.nix index ab4ec95..cf55a05 100644 --- a/profiles/nixos/remoteBuilders.nix +++ b/profiles/nixos/remoteBuilders.nix @@ -35,7 +35,7 @@ in { { hostName = "hetzner-arm.servers.genderfucked.monster"; systems = ["aarch64-linux"]; - supportedFeatures = ["native-arm64"]; + supportedFeatures = ["native-arm64" "big-parallel"]; publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUk5cGM0REU1UlV4UUp2T1pwenFOQWVac0JlRW1kcmp4OFlnV3orVXBMckcgcm9vdEBoZXR6bmVyLWFybQo="; maxJobs = 3; speedFactor = 1; @@ -46,7 +46,7 @@ in { { hostName = "raspberry-pi5.servers.genderfucked.monster"; systems = ["aarch64-linux"]; - supportedFeatures = ["native-arm64"]; + supportedFeatures = ["native-arm64" "big-parallel"]; publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUNZNFpuQ1NVeWpjOHR3UXVpMzhwU21qdHluSVZUVnFiNzB5blNRa0Z3anYgcm9vdEByYXNwYmVycnkK"; maxJobs = 4; speedFactor = 4;