The current NixOS Manual is a little sparse on details for different options to configure wireless networking. The version in master is a little better but still ambiguous. I've made a pull request to resolve this but in the interim, this documents how to configure a number of wireless scenarios with NixOS.
If you're going to use NetworkManager, this is not for you. This is for those of us who want reproducible configurations.
To enable a wireless connection with no spaces or special characters in the name that uses a pre-shared key, you first need to generate the raw PSK:
$ wpa_passphrase exampleSSID abcd1234
network={
ssid="exampleSSID"
#psk="abcd1234"
psk=46c25aa68ccb90945621c1f1adbe93683f884f5f31c6e2d524eb6b446642762d
}
Now you can add the following stanza to your configuration.nix to enable wireless networking and this specific wireless connection:
networking.wireless = {
enable = true;
userControlled.enable = true;
networks = {
exampleSSID = {
pskRaw = "46c25aa68ccb90945621c1f1adbe93683f884f5f31c6e2d524eb6b446642762d";
};
};
};
If you had another WiFi connection that had spaces and/or special characters in the name, you would configure it like this:
networking.wireless = {
enable = true;
userControlled.enable = true;
networks = {
"example's SSID" = {
pskRaw = "46c25aa68ccb90945621c1f1adbe93683f884f5f31c6e2d524eb6b446642762d";
};
};
};
If you need to connect to a hidden network, you would do it like this:
networking.wireless = {
enable = true;
userControlled.enable = true;
networks = {
myHiddenSSID = {
hidden = true;
pskRaw = "46c25aa68ccb90945621c1f1adbe93683f884f5f31c6e2d524eb6b446642762d";
};
};
};
The final scenario that I have, is connecting to open SSIDs that have some kind of secondary method (like a login in web page) for authentication of connections:
networking.wireless = {
enable = true;
userControlled.enable = true;
networks = {
FreeWiFi = {};
};
};
This is all fairly straight forward but was non-trivial to find the answers too.