NixOS support for CM4

Okay, here are some of the key tweaks I made for the CM4 with the HackerGadgets AIO expansion board v1:

NixOS configuration snippets
# For RTL-SDR
hardware.rtl-sdr.enable = true;

# Any user that will use the RTL-SDR needs to be
# in the "plugdev" group. "spi" is for LoRa.
users.users.lunasspecto.extraGroups = [
  "plugdev"
  "spi"
];

# HackerGadgets LoRa
hardware.raspberry-pi.config.cm4.dt-overlays.spi1-1cs.enable = true;

# Enable HackerGadgets RTC
hardware.raspberry-pi.config.cm4.base-dt-params = {
  i2c_arm.enable = true;
  i2c_arm.value = "on";
};
hardware.raspberry-pi.config.cm4.dt-overlays.i2c-rtc = {
  enable = true;
  params = {
    pcf85063a.enable = true;
  };
};

# PPS output from HackerGadgets GNSS
hardware.raspberry-pi.config.cm4.dt-overlays.pps-gpio = {
  enable = true;
  params = {
    gpiopin = {
      enable = true;
      value = 6;
    };
  };
};

# We have to disable the getty serial console service
# on /dev/ttyS0 to allow HackerGadgets GNSS
# to work on the CM4
systemd.services."serial-getty@ttyS0".enable = false;

# Set up gpsd
services.gpsd = {
  enable = true;
  devices = [ "/dev/ttyS0" ];
  extraArgs = [
    "-s"
    "9600"
  ];
  nowait = true;
  readonly = false;
};
users.users.gpsd.extraGroups = [ "dialout" ];

# Use chronyd to set system time from GPS
services.timesyncd.enable = false;
services.chrony = {
  enable = true;
  extraConfig = ''
    refclock SHM 0 refid NMEA offset 0.200 precision 1e-3 poll 0 filter 3
    refclock PPS /dev/pps0 refid PPS lock NMEA offset 0.0 poll 3 trust
  '';
 };

# Set default screen rotation for X11
services.xserver.xrandrHeads = [
  {
    output = "DSI-1";
    monitorConfig = "Option \"Rotate\" \"right\"";
  }
];

# CM4 sound works better on PulseAudio
services.pulseaudio.enable = true;
security.rtkit.enable = true;
services.pipewire = {
  audio.enable = false;
  enable = false;
};