{
  kernel,
  stdenv,
  lib,
  fetchzip,
}:

stdenv.mkDerivation {
  pname = "yt6801";
  version = "1.0.29";

  src = fetchzip {
    url = "https://www.motor-comm.com/Public/Uploads/uploadfile/files/20240812/yt6801-linux-driver-1.0.29.zip";
    sha256 = "sha256-oz6CeOUN6QWKXxe3WUZljhGDTFArsknjzBuQ4IchGeU=";
    stripRoot = false;
  };

  nativeBuildInputs = kernel.moduleBuildDependencies;

  preConfigure = "cd src";

  configurePhase = "true";

  buildFlags = [ "modules" ];

  makeFlags =
    [
      "ARCH=${stdenv.hostPlatform.linuxArch}"
      "KSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
    ]
    ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
      "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
    ];

  installPhase = ''
    mkdir -p $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm
    cp src/yt6801.ko $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm/
  '';

  enableParallelBuilding = true;

  meta = with lib; {
    description = "Motorcomm yt6801 Network Interface Card driver";
    homepage = "https://www.motor-comm.com/product/ethernet-control-chip";
    license = with licenses; [
      gpl2Plus
      gpl2Only
    ];
    platforms = platforms.linux;
  };
}