mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-03 21:40:12 +00:00
The FCC unlock scripts use a few helpers not automatically included with systemd, which we need to set up the service path for. Two of the scripts that come from upstream use awk and xxd, which were missing in the list. That made the script mistakenly yield an empty response, which ultimately makes the unlock fail. As of today, this fix covers the MediaTek T700, sold e.g. with the ThinkPad X1 Yoga Gen 8 as Fibocom FM350-GL.
103 lines
2.7 KiB
Nix
103 lines
2.7 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.networking.modemmanager;
|
|
in
|
|
{
|
|
meta = {
|
|
teams = [ lib.teams.freedesktop ];
|
|
};
|
|
|
|
options = with lib; {
|
|
networking.modemmanager = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to use ModemManager to manage modem devices.
|
|
This is usually used by some higher layer manager such as NetworkManager
|
|
but can be used standalone especially if using a modem for non-IP
|
|
connectivity (e.g. GPS).
|
|
'';
|
|
};
|
|
|
|
package = mkPackageOption pkgs "modemmanager" { };
|
|
|
|
fccUnlockScripts = mkOption {
|
|
type = types.listOf (
|
|
types.submodule {
|
|
options = {
|
|
id = mkOption {
|
|
type = types.str;
|
|
description = "vid:pid of either the PCI or USB vendor and product ID";
|
|
};
|
|
path = mkOption {
|
|
type = types.path;
|
|
description = "Path to the unlock script";
|
|
};
|
|
};
|
|
}
|
|
);
|
|
default = [ ];
|
|
example = literalExpression ''[{ id = "03f0:4e1d"; path = "''${pkgs.modemmanager}/share/ModemManager/fcc-unlock.available.d/03f0:4e1d"; }]'';
|
|
description = ''
|
|
List of FCC unlock scripts to enable on the system, behaving as described in
|
|
https://modemmanager.org/docs/modemmanager/fcc-unlock/#integration-with-third-party-fcc-unlock-tools.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
environment.etc = builtins.listToAttrs (
|
|
map (
|
|
e:
|
|
lib.nameValuePair "ModemManager/fcc-unlock.d/${e.id}" {
|
|
source = e.path;
|
|
}
|
|
) cfg.fccUnlockScripts
|
|
);
|
|
|
|
systemd.services.ModemManager = {
|
|
aliases = [ "dbus-org.freedesktop.ModemManager1.service" ];
|
|
path = lib.optionals (cfg.fccUnlockScripts != [ ]) (
|
|
with pkgs;
|
|
[
|
|
gawk
|
|
libmbim
|
|
libqmi
|
|
xxd
|
|
]
|
|
);
|
|
};
|
|
|
|
/*
|
|
[modem-manager]
|
|
Identity=unix-group:networkmanager
|
|
Action=org.freedesktop.ModemManager*
|
|
ResultAny=yes
|
|
ResultInactive=no
|
|
ResultActive=yes
|
|
*/
|
|
security.polkit.enable = true;
|
|
security.polkit.extraConfig = ''
|
|
polkit.addRule(function(action, subject) {
|
|
if (
|
|
subject.isInGroup("networkmanager")
|
|
&& action.id.indexOf("org.freedesktop.ModemManager") == 0
|
|
)
|
|
{ return polkit.Result.YES; }
|
|
});
|
|
'';
|
|
|
|
environment.systemPackages = [ cfg.package ];
|
|
systemd.packages = [ cfg.package ];
|
|
services.dbus.packages = [ cfg.package ];
|
|
services.udev.packages = [ cfg.package ];
|
|
};
|
|
}
|