diff --git a/examples/rotuer.nix b/examples/rotuer.nix index 06d5fefe..3be133e6 100644 --- a/examples/rotuer.nix +++ b/examples/rotuer.nix @@ -191,7 +191,8 @@ in rec { services.wan = let iface = config.hardware.networkInterfaces.wan; - in config.system.service.pppoe iface { + in config.system.service.pppoe { + interface = iface; ppp-options = [ "debug" "+ipv6" "noauth" "name" secrets.l2tp.name diff --git a/modules/ppp.nix b/modules/ppp.nix index 08519e4c..b1b19ea7 100644 --- a/modules/ppp.nix +++ b/modules/ppp.nix @@ -6,7 +6,7 @@ let in { options = { system.service.pppoe = mkOption { - type = types.functionTo (types.functionTo types.package); + type = types.functionTo types.package; }; }; config = { diff --git a/pkgs/liminix-tools/networking/pppoe.nix b/pkgs/liminix-tools/networking/pppoe.nix index 1fbf7762..238ad17e 100644 --- a/pkgs/liminix-tools/networking/pppoe.nix +++ b/pkgs/liminix-tools/networking/pppoe.nix @@ -8,13 +8,26 @@ } : let inherit (liminix.services) longrun; + inherit (lib) + mergeDefinitions + mkEnableOption mkOption isType types isDerivation hasAttr; + t = { + interface = mkOption { + type = types.package; # actually a service + description = "ethernet interface to run PPPoE over"; + }; + ppp-options = mkOption { + type = types.listOf types.str; + }; + }; + t' = types.submodule { options = t; }; + typeChecked = type: value: + let defs = [{ file = "pppoe.nix"; inherit value; }]; + in (lib.mergeDefinitions [ ] type defs).mergedValue; in -interface: { - synchronous ? false -, ppp-options ? [] -, ... -} @ args: +params: let + inherit (typeChecked t' params) ppp-options interface; name = "${interface.device}.pppoe"; ip-up = writeAshScript "ip-up" {} '' . ${serviceFns}