diff --git a/tongfang/nixos/hardware-configuration.nix b/tongfang/nixos/hardware-configuration.nix
index f10dad2..820a6f8 100644
--- a/tongfang/nixos/hardware-configuration.nix
+++ b/tongfang/nixos/hardware-configuration.nix
@@ -3,15 +3,24 @@
 # to /etc/nixos/configuration.nix instead.
 { config, lib, pkgs, modulesPath, ... }:
 
+let
+  yt6801Overlay = (final: prev: {
+    yt6801-driver = import ./yt6801-driver.nix {
+      inherit (pkgs) lib stdenv fetchurl kernel bc nukeReferences;
+    };
+  });
+in
 {
   imports =
     [ (modulesPath + "/installer/scan/not-detected.nix")
     ];
+  nixpkgs.overlays = [ yt6801Overlay ];
 
   boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ];
   boot.initrd.kernelModules = [ ];
   boot.kernelModules = [ "kvm-amd" ];
-  boot.extraModulePackages = [ ];
+  boot.extraModulePackages = [ pkgs.yt6801-driver ];
+  environment.systemPackages = with pkgs; [ yt6801-driver ];
 
   fileSystems."/" =
     { device = "/dev/disk/by-uuid/c7cf28c3-5744-45cc-8a81-456d24e44b7a";
diff --git a/tongfang/nixos/yt6801-driver.nix b/tongfang/nixos/yt6801-driver.nix
new file mode 100644
index 0000000..1e94d0d
--- /dev/null
+++ b/tongfang/nixos/yt6801-driver.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, kernel, bc, nukeReferences }:
+
+stdenv.mkDerivation rec {
+  pname = "yt6801-driver";
+  version = "${kernel.version}-unstable-2024-10-25";
+
+  src = fetchurl {
+    url = "https://www.motor-comm.com/Public/Uploads/uploadfile/files/20240812/yt6801-linux-driver-1.0.29.zip";
+    sha256 = "1r8r463y140vrkilkciba16864cfcm35kdqpby50bs8dwmw84gm3";
+  };
+
+  nativeBuildInputs = [ stdenv.lib.makeWrapper bc nukeReferences ] ++ kernel.moduleBuildDependencies;
+  hardeningDisable = [ "pic" "format" ];
+
+  postPatch = ''
+    substituteInPlace ./yt_nic_install.sh \
+      --replace "/lib/modules" "$out/lib/modules" \
+      --replace "/sbin/depmod" "# depmod"
+
+    substituteInPlace ./src/Makefile \
+      --replace "/lib/modules" "$out/lib/modules/${kernel.modDirVersion}" \
+      --replace "kernel/drivers/net/ethernet/motorcomm" "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm"
+  '';
+
+  makeFlags = [
+    "ARCH=${stdenv.hostPlatform.linuxArch}"
+    ("KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build")
+    ("EXTRA_CFLAGS=-Wall -g -I${kernel.dev}/include")
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+  ];
+
+  preInstall = ''
+    mkdir -p "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/ethernet/motorcomm"
+  '';
+
+  postInstall = ''
+    nuke-refs $out/lib/modules/*/kernel/drivers/net/ethernet/motorcomm/*.ko
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Motorcomm yt6801 Network Interface Card (NIC) driver";
+    homepage = "https://www.motor-comm.com/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bartvdbraak ];
+  };
+}