Commit 8606f6c8 authored by Florian Klink's avatar Florian Klink
Browse files

nixos/modemmanager: support additional FCC unlock scripts

This commit introduces a `networking.networkmanager.fccUnlockScripts`
option, which allows specifying additional, usually vendor-provided
unlock scripts.

networking.networkmanager.enableBundledFccUnlockScripts is refactored to
make use of the same mechanism internally.
parent 0bfc763d
Loading
Loading
Loading
Loading
+36 −5
Original line number Diff line number Diff line
@@ -381,6 +381,27 @@ in
          for more details.
        '';
      };

      fccUnlockScripts = mkOption {
        type = types.listOf (types.submodule {
          options = {
            id = mkOption {
              type = types.str;
              description = lib.mdDoc "vid:pid of either the PCI or USB vendor and product ID";
            };
            path = mkOption {
              type = types.path;
              description = lib.mdDoc "Path to the unlock script";
            };
          };
        });
        default = [ ];
        example = literalExpression ''[{ name = "03f0:4e1d"; script = "''${pkgs.modemmanager}/share/ModemManager/fcc-unlock.available.d/03f0:4e1d"; }]'';
        description = lib.mdDoc ''
          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.
        '';
      };
    };
  };

@@ -425,11 +446,11 @@ in
        source = "${pkg}/lib/NetworkManager/${pkg.networkManagerPlugin}";
      })
      cfg.plugins)
    // optionalAttrs cfg.enableBundledFccUnlockScripts
      {
        "ModemManager/fcc-unlock.d".source =
          "${pkgs.modemmanager}/share/ModemManager/fcc-unlock.available.d/*";
      }
    // builtins.listToAttrs (map
      (e: nameValuePair "ModemManager/fcc-unlock.d/${e.id}" {
        source = e.path;
      })
      cfg.fccUnlockScripts)
    // optionalAttrs (cfg.appendNameservers != [ ] || cfg.insertNameservers != [ ])
      {
        "NetworkManager/dispatcher.d/02overridedns".source = overrideNameserversScript;
@@ -518,6 +539,16 @@ in
        ];
      }

      # if cfg.enableBundledFccUnlockScripts is set, populate
      # networking.networkmanager.fccUnlockScripts with the values from
      # pkgs.modemmanager.passthru.fccUnlockScripts.
      (mkIf cfg.enableBundledFccUnlockScripts {
        networkmanager.fccUnlockScripts = lib.optionals cfg.enableBundledFccUnlockScripts
          lib.mapAttrsToList
          (id: path: { inherit id path; })
          pkgs.modemmanager.passthru.fccUnlockScripts;
      })

      (mkIf cfg.enableStrongSwan {
        networkmanager.plugins = [ pkgs.networkmanager_strongswan ];
      })
+16 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
, python3
, libmbim
, libqmi
, modemmanager
, systemd
, bash-completion
, meson
@@ -93,6 +94,21 @@ stdenv.mkDerivation rec {
  '';
  installCheckTarget = "check";

  passthru = {
    # provided FCC unlock scripts. Used by the NixOS module system to symlink
    # to them from /etc/ModemManager/fcc-unlock.d/….
    # Most of them actually symlink to a "common" unlock script
    fccUnlockScripts = {
      "03f0:4e1d" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/1199";
      "105b:e0ab" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/105b";
      "1199:9079" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/1199";
      "1eac:1001" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/1eac";
      "2c7c:030a" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/2c7c";
      "413c:81a3" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/1199";
      "413c:81a8" = "${modemmanager}/share/ModemManager/fcc-unlock.available.d/1199";
    };
  };

  meta = with lib; {
    description = "WWAN modem manager, part of NetworkManager";
    homepage = "https://www.freedesktop.org/wiki/Software/ModemManager/";