{ ... }: { _class = "clan.service"; manifest.name = "gw-router"; manifest.description = "A gateway router service to configure most of a router features"; manifest.readme = "A gateway router service to configure most of a router features"; manifest.categories = [ "System" ]; roles.default = { description = "A default role for the router node"; interface = { lib, config, ... }: { options = { wan = { interface = lib.mkOption { type = lib.types.str; description = "Physical WAN port the PPPoE session runs on."; }; vlanId = lib.mkOption { type = lib.types.nullOr (lib.types.ints.between 1 4094); default = null; description = '' 802.1Q tag the ISP requires for the PPPoE session (AIS Thailand: 10); null for untagged PPPoE directly on the port. Unrelated to the LAN VLANs — this tag exists only on the WAN port. ''; }; }; }; }; perInstance = { settings, ... }: { nixosModule = { config, pkgs, lib, ... }: let in { environment.systemPackages = with pkgs; [ tcpdump mtr ethtool conntrack-tools knot-dns iftop librespeed-cli ]; }; }; }; imports = [ ./pppoe.nix ]; }