# # This loads the list of networks as a NixOS wpa_supplicant compatible attrset # let sources = import ../../npins; lib = import (sources.nixpkgs + "/lib"); # wpa_supplicant uses `strchr` to seek to the first `=`, so the only forbidden character is `=`. escapePwdKey = lib.replaceStrings [ "=" ] [ "_" ]; go = networkArgs@{ ssid, # Custom fields wrapping nixpkgs module options hasPassword ? false, scanOnLowSignal ? false, randomizeMac ? false, # TODO: adapt to the 25.11 interface bssid ? null, ... }: { ${ssid} = lib.mkMerge [ (builtins.removeAttrs networkArgs [ "ssid" "hasPassword" "scanOnLowSignal" "randomizeMac" "bssid" ]) (lib.optionalAttrs hasPassword { pskRaw = "ext:${escapePwdKey ssid}"; }) { extraConfig = '' ${lib.optionalString scanOnLowSignal "bgscan=\"simple:30:-70:3600\""} ${lib.optionalString randomizeMac "mac_addr=1"} ${lib.optionalString (bssid != null) "bssid=\"${bssid}\""} ''; } ]; }; in ns: lib.mkMerge (map go ns)