#compdef systemd-run
# SPDX-License-Identifier: LGPL-2.1-or-later

# @todo _systemctl has a helper with the same name, so we must redefine
__systemctl() {
    local -a _modes
    _modes=("--user" "--system")
    systemctl ${words:*_modes} --full --no-legend --no-pager --plain "$@" 2>/dev/null
}

(( $+functions[__systemd-run_get_slices] )) ||
    __systemd-run_get_slices () {
        __systemctl list-units --all -t slice \
            | { while read -r a b; do echo $a; done; };
    }

(( $+functions[__systemd-run_slices] )) ||
    __systemd-run_slices () {
        local -a _slices
        _slices=(${(fo)"$(__systemd-run_get_slices)"})
        typeset -U _slices
        _describe 'slices' _slices
    }

_arguments \
    {-G,--collect}'[Unload the transient unit after it completed]' \
    '--description=[Description for unit]:description' \
    '--gid=[Run as system group]:group:_groups' \
    {-h,--help}'[Show help message]' \
    {-H+,--host=}'[Operate on remote host]:[user@]host:_sd_hosts_or_user_at_host' \
    {-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
    '--nice=[Nice level]:nice level' \
    '--no-ask-password[Do not query the user for authentication]' \
    '--no-block[Do not synchronously wait for the unit start operation to finish]' \
    '--on-active=[Run after SEC seconds]:SEC' \
    '--on-boot=[Run SEC seconds after machine was booted up]:SEC' \
    '--on-calendar=[Realtime timer]:SPEC' \
    '--on-clock-change[Defines a trigger based on system clock jumps]' \
    '--on-startup=[Run SEC seconds after systemd was first started]:SEC' \
    '--on-timezone-change[Defines a trigger based on system timezone changes]' \
    '--on-unit-active=[Run SEC seconds after the last activation]:SEC' \
    '--on-unit-inactive=[Run SEC seconds after the last deactivation]:SEC' \
    '--path-property=[Set path unit property]:NAME=VALUE' \
    {-P,--pipe}'[Inherit standard input, output, and error]' \
    {-p+,--property=}'[Set unit property]:NAME=VALUE:(( \
                CPUAccounting= MemoryAccounting= BlockIOAccounting= SendSIGHUP= \
                SendSIGKILL= MemoryLimit= CPUShares= BlockIOWeight= User= Group= \
                DevicePolicy= KillMode= ExitType= DeviceAllow= BlockIOReadBandwidth= \
                BlockIOWriteBandwidth= BlockIODeviceWeight= Nice= Environment= \
                KillSignal= RestartKillSignal= FinalKillSignal= LimitCPU= LimitFSIZE= LimitDATA= \
                LimitSTACK= LimitCORE= LimitRSS= LimitNOFILE= LimitAS= LimitNPROC= \
                LimitMEMLOCK= LimitLOCKS= LimitSIGPENDING= LimitMSGQUEUE= \
                LimitNICE= LimitRTPRIO= LimitRTTIME= PrivateTmp= PrivateDevices= \
                PrivateNetwork= NoNewPrivileges= WorkingDirectory= RootDirectory= \
                TTYPath= SyslogIdentifier= SyslogLevelPrefix= SyslogLevel= \
                SyslogFacility= TimerSlackNSec= OOMScoreAdjust= ReadWritePaths= \
                ReadOnlyPaths= InaccessiblePaths= EnvironmentFile= \
                ProtectSystem= ProtectHome= RuntimeDirectory= PassEnvironment= \
                ))' \
    {-t,--pty}'[The service connects to the terminal]' \
    {-q,--quiet}'[Suppresses additional informational output]' \
    {-r,--remain-after-exit}'[Leave service around until explicitly stopped]' \
    {-d,--same-dir}'[Run on the current working directory]' \
    '--scope[Run this as scope rather than service]' \
    '--send-sighup[Send SIGHUP when terminating]' \
    '--service-type=[Service type]:type:(simple forking oneshot dbus notify idle)' \
    {-E+,--setenv=}'[Set environment]:NAME=VALUE' \
    {-S,--shell}'[requests an interactive shell in the current working directory]' \
    '--slice=[Run in the specified slice]:slices:__systemd-run_slices' \
    '--slice-inherit[Run in the inherited slice]' \
    '--socket-property=[Set socket unit property]:NAME=VALUE' \
    '--system[Run as system unit]' \
    '--timer-property=[Set timer unit property]:NAME=VALUE' \
    '--uid=[Run as system user]:user:_users' \
    {-u+,--unit=}'[Run under the specified unit name]:unit name' \
    '--user[Run as user unit]' \
    '--version[Show package version]' \
    '--wait=[Wait until service stopped again]' \
    '--working-directory=[Run with the specified working directory]' \
    '(-):command: _command_names -e' \
    '*::arguments:_normal'
