accept attr args to pppoe service, and typecheck them

We use (abuse, arguably) the nixos module system for typechecking.  Un
the plus side, it gives us documentation of the options and their
expected types. On the downside, the error message doesn't tell us
the file in which the error was encountered.

(This is subject to change, if I can find a better way)
module-based-network
Daniel Barlow 2023-07-14 16:53:36 +01:00
parent 9441f48819
commit 69e6eb5a89
3 changed files with 21 additions and 7 deletions

View File

@ -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

View File

@ -6,7 +6,7 @@ let
in {
options = {
system.service.pppoe = mkOption {
type = types.functionTo (types.functionTo types.package);
type = types.functionTo types.package;
};
};
config = {

View File

@ -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}