{ config, lib, pkgs, ... }:

with pkgs;

{
  # A bunch of boot parameters needed for optimal runtime on RPi 4B
  boot.kernelPackages = linuxPackages_rpi4;
  boot.kernelParams = [
    "zfs.zfs_arc_max=134217728"
    "console=TTYAMA0,115200"
    "console=tty1"
    "8250.nr_uarts=1"
    "iomem=relaxed"
    "strict-devmem=0"
  ];

  # Enable SATA-HAT GPIO features
  boot.loader.grub.enable = false;
  boot.loader.raspberryPi = {
    enable = true;
    version = 4;
    firmwareConfig = ''
      iomem=relaxed
      strict-devmem=0
      dtoverlay=pwm-2chan,pin=12,func=4,pin2=13,func2=4
      dtoverlay=w1-gpio
      dtparam=i2c1=on
    '';
  };

  # Load PWM hardware timers
  boot.kernelModules = [ "pwm_bcm2835" "w1-gpio" "w1-therm" ];
  hardware.deviceTree = {
    enable = true;
    filter = "*-rpi-*.dtb";
    overlays = [
      {
        name = "pwm-2chan";
        dtboFile = "${device-tree_rpi.overlays}/pwm-2chan.dtbo";
      }
      {
        name = "w1-gpio";
        dtboFile = "${device-tree_rpi.overlays}/w1-gpio.dtbo";
      }
    ];
  };

  # Enable I2C
  hardware.i2c.enable = true;

}