2024-04-27 08:16:19 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.sane.programs.modemmanager;
|
|
|
|
in
|
|
|
|
{
|
2024-04-27 11:54:08 +00:00
|
|
|
sane.programs.modemmanager = {
|
|
|
|
# mmcli needs /run/current-system/sw/share/dbus-1 files to function
|
|
|
|
enableFor.system = lib.mkIf (builtins.any (en: en) (builtins.attrValues cfg.enableFor.user)) true;
|
|
|
|
};
|
2024-04-27 08:16:19 +00:00
|
|
|
|
|
|
|
systemd.services.ModemManager = lib.mkIf cfg.enabled {
|
2024-04-27 11:54:08 +00:00
|
|
|
aliases = [ "dbus-org.freedesktop.ModemManager1.service" ];
|
|
|
|
after = [ "polkit.service" ];
|
|
|
|
requires = [ "polkit.service" ];
|
|
|
|
wantedBy = [ "network.target" ];
|
2024-04-27 08:16:19 +00:00
|
|
|
serviceConfig = {
|
2024-04-27 11:54:08 +00:00
|
|
|
Type = "dbus";
|
|
|
|
BusName = "org.freedesktop.ModemManager1";
|
2024-04-27 08:16:19 +00:00
|
|
|
# only if started with `--debug` does mmcli let us issue AT commands like
|
|
|
|
# `mmcli --modem any --command=<AT_CMD>`
|
2024-04-27 11:54:08 +00:00
|
|
|
ExecStart = "${cfg.package}/bin/ModemManager --debug";
|
2024-04-27 08:16:19 +00:00
|
|
|
# --debug sets DEBUG level logging: so reset
|
2024-04-27 11:54:08 +00:00
|
|
|
ExecStartPost = "${cfg.package}/bin/mmcli --set-logging=INFO";
|
|
|
|
|
|
|
|
Restart = "on-abort";
|
|
|
|
StandardError = "null";
|
|
|
|
CapabilityBoundingSet = "CAP_SYS_ADMIN CAP_NET_ADMIN";
|
|
|
|
ProtectSystem = true;
|
|
|
|
ProtectHome = true;
|
|
|
|
PrivateTmp = true;
|
|
|
|
RestrictAddressFamilies = "AF_NETLINK AF_UNIX AF_QIPCRTR";
|
|
|
|
NoNewPrivileges = true;
|
2024-04-27 08:16:19 +00:00
|
|
|
};
|
|
|
|
};
|
2024-04-27 12:01:01 +00:00
|
|
|
|
|
|
|
# so that ModemManager can discover when the modem appears
|
|
|
|
services.udev.packages = lib.mkIf cfg.enabled [ cfg.package ];
|
2024-04-27 08:16:19 +00:00
|
|
|
}
|