{ config, lib, pkgs, ... }:

with lib;
let
  networkOpts = { network, ... }: {
    options = {
      network = mkOption {
        type = types.str;
        description = "Name of wireless network.";
        default = network;
      };

      key = mkOption {
        type = types.str;
        description = "Secret key for wireless network.";
      };
    };
  };

in {
  options.fudo.wireless-networks = mkOption {
    type = with types; attrsOf (submodule networkOpts);
    description = "A map of wireless networks to attributes (including key).";
    default = { };
  };

  config = {
    networking.wireless.networks =
      mapAttrs (network: networkOpts: { psk = networkOpts.key; })
      config.fudo.wireless-networks;
  };
}