#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Runit Utilities"

config RUNSV
	bool "runsv"
	default n
	help
	  runsv starts and monitors a service and optionally an appendant log
	  service.

config RUNSVDIR
	bool "runsvdir"
	default n
	help
	  runsvdir starts a runsv process for each subdirectory, or symlink to
	  a directory, in the services directory dir, up to a limit of 1000
	  subdirectories, and restarts a runsv process if it terminates.

config FEATURE_RUNSVDIR_LOG
	bool "Enable scrolling argument log"
	depends on RUNSVDIR
	default n
	help
	  Enable feature where second parameter of runsvdir holds last error
	  message (viewable via top/ps). Otherwise (feature is off
	  or no parameter), error messages go to stderr only.

config SV
	bool "sv"
	default n
	help
	  sv reports the current status and controls the state of services
	  monitored by the runsv supervisor.

config SV_DEFAULT_SERVICE_DIR
	string "Default directory for services"
	default "/var/service"
	depends on SV
	help
	  Default directory for services.
	  Defaults to "/var/service"

config SVLOGD
	bool "svlogd"
	default n
	help
	  svlogd continuously reads log data from its standard input, optionally
	  filters log messages, and writes the data to one or more automatically
	  rotated logs.

config CHPST
	bool "chpst"
	default n
	help
	  chpst changes the process state according to the given options, and
	  execs specified program.

config SETUIDGID
	bool "setuidgid"
	help
	  Sets soft resource limits as specified by options

config ENVUIDGID
	bool "envuidgid"
	help
	  Sets $UID to account's uid and $GID to account's gid

config ENVDIR
	bool "envdir"
	help
	  Sets various environment variables as specified by files
	  in the given directory

config SOFTLIMIT
	bool "softlimit"
	help
	  Sets soft resource limits as specified by options

endmenu
