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;
};