{ lib
, callPackage
, linuxPackagesFor
, kernelPatches
, ... }:

let
  modDirVersion = "6.0.0";

  linuxPkg = { fetchFromGitHub, buildLinux, ... } @ args:
    buildLinux (args // {
      inherit modDirVersion kernelPatches;
      version = "${modDirVersion}-starfive-visionfive-v1";

      src = fetchFromGitHub {
        owner = "starfive-tech";
        repo = "linux";
        rev = "cfcb617265422c0af0ae5bc9688dceba2d10b27a";
        sha256 = "sha256-EAMCOtJZ51xSLySQPaZyomfa/1Xs9kNedz04tIbELqg=";
      };

      defconfig = "starfive_jh7100_fedora_defconfig";

      structuredExtraConfig = with lib.kernel; {
        KEXEC = yes;
        SERIAL_8250_DW = yes;
        PINCTRL_STARFIVE = yes;
        DW_AXI_DMAC_STARFIVE = yes;
        PTP_1588_CLOCK = yes;
        STMMAC_ETH = yes;
        STMMAC_PCI = yes;
      };

      extraMeta.branch = "visionfive";
    } // (args.argsOverride or { }));
in lib.recurseIntoAttrs (linuxPackagesFor (callPackage linuxPkg { }))