-{ pkgs, lib, config, ... }:
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}:
with (import ./names-and-numbers.nix);
let
inherit (config.users) users;
+ modemmanager = pkgs.modemmanager-1-18;
in
+#modemmanager = pkgs.modemmanager-1-20-4;
{
networking.nftables.ruleset = ''
table inet filter {
'';
services.mmsd.enable = true;
services.mmsd.extraArgs = [ "--debug" ];
- systemd.services.ModemManager.serviceConfig.ExecStart =
- lib.mkForce [
- ""
- "${pkgs.modemmanager-1-18}/bin/ModemManager --debug"
- #"${pkgs.modemmanager-1-20-4}/bin/ModemManager --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;
autoconnect=true
autoconnect-priority=999
autoconnect-retries=0
- permissions=NULL
[gsm]
apn=sl2sfr
'';
};
systemd.services.watch-lte = {
- after = [ "NetworkManager-wait-online.service" ];
- requires = [ "NetworkManager-wait-online.service" ];
+ 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 networkmanager ];
- unitConfig = { StartLimitIntervalSec = 0; };
+ path = with pkgs; [
+ inetutils
+ jq
+ modemmanager
+ networkmanager
+ ];
+ unitConfig = {
+ StartLimitIntervalSec = 0;
+ };
serviceConfig = {
Type = "simple";
IPAddressAllow = [ "9.9.9.9" ];
- RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
ExecStart = pkgs.writeShellScript "watch-lte" ''
- set -ux
- while sleep 300; do
- ping -c 1 9.9.9.9 ||
- nmcli connection up Prixtel
+ set -eux
+ lastPONG=$(date +%s)
+ while sleep 5; do
+ if ping 9.9.9.9 --count 10 --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