{ hostName, inputs, lib, ... }: let hostConf = config.site.hosts.${hostName}; pppoeInterfaces = lib.filterAttrs (_: { type, ... }: type == "pppoe") hostConf.interfaces; firstUpstreamInterface = if builtins.length (builtins.attrNames upstreamInterfaces) > 0 then builtins.head ( builtins.attrNames upstreamInterfaces ) else null; inherit (inputs.zentralwerk-network-key.lib.pppoe.${hostName}) user password; in lib.mkIf (pppoeInterfaces != {}) { boot.postBootCommands = '' if [ ! -c /dev/ppp ]; then mknod -m 666 /dev/ppp c 108 0 fi ''; environment.etc."ppp/pap-secrets".text = '' "${user}" * "${password}" ''; services.pppd = { enable = true; peers = builtins.mapAttrs (ifName: { upstream, ... }: { enable = true; autostart = true; config = '' plugin rp-pppoe.so nic-${upstream.link} ifname ${ifName} # Login settings. (PAP) name "${user}" noauth hide-password # Connection settings. persist # Max connection attempts (0 = no limit) maxfail 0 # Seconds between reconnection attempts holdoff 1 # LCP settings. lcp-echo-interval 5 lcp-echo-failure 6 # PPPoE compliant settings. noaccomp default-asyncmap mtu 1492 # IP settings. #noipdefault defaultroute +ipv6 defaultroute6 # Increase debugging level debug ''; }; }; }