{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
  };

  outputs = { self, nixpkgs }:
    let
      system = "x86_64-linux";
      crossSystem = "aarch64-linux";
      pkgs = import nixpkgs {
        inherit system;

        overlays = [
          (self: super: {
            systemd = super.systemd.override {
              pname = "systemd-minimal";
              withAcl = false;
              withAnalyze = false;
              withApparmor = false;
              withAudit = false;
              withCompression = false;
              withCoredump = false;
              withCryptsetup = false;
              withDocumentation = false;
              withEfi = false;
              withFido2 = false;
              withHostnamed = false;
              withHomed = false;
              withImportd = false;
              withLibBPF = false;
              withLibidn2 = false;
              withLocaled = false;
              withMachined = false;
              withNetworkd = false;
              withNss = false;
              withOomd = false;
              withPCRE2 = false;
              withPolkit = false;
              withPortabled = false;
              withRemote = false;
              withResolved = false;
              withShellCompletions = false;
              withTimedated = false;
              withTimesyncd = false;
              withTpm2Tss = false;
              withUserDb = false;
              # This is necessary for any installation
              # withPam = false;
              # withHwdb = false;
              # withLogind = false;
            };

            libaom = super.libaom.override {
              enableButteraugli = false;
            };

            pin_control = self.callPackage ./pin_control { };
          })
        ];

        crossSystem = {
          gcc.cpu = "cortex-a53";
          config = "aarch64-unknown-linux-gnu";
          linux-kernel = {
            DTB = true;
            autoModules = true;
            baseConfig = "defconfig";

            extraConfig = ''
              # Raspberry Pi 3 stuff. Not needed for   s >= 4.10.
              ARCH_BCM2835 y
              BCM2835_MBOX y
              BCM2835_WDT y
              RASPBERRYPI_FIRMWARE y
              RASPBERRYPI_POWER y
              SERIAL_8250_BCM2835AUX y
              SERIAL_8250_EXTENDED y
              SERIAL_8250_SHARE_IRQ y

              # Cavium ThunderX stuff.
              PCI_HOST_THUNDER_ECAM y
              
              # Nvidia Tegra stuff.
              PCI_TEGRA y
              
              # The default (=y) forces us to have the XHCI firmware available in initrd,
              # which our initrd builder can't currently do easily.
              USB_XHCI_TEGRA m
            '';

            name = "aarch64-multiplatform";
            preferBuiltin = true;
            target = "Image";
          };
        };
      };
    in
    {
      packages.${crossSystem} = pkgs;

      nixosConfigurations.triviOS = nixpkgs.lib.nixosSystem {
        inherit pkgs;
        system = crossSystem;
        modules = [ ./triviOS ];
      };

      formatter.${system} = pkgs.pkgsBuildBuild.nixpkgs-fmt;
    };
}
