{
  liminix, lib, json-to-fstree, serviceFns
}:
{ name, url, interval, username, password  } :
let
  inherit (liminix.services) oneshot longrun;
  inherit (lib) optionalString;
in longrun {
  inherit name;
  buildInputs = [ json-to-fstree ];
  run = ''
    ${optionalString (username != null) ''
      export NETRC=$(mkstate ${name})/netrc
      (echo default ; echo login ${username} ; echo password ${password} ) > $NETRC
    ''}
    ( in_outputs ${name}
      while : ; do
        ${json-to-fstree}/bin/json-to-fstree ${url} .
        sleep ${builtins.toString (interval * 60)}
      done
    )
  '';
}