{
  lib,
  liminix,
  output-template,
  ppp,
  pppoe,
  serviceFns,
  svc,
  writeAshScript,
  callPackage,
}:
{
  interface,
  ppp-options,
  lcpEcho,
  username,
  password,
  debug,
}:
let
  name = "${interface.name}.pppoe";
  common = callPackage ./common.nix { inherit svc; };

  timeoutOpt =
    if lcpEcho.interval != null then "-T ${builtins.toString (4 * lcpEcho.interval)}" else "";
in
common {
  inherit
    name
    debug
    username
    password
    lcpEcho
    ppp-options
    ;
  command = ''
    exec ${ppp}/bin/pppd pty "${pppoe}/bin/pppoe ${timeoutOpt}  -I $(output ${interface} ifname)" file /run/${name}/ppp-options
  '';
  dependencies = [ interface ];
}