{
  inputs,
  self,
  namespace,
  ...
}:

final: prev:
let
  ubootPackages = final.callPackage ../../packages/uboot { };

  fetchFromGitHub = inputs.nixpkgs.fetchFromGitHub;

  linux618Src = fetchFromGitHub {
    owner = "raspberrypi";
    repo = "linux";
    rev = "bb594fb36f555f9b88b7b6fcf8b71c669c1d60c7";
    hash = "sha256-T3RJRroYtzLwx4JqcaX15Ka1uVf72jQOZMf7TJVZ6co=";
  };

  linux619Src = fetchFromGitHub {
    owner = "raspberrypi";
    repo = "linux";
    rev = "12e23f26704f66c154de58f80222960f02885570";
    hash = "sha256-C81aKv+pQYNx6Bj3PL0vrxvBzrLB99+95YeIBm+4kt0=";
  };

  linux-rpi5 = final.linuxPackagesFor (final.${namespace}.linux-rpi);

  linux-rpi4 = final.linuxPackagesFor (final.${namespace}.linux-rpi.override {
    rpiVersion = 4;
  });
in
{
  ${namespace} = prev.${namespace} // {
    uboot-pi5 = ubootPackages.ubootRaspberryPi5;
    uboot-pi4 = ubootPackages.ubootRaspberryPi4;

    linuxPackages_rpi5-lts = linux-rpi5;
    linuxPackages_rpi4-lts = linux-rpi4;
    linuxPackages_rpi5-latest = linux-rpi5.overrideAttrs (old: {
      modDirVersion = "6.18.4";
      src = linux618Src;
    });
    linuxPackages_rpi5-rc = linux-rpi5.overrideAttrs (old: {
      modDirVersion = "6.19.0-rc5";
      src = linux619Src;
    });
    linuxPackages_rpi4-latest = linux-rpi4.overrideAttrs (old: {
      modDirVersion = "6.18.4";
      src = linux618Src;
    });
    linuxPackages_rpi4-rc = linux-rpi4.overrideAttrs (old: {
      modDirVersion = "6.19.0-rc5";
      src = linux619Src;
    });
  };
}
