Author: mkwik
Date: Sun Apr 1 10:54:10 2012
New Revision: 33510
URL: https://nixos.org/websvn/nix/?rev=33510&sc=1
Log:
optionally allow normal users to control wpa_supplicant through
wpa_gui or wpa_cli.
Comes with a default wpa_supplicant.conf, which gets updated through
aforementioned utilities.
Modified:
nixos/trunk/modules/services/networking/wpa_supplicant.nix
Modified: nixos/trunk/modules/services/networking/wpa_supplicant.nix
==============================================================================
--- nixos/trunk/modules/services/networking/wpa_supplicant.nix Sun Apr 1
10:54:08 2012 (r33509)
+++ nixos/trunk/modules/services/networking/wpa_supplicant.nix Sun Apr 1
10:54:10 2012 (r33510)
@@ -4,10 +4,11 @@
let
+ cfg = config.networking.wireless;
configFile = "/etc/wpa_supplicant.conf";
ifaces =
- config.networking.wireless.interfaces ++
+ cfg.interfaces ++
optional (config.networking.WLANInterface != "")
config.networking.WLANInterface;
in
@@ -18,40 +19,69 @@
options = {
- networking.wireless.enable = mkOption {
- default = false;
- description = ''
- Whether to start <command>wpa_supplicant</command> to scan for
- and associate with wireless networks. Note: NixOS currently
- does not generate <command>wpa_supplicant</command>'s
- configuration file, <filename>${configFile}</filename>. You
- should edit this file yourself to define wireless networks,
- WPA keys and so on (see
- <citerefentry><refentrytitle>wpa_supplicant.conf</refentrytitle>
- <manvolnum>5</manvolnum></citerefentry>).
- '';
- };
-
networking.WLANInterface = mkOption {
default = "";
description = "Obsolete. Use
<option>networking.wireless.interfaces</option> instead.";
};
- networking.wireless.interfaces = mkOption {
- default = [];
- example = [ "wlan0" "wlan1" ];
- description = ''
- The interfaces <command>wpa_supplicant</command> will use. If empty,
it will
- automatically use all wireless interfaces.
- '';
- };
+ networking.wireless = {
+ enable = mkOption {
+ default = false;
+ description = ''
+ Whether to start <command>wpa_supplicant</command> to scan for
+ and associate with wireless networks. Note: NixOS currently
+ does not generate <command>wpa_supplicant</command>'s
+ configuration file, <filename>${configFile}</filename>. You
+ should edit this file yourself to define wireless networks,
+ WPA keys and so on (see
+ <citerefentry><refentrytitle>wpa_supplicant.conf</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry>).
+ '';
+ };
+
+ interfaces = mkOption {
+ default = [];
+ example = [ "wlan0" "wlan1" ];
+ description = ''
+ The interfaces <command>wpa_supplicant</command> will use. If
empty, it will
+ automatically use all wireless interfaces.
+ '';
+ };
+
+ driver = mkOption {
+ default = "";
+ example = "nl80211";
+ description = "force a specific wpa_supplicant driver";
+ };
+ userControlled = {
+ enable = mkOption {
+ default = false;
+ description = ''
+ Allow normal users to control wpa_supplicant through wpa_gui or
wpa_cli.
+ This is useful for laptop users that switch networks a lot.
+
+ When you want to use this, make sure ${configFile} doesn't exist.
+ It will be created for you.
+
+ Currently it is also necesarry to explicitly specify
networking.wireless.interfaces
+ '';
+ };
+
+ group = mkOption {
+ default = "wheel";
+ example = "network";
+ type = types.string;
+ description = "members of this group can control wpa_supplicant";
+ };
+ };
+ };
};
###### implementation
- config = mkIf config.networking.wireless.enable {
+ config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.wpa_supplicant ];
@@ -63,11 +93,15 @@
path = [ pkgs.wpa_supplicant ];
- preStart =
- ''
- touch -a ${configFile}
- chmod 600 ${configFile}
- '';
+ preStart = ''
+ touch -a ${configFile}
+ chmod 600 ${configFile}
+ '' + optionalString cfg.userControlled.enable ''
+ if [ ! -s ${configFile} ]; then
+ echo "ctrl_interface=DIR=/var/run/wpa_supplicant
GROUP=${cfg.userControlled.group}" >> ${configFile}
+ echo "update_config=1" >> ${configFile}
+ fi
+ '';
script =
''
@@ -80,7 +114,7 @@
'' else ''
ifaces="${concatStringsSep " -N " (map (i: "-i${i}") ifaces)}"
''}
- exec wpa_supplicant -s -u -c ${configFile} $ifaces
+ exec wpa_supplicant -s -u ${optionalString (cfg.driver != "")
"-D${cfg.driver}"} -c ${configFile} $ifaces
'';
};
@@ -89,6 +123,10 @@
${config.system.build.upstart}/sbin/restart wpa_supplicant
'';
+ assertions = [{ assertion = !cfg.userControlled.enable || cfg.interfaces
!= [];
+ message = "user controlled wpa_supplicant needs explicit
networking.wireless.interfaces";}];
+
+
};
}
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits