#!/bin/zsh
zmodload zsh/datetime
setopt extendedglob
: ${SVDIR:=${1:-/run/service}}
export SVDIR
zsvgen --all-up

check_runsv() {
	while (($#)); do
		[[ -a $1/supervise/control ]] || return $?
		shift
	done
}

START=$EPOCHREALTIME

services_pre=''
services=( ${SVDIR}/*/run(-*) ); services=( $services:h )
while [[ ${(F)services} != $services_pre ]]; do
	while (( $EPOCHREALTIME - $START < 10 )); do
		check_runsv $services && break
		if (($+commands[inotifywait])); then
			inotifywait -r -q -t 1 -e create,move,close_write $services
		else
			sleep 0.2
		fi
	done
	sv check $services
	services_pre="${(F)services}"
	services=( ${SVDIR}/*/run(-*) ); services=( $services:h )
done