blackberry: nftables: input-lan: fix jumps
[julm/julm-nix.git] / hosts / aubergine / networking / lte.nix
index 16b8c47de93e00f00351d0e2b6802913d364cdb0..b1553833b66f86735fcf863fc6b003b2a6cb1f02 100644 (file)
@@ -1,7 +1,9 @@
-{ pkgs, config, ... }:
+{ pkgs, lib, config, ... }:
 with (import ./names-and-numbers.nix);
 let
   inherit (config.users) users;
+  modemmanager = pkgs.modemmanager-1-18;
+  #modemmanager = pkgs.modemmanager-1-20-4;
 in
 {
   networking.nftables.ruleset = ''
@@ -37,6 +39,12 @@ in
   '';
   services.mmsd.enable = true;
   services.mmsd.extraArgs = [ "--debug" ];
+  systemd.services.ModemManager.serviceConfig.ExecStart =
+    lib.mkForce [
+      ""
+      # See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/780
+      "${modemmanager}/bin/ModemManager --debug"
+    ];
   systemd.services.NetworkManager.wants = [ "ModemManager.service" ];
   services.dbus.packages = [ pkgs.dconf ];
   programs.dconf.enable = true;
@@ -48,6 +56,7 @@ in
       uuid=b223f550-dff1-4ba3-9755-cd4557faaa5a
       type=gsm
       autoconnect=true
+      autoconnect-priority=999
       autoconnect-retries=0
 
       [gsm]
@@ -71,9 +80,11 @@ in
     '';
   };
   systemd.services.watch-lte = {
-    wantedBy = [ "multi-user.target" ];
-    startAt = "*:0/5"; # every 5 min
-    path = with pkgs; [ inetutils networkmanager ];
+    after = [ "ModemManager.service" "NetworkManager.service" "NetworkManager-wait-online.service" ];
+    requires = [ "ModemManager.service" "NetworkManager.service" "NetworkManager-wait-online.service" ];
+    wantedBy = [ "network-online.target" ];
+    #startAt = "*:0/5"; # every 5 min
+    path = with pkgs; [ inetutils modemmanager networkmanager jq ];
     unitConfig = { StartLimitIntervalSec = 0; };
     serviceConfig = {
       Type = "simple";
@@ -81,22 +92,36 @@ in
       RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
       ExecStart = pkgs.writeShellScript "watch-lte" ''
         set -eux
-        ping -c 1 9.9.9.9 ||
-        nmcli connection up Prixtel
+        lastPONG=$(date +%s)
+        while sleep 5; do
+          if ping 9.9.9.9 --count 1 --linger 20 --interval 1 --quiet --numeric
+          then lastPONG=$(date +%s)
+          fi
+          if test $(( $(date +%s) - lastPONG )) -gt 300
+          then
+            modem=$(mmcli -L -J | jq -r '.["modem-list"][0]') || true
+            mmcli -m "$modem" --command "AT+CFUN=1,1" || true
+            sleep 10
+            systemctl restart ModemManager
+            sleep 10
+            nmcli connection up Prixtel
+            sleep 300
+          fi
+        done
       '';
       Restart = "on-failure";
-      RestartSec = "30s";
+      RestartSec = "10s";
     };
   };
   environment.systemPackages = [
     pkgs.modem-manager-gui
     pkgs.libmbim
     pkgs.chatty
-    pkgs.gnome.gnome-contacts
+    pkgs.gnome-contacts
     pkgs.picocom
     pkgs.tio
     pkgs.calls
-    pkgs.dfeet
+    pkgs.d-spy
     # https://gitlab.com/mobian1/callaudiod/-/issues/26
     # https://gitlab.com/mobian1/callaudiod/-/issues/27
     pkgs.callaudiod