Skip to content

Instantly share code, notes, and snippets.

@ibizaman
Created July 25, 2026 11:31
Show Gist options
  • Select an option

  • Save ibizaman/deabf429052ca33b5bdc82f0c4fe8581 to your computer and use it in GitHub Desktop.

Select an option

Save ibizaman/deabf429052ca33b5bdc82f0c4fe8581 to your computer and use it in GitHub Desktop.
NixOS VM test for NetworkManager controlling a wlan0 interface
{
pkgs,
lib,
...
}:
pkgs.testers.runNixOSTest {
name = "app-networkmanager";
interactive.sshBackdoor.enable = true;
nodes.airgap =
{ config, ... }:
{
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [
{
address = "192.168.1.2";
prefixLength = 24;
}
];
services.vwifi = {
server = {
enable = true;
ports.tcp = 8212;
openFirewall = true;
};
};
};
nodes.ap =
{ config, ... }:
{
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [
{
address = "192.168.1.3";
prefixLength = 24;
}
];
services.hostapd = {
enable = true;
radios.wlan0 = {
channel = 1;
networks.wlan0 = {
ssid = "NixOS Test Wi-Fi Network";
authentication = {
mode = "wpa3-sae";
saePasswords = [ { password = "supersecret"; } ];
enableRecommendedPairwiseCiphers = true;
};
};
};
};
services.vwifi = {
module = {
enable = true;
macPrefix = "74:F8:F6:00:01";
};
client = {
enable = true;
serverAddress = "192.168.1.2";
};
};
};
nodes.kiosk = {
environment.systemPackages = [
pkgs.networkmanager
pkgs.iw
];
networking.wireless = lib.mkForce {
enable = true;
autoDetectInterfaces = false;
dbusControlled = true;
};
systemd.services.wpa_supplicant.wantedBy = lib.mkForce [ ];
systemd.services.NetworkManager.after = [ "wpa_supplicant.service" ];
networking.networkmanager = {
enable = true;
ensureProfiles.profiles = {
home-wifi = {
connection = {
id = "home-wifi";
permissions = "";
type = "wifi";
};
ipv4 = {
dns-search = "";
method = "auto";
};
ipv6 = {
addr-gen-mode = "stable-privacy";
dns-search = "";
method = "auto";
};
wifi = {
mac-address-blacklist = "";
mode = "infrastructure";
ssid = "Home Wi-Fi";
};
wifi-security = {
auth-alg = "open";
key-mgmt = "wpa-psk";
psk = "a_password";
};
};
};
};
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [
{
address = "192.168.1.3";
prefixLength = 24;
}
];
services.vwifi = {
module = {
enable = true;
macPrefix = "74:F8:F6:00:02";
};
client = {
enable = true;
serverAddress = "192.168.1.2";
};
};
};
testScript = ''
import json
airgap.start()
ap.start()
kiosk.start()
airgap.wait_for_unit("multi-user.target")
ap.wait_for_unit("multi-user.target")
kiosk.wait_for_unit("NetworkManager.service")
kiosk.wait_for_unit("vwifi-client.service")
kiosk.wait_for_unit("multi-user.target")
print(kiosk.succeed("ip link show wlan0"))
print(kiosk.succeed("nmcli device"))
print(kiosk.succeed("journalctl -u wpa_supplicant -b"))
print(kiosk.succeed("journalctl -u NetworkManager -b"))
print(kiosk.succeed("iw dev"))
'';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment