# Configuration common to all Raspberry Pi 2 Model B devices
{
  config,
  pkgs,
  lib,
  ...
}: {
  boot = {
    consoleLogLevel = lib.mkDefault 7;
    initrd = {
      availableKernelModules = [
        "bcm2835_dma" # Allows early (earlier) mode setting
        "i2c_bcm2835" # Allows early (earlier) mode setting
        "usbhid"
        "usb_storage"
        "vc4" # Allows early (earlier) mode setting
      ];
    };
    kernelPackages = pkgs.linuxPackages_latest; # For a Raspberry Pi 2 or 3)
    kernelParams = [
      "console=ttyS0,115200n8" # Enable the serial console
      "console=ttyAMA0,115200n8"
      "console=tty0"
    ];
    loader = {
      generic-extlinux-compatible = {
        enable = true; # Enables the generation of /boot/extlinux/extlinux.conf
      };
      grub = {
        enable = false; # NixOS wants to enable GRUB by default.
      };
      raspberryPi = {
        enable = true;
        version = 3;
        firmwareConfig = ''
          hdmi_force_hotplug=1   # Enable headless booting
        '';
      };
    };
  };

  # File systems configuration for using the installer's partition layout
  fileSystems = {
    "/" = {
      device = "/dev/disk/by-label/NIXOS_SD";
      fsType = "ext4";
    };
    "/boot/firmware" = {
      device = "/dev/disk/by-label/FIRMWARE";
      fsType = "vfat";
      # Alternatively, this could be removed from the configuration.
      # The filesystem is not needed at runtime, it could be treated
      # as an opaque blob instead of a discrete FAT32 filesystem.
      options = ["nofail" "noauto"];
    };
    "/var" = {
      device = "/dev/disk/by-label/var";
      fsType = "ext4";
    };
  };

  # !!! Adding a swap file is optional, but strongly recommended!
  swapDevices = [
    {
      device = "/swapfile";
      size = 1024;
    }
  ];

  hardware = {
    enableRedistributableFirmware = true; # Enable support for Pi firmware blobs
  };

  networking = {
    enableB43Firmware = false; # If true, enable Pi wireless firmware
  };

  sound.enable = false; # Disable sound.

  environment.systemPackages = with pkgs; [
    libraspberrypi # Userland tools for the Raspberry Pi board
  ];
}