{ config, lib, namespace, ... }: with lib; let cfg = config.${namespace}.network; in { options.${namespace}.network = with types; { hostName = lib.mkOption { type = str; default = "nixos"; description = "The hostname of the system."; }; ipv4 = { method = mkOption { type = types.str; default = "auto"; }; address = lib.mkOption { type = types.str; default = "10.0.1.1"; }; gateway = lib.mkOption { type = types.str; default = "10.0.1.1"; }; dns = lib.mkOption { type = types.str; default = "10.0.1.1"; }; }; }; config = { networking = { hostName = lib.mkForce cfg.hostName; # Enable Network Manager networkmanager = { enable = true; wifi.powersave = lib.mkDefault false; settings.connectivity.uri = lib.mkDefault "http://nmcheck.gnome.org/check_network_status.txt"; ensureProfiles = { environmentFiles = [ config.sops.secrets.wifi.path ]; profiles = { "Joey's Jungle 6G" = { connection = { id = "Joey's Jungle 6G"; type = "wifi"; }; ipv4 = if (cfg.ipv4.method == "auto") then { method = "auto"; } else { address1 = cfg.ipv4.address; dns = cfg.ipv4.dns; gateway = cfg.ipv4.gateway; method = "manual"; }; ipv6 = { addr-gen-mode = "stable-privacy"; method = "auto"; }; wifi = { mode = "infrastructure"; ssid = "Joey's Jungle 6G"; }; wifi-security = { key-mgmt = "sae"; psk = "$PSK"; }; }; "Joey's Jungle 5G" = { connection = { id = "Joey's Jungle 5G"; type = "wifi"; }; ipv4 = if (cfg.ipv4.method == "auto") then { method = "auto"; } else { address1 = cfg.ipv4.address; dns = cfg.ipv4.dns; gateway = cfg.ipv4.gateway; method = "manual"; }; ipv6 = { addr-gen-mode = "stable-privacy"; method = "auto"; }; wifi = { mode = "infrastructure"; ssid = "Joey's Jungle 5G"; }; wifi-security = { key-mgmt = "sae"; psk = "$PSK"; }; }; }; }; }; firewall = { allowedTCPPortRanges = [ { from = 1714; to = 1764; } ]; allowedUDPPortRanges = config.networking.firewall.allowedTCPPortRanges; }; }; }; }