]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
zsh-completion: improve systemd-run
authorEisuke Kawashima <e-kwsm@users.noreply.github.com>
Tue, 27 May 2025 06:43:07 +0000 (15:43 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 28 May 2025 07:50:53 +0000 (09:50 +0200)
- add missed options
- improve completion for property

shell-completion/zsh/_systemd-run

index 9ee589717806b67bbb3adde07ba9fe31e198bed2..20b858957bd93fe77f1b570a190cefb3d42f6303 100644 (file)
@@ -29,16 +29,241 @@ __systemctl() {
         _values "${_modes[@]}"
     }
 
+(( $+functions[_systemd-run_properties] )) ||
+    _systemd-run_properties() {
+        local -a _properties=(
+            # man/systemd.exec.xml
+            ExecSearchPath=
+            WorkingDirectory=
+            RootDirectory=
+            RootImage=
+            RootImageOptions=
+            RootEphemeral=
+            RootHash=
+            RootHashSignature=
+            RootVerity=
+            RootImagePolicy=
+            MountImagePolicy=
+            ExtensionImagePolicy=
+            MountAPIVFS=
+            BindLogSockets=
+            ProtectProc=
+            ProcSubset=
+            BindPaths=
+            BindReadOnlyPaths=
+            MountImages=
+            ExtensionImages=
+            ExtensionDirectories=
+            User=
+            Group=
+            DynamicUser=
+            SupplementaryGroups=
+            SetLoginEnvironment=
+            PAMName=
+            CapabilityBoundingSet=
+            AmbientCapabilities=
+            NoNewPrivileges=
+            SecureBits=
+            SELinuxContext=
+            AppArmorProfile=
+            SmackProcessLabel=
+            LimitCPU=
+            LimitFSIZE=
+            LimitDATA=
+            LimitSTACK=
+            LimitCORE=
+            LimitRSS=
+            LimitNOFILE=
+            LimitAS=
+            LimitNPROC=
+            LimitMEMLOCK=
+            LimitLOCKS=
+            LimitSIGPENDING=
+            LimitMSGQUEUE=
+            LimitNICE=
+            LimitRTPRIO=
+            LimitRTTIME=
+            UMask=
+            CoredumpFilter=
+            KeyringMode=
+            OOMScoreAdjust=
+            TimerSlackNSec=
+            Personality=
+            IgnoreSIGPIPE=
+            Nice=
+            CPUSchedulingPolicy=
+            CPUSchedulingPriority=
+            CPUSchedulingResetOnFork=
+            CPUAffinity=
+            NUMAPolicy=
+            NUMAMask=
+            IOSchedulingClass=
+            IOSchedulingPriority=
+            ProtectSystem=
+            ProtectHome=
+            RuntimeDirectory=
+            StateDirectory=
+            CacheDirectory=
+            LogsDirectory=
+            ConfigurationDirectory=
+            RuntimeDirectoryMode=
+            StateDirectoryMode=
+            CacheDirectoryMode=
+            LogsDirectoryMode=
+            ConfigurationDirectoryMode=
+            RuntimeDirectoryPreserve=
+            TimeoutCleanSec=
+            ReadWritePaths=
+            ReadOnlyPaths=
+            InaccessiblePaths=
+            ExecPaths=
+            NoExecPaths=
+            TemporaryFileSystem=
+            PrivateTmp=
+            PrivateDevices=
+            PrivateNetwork=
+            NetworkNamespacePath=
+            PrivateIPC=
+            IPCNamespacePath=
+            MemoryKSM=
+            PrivatePIDs=
+            PrivateUsers=
+            ProtectHostname=
+            ProtectClock=
+            ProtectKernelTunables=
+            ProtectKernelModules=
+            ProtectKernelLogs=
+            ProtectControlGroups=
+            RestrictAddressFamilies=
+            RestrictFileSystems=
+            RestrictNamespaces=
+            DelegateNamespaces=
+            LockPersonality=
+            MemoryDenyWriteExecute=
+            RestrictRealtime=
+            RestrictSUIDSGID=
+            RemoveIPC=
+            PrivateMounts=
+            MountFlags=
+            SystemCallFilter=
+            SystemCallErrorNumber=
+            SystemCallArchitectures=
+            SystemCallLog=
+            Environment=
+            EnvironmentFile=
+            PassEnvironment=
+            UnsetEnvironment=
+            StandardInput=
+            StandardOutput=
+            StandardError=
+            StandardInputText=
+            StandardInputData=
+            LogLevelMax=
+            LogExtraFields=
+            LogRateLimitIntervalSec=
+            LogRateLimitBurst=
+            LogFilterPatterns=
+            LogNamespace=
+            SyslogIdentifier=
+            SyslogFacility=
+            SyslogLevel=
+            SyslogLevelPrefix=
+            TTYPath=
+            TTYReset=
+            TTYVHangup=
+            TTYColumns=
+            TTYRows=
+            TTYVTDisallocate=
+            LoadCredential=
+            LoadCredentialEncrypted=
+            ImportCredential=
+            SetCredential=
+            SetCredentialEncrypted=
+            UtmpIdentifier=
+            UtmpMode=
+
+            # man/systemd.kill.xml
+            KillMode=
+            KillSignal=
+            RestartKillSignal=
+            SendSIGHUP=
+            SendSIGKILL=
+            FinalKillSignal=
+            WatchdogSignal=
+
+            # man/systemd.resource-control.xml
+            CPUWeight=
+            StartupCPUWeight=
+            CPUQuota=
+            CPUQuotaPeriodSec=
+            AllowedCPUs=
+            StartupAllowedCPUs=
+            MemoryAccounting=
+            MemoryMin=
+            MemoryLow=
+            StartupMemoryLow=
+            DefaultStartupMemoryLow=
+            MemoryHigh=
+            StartupMemoryHigh=
+            MemoryMax=
+            StartupMemoryMax=
+            MemorySwapMax=
+            StartupMemorySwapMax=
+            MemoryZSwapMax=
+            StartupMemoryZSwapMax=
+            MemoryZSwapWriteback=
+            AllowedMemoryNodes=
+            StartupAllowedMemoryNodes=
+            TasksAccounting=
+            TasksMax=
+            IOAccounting=
+            IOWeight=
+            StartupIOWeight=
+            IODeviceWeight=
+            IOReadBandwidthMax=
+            IOWriteBandwidthMax=
+            IOReadIOPSMax=
+            IOWriteIOPSMax=
+            IODeviceLatencyTargetSec=
+            IPAccounting=
+            IPAddressAllow=
+            IPAddressDeny=
+            SocketBindAllow=
+            SocketBindDeny=
+            RestrictNetworkInterfaces=
+            NFTSet=
+            IPIngressFilterPath=
+            IPEgressFilterPath=
+            BPFProgram=
+            DeviceAllow=
+            DevicePolicy=
+            Slice=
+            Delegate=
+            DelegateSubgroup=
+            DisableControllers=
+            ManagedOOMSwap=
+            ManagedOOMMemoryPressure=
+            ManagedOOMMemoryPressureLimit=
+            ManagedOOMMemoryPressureDurationSec=
+            ManagedOOMPreference=
+            MemoryPressureWatch=
+            MemoryPressureThresholdSec=
+            CoredumpReceive=
+        )
+        _values 'NAME=VALUE' "${_properties[@]}"
+    }
+
 _arguments \
-    '(-G --collect)'{-G,--collect}'[Unload the transient unit after it completed]' \
+    '(-G --collect --shell)'{-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)'{-H+,--host=}'[Operate on remote host]:[user@]host:_sd_hosts_or_user_at_host' \
     '(-M --machine)'{-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
+    '(-C --capsule)'{-C,--capsule=}'[Operate on capsule]:capsule' \
     '--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]' \
+    '(--wait)--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' \
@@ -49,42 +274,29 @@ _arguments \
     '--on-unit-inactive=[Run SEC seconds after the last deactivation]:SEC' \
     '--path-property=[Set path unit property]:NAME=VALUE' \
     '(-P --pipe)'{-P,--pipe}'[Inherit standard input, output, and error]' \
-    '(-p --property)'{-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)'{-t,--pty}'[The service connects to the terminal]' \
+    {'*-p+','*--property='}'[Set unit property]:NAME=VALUE:_systemd-run_properties' \
+    '(-t --pty --shell)'{-t,--pty}'[The service connects to the terminal]' \
     '(-q --quiet)'{-q,--quiet}'[Suppresses additional informational output]' \
     '--json=[Output as JSON]:JSON:(pretty short off)' \
     '--job-mode=[Specify how to deal with other jobs]:mode:_systemd-run_job_modes' \
     '(-r --remain-after-exit)'{-r,--remain-after-exit}'[Leave service around until explicitly stopped]' \
-    '(-d --same-dir)'{-d,--same-dir}'[Run on the current working directory]' \
+    '(-d --same-dir --working-directory --shell)'{-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)'{-E+,--setenv=}'[Set environment]:NAME=VALUE' \
-    '(-S --shell)'{-S,--shell}'[requests an interactive shell in the current working directory]' \
+    '(--shell)--service-type=[Service type]:type:(simple forking oneshot dbus notify idle)' \
+    {'*-E+','*--setenv='}'[Set environment]:NAME=VALUE' \
+    '(-S --shell --pty --same-dir --wait --collect --service-type)'{-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]' \
+    '--expand-environment=[Control expansion of environment variables]:bool:(yes no)' \
     '--socket-property=[Set socket unit property]:NAME=VALUE' \
-    '--system[Run as system unit]' \
+    '(--user)--system[Run as system unit]' \
     '--timer-property=[Set timer unit property]:NAME=VALUE' \
     '--uid=[Run as system user]:user:_users' \
     '(-u --unit)'{-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]' \
+    '(--system)--user[Run as user unit]' \
+    '(- *)--version[Show package version]' \
+    '(--no-block --shell)--wait[Wait until service stopped again]' \
+    '(--same-dir -d --shell)--working-directory=[Run with the specified working directory]:dir:_files -/' \
     '(-):command: _command_names -e' \
     '*::arguments:_normal'