#compdef run0

(( $+functions[_run0_unit_properties] )) ||
_run0_unit_properties() {
  local -a props=(
    BlockIOAccounting  BlockIODeviceWeight   BlockIOReadBandwidth
    BlockIOWeight      BlockIOWriteBandwidth CPUAccounting
    CPUShares          DeviceAllow           DevicePolicy
    Environment        EnvironmentFile       ExitType
    FinalKillSignal    Group                 InaccessiblePaths
    KillMode           KillSignal            LimitAS
    LimitCORE          LimitCPU              LimitDATA
    LimitFSIZE         LimitLOCKS            LimitMEMLOCK
    LimitMSGQUEUE      LimitNICE             LimitNOFILE
    LimitNPROC         LimitRSS              LimitRTPRIO
    LimitRTTIME        LimitSIGPENDING       LimitSTACK
    MemoryAccounting   MemoryLimit           Nice
    NoNewPrivileges    OOMScoreAdjust        PassEnvironment
    PrivateDevices     PrivateNetwork        PrivateTmp
    ProtectHome        ProtectSystem         ReadOnlyPaths
    ReadWritePaths     RestartKillSignal     RootDirectory
    RuntimeDirectory   SendSIGHUP            SendSIGKILL
    SyslogFacility     SyslogIdentifier      SyslogLevel
    SyslogLevelPrefix  TTYPath               TimerSlackNSec
    User               WorkingDirectory
  )
  _values -S= 'properties' ${^props}'::()'
}

(( $+functions[_run0_slices] )) ||
_run0_slices() {
  local -a slices=(
    ${(@f)"$(_call_program slice-units systemctl --no-pager --legend=no --plain list-units --all -t slice 2>/dev/null)"}
  )
  slices=( ${slices%% *} )
  _describe -t slice-units 'slice unit' slices
}

local -a args=(
	'--no-ask-password[Do not query the user for authentication]'
	'--unit=[Use this unit name instead of an automatically generated one]'
	{--property=,-p+}'[Sets a property on the service unit created]:property:_run0_unit_properties'
	'--description=[Provide a description for the service unit]'
	'--slice=[Make the new .service unit part of the specified slice]:slice unit:_run0_slices'
	'--slice-inherit[Make the new service unit part of the current slice]'
	{--user=,-u+}'[Switch to the specified user]:user:_users'
	{--group=,-g+}'[Switch to the specified group]:group:_groups'
	'--nice=[Run with specified nice level]:nice value'
	{--chdir=,-D+}'[Run within the specified working directory]:directory:_files -/'
	'--setenv=[Set the specified environment variable in the session]:environment variable:_parameters -g "*export*" -S = -q'
	'--background=[Change the terminal background color to the specified ANSI color]:ansi color'
	'--machine=[Execute the operation on a local container]:machine:_sd_machines'
	{-h,--help}'[Show the help text and exit]'
	'--version[Print a short version string and exit]'
)

_arguments -S $args '*:: :{_normal -p $service}'
