From 648ea5613bf45424762d9f847e4ff1319f256a4e Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Sun, 16 Jul 2023 17:50:06 +0100 Subject: [PATCH] use module-based-service for hostapd --- examples/rotuer.nix | 8 +++-- modules/hostapd/default.nix | 13 ++++++++ .../hostapd/service.nix | 33 ++++++++++++------- 3 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 modules/hostapd/default.nix rename pkgs/liminix-tools/networking/hostapd.nix => modules/hostapd/service.nix (53%) diff --git a/examples/rotuer.nix b/examples/rotuer.nix index 0a38ae1..a0ac34f 100644 --- a/examples/rotuer.nix +++ b/examples/rotuer.nix @@ -11,7 +11,6 @@ let secrets = import ./rotuer-secrets.nix; inherit (pkgs.liminix.networking) address - hostapd interface route; inherit (pkgs.liminix.services) oneshot longrun bundle target; @@ -36,6 +35,7 @@ in rec { ../modules/ppp ../modules/dnsmasq ../modules/firewall + ../modules/hostapd ]; rootfsType = "jffs2"; hostname = "rotuer"; @@ -45,7 +45,8 @@ in rec { }; }; - services.hostap = hostapd (config.hardware.networkInterfaces.wlan_24) { + services.hostap = config.system.service.hostapd { + interface = config.hardware.networkInterfaces.wlan_24; params = { ssid = "liminix"; country_code = "GB"; @@ -62,7 +63,8 @@ in rec { }; }; - services.hostap5 = hostapd (config.hardware.networkInterfaces.wlan_5) { + services.hostap5 = config.system.service.hostapd { + interface = config.hardware.networkInterfaces.wlan_5; params = rec { ssid = "liminix_5"; country_code = "GB"; diff --git a/modules/hostapd/default.nix b/modules/hostapd/default.nix new file mode 100644 index 0000000..c02303b --- /dev/null +++ b/modules/hostapd/default.nix @@ -0,0 +1,13 @@ +{ lib, pkgs, config, ...}: +let + inherit (lib) mkOption types; +in { + options = { + system.service.hostapd = mkOption { + type = types.functionTo types.package; + }; + }; + config = { + system.service.hostapd = pkgs.callPackage ./service.nix {}; + }; +} diff --git a/pkgs/liminix-tools/networking/hostapd.nix b/modules/hostapd/service.nix similarity index 53% rename from pkgs/liminix-tools/networking/hostapd.nix rename to modules/hostapd/service.nix index d57b0a9..c371791 100644 --- a/pkgs/liminix-tools/networking/hostapd.nix +++ b/modules/hostapd/service.nix @@ -1,23 +1,34 @@ -# This is not a friendly interface to configuring a wireless AP: it -# just passes everything straight through to the hostapd config. When -# we've worked out what the sensible options are to expose, we'll add -# them as top-level attributes and rename params to extraParams - { liminix , hostapd -, lib , writeText -}: -interface: -{ - params ? {} +, lib }: let inherit (liminix.services) longrun; inherit (lib) concatStringsSep mapAttrsToList; - inherit (builtins) toString; + inherit (liminix.lib) typeChecked; + inherit (lib) mkOption types; + # This is not a friendly interface to configuring a wireless AP: it + # just passes everything straight through to the hostapd config. + # When we've worked out what the sensible options are to expose, + # we'll add them as top-level attributes and rename params to + # extraParams + + t = { + interface = mkOption { + type = liminix.lib.types.service; + }; + params = mkOption { + type = types.attrs; + }; + }; +in +args: +let + inherit (typeChecked "hostapd" t args) + interface params; name = "${interface.device}.hostapd"; defaults = { driver = "nl80211";