{
  liminix,
  uevent-watch,
  lib,
}:
{
  serviceName,
  terms,
  symlink,
}:
let
  inherit (liminix.services) longrun;
  inherit (lib.attrsets) collect mapAttrsRecursive;
  inherit (lib.strings) concatStringsSep;
  stringify =
    attrs:
    concatStringsSep " " (
      collect lib.isString (
        mapAttrsRecursive (path: value: "${concatStringsSep "." path}=${value}") attrs
      )
    );
  termsString = stringify terms;
in
longrun {
  name = "watch-for-${serviceName}";
  restart-on-upgrade = true;
  run = "${uevent-watch}/bin/uevent-watch ${
    if symlink != null then "-n ${symlink}" else ""
  } -s ${serviceName} ${termsString}";
}