diff --git a/modules/wwan/default.nix b/modules/wwan/default.nix
index bd1f794d..a676d2f1 100644
--- a/modules/wwan/default.nix
+++ b/modules/wwan/default.nix
@@ -2,6 +2,10 @@
 let
   inherit (pkgs) liminix;
   inherit (lib) mkOption types;
+  huawei-cdc-ncm = pkgs.kmodloader.override {
+    targets = ["huawei_cdc_ncm"];
+    inherit (config.system.outputs) kernel;
+  };
 in {
   imports = [
     ../service-trigger
@@ -14,18 +18,28 @@ in {
   };
   config = {
     kernel.config = {
-      USB_NET_HUAWEI_CDC_NCM = "y";
+      USB_NET_HUAWEI_CDC_NCM = "m";
       USB_USBNET = "y";
       USB_SERIAL = "y";
       USB_SERIAL_OPTION = "y";
     };
 
     # https://www.0xf8.org/2017/01/flashing-a-huawei-e3372h-4g-lte-stick-from-hilink-to-stick-mode/
-    system.service.wwan.huawei-e3372 = config.system.callService ./huawei-e3372.nix {
-      apn = mkOption { type = types.str; };
-      username = mkOption { type = types.str; };
-      password = mkOption { type = types.str; };
-      authType = mkOption { type = types.enum [ "pap" "chap" ]; };
-    };
+    system.service.wwan.huawei-e3372 =
+      let svc = config.system.callService ./huawei-e3372.nix {
+            apn = mkOption { type = types.str; };
+            username = mkOption { type = types.str; };
+            password = mkOption { type = types.str; };
+            authType = mkOption { type = types.enum [ "pap" "chap" ]; };
+          };
+      in
+        svc // {
+          build = args :
+            let args' = args // {
+                  dependencies = (args.dependencies or []) ++
+                                 [huawei-cdc-ncm];
+                };
+            in svc.build args' ;
+        };
   };
 }