checkpoint lol

This commit is contained in:
mjallen18
2025-12-29 15:13:52 -06:00
parent 67fb7d7323
commit 82e062a7e8
15 changed files with 394 additions and 144 deletions

View File

@@ -7,6 +7,11 @@
}:
let
cfg = config.${namespace}.hardware.raspberry-pi;
dt_ao_overlay = _final: prev: {
deviceTree = prev.deviceTree // {
applyOverlays = _final.callPackage ./apply-overlays-dtmerge.nix { };
};
};
in
{
options.${namespace}.hardware.raspberry-pi = {
@@ -19,13 +24,40 @@ in
];
description = "Raspberry Pi variant (4 or 5)";
};
apply-overlays-dtmerge = {
enable = lib.mkEnableOption "" // {
description = ''
Whether replace deviceTree.applyOverlays implementation to use dtmerge from libraspberrypi.
This can resolve issues with applying dtbs for the pi.
'';
};
};
};
imports = [
./leds.nix
];
config = lib.mkIf cfg.enable {
boot.initrd.availableKernelModules = lib.mkIf (cfg.variant == "5") [
"nvme"
];
boot = {
initrd.availableKernelModules = [
"usbhid"
"usb-storage"
] ++ (if (cfg.variant == "5") then [
"nvme"
] else
[
"vc4"
"pcie-brcmstb" # required for the pcie bus to work
"reset-raspberrypi" # required for vl805 firmware to load
]);
loader = {
generic-extlinux-compatible.enable = lib.mkDefault true;
grub.enable = lib.mkForce false;
};
};
# Common Raspberry Pi packages
environment.systemPackages = with pkgs; [
@@ -58,21 +90,65 @@ in
# Common hardware settings
hardware = {
i2c.enable = lib.mkDefault true;
deviceTree = {
filter = lib.mkDefault (if (cfg.variant == "5") then "bcm2712-rpi-*.dtb" else "bcm2711-rpi-*.dtb");
overlays = lib.mkIf (cfg.variant == "4") [
{
name = "rpi4-cpu-revision";
dtsText = ''
/dts-v1/;
/plugin/;
/ {
compatible = "raspberrypi,4-model-b";
fragment@0 {
target-path = "/";
__overlay__ {
system {
linux,revision = <0x00d03114>;
};
};
};
};
'';
}
{
name = "enable-xhci";
dtsText = ''
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2711";
fragment@0 {
//target-path = "/scb/xhci@7e9c0000";
target = <&xhci>;
__overlay__ {
status = "okay";
};
};
};
'';
}
];
};
firmware = [ pkgs.${namespace}.raspberryPiWirelessFirmware ];
graphics.enable32Bit = lib.mkForce false;
i2c.enable = lib.mkDefault true;
};
# Pi specific system tags
system.nixos.tags = (
let
bootCfg = config.boot.loader.raspberry-pi;
in
[
"raspberry-pi-${bootCfg.variant}"
bootCfg.bootloader
config.boot.kernelPackages.kernel.version
]
);
# system.nixos.tags = (
# let
# bootCfg = config.boot.loader.raspberry-pi;
# in
# [
# "raspberry-pi-${bootCfg.variant}"
# bootCfg.bootloader
# config.boot.kernelPackages.kernel.version
# ]
# );
# Common programs
programs.kdeconnect.enable = lib.mkDefault false;
@@ -164,6 +240,7 @@ in
++ [ "${pageSizeFlag}=14" ];
});
})
] else [ ]);
] else [ ])
++ (if cfg.apply-overlays-dtmerge.enable then [ dt_ao_overlay ] else [ ]);
};
}