diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index 28ac1c3e888a..2a3d89e9f6f2 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -75,6 +75,8 @@ with lib; # DNSCrypt-proxy (mkRenamedOptionModule [ "services" "dnscrypt-proxy" "port" ] [ "services" "dnscrypt-proxy" "localPort" ]) + (mkRenamedOptionModule [ "services" "hostapd" "extraCfg" ] [ "services" "hostapd" "extraConfig" ]) + # Options that are obsolete and have no replacement. (mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ]) (mkRemovedOptionModule [ "programs" "bash" "enable" ]) diff --git a/nixos/modules/services/networking/hostapd.nix b/nixos/modules/services/networking/hostapd.nix index 5a6ca139ddad..287964aab072 100644 --- a/nixos/modules/services/networking/hostapd.nix +++ b/nixos/modules/services/networking/hostapd.nix @@ -2,21 +2,17 @@ # TODO: # -# asserts +# asserts # ensure that the nl80211 module is loaded/compiled in the kernel -# hwMode must be a/b/g -# channel must be between 1 and 13 (maybe) # wpa_supplicant and hostapd on the same wireless interface doesn't make any sense -# perhaps an assertion that there is a dhcp server and a dns server on the IP address serviced by the hostapd? with lib; let cfg = config.services.hostapd; - - configFile = pkgs.writeText "hostapd.conf" - '' + + configFile = pkgs.writeText "hostapd.conf" '' interface=${cfg.interface} driver=${cfg.driver} ssid=${cfg.ssid} @@ -37,8 +33,8 @@ let wpa_passphrase=${cfg.wpaPassphrase} '' else ""} - ${cfg.extraCfg} - '' ; + ${cfg.extraConfig} + '' ; in @@ -65,9 +61,9 @@ in interface = mkOption { default = ""; - example = "wlan0"; + example = "wlp2s0"; description = '' - The interfaces hostapd will use. + The interfaces hostapd will use. ''; }; @@ -89,8 +85,7 @@ in }; hwMode = mkOption { - default = "b"; - example = "g"; + default = "g"; type = types.string; description = '' Operation mode. @@ -98,17 +93,16 @@ in ''; }; - channel = mkOption { + channel = mkOption { default = 7; example = 11; type = types.int; - description = - '' + description = '' Channel number (IEEE 802.11) Please note that some drivers do not use this value from hostapd and the channel will need to be configured separately with iwconfig. - ''; + ''; }; group = mkOption { @@ -131,16 +125,15 @@ in default = "my_sekret"; example = "any_64_char_string"; type = types.string; - description = - '' + description = '' WPA-PSK (pre-shared-key) passphrase. Clients will need this passphrase to associate with this access point. Warning: This passphrase will get put into a world-readable file in the Nix store! - ''; + ''; }; - extraCfg = mkOption { + extraConfig = mkOption { default = ""; example = '' auth_algo=0 @@ -158,17 +151,25 @@ in config = mkIf cfg.enable { + assertions = [ + { assertion = (cfg.hwMode == "a" || cfg.hwMode == "b" || cfg.hwMode == "g"); + message = "hwMode must be a/b/g"; + } + { assertion = (cfg.channel >= 1 && cfg.channel <= 13); + message = "channel must be between 1 and 13"; + }]; + environment.systemPackages = [ pkgs.hostapd ]; systemd.services.hostapd = { description = "hostapd wireless AP"; - path = [ pkgs.hostapd ]; + path = [ pkgs.hostapd ]; wantedBy = [ "network.target" ]; after = [ "${cfg.interface}-cfg.service" "nat.service" "bind.service" "dhcpd.service"]; - serviceConfig = + serviceConfig = { ExecStart = "${pkgs.hostapd}/bin/hostapd ${configFile}"; Restart = "always"; };