{ config, lib, pkgs, namespace, ... }: let inherit (lib.${namespace}) mkOpt mkBoolOpt; cfg = config.${namespace}.hardware.raspberry-pi.overlays; firmware = pkgs.${namespace}.raspberrypifw; configfsPath = "/sys/kernel/config/device-tree/overlays"; in { options.${namespace}.hardware.raspberry-pi.overlays = with lib; { pi5DisableWifi = { enable = lib.mkEnableOption "Disable wifi on Pi5"; overlay = mkOpt types.str "${firmware}/boot/overlays/disable-wifi-pi5.dtbo" "Location of the dtbo file"; }; }; # audremap-pi5.dtbo # disable-bt-pi5.dtbo # disable-wifi-pi5.dtbo # i2c0-pi5.dtbo # i2c1-pi5.dtbo # i2c2-pi5.dtbo # i2c3-pi5.dtbo # imx500-pi5.dtbo # midi-uart0-pi5.dtbo # midi-uart1-pi5.dtbo # midi-uart2-pi5.dtbo # midi-uart3-pi5.dtbo # midi-uart4-pi5.dtbo # pcie-32bit-dma-pi5.dtbo # pciex1-compat-pi5.dtbo # pisound-pi5.dtbo # sdio-pi5.dtbo # spi2-1cs-pi5.dtbo # spi2-2cs-pi5.dtbo # spi3-1cs-pi5.dtbo # spi3-2cs-pi5.dtbo # spi5-1cs-pi5.dtbo # spi5-1cs.dtbo # spi5-2cs-pi5.dtbo # spi5-2cs.dtbo # tc358743-pi5.dtbo # uart0-pi5.dtbo # uart1-pi5.dtbo # uart2-pi5.dtbo # uart3-pi5.dtbo # uart4-pi5.dtbo # vc4-kms-v3d-pi5.dtbo # w1-gpio-pi5.dtbo # w1-gpio-pullup-pi5.dtbo config = { systemd.services = { apply-overlays = { description = "Apply Raspberry Pi Device Tree Overlays"; script = '' echo "Applying Device Tree Overlays via ConfigFS" if [ ${if cfg.pi5DisableWifi.enable then "true" else "false"} ]; then mkdir ${toString configfsPath}/disable-wifi-pi5 cp ${cfg.pi5DisableWifi.overlay} ${configfsPath}/disable-wifi-pi5/dtbo fi ''; wantedBy = [ "multi-user.target" ]; }; }; }; }