Test / Create distribution (push) Successful in 59s
Test / Sandbox (push) Successful in 2m55s
Test / Hakurei (push) Successful in 4m56s
Test / Sandbox (race detector) (push) Successful in 6m7s
Test / Hakurei (race detector) (push) Successful in 7m20s
Test / ShareFS (push) Successful in 7m35s
Test / Flake checks (push) Successful in 1m7s
This is theoretically susceptible to the PID race, but such an event is statistically impossible, and not exploitable in the intended use case, regardless. Signed-off-by: Ophestra <cat@gensokyo.uk>
91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
#compdef hakurei
|
|
|
|
_hakurei_run() {
|
|
__hakurei_files
|
|
return $?
|
|
}
|
|
|
|
_hakurei_exec() {
|
|
_arguments \
|
|
'--id[Reverse-DNS style Application identifier, leave empty to inherit instance identifier]:id' \
|
|
'-a[Application identity]: :_numbers' \
|
|
'-g[Groups inherited by all container processes]: :_groups' \
|
|
'-d[Container home directory]: :_files -/' \
|
|
'-u[Passwd user name within sandbox]: :_users' \
|
|
'--private-runtime[Do not share XDG_RUNTIME_DIR between containers under the same identity]' \
|
|
'--private-tmpdir[Do not share TMPDIR between containers under the same identity]' \
|
|
'--wayland[Enable connection to Wayland via security-context-v1]' \
|
|
'-X[Enable direct connection to X11]' \
|
|
'--dbus[Enable proxied connection to D-Bus]' \
|
|
'--pipewire[Enable connection to PipeWire via SecurityContext]' \
|
|
'--pulse[Enable PulseAudio compatibility daemon]' \
|
|
'--dbus-config[Path to session bus proxy config file]: :_files -g "*.json"' \
|
|
'--dbus-system[Path to system bus proxy config file]: :_files -g "*.json"' \
|
|
'--mpris[Allow owning MPRIS D-Bus path]' \
|
|
'--dbus-log[Force buffered logging in the D-Bus proxy]'
|
|
}
|
|
|
|
_hakurei_ps() {
|
|
_arguments \
|
|
'--short[List instances only]'
|
|
}
|
|
|
|
_hakurei_show() {
|
|
_alternative \
|
|
'instances:domains:__hakurei_instances' \
|
|
'files:files:__hakurei_files'
|
|
}
|
|
|
|
_hakurei_kill() {
|
|
_alternative \
|
|
'instances:domains:__hakurei_instances'
|
|
}
|
|
|
|
__hakurei_files() {
|
|
_files -g "*.(json|hakurei)"
|
|
return $?
|
|
}
|
|
|
|
__hakurei_instances() {
|
|
local -a out
|
|
shift -p
|
|
out=( ${(f)"$(_call_program commands hakurei ps --short 2>&1)"} )
|
|
if (( $#out == 0 )); then
|
|
_message "No active instances"
|
|
else
|
|
_describe "active instances" out
|
|
fi
|
|
return $?
|
|
}
|
|
|
|
(( $+functions[_hakurei_commands] )) || _hakurei_commands()
|
|
{
|
|
local -a _hakurei_cmds
|
|
_hakurei_cmds=(
|
|
"run:Load and start container from configuration file"
|
|
"exec:Configure and start a permissive container"
|
|
"show:Show live or local instance configuration"
|
|
"kill:Terminate an active instance"
|
|
"ps:List active instances"
|
|
"version:Display version information"
|
|
"license:Show full license text"
|
|
"template:Produce a config template"
|
|
"help:Show help message"
|
|
)
|
|
if (( CURRENT == 1 )); then
|
|
_describe -t commands 'action' _hakurei_cmds || compadd "$@"
|
|
else
|
|
local curcontext="$curcontext"
|
|
cmd="${${_hakurei_cmds[(r)$words[1]:*]%%:*}}"
|
|
if (( $+functions[_hakurei_$cmd] )); then
|
|
_hakurei_$cmd
|
|
else
|
|
_message "no more options"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
_arguments -C \
|
|
'-v[Increase log verbosity]' \
|
|
'--json[Serialise output in JSON when applicable]' \
|
|
'*::hakurei command:_hakurei_commands' |