From 5ee644e9dd4cdd710cdd35246817555a0c35ffb2 Mon Sep 17 00:00:00 2001 From: Hermes Date: Fri, 12 Jun 2026 16:36:49 -0400 Subject: [PATCH] feat(uconsole): add rpi-cross-overlay module + Lix - rpi-cross-overlay.nix: override pkgs.rpi with cross-compilation when buildPlatform != hostPlatform (0 QEMU) - Lix nix daemon for uConsole (aarch64-linux) - Remove broken inline overlay from flake.nix --- flake.nix | 5 ++++ modules/nixos/rpi-cross-overlay.nix | 40 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 modules/nixos/rpi-cross-overlay.nix diff --git a/flake.nix b/flake.nix index ef6ec8f..9ab4335 100644 --- a/flake.nix +++ b/flake.nix @@ -115,6 +115,7 @@ } # nixos-raspberrypi — crée pkgs.rpi avec kernel/firmware cross-compilés nixos-raspberrypi.nixosModules.nixpkgs-rpi + nixos-raspberrypi.nixosModules.raspberry-pi-5.base { nixpkgs.overlays = [ nixos-raspberrypi.overlays.bootloader @@ -130,6 +131,10 @@ nixos-uconsole.nixosModules.configtxt (nixos-uconsole.nixosModules.cm { lib = nixpkgs-uconsole.lib; isCM4 = false; }) nixos-uconsole.nixosModules.base + # Cross-compile pkgs.rpi (0 QEMU) + ./modules/nixos/rpi-cross-overlay.nix + # Lix instead of CppNix + { nix.package = lix.packages."aarch64-linux".default; } # agenix pour déchiffrer les secrets au déploiement agenix.nixosModules.default # Notre config diff --git a/modules/nixos/rpi-cross-overlay.nix b/modules/nixos/rpi-cross-overlay.nix new file mode 100644 index 0000000..c6363f4 --- /dev/null +++ b/modules/nixos/rpi-cross-overlay.nix @@ -0,0 +1,40 @@ +# rpi-cross-overlay.nix +# +# Override pkgs.rpi to cross-compile when buildPlatform != hostPlatform. +# +# By default, nixos-raspberrypi's nixpkgs-rpi module creates pkgs.rpi via +# mkRpiPkgs which imports nixpkgs with system="aarch64-linux" — a NATIVE +# aarch64 build that requires QEMU on x86_64 builders. +# +# This module detects cross-compilation (buildPlatform != hostPlatform) and +# re-imports pkgs.rpi using localSystem (builder) + crossSystem (target) so +# that kernel, firmware, and rpi-optimized packages are genuinely cross-compiled +# with zero QEMU emulation. +# +# Once nixos-raspberrypi upstream supports buildPlatform natively in mkRpiPkgs, +# this module can be removed. + +{ config, lib, pkgs, nixos-raspberrypi, ... }: + +let + inherit (config.nixpkgs) buildPlatform hostPlatform; + isCross = buildPlatform.system != hostPlatform.system; +in +lib.mkIf isCross { + nixpkgs.overlays = [ + (final: prev: { + rpi = import pkgs.path { + localSystem = { system = buildPlatform.system; }; + crossSystem = { system = hostPlatform.system; }; + overlays = with nixos-raspberrypi.overlays; [ + bootloader + vendor-kernel + vendor-firmware + kernel-and-firmware + vendor-pkgs + pkgs + ]; + }; + }) + ]; +}