]> Git — Sourcephile - julm/julm-nix.git/blob - hosts/aubergine/networking/lte.nix
nix: use builtins.path to avoid changes when inputs.self changes
[julm/julm-nix.git] / hosts / aubergine / networking / lte.nix
1 { pkgs, lib, config, ... }:
2 with (import ./names-and-numbers.nix);
3 let
4 inherit (config.users) users;
5 in
6 {
7 networking.nftables.ruleset = ''
8 table inet filter {
9 chain input {
10 iifname ${lteIface} jump input-net
11 iifname ${lteIface} log level warn prefix "input-net: " counter drop
12 }
13 chain output-net {
14 ip daddr 10.151.0.1 tcp dport 8080 counter accept \
15 comment "mmsd: Prixtel/SFR"
16 }
17 chain output {
18 oifname ${lteIface} jump output-net
19 oifname ${lteIface} log level warn prefix "output-net: " counter drop
20 }
21 chain forward-to-net {
22 }
23 chain forward-from-net {
24 }
25 chain forward-to-net { }
26 chain forward-from-net { }
27 chain forward {
28 iifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } oifname ${lteIface} goto forward-to-net
29 iifname ${lteIface} oifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } goto forward-from-net
30 }
31 }
32 table inet nat {
33 chain postrouting {
34 iifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } oifname ${lteIface} masquerade
35 }
36 }
37 '';
38 services.mmsd.enable = true;
39 services.mmsd.extraArgs = [ "--debug" ];
40 systemd.services.ModemManager.serviceConfig.ExecStart =
41 lib.mkForce [
42 ""
43 "${pkgs.modemmanager-1-18}/bin/ModemManager --debug"
44 #"${pkgs.modemmanager-1-20-4}/bin/ModemManager --debug"
45 ];
46 systemd.services.NetworkManager.wants = [ "ModemManager.service" ];
47 services.dbus.packages = [ pkgs.dconf ];
48 programs.dconf.enable = true;
49 environment.etc."NetworkManager/system-connections/Prixtel.nmconnection" = {
50 mode = "600";
51 text = ''
52 [connection]
53 id=Prixtel
54 uuid=b223f550-dff1-4ba3-9755-cd4557faaa5a
55 type=gsm
56 autoconnect=true
57 autoconnect-retries=0
58
59 [gsm]
60 apn=sl2sfr
61 number=*99#
62 #home-only=true
63
64 [ppp]
65
66 [ipv4]
67 method=auto
68 dhcp-send-hostname=false
69
70 [ipv6]
71 method=auto
72 addr-gen-mode=stable-privacy
73 ip6-privacy=2
74 dhcp-send-hostname=false
75
76 [proxy]
77 '';
78 };
79 systemd.services.watch-lte = {
80 after = [ "NetworkManager-wait-online.service" ];
81 requires = [ "NetworkManager-wait-online.service" ];
82 wantedBy = [ "network-online.target" ];
83 #startAt = "*:0/5"; # every 5 min
84 path = with pkgs; [ inetutils networkmanager ];
85 unitConfig = { StartLimitIntervalSec = 0; };
86 serviceConfig = {
87 Type = "simple";
88 IPAddressAllow = [ "9.9.9.9" ];
89 RestrictAddressFamilies = [ "AF_INET" "AF_INET6" "AF_UNIX" ];
90 ExecStart = pkgs.writeShellScript "watch-lte" ''
91 set -ux
92 while sleep 300; do
93 ping -c 1 9.9.9.9 ||
94 nmcli connection up Prixtel
95 done
96 '';
97 Restart = "on-failure";
98 RestartSec = "30s";
99 };
100 };
101 environment.systemPackages = [
102 pkgs.modem-manager-gui
103 pkgs.libmbim
104 pkgs.chatty
105 pkgs.gnome.gnome-contacts
106 pkgs.picocom
107 pkgs.tio
108 pkgs.calls
109 pkgs.dfeet
110 # https://gitlab.com/mobian1/callaudiod/-/issues/26
111 # https://gitlab.com/mobian1/callaudiod/-/issues/27
112 pkgs.callaudiod
113 ];
114 }