feat: add various system and theme icons, configuration files, and support assets

This commit is contained in:
jschantli committed 2026-10-03 08:14:42 -07:00
1 parent 848dac4264
commit 54baea79f4
15893 files changed
+781426 -2

No files matched your search

@@ -0,0 +1,24 @@
_addpart_module()
{
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
case $COMP_CWORD in
1)
OPTS="--help --version $(lsblk -pnro name)"
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
;;
2)
# FIXME: how to determine next free partition number
;;
3)
COMPREPLY=( $(compgen -W "start" -- $cur) )
;;
4)
COMPREPLY=( $(compgen -W "length" -- $cur) )
;;
esac
return 0
}
complete -F _addpart_module addpart
@@ -0,0 +1,38 @@
_blkdiscard_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-o'|'--offset'|'-l'|'--length'|'-p'|'--step')
COMPREPLY=( $(compgen -W "num" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--force
--offset
--length
--quiet
--step
--secure
--zeroout
--verbose
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _blkdiscard_module blkdiscard
@@ -0,0 +1,100 @@
_blkid_module()
{
local cur prev OPTS OUTPUT_ALL
OUTPUT_ALL=''
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-c'|'--cache-file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-o'|'--output')
COMPREPLY=( $(compgen -W "value device export full" -- $cur) )
return 0
;;
'-s'|'--match-tag')
COMPREPLY=( $(compgen -W "tag" -- $cur) )
return 0
;;
'-t'|'--match-token')
COMPREPLY=( $(compgen -W "TYPE= LABEL= UUID=" -- $cur) )
return 0
;;
'-L'|'--label')
COMPREPLY=( $(compgen -W "$(cd /dev/disk/by-label/ 2>/dev/null && echo *)" -- $cur) )
return 0
;;
'-U'|'--uuid')
COMPREPLY=( $(compgen -W "$(cd /dev/disk/by-uuid/ 2>/dev/null && echo *)" -- $cur) )
return 0
;;
'-S'|'--size')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'-O'|'--offset')
COMPREPLY=( $(compgen -W "offset" -- $cur) )
return 0
;;
'-u'|'--usages')
OUTPUT_ALL={,no}{filesystem,raid,crypto,other}
;;
'-n'|'--match-types')
OUTPUT_ALL="
$(awk '{print $NF}' /proc/filesystems)
$(\ls /lib/modules/$(uname -r)/kernel/fs)
"
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
if [ -n "$OUTPUT_ALL" ]; then
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- "$realcur") )
return 0
fi
case $cur in
-*)
OPTS="
--cache-file
--no-encoding
--garbage-collect
--output
--list-filesystems
--match-tag
--match-token
--list-one
--label
--uuid
--probe
--info
--size
--offset
--usages
--match-types
--no-part-details
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _blkid_module blkid
@@ -0,0 +1,53 @@
_blkzone_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-o'|'--offset')
COMPREPLY=( $(compgen -W "sector" -- $cur) )
return 0
;;
'-l'|'--length')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'-c'|'--count')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
case $prev in
'report'|'reset')
OPTS="--verbose --offset --length --count --force"
;;
*)
OPTS="--help --version"
;;
esac
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
*)
case $prev in
'report'|'reset')
;;
*)
OPTS="report reset"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
;;
esac
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _blkzone_module blkzone
@@ -0,0 +1,46 @@
_blockdev_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
DEVS="$(lsblk -pnro name)"
OPTS="-h -V -q
--report
--getsz
--setro
--setrw
--getro
--getdiscardzeroes
--getdiskseq
--getss
--getpbsz
--getiomin
--getioopt
--getalignoff
--getmaxsect
--getbsz
--setbsz
--getsize64
--setra
--getra
--setfra
--getfra
--flushbufs
--rereadpt
$DEVS"
case $prev in
'--setbsz')
COMPREPLY=( $(compgen -W "bytes" -- $cur) )
return 0
;;
'--setra'|'--setfra')
COMPREPLY=( $(compgen -W "sectors" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _blockdev_module blockdev
@@ -0,0 +1,208 @@
# busctl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
__get_busnames() {
local mode=$1
local a b
busctl $mode list --no-legend --no-pager --full 2>/dev/null |
{ while read a b; do echo " $a"; done; };
}
__get_objects() {
local mode=$1
local busname=$2
local a b
busctl $mode tree --list --no-legend --no-pager $busname 2>/dev/null |
{ while read a b; do echo " $a"; done; };
}
__get_interfaces() {
local mode=$1
local busname=$2
local path=$3
local a b c
busctl $mode introspect --list --no-legend --no-pager $busname $path 2>/dev/null |
{ while read a b c; do [[ "$b" == "interface" ]] && echo " $a"; done; };
}
__get_members() {
local mode=$1
local busname=$2
local path=$3
local interface=$4
local type=$5
local flags=$6
local a b c d e
busctl $mode introspect --list --no-legend --no-pager $busname $path $interface 2>/dev/null |
sed -e 's/^\.//' |
{ while read a b c d e; do [[ "$b" == "$type" && ( -z $flags || "$e" == "$flags" ) ]] && echo " $a"; done; };
}
__get_signature() {
local mode=$1
local busname=$2
local path=$3
local interface=$4
local member=$5
local a b c d
busctl $mode introspect --list --no-legend --no-pager $busname $path $interface 2>/dev/null |
sed -e 's/^\.//' | { while read a b c d; do [[ "$a" == "$member" && "$c" != '-' ]] && echo " \"$c\""; done; };
}
_busctl() {
local i n verb comps mode
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
[STANDALONE]='-h --help --version --no-pager --no-legend --system --user
--show-machine --unique --acquired --activatable --list
-q --quiet --verbose --expect-reply=no --auto-start=no
--allow-interactive-authorization=no --augment-creds=no
--watch-bind=yes -j -l --full --xml-interface'
[ARG]='--address -H --host -M --machine --match --timeout --size --json
--destination'
)
if __contains_word "--user" ${COMP_WORDS[*]}; then
mode=--user
else
mode=--system
fi
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--host|-H)
comps=$(compgen -A hostname)
;;
--machine|-M)
comps=$( __get_machines )
;;
--json)
comps=$( busctl --json=help 2>/dev/null )
;;
--destination)
comps=$( __get_busnames $mode )
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[STANDALONE]='list help'
[BUSNAME]='status monitor capture tree'
[OBJECT]='introspect'
[METHOD]='call'
[EMIT]='emit'
[PROPERTY_GET]='get-property'
[PROPERTY_SET]='set-property'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
n=$((COMP_CWORD - i))
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
elif __contains_word "$verb" ${VERBS[BUSNAME]}; then
comps=$( __get_busnames $mode)
elif __contains_word "$verb" ${VERBS[OBJECT]}; then
if [[ $n -eq 1 ]] ; then
comps=$( __get_busnames $mode)
elif [[ $n -eq 2 ]] ; then
comps=$( __get_objects $mode ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 3 ]] ; then
comps=$( __get_interfaces $mode ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
else
comps=''
fi
elif __contains_word "$verb" ${VERBS[METHOD]}; then
if [[ $n -eq 1 ]] ; then
comps=$( __get_busnames $mode)
elif [[ $n -eq 2 ]] ; then
comps=$( __get_objects $mode ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 3 ]] ; then
comps=$( __get_interfaces $mode ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 4 ]] ; then
comps=$( __get_members $mode ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]} method)
elif [[ $n -eq 5 ]] ; then
comps=$( __get_signature $mode ${COMP_WORDS[COMP_CWORD-4]} ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
else
comps=''
fi
elif __contains_word "$verb" ${VERBS[EMIT]}; then
comps=''
elif __contains_word "$verb" ${VERBS[PROPERTY_GET]}; then
if [[ $n -eq 1 ]] ; then
comps=$( __get_busnames $mode)
elif [[ $n -eq 2 ]] ; then
comps=$( __get_objects $mode ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 3 ]] ; then
comps=$( __get_interfaces $mode ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 4 ]] ; then
comps=$( __get_members $mode ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]} property)
else
comps=''
fi
elif __contains_word "$verb" ${VERBS[PROPERTY_SET]}; then
if [[ $n -eq 1 ]] ; then
comps=$( __get_busnames $mode)
elif [[ $n -eq 2 ]] ; then
comps=$( __get_objects $mode ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 3 ]] ; then
comps=$( __get_interfaces $mode ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
elif [[ $n -eq 4 ]] ; then
comps=$( __get_members $mode ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]} property writable)
elif [[ $n -eq 5 ]] ; then
comps=$( __get_signature $mode ${COMP_WORDS[COMP_CWORD-4]} ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
else
comps=''
fi
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _busctl busctl
@@ -0,0 +1,32 @@
_cfdisk_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-L'|'--color')
COMPREPLY=( $(compgen -W "auto never always" -- $cur) )
return 0
;;
'-V'|'--version'|'h'|'--help')
return 0
;;
esac
case $cur in
-*)
OPTS=" --color
--zero
--lock
--help
--read-only
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _cfdisk_module cfdisk
@@ -0,0 +1,59 @@
_chcpu_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-e'|'--enable')
local prefix realcur CPULIST_ALL CPULIST
realcur="${cur##*,}"
prefix="${cur%$realcur}"
CPULIST_ALL=$(sed 's/^/{/; s/-/../g; s/,/} {/g; s/$/}/' /sys/devices/system/cpu/offline)
for WORD in $(eval echo $CPULIST_ALL); do
if ! [[ $prefix == *"$WORD"* ]]; then
CPULIST="$WORD ${CPULIST:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$CPULIST" -S ',' -- $realcur) )
return 0
;;
'-d'|'--disable')
local prefix realcur CPULIST_ALL CPULIST
realcur="${cur##*,}"
prefix="${cur%$realcur}"
CPULIST_ALL=$(sed 's/^/{/; s/-/../g; s/,/} {/g; s/$/}/' /sys/devices/system/cpu/online)
for WORD in $(eval echo $CPULIST_ALL); do
if ! [[ $prefix == *"$WORD"* ]]; then
CPULIST="$WORD ${CPULIST:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$CPULIST" -S ',' -- $realcur) )
return 0
;;
'-c'|'--configure'|'-g'|'--deconfigure')
COMPREPLY=( $(compgen -W "cpu-list" -- $cur) )
return 0
;;
'-p'|'--dispatch')
COMPREPLY=( $(compgen -W "horizontal vertical" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="--help
--enable
--disable
--configure
--deconfigure
--dispatch
--rescan
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _chcpu_module chcpu
@@ -0,0 +1,30 @@
_chmem_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--enable
--disable
--blocks
--verbose
--zone
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
COMPREPLY=( $(compgen -W "size range blockrange" -- $cur) )
return 0
}
complete -F _chmem_module chmem
@@ -0,0 +1,52 @@
_chrt_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
'-T'|'--sched-runtime'|'-P'|'--sched-period'|'-D'|'--sched-deadline')
COMPREPLY=( $(compgen -W "nanoseconds" -- $cur) )
return 0
;;
esac
case $cur in
-*)
OPTS="
--all-tasks
--batch
--deadline
--fifo
--help
--idle
--max
--other
--pid
--reset-on-fork
--rr
--sched-deadline
--sched-period
--sched-runtime
--verbose
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local i
for i in ${COMP_WORDS[*]}; do
case $i in
'-p'|'--pid')
COMPREPLY=( $(compgen -W "$(cd /proc && echo [0-9]*)" -- $cur) )
return 0
;;
esac
done
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _chrt_module chrt
@@ -0,0 +1,17 @@
_ctrlaltdel_module()
{
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $(compgen -W "hard soft" -- $cur) )
fi
return 0
}
complete -F _ctrlaltdel_module ctrlaltdel
@@ -0,0 +1,25 @@
_delpart_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $COMP_CWORD in
1)
OPTS="--help --version $(lsblk -pnro name)"
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
;;
2)
prev="${COMP_WORDS[COMP_CWORD-1]}"
COMPREPLY=( $(compgen -W "$(cat /sys/block/${prev##*/}/*/partition 2>/dev/null)" -- $cur) )
;;
esac
return 0
}
complete -F _delpart_module delpart
@@ -0,0 +1,68 @@
_dmesg_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-F'|'--file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-f'|'--facility')
COMPREPLY=( $(compgen -W "kern user mail daemon auth syslog lpr news" -- $cur) )
return 0
;;
'-l'|'--level'|'-n'|'--console-level')
COMPREPLY=( $(compgen -W "emerg alert crit err warn notice info debug" -- $cur) )
return 0
;;
'-s'|'--buffer-size')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'--time-format')
COMPREPLY=( $(compgen -W "delta reltime ctime notime iso" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="--clear
--read-clear
--console-off
--show-delta
--reltime
--console-on
--file
--facility
--human
--json
--kernel
--color
--level
--console-level
--noescape
--nopager
--raw
--syslog
--buffer-size
--ctime
--notime
--time-format
--userspace
--follow
--follow-new
--decode
--since
--until
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _dmesg_module dmesg
@@ -0,0 +1,41 @@
_fallocate_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-o'|'--offset'|'-l'|'--length')
COMPREPLY=( $(compgen -W "bytes" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--collapse-range
--dig-holes
--insert-range
--length
--keep-size
--offset
--punch-hole
--zero-range
--posix
--verbose
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _fallocate_module fallocate
@@ -0,0 +1,101 @@
_fdisk_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-s'|'--getsz')
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
;;
'-b'|'--sector-size')
COMPREPLY=( $(compgen -W "512 1024 2048 4096" -- $cur) )
return 0
;;
'-c'|'--compatibility')
COMPREPLY=( $(compgen -W "dos nondos" -- $cur) )
return 0
;;
'-L'|'--color')
COMPREPLY=( $(compgen -W "auto never always" -- $cur) )
return 0
;;
'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="
Attrs
Boot
Bsize
Cpg
Cylinders
Device
End
End-C/H/S
Flags
Fsize
Id
Name
Sectors
Size
Slice
Start
Start-C/H/S
Type
Type-UUID
UUID
"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- "$realcur") )
return 0
;;
'-u'|'--units')
COMPREPLY=( $(compgen -W "cylinders sectors" -- $cur) )
return 0
;;
'-C'|'--cylinders'|'-H'|'--heads'|'-S'|'--sectors')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-h'|'--help'|'-v'|'--version'|'-V'|'--list')
return 0
;;
esac
case $cur in
-*)
OPTS="--sector-size
--protect-boot
--compatibility
--color
--list
--list-details
--noauto-pt
--lock
--output
--type
--units
--getsz
--bytes
--wipe
--wipe-partitions
--cylinders
--heads
--sectors
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _fdisk_module fdisk
@@ -0,0 +1,34 @@
_findfs_module()
{
local cur prev OPTS findable
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
for i in $(lsblk -rpno label); do
findable+=" LABEL=$i"
done
for i in $(lsblk -rpno uuid); do
findable+=" UUID=$i"
done
for i in $(lsblk -rpno partlabel); do
findable+=" PARTLABEL=$i"
done
for i in $(lsblk -rpno partuuid); do
findable+=" PARTUUID=$i"
done
COMPREPLY=( $(compgen -W "$findable" -- $cur) )
return 0
}
complete -F _findfs_module findfs
@@ -0,0 +1,144 @@
_findmnt_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-p'|'--poll')
COMPREPLY=( $(compgen -W "=list" -- $cur) )
return 0
;;
'-w'|'--timeout')
COMPREPLY=( $(compgen -W "timeout" -- $cur) )
return 0
;;
'-d'|'--direction')
COMPREPLY=( $(compgen -W "forward backward" -- $cur) )
return 0
;;
'-F'|'--tab-file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-N'|'--task')
local TID='' I ARR
for I in /proc/*/mountinfo; do IFS=/ read -ra ARR <<< "$I"; TID+="${ARR[2]} "; done
COMPREPLY=( $(compgen -W "$TID" -- $cur) )
return 0
;;
'-O'|'--options')
local MTAB_3RD I
declare -a TMP_ARR
declare -A MNT_OPTS
while read MTAB_3RD; do
IFS=',' read -ra TMP_ARR <<<"$MTAB_3RD"
for I in ${TMP_ARR[@]}; do
MNT_OPTS[$I]='1'
done
done < <($1 -rno OPTIONS)
COMPREPLY=( $(compgen -W "${!MNT_OPTS[@]}" -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="SOURCE TARGET FSTYPE OPTIONS VFS-OPTIONS
FS-OPTIONS LABEL UUID PARTLABEL PARTUUID
MAJ\:MIN ACTION OLD-TARGET OLD-OPTIONS
SIZE AVAIL USED USE% FSROOT TID ID
OPT-FIELDS PROPAGATION FREQ PASSNO"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-t'|'--types')
local TYPES
TYPES="adfs affs autofs cifs coda coherent cramfs
debugfs devpts efs ext2 ext3 ext4 hfs
hfsplus hpfs iso9660 jfs minix msdos
ncpfs nfs nfs4 ntfs proc qnx4 ramfs
reiserfs romfs squashfs smbfs sysv tmpfs
ubifs udf ufs umsdos usbfs vfat xenix xfs"
COMPREPLY=( $(compgen -W "$TYPES" -- $cur) )
return 0
;;
'-S'|'--source')
local DEV_MPOINT
DEV_MPOINT=$($1 -rno SOURCE | grep ^/dev)
COMPREPLY=( $(compgen -W "$DEV_MPOINT" -- $cur) )
return 0
;;
'-T'|'--target')
local DEV_MPOINT
DEV_MPOINT=$($1 -rno TARGET)
COMPREPLY=( $(compgen -W "$DEV_MPOINT" -- $cur) )
return 0
;;
'-M'|'--mountpoint')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -o dirnames -- ${cur:-"/"}) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--fstab
--mtab
--kernel
--poll
--timeout
--all
--ascii
--canonicalize
--df
--direction
--evaluate
--tab-file
--first-only
--invert
--json
--list
--task
--noheadings
--notruncate
--options
--output
--output-all
--pairs
--raw
--types
--nofsroot
--submounts
--source
--target
--mountpoint
--help
--tree
--real
--pseudo
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local DEV_MPOINT
DEV_MPOINT=$($1 -rno TARGET,SOURCE)
COMPREPLY=( $(compgen -W "$DEV_MPOINT" -- $cur) )
return 0
}
complete -F _findmnt_module findmnt
@@ -0,0 +1,47 @@
_flock_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-w'|'--timeout')
COMPREPLY=( $(compgen -W "seconds" -- $cur) )
return 0
;;
'-E'|'--conflict-exit-code')
COMPREPLY=( $(compgen -W "{0..255}" -- $cur) )
return 0
;;
'-c'|'--command')
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--shared
--exclusive
--unlock
--nonblock
--timeout
--conflict-exit-code
--close
--command
--no-fork
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- ${cur:-"/"}) )
return 0
}
complete -F _flock_module flock
@@ -0,0 +1,39 @@
_fsck_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-b')
COMPREPLY=( $(compgen -W "superblock" -- $cur) )
return 0
;;
'-B')
COMPREPLY=( $(compgen -W "blocksize" -- $cur) )
return 0
;;
'-j')
COMPREPLY=( $(compgen -W "external_journal" -- $cur) )
return 0
;;
'-l'|'-L')
COMPREPLY=( $(compgen -W "bad_blocks_file" -- $cur) )
return 0
;;
'-?')
return 0
;;
esac
case $cur in
-*)
OPTS="-p -n -y -c -f -v -b -B -j -l -L"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _fsck_module fsck
@@ -0,0 +1,32 @@
_fsck.cramfs_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-b'|'--blocksize')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'--extract')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -o dirnames -- ${cur:-"/"}) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
COMPREPLY=( $(compgen -W "--verbose --blocksize --extract --help --version" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _fsck.cramfs_module fsck.cramfs
@@ -0,0 +1,17 @@
_fsck.minix_module()
{
local cur OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
case $cur in
-*)
OPTS="--list --auto --repair --verbose --super --uncleared --force --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _fsck.minix_module fsck.minix
@@ -0,0 +1,24 @@
_fsfreeze_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--freeze --unfreeze --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local MPOINT
MPOINT="$(findmnt -t ext2,ext3,ext4,reiserfs,jfs,xfs -o TARGET -n -r)"
COMPREPLY=( $(compgen -W "$MPOINT" -- $cur) )
return 0
}
complete -F _fsfreeze_module fsfreeze
@@ -0,0 +1,39 @@
_fstrim_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-o'|'--offset'|'-l'|'--length'|'-m'|'--minimum')
COMPREPLY=( $(compgen -W "num" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--all
--fstab
--listed-in
--quiet-unsupported
--offset
--length
--minimum
--types
--verbose
--dry-run
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local MPOINTS
MPOINTS=$(findmnt -rno SOURCE,TARGET | awk '/^\/dev/{print $2}')
COMPREPLY=( $(compgen -W "$MPOINTS" -- $cur) )
return 0
}
complete -F _fstrim_module fstrim
@@ -0,0 +1,55 @@
# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
__app() {
case "${COMP_CWORD}" in
1)
COMPREPLY=($(compgen -W "help version list-apps launch action list-actions" -- "${COMP_WORDS[1]}"))
return 0
;;
2)
case "${COMP_WORDS[1]}" in
launch|action|list-actions)
COMPREPLY=($(compgen -W "`gapplication list-apps`" -- "${COMP_WORDS[2]}"))
return 0
;;
*)
COMPREPLY=()
return 0
;;
esac
;;
esac
# Otherwise, what we will do is based on the command in ${COMP_WORDS[1]}
case "${COMP_WORDS[1]}" in
action)
# Word 3 is the action name. This is the only one we can help with.
if [ "${COMP_CWORD}" == 3 ]; then
COMPREPLY=($(compgen -W "`gapplication list-actions "${COMP_WORDS[2]}"`" -- "${COMP_WORDS[3]}"))
return 0
else
COMPREPLY=()
return 0
fi
;;
launch)
# Filenames...
COMPREPLY=($(compgen -A file "${COMP_WORDS[COMP_CWORD]}"))
return 0
;;
*)
# Nothing else should be out this far...
COMPREPLY=()
return 0
esac
}
####################################################################################################
complete -F __app gapplication
@@ -0,0 +1,33 @@
# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
__gdbus() {
local IFS=$'\n'
local cur=`_get_cword :`
local suggestions=$(gdbus complete "${COMP_LINE}" ${COMP_POINT})
COMPREPLY=($(compgen -W "$suggestions" -- "$cur"))
# Remove colon-word prefix from COMPREPLY items
case "$cur" in
*:*)
case "$COMP_WORDBREAKS" in
*:*)
local colon_word=${cur%${cur##*:}}
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
done
;;
esac
;;
esac
}
####################################################################################################
complete -o nospace -F __gdbus gdbus
@@ -0,0 +1,37 @@
_getopt_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-l'|'--longoptions')
COMPREPLY=( $(compgen -W "longopts" -- $cur) )
return 0
;;
'-n'|'--name')
COMPREPLY=( $(compgen -W "name" -- $cur) )
return 0
;;
'-o'|'--options')
COMPREPLY=( $(compgen -W "optstring" -- $cur) )
return 0
;;
'-s'|'--shell')
COMPREPLY=( $(compgen -W "sh bash csh tcsh" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--alternative --help --longoptions --name --options --quiet --quiet-output --shell --test --unquoted --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
return 0
}
complete -F _getopt_module getopt
@@ -0,0 +1,122 @@
#
# Copyright (C) 2018 Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# licence, or (at your option) any later version.
#
# This is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, see <http://www.gnu.org/licenses/>.
#
# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
# Check whether the suggestions have common prefix (i.e. suggestions won't be
# shown and prefix will be completed first)
__gio_has_common_prefix() {
local i
for (( i = 1; i < ${#COMPREPLY[@]}; i++ )); do
if [[ "${COMPREPLY[i-1]:${#cur}:1}" != "${COMPREPLY[i]:${#cur}:1}" ]]; then
return 1 # False
fi
done
return 0 # True
}
# Complete file location
__gio_location() {
# Prevent breaking on colons, we have to work with uris
local cur
_get_comp_words_by_ref -n : cur
# Resolve dirname for dir listing
local dir=""
if [[ $cur =~ "/"$ ]]; then
dir="$cur"
elif [[ $cur =~ "/" ]]; then
# Subtract basename because dirname cmd doesn't work well with schemes
dir=${cur%$(basename "$cur")}
fi
# List volumes and mounts
local mounts=( )
local mount
while IFS=$'\n' read mount; do
# Do not care about local mounts
[[ "$mount" =~ ^"file:" ]] && continue
# Use only matching mounts
[[ "$mount" =~ ^"$cur" && "$mount" != "$cur" ]] && mounts+=("$mount")
done < <(gio mount -li | sed -n -r 's/^ *(default_location|activation_root)=(.*)$/\2/p' | sort -u)
# Workaround to unescape dir name (e.g. "\ " -> " ")
local -a tmp="( ${dir} )"
local unescaped_dir="${tmp[0]}"
# List files
local files=()
local names=()
local name size type
while IFS=$'\t' read name size type; do
# Escape name properly
local escaped_name="$(printf "%q" "$name")"
# Append slash for directories and space for files
if [[ "$type" == "(directory)" ]]; then
escaped_name="$escaped_name/"
else
escaped_name="$escaped_name "
fi
local path="$dir$escaped_name"
# Use only matching paths
if [[ "$path" =~ ^"$cur" ]]; then
files+=("$path")
names+=("$escaped_name")
fi
done < <(gio list -hl "$unescaped_dir" 2> /dev/null)
COMPREPLY=("${files[@]}" "${mounts[@]}")
# Workaround to show suggestions as basenames only
if ! __gio_has_common_prefix; then
COMPREPLY=("${mounts[@]} ${names[@]}")
# Workaround to prevent overwriting suggestions, it adds empty
# suggestion, otherwise names with colons will be corrupted
COMPREPLY+=(" ")
return 0
fi
# Workaround to complete names with colons, it removes colon prefix from
# COMPREPLY
__ltrim_colon_completions "$cur"
}
__gio() {
# Complete subcommands
if (( ${COMP_CWORD} == 1 )); then
COMPREPLY=($(compgen -W "help version cat copy info launch list mime mkdir monitor mount move open rename remove save set trash tree" -- "${COMP_WORDS[1]}"))
compopt +o nospace
return 0
fi
# Complete file locations
__gio_location
}
####################################################################################################
complete -o nospace -F __gio gio
@@ -0,0 +1,58 @@
# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
__gresource() {
local choices coffset section
if [ ${COMP_CWORD} -gt 2 ]; then
if [ ${COMP_WORDS[1]} = --section ]; then
section=${COMP_WORDS[2]}
coffset=2
else
coffset=0
fi
else
coffset=0
fi
case "$((${COMP_CWORD}-$coffset))" in
1)
choices=$'--section \nhelp \nsections \nlist \ndetails \nextract '
;;
2)
case "${COMP_WORDS[$(($coffset+1))]}" in
--section)
return 0
;;
help)
choices=$'sections\nlist\ndetails\nextract'
;;
sections|list|details|extract)
COMPREPLY=($(compgen -f -- ${COMP_WORDS[${COMP_CWORD}]}))
return 0
;;
esac
;;
3)
case "${COMP_WORDS[$(($coffset+1))]}" in
list|details|extract)
choices="$(gresource list ${COMP_WORDS[$(($coffset+2))]} 2> /dev/null | sed -e 's.$. .')"
;;
esac
;;
esac
local IFS=$'\n'
COMPREPLY=($(compgen -W "${choices}" -- "${COMP_WORDS[${COMP_CWORD}]}"))
}
####################################################################################################
complete -o nospace -F __gresource gresource
@@ -0,0 +1,88 @@
# Check for bash
[ -z "$BASH_VERSION" ] && return
####################################################################################################
__gsettings() {
local choices coffset schemadir
if [ ${COMP_CWORD} -gt 2 ]; then
if [ ${COMP_WORDS[1]} = --schemadir ]; then
# this complexity is needed to perform correct tilde expansion
schemadir=$(eval "echo --schemadir ${COMP_WORDS[2]}")
coffset=2
else
coffset=0
fi
else
coffset=0
fi
case "$((${COMP_CWORD}-$coffset))" in
1)
choices=$'--schemadir\n--version\nhelp \nlist-schemas\nlist-relocatable-schemas\nlist-keys \nlist-children \nlist-recursively \nget \nrange \nset \nreset \nreset-recursively \nwritable \nmonitor \ndescribe '
;;
2)
case "${COMP_WORDS[$(($coffset+1))]}" in
--schemadir)
COMPREPLY=($(compgen -o dirnames -- ${COMP_WORDS[${COMP_CWORD}]}))
return 0
;;
help)
choices=$'list-schemas\nlist-relocatable-schemas\nlist-keys\nlist-children\nlist-recursively\nget\nrange\nset\nreset\nreset-recursively\nwritable\nmonitor'
;;
list-keys|list-children|list-recursively|reset-recursively)
choices="$(gsettings $schemadir list-schemas 2> /dev/null)"$'\n'"$(gsettings $schemadir list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')"
;;
list-schemas)
COMPREPLY=($(compgen -W "--print-paths" -- ${COMP_WORDS[${COMP_CWORD}]}))
return 0
;;
get|range|set|reset|writable|monitor|describe)
choices="$(gsettings $schemadir list-schemas 2> /dev/null | sed -e 's.$. .')"$'\n'"$(gsettings $schemadir list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')"
;;
esac
;;
3)
case "${COMP_WORDS[$(($coffset+1))]}" in
set)
choices="$(gsettings $schemadir list-keys ${COMP_WORDS[$(($coffset+2))]} 2> /dev/null | sed -e 's.$. .')"
;;
get|range|reset|writable|monitor|describe)
choices="$(gsettings $schemadir list-keys ${COMP_WORDS[$(($coffset+2))]} 2> /dev/null)"
;;
esac
;;
4)
case "${COMP_WORDS[$(($coffset+2))]}" in
set)
range=($(gsettings $schemadir range ${COMP_WORDS[$(($coffset+2))]} ${COMP_WORDS[$(($coffset+3))]} 2> /dev/null))
case "${range[0]}" in
enum)
unset range[0]
;;
*)
unset range
;;
esac
local IFS=$'\n'
choices="${range[*]}"
;;
esac
;;
esac
local IFS=$'\n'
COMPREPLY=($(compgen -W "${choices}" -- "${COMP_WORDS[${COMP_CWORD}]}"))
}
####################################################################################################
complete -o nospace -F __gsettings gsettings
@@ -0,0 +1,73 @@
_hardlink_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-x'|'--exclude')
COMPREPLY=( $(compgen -W "regex" -- $cur) )
return 0
;;
'-i'|'--include')
COMPREPLY=( $(compgen -W "regex" -- $cur) )
return 0
;;
'-s'|'--minimum-size')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-S'|'--maximum-size')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-b'|'--io-size')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-r'|'--cache-size')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-y'|'--method')
COMPREPLY=( $(compgen -W "sha256 sha1 crc32c memcmp" -- $cur) )
return 0
;;
'--reflink')
COMPREPLY=( $(compgen -W "never always auto" -- $cur) )
return 0
;;
'-H'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--content
--respect-dir
--respect-name
--maximize
--minimize
--dry-run
--ignore-owner
--keep-oldest
--ignore-mode
--quiet
--ignore-time
--verbose
--respect-xattrs
--skip-reflinks
--version
--help
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -d -- $cur) )
return 0
}
complete -F _hardlink_module hardlink
@@ -0,0 +1,92 @@
# hostnamectl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
machinectl list --full --no-legend --no-pager 2>/dev/null |
{ while read a b; do echo " $a"; done; };
}
_hostnamectl() {
local i verb comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
[STANDALONE]='-h --help --version --transient --static --pretty --no-ask-password'
[ARG]='-H --host -M --machine --json'
)
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--host|-H)
comps=$(compgen -A hostname)
;;
--machine|-M)
comps=$( __get_machines )
;;
--json)
comps=$( hostnamectl --json=help 2>/dev/null )
;;
*)
return 0
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[STANDALONE]='status'
[ICONS]='icon-name'
[NAME]='hostname deployment location'
[CHASSIS]='chassis'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[CHASSIS]}; then
comps='desktop laptop convertible server tablet handset watch embedded vm container'
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then
comps=''
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _hostnamectl hostnamectl
@@ -0,0 +1,50 @@
_ionice_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-c'|'--class')
COMPREPLY=( $(compgen -W "{0..3} none realtime best-effort idle" -- $cur) )
return 0
;;
'-n'|'--classdata')
COMPREPLY=( $(compgen -W "{0..7}" -- $cur) )
return 0
;;
'-P'|'--pgid')
local PGID
PGID="$(awk '{print $5}' /proc/*/stat 2>/dev/null | sort -u)"
COMPREPLY=( $(compgen -W "$PGID" -- $cur) )
return 0
;;
'-p'|'--pid')
local PIDS
PIDS=$(for I in /proc/[0-9]*; do echo ${I##"/proc/"}; done)
COMPREPLY=( $(compgen -W "$PIDS" -- $cur) )
return 0
;;
'-u'|'--uid')
local UIDS
UIDS="$(stat --format='%u' /proc/[0-9]* | sort -u)"
COMPREPLY=( $(compgen -W "$UIDS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--class --classdata --pid --pgid --ignore --uid --version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _ionice_module ionice
@@ -0,0 +1,27 @@
_ipcmk_module()
{
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-M'|'--shmem')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'-S'|'--semaphore')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-p'|'--mode')
COMPREPLY=( $(compgen -W "mode" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
COMPREPLY=( $(compgen -W "--shmem --semaphore --queue --mode --help --version" -- $cur) )
return 0
}
complete -F _ipcmk_module ipcmk
@@ -0,0 +1,62 @@
_ipcrm_module()
{
local cur prev OPTS KEYIDS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-m'|'--shmem-id')
KEYIDS="$(ipcs -m | awk '{if (3 < NR) {print $2}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-M'|'--shmem-key')
KEYIDS="$(ipcs -m | awk '{if (3 < NR) {print $1}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-q'|'--queue-id')
KEYIDS="$(ipcs -q | awk '{if (3 < NR) {print $2}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-Q'|'--queue-key')
KEYIDS="$(ipcs -q | awk '{if (3 < NR) {print $1}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-s'|'--semaphore-id')
KEYIDS="$(ipcs -s | awk '{if (3 < NR) {print $2}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-S'|'--semaphore-key')
KEYIDS="$(ipcs -s | awk '{if (3 < NR) {print $1}}')"
COMPREPLY=( $(compgen -W "$KEYIDS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
'=')
cur=${cur#=}
COMPREPLY=( $(compgen -W "shm msg sem" -- $cur) )
return 0
;;
esac
OPTS=" --shmem-id
--shmem-key
--queue-id
--queue-key
--semaphore-id
--semaphore-key
--all=
--verbose
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _ipcrm_module ipcrm
@@ -0,0 +1,33 @@
_ipcs_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-i'|'--id')
COMPREPLY=( $(compgen -W "id" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="--id
--help
--version
--shmems
--queues
--semaphores
--all
--time
--pid
--creator
--limits
--summary
--human
--bytes"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _ipcs_module ipcs
@@ -0,0 +1,27 @@
_isosize_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-d'|'--divisor')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
COMPREPLY=( $(compgen -W "--divisor --sectors --help --version" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _isosize_module isosize
@@ -0,0 +1,154 @@
# journalctl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
__syslog_priorities=(emerg alert crit err warning notice info debug)
__syslog_facilities=(kern user mail daemon auth syslog lpr news uucp cron authpriv ftp local0 local1 local2 local3 local4 local5 local6 local7)
_journalctl() {
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
[STANDALONE]='-a --all --full --system --user
--disk-usage -f --follow --header
-h --help -l --local -m --merge --no-pager
--no-tail -q --quiet --setup-keys --verify
--version --list-catalog --update-catalog --list-boots
--show-cursor --dmesg -k --pager-end -e -r --reverse
--utc -x --catalog --no-full --force --dump-catalog
--flush --rotate --sync --no-hostname -N --fields'
[ARG]='-b --boot -D --directory --file -F --field -t --identifier --facility
-M --machine -o --output -u --unit --user-unit -p --priority
--root --case-sensitive'
[ARGUNKNOWN]='-c --cursor --interval -n --lines -S --since -U --until
--after-cursor --cursor-file --verify-key -g --grep
--vacuum-size --vacuum-time --vacuum-files --output-fields'
)
# Use the default completion for shell redirect operators
if __contains_word "$prev" '>' '>>' '&>'; then
compopt -o filenames
COMPREPLY=( $(compgen -f -- "$cur") )
return 0;
fi
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
case $prev in
--boot|-b)
comps=$(journalctl -F '_BOOT_ID' 2>/dev/null)
;;
--directory|-D|--root)
comps=$(compgen -d -- "$cur")
compopt -o filenames
;;
--file)
comps=$(compgen -f -- "$cur")
compopt -o filenames
;;
--output|-o)
comps=$( journalctl --output=help 2>/dev/null )
;;
--field|-F)
comps=$(journalctl --fields | sort 2>/dev/null)
;;
--machine|-M)
comps=$( __get_machines )
;;
--facility)
comps=${__syslog_facilities[*]}
;;
--priority|-p)
comps=${__syslog_priorities[*]}
compopt -o nosort
;;
--unit|-u)
comps=$(journalctl -F '_SYSTEMD_UNIT' 2>/dev/null)
# Similarly to systemctl, we need to distinguish between
# escaped and unescaped names in order to be able to correctly
# complete them. In this particular case, if the name we're
# trying to complete is unescaped (i.e. foo\x2dbaz), escape
# it first, so the compgen below works as expected. For more
# information about these shenanigans see the systemctl
# completion file
if ! [[ $cur =~ '\\' ]]; then
cur="$(printf '%q' $cur)"
fi
compopt -o filenames
;;
--user-unit)
comps=$(journalctl -F '_SYSTEMD_USER_UNIT' 2>/dev/null)
;;
--identifier|-t)
comps=$(journalctl -F 'SYSLOG_IDENTIFIER' 2>/dev/null)
;;
--case-sensitive)
comps='yes no'
;;
*)
return 0
;;
esac
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
elif [[ $cur = *=* ]]; then
mapfile -t field_vals < <(journalctl -F "${prev%=}" 2>/dev/null)
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur#=}") )
elif [[ $cur = /dev* ]]; then
compopt -o filenames
COMPREPLY=( $(compgen -f -- "${cur}") )
elif [[ $cur = /* ]]; then
# Append /dev/ to the list of completions, so that
# after typing /<TAB><TAB> the user sees /dev/ as one
# of the alternatives. Later on the rule above will
# take care of showing device files in /dev/.
mapfile -t field_vals < <(journalctl -F "_EXE" 2>/dev/null; echo '/dev/')
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "${cur}") )
if [[ "${COMPREPLY[@]}" = '/dev/' ]]; then
compopt -o filenames
COMPREPLY=( $(compgen -f -- "${cur}") )
fi
elif [[ $prev = '=' ]]; then
mapfile -t field_vals < <(journalctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null)
COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "$cur") )
else
mapfile -t field_vals < <(journalctl --fields 2>/dev/null)
compopt -o nospace
COMPREPLY=( $(compgen -W '${field_vals[*]}' -S= -- "$cur") )
fi
}
complete -F _journalctl journalctl
@@ -0,0 +1,48 @@
# kernel-install(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
_kernel_install() {
local comps
local MACHINE_ID
local cur=${COMP_WORDS[COMP_CWORD]}
case $COMP_CWORD in
1)
comps="add remove"
;;
2)
comps=$(cd /lib/modules; echo [0-9]*)
if [[ ${COMP_WORDS[1]} == "remove" ]] && [[ -f /etc/machine-id ]]; then
read MACHINE_ID < /etc/machine-id
if [[ $MACHINE_ID ]] && ( [[ -d /boot/$MACHINE_ID ]] || [[ -L /boot/$MACHINE_ID ]] ); then
comps=$(cd "/boot/$MACHINE_ID"; echo [0-9]*)
fi
fi
;;
3)
[[ "$cur" ]] || cur=/lib/modules/${COMP_WORDS[2]}/vmlinuz
comps=$(compgen -f -- "$cur")
compopt -o filenames
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _kernel_install kernel-install
@@ -0,0 +1,53 @@
_last_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-f'|'--file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-n'|'--limit')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-s'|'--since'|'-t'|'--until'|'-p'|'--present')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'--time-format')
COMPREPLY=( $(compgen -W "notime short full iso" -- $cur) )
return 0
;;
esac
case $cur in
-*)
OPTS="
--hostlast
--dns
--file
--fulltimes
--ip
--limit
--nohostname
--since
--until
--present
--fullnames
--system
--time-format
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
COMPREPLY=( $(compgen -u -- $cur) )
return 0
}
complete -F _last_module last
@@ -0,0 +1 @@
last
@@ -0,0 +1,68 @@
_ldattach_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-s'|'--speed')
COMPREPLY=( $(compgen -W "speed" -- $cur) )
return 0
;;
'-c'|'--intro-command')
COMPREPLY=( $(compgen -W "string" -- $cur) )
return 0
;;
'-p'|'--pause')
COMPREPLY=( $(compgen -W "seconds" -- $cur) )
return 0
;;
'-i'|'--iflag')
local IFLAGS
IFLAGS="BRKINT ICRNL IGNBRK IGNCR IGNPAR IMAXBEL
INLCR INPCK ISTRIP IUCLC IUTF8 IXANY
IXOFF IXON PARMRK
-BRKINT -ICRNL -IGNBRK -IGNCR -IGNPAR -IMAXBEL
-INLCR -INPCK -ISTRIP -IUCLC -IUTF8 -IXANY
-IXOFF -IXON -PARMRK"
COMPREPLY=( $(compgen -W "$IFLAGS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--debug
--speed
--intro-command
--pause
--sevenbits
--eightbits
--noparity
--evenparity
--oddparity
--onestopbit
--twostopbits
--iflag
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
/*)
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
esac
local LDISC_DEVICE
LDISC_DEVICE="6PACK AX25 GIGASET GIGASET_M101 HCI HDLC IRDA M101
MOUSE PPP PPS R3964 SLIP STRIP SYNCPPP SYNC_PPP
TTY X25 /dev/"
COMPREPLY=( $(compgen -W "$LDISC_DEVICE" -- $cur) )
return 0
}
complete -F _ldattach_module ldattach
@@ -0,0 +1,96 @@
# localectl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__locale_fields=( LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME
LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER
LC_NAME LC_ADDRESS LC_TELEPHONE
LC_MEASUREMENT LC_IDENTIFICATION )
# LC_ALL is omitted on purpose
_localectl() {
local i verb comps locale_vals
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local OPTS='-h --help --version --no-convert --no-pager --no-ask-password
-H --host -M --machine'
if __contains_word "$prev" $OPTS; then
case $prev in
--host|-H)
comps=''
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[STANDALONE]='status list-locales list-keymaps list-x11-keymap-models list-x11-keymap-layouts list-x11-keymap-options'
[VARIANTS]='list-x11-keymap-variants'
[LOCALES]='set-locale'
[KEYMAPS]='set-keymap'
[X11]='set-x11-keymap'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[VARIANTS]}; then
comps=$(command localectl list-x11-keymap-layouts)
elif __contains_word "$verb" ${VERBS[LOCALES]}; then
if [[ $cur = *=* ]]; then
mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "${cur#=}") )
elif [[ $prev = "=" ]]; then
mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "$cur") )
else
compopt -o nospace
COMPREPLY=( $(compgen -W '${__locale_fields[*]}' -S= -- "$cur") )
fi
return 0
elif __contains_word "$verb" ${VERBS[KEYMAPS]}; then
comps=$(command localectl list-keymaps)
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[X11]}; then
comps=''
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _localectl localectl
@@ -0,0 +1,125 @@
# loginctl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_all_sessions () { loginctl --no-legend list-sessions | { while read -r a b; do printf "%s\n" "$a"; done; } ; }
__get_all_users () { loginctl --no-legend list-users | { while read -r a b; do printf "%s\n" "$b"; done; } ; }
__get_all_seats () { loginctl --no-legend list-seats | { while read -r a b; do printf "%s\n" "$a"; done; } ; }
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
_loginctl () {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local i verb comps
local -A OPTS=(
[STANDALONE]='--all -a --help -h --no-pager --version
--no-legend --no-ask-password -l --full --value'
[ARG]='--host -H --kill-whom --property -p --signal -s -M --machine
-n --lines -o --output -P'
)
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--signal|-s)
_signals
return
;;
--kill-whom|--kill-who)
comps='all leader'
;;
--host|-H)
comps=$(compgen -A hostname)
;;
--machine|-M)
comps=$( __get_machines )
;;
--property|-p|-P)
comps=''
;;
--output|-o)
comps=$( loginctl --output=help 2>/dev/null )
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[SESSIONS]='session-status show-session activate lock-session unlock-session terminate-session kill-session'
[USERS]='user-status show-user enable-linger disable-linger terminate-user kill-user'
[SEATS]='seat-status show-seat terminate-seat'
[STANDALONE]='list-sessions lock-sessions unlock-sessions list-users list-seats flush-devices'
[ATTACH]='attach'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps="${VERBS[*]}"
elif __contains_word "$verb" ${VERBS[SESSIONS]}; then
comps=$( __get_all_sessions )
elif __contains_word "$verb" ${VERBS[USERS]}; then
comps=$( __get_all_users )
elif __contains_word "$verb" ${VERBS[SEATS]}; then
comps=$( __get_all_seats )
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
elif __contains_word "$verb" ${VERBS[ATTACH]}; then
if [[ $prev = $verb ]]; then
comps=$( __get_all_seats )
else
comps=$(compgen -A file -- "$cur" )
compopt -o filenames
fi
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _loginctl loginctl
@@ -0,0 +1,79 @@
_losetup_module()
{
local cur prev OPTS ARG
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-d'|'--detach')
ARG="$($1 --output NAME | awk '{if (1 < NR) {print}}')"
COMPREPLY=( $(compgen -W "$ARG" -- $cur) )
return 0
;;
'-j'|'--associated')
ARG="$($1 --output BACK-FILE | awk '{if (1 < NR) {print}}')"
COMPREPLY=( $(compgen -W "$ARG" -- $cur) )
return 0
;;
'-c'|'--set-capacity')
ARG="$(for I in /dev/loop[0-9]*; do if [ -e $I ]; then echo $I; fi; done)"
COMPREPLY=( $(compgen -W "$ARG" -- $cur) )
return 0
;;
'-o'|'--offset'|'--sizelimit')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-O'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="NAME AUTOCLEAR BACK-FILE BACK-INO
BACK-MAJ:MIN MAJ:MIN OFFSET PARTSCAN RO
SIZELIMIT DIO"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--all
--detach
--detach-all
--find
--set-capacity
--associated
--nooverlap
--offset
--sizelimit
--partscan
--read-only
--show
--verbose
--json
--list
--noheadings
--output
--output-all
--raw
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _losetup_module losetup
@@ -0,0 +1,96 @@
_lsblk_module()
{
local cur prev OPTS LSBLK_COLS_ALL
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
LSBLK_COLS_ALL="
NAME KNAME PATH MAJ:MIN FSAVAIL FSSIZE FSTYPE FSUSED FSUSE% FSVER MOUNTPOINT
LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-WGRAN
ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX MQ
"
case $prev in
'-e'|'--exclude'|'-I'|'--include')
local realcur prefix MAJOR_ALL MAJOR I J
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for I in /sys/dev/block/*; do
J=${I##*/}
MAJOR_ALL="${MAJOR_ALL:-""} ${J%%:*}"
done
for WORD in ${MAJOR_ALL:-""}; do
if ! [[ $prefix == *"$WORD"* ]]; then
MAJOR="$WORD ${MAJOR:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "${MAJOR:-""}" -S ',' -- $realcur) )
return 0
;;
'-o'|'--output'|'-E'|'--dedup')
local prefix realcur LSBLK_COLS
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $LSBLK_COLS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
LSBLK_COLS="$WORD ${LSBLK_COLS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$LSBLK_COLS" -S ',' -- $realcur) )
return 0
;;
'-x'|'--sort')
compopt -o nospace
COMPREPLY=( $(compgen -W "$LSBLK_COLS_ALL" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--all
--bytes
--nodeps
--discard
--exclude
--fs
--help
--include
--json
--ascii
--list
--dedup
--merge
--perms
--noheadings
--output
--output-all
--paths
--pairs
--raw
--inverse
--topology
--scsi
--nvme
--virtio
--sort
--width
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$($1 -pnro name)" -- $cur) )
return 0
}
complete -F _lsblk_module lsblk
@@ -0,0 +1,54 @@
_lscpu_module()
{
local cur OPTS_ALL
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'--extended='|'=')
local prefix realcur OPTS
cur=${cur#=}
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OPTS_ALL="CPU CORE SOCKET NODE
BOOK DRAWER CACHE POLARIZATION ADDRESS
CONFIGURED ONLINE MAXMHZ MINMHZ"
for WORD in $OPTS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OPTS="$WORD ${OPTS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OPTS" -S ',' -- $realcur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS_ALL="--all
--online
--bytes
--caches
--offline
--json
--extended=
--parse=
--sysroot
--hex
--physical
--output-all
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS_ALL[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _lscpu_module lscpu
@@ -0,0 +1,71 @@
_lsipc_module()
{
local cur prev OPTS ARG
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-i'|'--id')
COMPREPLY=( $(compgen -W "id" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
'--time-format')
COMPREPLY=( $(compgen -W "short full iso" -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="
KEY ID OWNER PERMS CUID CUSER CGID
CGROUP UID USER GID GROUP CTIME
SIZE NATTCH STATUS ATTACH DETACH
COMMAND CPID LPID
USEDBYTES MSGS SEND RECV LSPID LRPID
NSEMS OTIME
RESOURCE DESCRIPTION LIMIT USED USE%
"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
esac
OPTS="
--shmems
--queues
--semaphores
--global
--id
--noheadings
--notruncate
--time-format
--bytes
--creator
--export
--json
--newline
--list
--output
--numeric-perms
--raw
--time
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _lsipc_module lsipc
@@ -0,0 +1,50 @@
_lslocks_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-p'|'--pid')
local PIDS
# /proc/locks can have 8 to 9 fields, see commit
# 55c0d16bab8cc84b72bf11cb2fdd8aa6205ac608
PIDS="$(awk '{print $(NF-3)}' /proc/locks)"
COMPREPLY=( $(compgen -W "$PIDS" -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="COMMAND PID TYPE SIZE MODE M START END PATH BLOCKER"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="
--json
--noinaccessible
--noheadings
--output
--output-all
--pid
--raw
--notruncate
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _lslocks_module lslocks
@@ -0,0 +1,78 @@
_lslogins_module()
{
local cur prev OPTS LSLOGINS_COLS_ALL
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
LSLOGINS_COLS_ALL="
USER UID GECOS HOMEDIR SHELL NOLOGIN PWD-LOCK PWD-EMPTY
PWD-DENY GROUP GID SUPP-GROUPS SUPP-GIDS LAST-LOGIN LAST-TTY
LAST-HOSTNAME FAILED-LOGIN FAILED-TTY HUSHED PWD-WARN
PWD-CHANGE PWD-MIN PWD-MAX PWD-EXPIR CONTEXT PROC
"
case $prev in
'-g'|'--groups')
COMPREPLY=( $(compgen -W "$(getent group | awk -F: '{print $1}')" -- $cur) )
return 0
;;
'-l'|'--logins')
COMPREPLY=( $(compgen -W "$(getent passwd | awk -F: '{print $1}')" -- $cur) )
return 0
;;
'--time-format')
COMPREPLY=( $(compgen -W "short full iso" -- $cur) )
return 0
;;
'--wtmp-file'|'--btmp-file'|'--lastlog')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur LSLOGINS_COLS
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $LSLOGINS_COLS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
LSLOGINS_COLS="$WORD ${LSLOGINS_COLS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$LSLOGINS_COLS" -S ',' -- $realcur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
COMPREPLY=( $(compgen -W "
--acc-expiration
--colon-separate
--export
--failed
--supp-groups
--groups
--last
--logins
--newline
--noheadings
--notruncate
--output
--output-all
--pwd
--raw
--system-accs
--time-format
--user-accs
--context
--print0
--wtmp-file
--btmp-file
--lastlog
--help
--version
" -- $cur) )
return 0
}
complete -F _lslogins_module lslogins
@@ -0,0 +1,53 @@
_lsmem_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL='RANGE SIZE STATE REMOVABLE BLOCK NODE ZONES'
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- "$realcur") )
return 0
;;
'-s'|'--sysroot')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -o dirnames -- ${cur:-"/"}) )
return 0
;;
'--summary')
COMPREPLY=( $(compgen -W "never always only" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="
--json
--pairs
--all
--bytes
--noheadings
--output
--output-all
--raw
--sysroot
--summary
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _lsmem_module lsmem
@@ -0,0 +1,58 @@
_lsns_module()
{
local cur prev OPTS LSNS_COLS_ALL
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
LSNS_COLS_ALL="
NS TYPE PATH NPROCS PID PPID COMMAND UID USER
"
case $prev in
'-o'|'--output')
local prefix realcur LSNS_COLS
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $LSNS_COLS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
LSNS_COLS="$WORD ${LSNS_COLS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$LSNS_COLS" -S ',' -- $realcur) )
return 0
;;
'-p'|'--task')
COMPREPLY=( $(compgen -W "$(cd /proc && echo [0-9]*)" -- $cur) )
return 0
;;
'-t'|'--type')
COMPREPLY=( $(compgen -W "mnt net ipc user pid uts cgroup" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
COMPREPLY=( $(compgen -W "
--json
--list
--noheadings
--output
--output-all
--persistent
--task
--raw
--notruncate
--type
--help
--version
" -- $cur) )
return 0
;;
esac
COMPREPLY=( $(compgen -W "mnt net pid uts ipc user" -- $cur ) )
return 0
}
complete -F _lsns_module lsns
@@ -0,0 +1,31 @@
_mcookie_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-f'|'--file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-m'|'--max-size')
COMPREPLY=( $(compgen -W "bytes" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--file --max-size --verbose --version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
return 0
}
complete -F _mcookie_module mcookie
@@ -0,0 +1,22 @@
_mesg_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--verbose --version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
COMPREPLY=( $(compgen -W "y n" -- $cur) )
return 0
}
complete -F _mesg_module mesg
@@ -0,0 +1,28 @@
_mkfs_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-t'|'--type')
FSTYPES=$(for I in /sbin/mkfs.* /usr/sbin/mkfs.*; do if [ -e $I ]; then echo ${I##*mkfs.}; fi; done)
COMPREPLY=( $(compgen -W "$FSTYPES" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS='--type --verbose --help --version'
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _mkfs_module mkfs
@@ -0,0 +1,31 @@
_mkfs.bfs_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-N'|'--inodes')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-V'|'--vname'|'-F'|'--fname')
COMPREPLY=( $(compgen -W "name" -- $cur) )
return 0
;;
'-h'|'--help'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS='--inodes --vname --fname --verbose --help --version'
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _mkfs.bfs_module mkfs.bfs
@@ -0,0 +1,43 @@
_mkfs.cramfs_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-b')
COMPREPLY=( $(compgen -W "blksize" -- $cur) )
return 0
;;
'-e')
COMPREPLY=( $(compgen -W "edition" -- $cur) )
return 0
;;
'-N')
COMPREPLY=( $(compgen -W "big little host" -- $cur) )
return 0
;;
'-i')
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-n')
COMPREPLY=( $(compgen -W "name" -- $cur) )
return 0
;;
'-h'|'-V')
return 0
;;
esac
case $cur in
-*)
OPTS="-h -v -E -b -e -N -i -n -p -s -z"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _mkfs.cramfs_module mkfs.cramfs
@@ -0,0 +1,33 @@
_mkfs.minix_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-i'|'--inodes')
COMPREPLY=( $(compgen -W "inodes" -- $cur) )
return 0
;;
'-l'|'--badblocks')
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-n'|'--namelength')
COMPREPLY=( $(compgen -W "14 30 60" -- $cur) )
return 0
;;
esac
case $cur in
-*)
OPTS="--namelength --inodes --check --badblocks --help --version -1 -2 -3"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _mkfs.minix_module mkfs.minix
@@ -0,0 +1,39 @@
_mkswap_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-p'|'--pagesize')
COMPREPLY=( $(compgen -W "bytes" -- $cur) )
return 0
;;
'-L'|'--label')
COMPREPLY=( $(compgen -W "label" -- $cur) )
return 0
;;
'-v'|'--swapversion')
COMPREPLY=( $(compgen -W "1" -- $cur) )
return 0
;;
'-U'|'--uuid')
COMPREPLY=( $(compgen -W "$(uuidgen -r)" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--check --force --pagesize --lock --label --swapversion --uuid --verbose --version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _mkswap_module mkswap
@@ -0,0 +1,45 @@
_more_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-n'|'--lines')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--silent
--logical
--no-pause
--print-over
--clean-print
--squeeze
--plain
--lines
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
+*)
OPTS="+number +/pattern"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _more_module more
@@ -0,0 +1,102 @@
_mount_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-t'|'--types')
local prefix realcur TYPES
TYPES="
$(\ls /lib/modules/$(uname -r)/kernel/fs | awk '{print $1, "no" $1}')
$(awk '{print $NF, "no" $NF}' /proc/filesystems)
"
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $TYPES; do
if ! [[ $prefix == *"$WORD"* ]]; then
TYPE_COLS="$WORD ${TYPE_COLS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$TYPE_COLS" -S ',' -- $realcur) )
return 0
;;
'-L'|'--label')
local LABELS
LABELS="$(lsblk -o LABEL -nr)"
COMPREPLY=( $(compgen -W "$LABELS" -- $cur) )
return 0
;;
'-U'|'--uuid')
local UUIDS
UUIDS="$(lsblk -o UUID -nr)"
COMPREPLY=( $(compgen -W "$UUIDS" -- $cur) )
return 0
;;
'-N'|'--namespace')
local NAMESPACE
NAMESPACE="$(lsns --type mnt --output PATH --noheadings)"
COMPREPLY=( $(compgen -W "$NAMESPACE" -- $cur) )
return 0
;;
'--options-mode')
COMPREPLY=( $(compgen -W "ignore append prepend replace" -- $cur) )
return 0
;;
'--options-source')
COMPREPLY=( $(compgen -W "fstab mtab disable" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS=" --all
--no-canonicalize
--fake
--fork
--fstab
--help
--internal-only
--show-labels
--no-mtab
--options
--options-mode
--options-source
--options-source-force
--test-opts
--read-only
--types
--source
--target
--verbose
--version
--read-write
--namespace
--label
--uuid
--bind
--move
--rbind
--make-shared
--make-slave
--make-private
--make-unbindable
--make-rshared
--make-rslave
--make-rprivate
--make-runbindable
--mkdir"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _mount_module mount
@@ -0,0 +1,24 @@
_mountpoint_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--quiet --nofollow --fs-devno --devno --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- ${cur:-"/"}) )
return 0
}
complete -F _mountpoint_module mountpoint
@@ -0,0 +1,24 @@
_namei_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--help --version --mountpoints --modes --owners --long --nosymlinks --vertical"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _namei_module namei
@@ -0,0 +1,84 @@
# networkctl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
return 1
}
__get_links() {
networkctl list --no-legend --no-pager --all --full | { while read -r a b c; do echo " $b"; done; };
}
_networkctl() {
local i verb comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-a --all -h --help --version --no-pager --no-legend -s --stats -l --full'
[ARG]='-n --lines --json'
)
local -A VERBS=(
[STANDALONE]='label reload'
[LINKS]='status list lldp delete renew up down forcerenew reconfigure'
)
_init_completion || return
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--json)
comps=$(networkctl --json=help | sort 2>/dev/null)
;;
*)
return 0
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
elif __contains_word "$verb" ${VERBS[LINKS]}; then
comps=$( __get_links )
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _networkctl networkctl
@@ -0,0 +1,66 @@
_nsenter_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-S'|'--uid')
COMPREPLY=( follow $(compgen -W "uid" -- $cur) )
return 0
;;
'-G'|'--gid')
COMPREPLY=( follow $(compgen -W "gid" -- $cur) )
return 0
;;
'-t'|'--target')
local PIDS
PIDS=$(cd /proc && echo [0-9]*)
COMPREPLY=( $(compgen -W "$PIDS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
'=')
# FIXME: --root and --wd should use get only
# directories as compgen output. If $cur is
# overwrote the same way as below in case segment
# for $prev the command-line will get mangled.
cur=${cur#=}
;;
-*)
OPTS="
--all
--target
--mount=
--uts=
--ipc=
--net=
--pid=
--cgroup=
--user=
--time=
--setuid
--setgid
--preserve-credentials
--root=
--wd=
--wdns=
--env
--no-fork
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _nsenter_module nsenter
@@ -0,0 +1,66 @@
_partx_module()
{
local cur prev OPTS OUTPUT_ALL
COMPREPLY=()
OUTPUT_ALL="NR START END SECTORS SIZE NAME UUID TYPE FLAGS SCHEME"
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-n'|'--nr')
return 0
;;
'-o'|'--output')
local realcur prefix OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-S'|'--sector-size')
COMPREPLY=( $(compgen -W "size" -- $cur) )
return 0
;;
'-t'|'--type')
COMPREPLY=( $(compgen -W "$(partx --list-types)" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--add
--delete
--update
--show
--bytes
--noheadings
--nr
--output
--output-all
--pairs
--raw
--sector-size
--type
--list-types
--verbose
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _partx_module partx
@@ -0,0 +1,21 @@
_pivot_root_module()
{
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $COMP_CWORD in
1|2)
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -o dirnames -- ${cur:-"/"}) )
;;
esac
return 0
}
complete -F _pivot_root_module pivot_root
@@ -0,0 +1,69 @@
_prlimit_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-p'|'--pid')
PIDS=$(cd /proc && echo [0-9]*)
COMPREPLY=( $(compgen -W "$PIDS" -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="DESCRIPTION RESOURCE SOFT HARD UNITS"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
'=')
cur=${cur#=}
# FIXME: is there anything what could be printed
# as limit value(s)
;;
-*)
OPTS="--pid
--output
--noheadings
--raw
--verbose
--help
--version
--core=
--data=
--nice=
--fsize=
--sigpending=
--memlock=
--rss=
--nofile=
--msgqueue=
--rtprio=
--stack=
--cpu=
--nproc=
--as=
--locks=
--rttime="
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _prlimit_module prlimit
@@ -0,0 +1,37 @@
_readprofile_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-m'|'--mapfile'|'-p'|'--profile')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-M'|'--multiplier')
COMPREPLY=( $(compgen -W "multiplier" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="--mapfile
--profile
--multiplier
--info
--verbose
--all
--histbin
--counters
--reset
--no-auto
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _readprofile_module readprofile
@@ -0,0 +1,28 @@
_resizepart_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $COMP_CWORD in
1)
OPTS="--help --version $(lsblk -pnro name)"
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
;;
2)
prev="${COMP_WORDS[COMP_CWORD-1]}"
COMPREPLY=( $(compgen -W "$(cat /sys/block/${prev##*/}/*/partition 2>/dev/null)" -- $cur) )
;;
3)
COMPREPLY="length"
;;
esac
return 0
}
complete -F _resizepart_module resizepart
@@ -0,0 +1,24 @@
_rev_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--version --help --zero"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _rev_module rev
@@ -0,0 +1,59 @@
_rtcwake_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-A'|'--adjfile')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-d'|'--device')
local RTC_DEVS
RTC_DEVS=$(cd /sys/class/rtc/ && echo *)
COMPREPLY=( $(compgen -W "$RTC_DEVS" -- $cur) )
return 0
;;
'-m'|'--mode')
COMPREPLY=( $(compgen -W "$(rtcwake --list-modes)" -- $cur) )
return 0
;;
'-s'|'--seconds')
COMPREPLY=( $(compgen -W "seconds" -- $cur) )
return 0
;;
'-t'|'--time')
COMPREPLY=( $(compgen -W "time_t" -- $cur) )
return 0
;;
'--date')
COMPREPLY=( $(compgen -W "YYYYMMDDhhmmss" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
OPTS="
--auto
--adjfile
--date
--device
--dry-run
--local
--list-modes
--mode
--seconds
--time
--utc
--verbose
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _rtcwake_module rtcwake
@@ -0,0 +1 @@
su
@@ -0,0 +1,44 @@
_setarch_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $(compgen -W "$($1 --list)" -- $cur) )
return 0
fi
case $cur in
-*)
OPTS="
--32bit
--fdpic-funcptrs
--short-inode
--addr-compat-layout
--addr-no-randomize
--whole-seconds
--sticky-timeouts
--read-implies-exec
--mmap-page-zero
--3gb
--4gb
--uname-2.6
--verbose
--list
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _setarch_module setarch
@@ -0,0 +1,125 @@
_setpriv_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'--ambient-caps'|'--inh-caps'|'--bounding-set')
local prefix realcur INHERIT_ALL INHERIT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
INHERIT_ALL=$($1 --list-caps| awk '{print $1, "-" $1}')
for WORD in $INHERIT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
INHERIT="$WORD ${INHERIT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$INHERIT" -S ',' -- $realcur) )
return 0
;;
'--ruid'|'--euid'|'--reuid')
local UIDS
UIDS=$(getent passwd | awk -F: '{print $1}')
COMPREPLY=( $(compgen -W "$UIDS" -- $cur) )
return 0
;;
'--rgid'|'--egid'|'--regid')
local GIDS
GIDS=$(getent group | awk -F: '{print $1}')
COMPREPLY=( $(compgen -W "$GIDS" -- $cur) )
return 0
;;
'--groups')
local prefix realcur GIDS_ALL GIDS
realcur="${cur##*,}"
prefix="${cur%$realcur}"
GIDS_ALL=$(getent group | awk -F: '{print $3}')
for WORD in $GIDS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
GIDS="$WORD ${GIDS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$GIDS" -S ',' -- $realcur) )
return 0
;;
'--securebits')
local prefix realcur SBITS_ALL SBITS WORD
realcur="${cur##*,}"
prefix="${cur%$realcur}"
SBITS_ALL="
{+,-}keep_caps_locked
{+,-}noroot
{+,-}noroot_locked
{+,-}no_setuid_fixup
{+,-}no_setuid_fixup_locked
"
for WORD in $SBITS_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
SBITS="$WORD ${SBITS:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$SBITS" -S ',' -- $realcur) )
return 0
;;
'--pdeathsig')
local i signals
for i in $(kill -l); do
case $i in
SIG*)
signals+="$i "
;;
esac
done
COMPREPLY=( $(compgen -W "keep clear $signals" -- $cur) )
return 0
;;
'--selinux-label')
# FIXME: how to list selinux labels?
COMPREPLY=( $(compgen -W "label" -- $cur) )
return 0
;;
'--apparmor-profile')
# FIXME: how to list apparmor profiles?
COMPREPLY=( $(compgen -W "profile" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--dump
--no-new-privs
--ambient-caps
--inh-caps
--bounding-set
--ruid
--euid
--rgid
--egid
--reuid
--regid
--clear-groups
--keep-groups
--groups
--securebits
--pdeathsig
--reset-env
--selinux-label
--apparmor-profile
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _setpriv_module setpriv
@@ -0,0 +1,23 @@
_setsid_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--ctty --wait --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _setsid_module setsid
@@ -0,0 +1,127 @@
_setterm_module()
{
local bright cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'--term')
local TERM_LIST I
TERM_LIST=''
for I in /usr/share/terminfo/?/*; do
TERM_LIST+="${I##*/} "
done
COMPREPLY=( $(compgen -W "$TERM_LIST" -- $cur) )
return 0
;;
'--foreground'|'--background')
COMPREPLY=( $(compgen -W "black blue cyan default green magenta red white yellow" -- $cur) )
return 0
;;
'--ulcolor'|'--hbcolor'|'bright')
if [ $prev != 'bright' ]; then
bright='bright black grey'
else
bright=''
fi
COMPREPLY=( $(compgen -W "$bright blue cyan green magenta red white yellow" -- $cur) )
return 0
;;
'--cursor'|'--repeat'|'--appcursorkeys'|'--linewrap'|'--inversescreen'|'--bold'|'--half-bright'|'--blink'|'--reverse'|'--underline'|'--msg')
COMPREPLY=( $(compgen -W "off on" -- $cur) )
return 0
;;
'--clear')
COMPREPLY=( $(compgen -W "all rest" -- $cur) )
return 0
;;
'--tabs'|'--clrtabs')
COMPREPLY=( $(compgen -W "tab1 tab2 tab3 tab160" -- $cur) )
return 0
;;
'--regtabs')
COMPREPLY=( $(compgen -W "{1..160}" -- $cur) )
return 0
;;
'--blank')
COMPREPLY=( $(compgen -W "{0..60} force poke" -- $cur) )
return 0
;;
'--dump'|'--append')
local NUM_CONS
NUM_CONS=(/dev/vcsa?*)
COMPREPLY=( $(compgen -W "{1..${#NUM_CONS[*]}}" -- $cur) )
return 0
;;
'--file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'--msglevel')
COMPREPLY=( $(compgen -W "{0..8}" -- $cur) )
return 0
;;
'--powersave')
COMPREPLY=( $(compgen -W "on vsync hsync powerdown off" -- $cur) )
return 0
;;
'--powerdown')
COMPREPLY=( $(compgen -W "{0..60}" -- $cur) )
return 0
;;
'--blength')
COMPREPLY=( $(compgen -W "0-2000" -- $cur) )
return 0
;;
'--bfreq')
COMPREPLY=( $(compgen -W "freqnumber" -- $cur) )
return 0
;;
'--help'|'--version')
return 0
;;
esac
OPTS=" --term
--reset
--resize
--initialize
--cursor
--repeat
--appcursorkeys
--linewrap
--default
--foreground
--background
--ulcolor
--hbcolor
--ulcolor
--hbcolor
--inversescreen
--bold
--half-bright
--blink
--reverse
--underline
--store
--clear
--tabs
--clrtabs
--regtabs
--blank
--dump
--append
--file
--msg
--msglevel
--powersave
--powerdown
--blength
--bfreq
--version
--help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
}
complete -F _setterm_module setterm
@@ -0,0 +1,102 @@
_sfdisk_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-d'|'--dump'|'-J'|'--json'|'-l'|'--list'|'-F'|'--list-free'|'-r'|'--reorder'|'-s'|'--show-size'|'-V'|'--verify'|'-A'|'--activate'|'--delete')
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -dpnro name)" -- $cur) )
return 0
;;
'-N'|'--partno')
COMPREPLY=( $(compgen -W "number" -- $cur) )
return 0
;;
'--color'|'-w'|'--wipe'|'-W'|'--wipe-partitions')
COMPREPLY=( $(compgen -W "auto never always" -- $cur) )
return 0
;;
'-o'|'--output')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="
Attrs Boot Bsize Cpg Cylinders Device End
End-C/H/S Flags Fsize Id Name Sectors Size
Slice Start Start-C/H/S Type Type-UUID UUID
"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- "$realcur") )
return 0
;;
'-O'|'--backup-file')
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
;;
'-h'|'--help'|'-v'|'--version')
return 0
;;
esac
case $cur in
'=')
cur=${cur#=}
;;
-*)
OPTS="
--activate
--dump
--json
--show-geometry
--list
--list-free
--disk-id
--reorder
--show-size
--list-types
--verify
--relocate
--delete
--part-label
--part-type
--part-uuid
--part-attrs
--append
--backup
--backup-pt-sectors
--bytes
--move-data
--force
--color
--lock
--partno
--no-act
--no-reread
--no-tell-kernel
--backup-file
--output
--quiet
--wipe
--wipe-partitions
--label
--label-nested
--help
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault -o default
COMPREPLY=( $(compgen -W "$(lsblk -pnro name)" -- $cur) )
return 0
}
complete -F _sfdisk_module sfdisk
@@ -0,0 +1,48 @@
_su_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-'|'-u'|'--user')
COMPREPLY=( $(compgen -u -- $cur) )
return 0
;;
'-g'|'--group'|'-G'|'--supp-group')
COMPREPLY=( $(compgen -g -- $cur) )
return 0
;;
'-s'|'--shell')
COMPREPLY=( $(compgen -W "$(chsh -l)" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS=" --user
--preserve-environment
--whitelist-environment
--group
--supp-group
--login
--command
--session-command
--fast
--shell
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -u -- $cur) )
return 0
}
complete -F _su_module su
complete -F _su_module runuser
@@ -0,0 +1,32 @@
_swaplabel_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-L'|'--label')
COMPREPLY=( $(compgen -W "label" -- $cur) )
return 0
;;
'-U'|'--uuid')
COMPREPLY=( $(compgen -W '$(uuidgen)' -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--label --uuid --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _swaplabel_module swaplabel
@@ -0,0 +1,38 @@
_swapoff_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-a'|'--all')
return 0
;;
'-U'|'UUID=')
COMPREPLY=( $(compgen -W "$(swapon --show=UUID --noheading)" -- $cur) )
return 0
;;
'-L'|'LABEL=')
COMPREPLY=( $(compgen -W "$(swapon --show=LABEL --noheading)" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="-L
-U
--all
--verbose
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
COMPREPLY=( $(compgen -W "$(swapon --show=NAME --raw --noheading)" -- $cur) )
return 0
}
complete -F _swapoff_module swapoff
@@ -0,0 +1,85 @@
_swapon_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-p'|'--priority')
# Priority range is -1 to 32767. Perhaps these
# few are enough.
COMPREPLY=( $(compgen -W "{-1..9} 32767" -- $cur) )
return 0
;;
'--show')
local prefix realcur OUTPUT_ALL OUTPUT
realcur="${cur##*,}"
prefix="${cur%$realcur}"
OUTPUT_ALL="NAME TYPE SIZE USED PRIO UUID LABEL"
for WORD in $OUTPUT_ALL; do
if ! [[ $prefix == *"$WORD"* ]]; then
OUTPUT="$WORD ${OUTPUT:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$OUTPUT" -S ',' -- $realcur) )
return 0
;;
'-U'|'UUID=')
local UUIDS
UUIDS="$(lsblk -nrp -o FSTYPE,UUID | awk '$1 ~ /swap/ { print $2 }')"
COMPREPLY=( $(compgen -W "$UUIDS" -- $cur) )
return 0
;;
'-L'|'LABEL=')
local LABELS
LABELS="$(lsblk -nrp -o FSTYPE,LABEL | awk '$1 ~ /swap/ { print $2 }')"
COMPREPLY=( $(compgen -W "$LABELS" -- $cur) )
return 0
;;
'PARTUUID=')
local PARTUUIDS
PARTUUIDS="$(lsblk -nrp -o FSTYPE,PARTUUID | awk '$1 ~ /swap/ { print $2 }')"
COMPREPLY=( $(compgen -W "$PARTUUIDS" -- $cur) )
return 0
;;
'PARTLABEL=')
local PARTLABELS
PARTLABELS="$(lsblk -nrp -o FSTYPE,PARTLABEL | awk '$1 ~ /swap/ { print $2 }')"
COMPREPLY=( $(compgen -W "$PARTLABELS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--all
--discard
--ifexists
--fixpgsz
--fstab
--priority
--summary
--show
--output-all
--noheadings
--raw
--bytes
--verbose
-L
-U
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local DEVS
DEVS="$(lsblk -nrp -o FSTYPE,NAME | awk '$1 ~ /swap/ { print $2 }')"
compopt -o nospace
COMPREPLY=( $(compgen -fW "$DEVS LABEL= UUID= PARTLABEL= PARTUUID=" -- $cur) )
return 0
}
complete -F _swapon_module swapon
@@ -0,0 +1,404 @@
# systemctl(1) completion -*- shell-script -*-
# vi: ft=sh
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
__systemctl() {
local mode=$1; shift 1
systemctl $mode --full --legend=no --no-pager --plain "$@" 2>/dev/null
}
__systemd_properties() {
/usr/lib/systemd/systemd --dump-bus-properties
}
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__filter_units_by_properties () {
local mode=$1 properties=$2; shift 2
local units=("$@")
local props i p n
local names= count=0
IFS=$',' read -r -a p < <(echo "Names,$properties")
n=${#p[*]}
readarray -t props < \
<(__systemctl $mode show --property "Names,$properties" -- "${units[@]}")
for ((i=0; i < ${#props[*]}; i++)); do
if [[ -z ${props[i]} ]]; then
if (( count == n )) && [[ -n $names ]]; then
echo $names
fi
names=
count=0
else
(( count++ ))
if [[ ${props[i]%%=*} == 'Names' ]]; then
names=${props[i]#*=}
fi
fi
done
if (( count == n )) && [[ -n $names ]]; then
echo $names
fi
}
__get_all_units () { { __systemctl $1 list-unit-files "$2*"; __systemctl $1 list-units --all "$2*"; } \
| { while read -r a b; do echo " $a"; done; }; }
__get_non_template_units() { { __systemctl $1 list-unit-files "$2*"; __systemctl $1 list-units --all "$2*"; } \
| { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }; }
__get_template_names () { __systemctl $1 list-unit-files "$2*" \
| { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; }
__get_active_units () { __systemctl $1 list-units "$2*" \
| { while read -r a b; do echo " $a"; done; }; }
__get_active_services() { __systemctl $1 list-units "$2*.service" \
| { while read -r a b; do echo " $a"; done; }; }
__get_not_masked_unit_files() {
# filter out masked, not-found, or template units.
__systemctl $1 list-unit-files --state enabled,enabled-runtime,linked,linked-runtime,static,indirect,disabled,generated,transient "$2*" | \
{ while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }
}
__get_startable_units () {
__filter_units_by_properties $1 ActiveState=inactive,CanStart=yes $(
{ __get_not_masked_unit_files $1 $2
# get inactive template units
__systemctl $1 list-units --state inactive,failed "$2*" | \
{ while read -r a b c; do [[ $b == "loaded" ]] && echo " $a"; done; }
} | sort -u )
}
__get_restartable_units () {
# filter out masked and not-found
__filter_units_by_properties $1 CanStart=yes $(
{ __get_not_masked_unit_files $1 $2
__get_active_units $1 $2
} | sort -u )
}
__get_stoppable_units () {
# filter out masked and not-found
local units=$(
{ __get_not_masked_unit_files $1 $2
__get_active_units $1 $2
} | sort -u )
__filter_units_by_properties $1 ActiveState=active,CanStop=yes $units
__filter_units_by_properties $1 ActiveState=reloading,CanStop=yes $units
__filter_units_by_properties $1 ActiveState=activating,CanStop=yes $units
}
__get_reloadable_units () {
# filter out masked and not-found
__filter_units_by_properties $1 ActiveState=active,CanReload=yes $(
{ __get_not_masked_unit_files $1 $2
__get_active_units $1 $2
} | sort -u )
}
__get_failed_units() { __systemctl $1 list-units "$2*" \
| while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }
__get_enabled_units() { __systemctl $1 list-unit-files "$2*" \
| while read -r a b c ; do [[ $b == "enabled" ]] && echo " $a"; done; }
__get_disabled_units() { __systemctl $1 list-unit-files "$2*" \
| while read -r a b c ; do [[ $b == "disabled" ]] && echo " $a"; done; }
__get_masked_units() { __systemctl $1 list-unit-files "$2*" \
| while read -r a b c ; do [[ $b == "masked" ]] && echo " $a"; done; }
__get_all_unit_files() { __systemctl $1 list-unit-files "$2*" | while read -r a b; do echo " $a"; done; }
__get_machines() {
local a
while read a _; do
echo " $a"
done < <(machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null | sort -u; echo ".host")
}
_systemctl () {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local i verb comps mode cur_orig
local -A OPTS=(
[STANDALONE]='--all -a --reverse --after --before --defaults --force -f --full -l --global
--help -h --no-ask-password --no-block --legend=no --no-pager --no-reload --no-wall --now
--quiet -q --system --user --version --runtime --recursive -r --firmware-setup
--show-types --plain --failed --value --fail --dry-run --wait --no-warn --with-dependencies
--show-transaction -T --mkdir --marked --read-only'
[ARG]='--host -H --kill-whom --property -p -P --signal -s --type -t --state --job-mode --root
--preset-mode -n --lines -o --output -M --machine --message --timestamp --check-inhibitors --what
--image --boot-loader-menu --boot-loader-entry --reboot-argument --drop-in'
)
if __contains_word "--user" ${COMP_WORDS[*]}; then
mode=--user
elif __contains_word "--global" ${COMP_WORDS[*]}; then
mode=--user
else
mode=--system
fi
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--signal|-s)
_signals
return
;;
--type|-t)
comps=$(__systemctl $mode -t help)
;;
--state)
comps=$(__systemctl $mode --state=help)
;;
--job-mode)
comps='fail replace replace-irreversibly isolate
ignore-dependencies ignore-requirements flush'
;;
--kill-whom|--kill-who)
comps='all control main'
;;
--root)
comps=$(compgen -A directory -- "$cur" )
compopt -o filenames
;;
--host|-H)
comps=$(compgen -A hostname)
;;
--property|-p|-P)
comps=$(__systemd_properties)
;;
--preset-mode)
comps='full enable-only disable-only'
;;
--output|-o)
comps=$( systemctl --output=help 2>/dev/null )
;;
--machine|-M)
comps=$( __get_machines )
;;
--timestamp)
comps='pretty us µs utc us+utc µs+utc'
;;
--check-inhibitors)
comps='auto yes no'
;;
--what)
comps='configuration state cache logs runtime all'
;;
--image)
comps=$(compgen -A file -- "$cur")
compopt -o filenames
;;
--boot-loader-entry)
comps=$(systemctl --boot-loader-entry=help 2>/dev/null)
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[ALL_UNITS]='cat mask'
[NONTEMPLATE_UNITS]='is-active is-failed is-enabled status show preset help list-dependencies edit set-property revert'
[ENABLED_UNITS]='disable'
[DISABLED_UNITS]='enable'
[REENABLABLE_UNITS]='reenable'
[FAILED_UNITS]='reset-failed'
[STARTABLE_UNITS]='start'
[STOPPABLE_UNITS]='stop condstop kill try-restart condrestart freeze thaw'
[ISOLATABLE_UNITS]='isolate'
[RELOADABLE_UNITS]='reload condreload try-reload-or-restart force-reload'
[RESTARTABLE_UNITS]='restart reload-or-restart'
[TARGET_AND_UNITS]='add-wants add-requires'
[MASKED_UNITS]='unmask'
[JOBS]='cancel'
[ENVS]='set-environment unset-environment import-environment'
[STANDALONE]='daemon-reexec daemon-reload default whoami
emergency exit halt hibernate hybrid-sleep
suspend-then-hibernate kexec soft-reboot list-jobs list-sockets
list-timers list-units list-unit-files poweroff
reboot rescue show-environment suspend get-default
is-system-running preset-all list-automounts list-paths'
[FILE]='link switch-root'
[TARGETS]='set-default'
[MACHINES]='list-machines'
[LOG_LEVEL]='log-level'
[LOG_TARGET]='log-target'
[SERVICE_LOG_LEVEL]='service-log-level'
[SERVICE_LOG_TARGET]='service-log-target'
[SERVICE_WATCHDOGS]='service-watchdogs'
[MOUNT]='bind mount-image'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
# When trying to match a unit name with certain special characters in its name (i.e
# foo\x2dbar:01) they get (un)escaped by bash along the way, thus causing any possible
# match to fail.
# The following condition solves two cases:
# 1) We're trying to complete an already escaped unit name part,
# i.e foo\\x2dba. In this case we need to unescape the name, so it
# gets properly matched with the systemctl output (i.e. foo\x2dba).
# However, we need to keep the original escaped name as well for the
# final match, as the completion machinery does the unescaping
# automagically.
# 2) We're trying to complete an unescaped (literal) unit name part,
# i.e. foo\x2dba. That means we don't have to do the unescaping
# required for correct matching with systemctl's output, however,
# we need to escape the name for the final match, where the completion
# expects the string to be escaped.
cur_orig=$cur
if [[ $cur =~ '\\' ]]; then
cur="$(echo $cur | xargs echo)"
else
cur_orig="$(printf '%q' $cur)"
fi
if [[ -z ${verb-} ]]; then
comps="${VERBS[*]}"
elif __contains_word "$verb" ${VERBS[ALL_UNITS]}; then
comps=$( __get_all_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[NONTEMPLATE_UNITS]}; then
comps=$( __get_non_template_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[ENABLED_UNITS]}; then
comps=$( __get_enabled_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[DISABLED_UNITS]}; then
comps=$( __get_disabled_units $mode "$cur";
__get_template_names $mode "$cur")
compopt -o filenames
elif __contains_word "$verb" ${VERBS[REENABLABLE_UNITS]}; then
comps=$( __get_disabled_units $mode "$cur";
__get_enabled_units $mode "$cur";
__get_template_names $mode "$cur")
compopt -o filenames
elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then
comps=$( __get_startable_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then
comps=$( __get_restartable_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then
comps=$( __get_stoppable_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[RELOADABLE_UNITS]}; then
comps=$( __get_reloadable_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[ISOLATABLE_UNITS]}; then
comps=$( __filter_units_by_properties $mode AllowIsolate=yes \
$( __get_non_template_units $mode "$cur" ) )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[FAILED_UNITS]}; then
comps=$( __get_failed_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[MASKED_UNITS]}; then
comps=$( __get_masked_units $mode "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[TARGET_AND_UNITS]}; then
if __contains_word "$prev" ${VERBS[TARGET_AND_UNITS]} \
|| __contains_word "$prev" ${OPTS[STANDALONE]}; then
comps=$( __systemctl $mode list-unit-files --type target --all "$cur*" \
| { while read -r a b; do echo " $a"; done; } )
else
comps=$( __get_all_unit_files $mode "$cur" )
fi
compopt -o filenames
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
elif __contains_word "$verb" ${VERBS[JOBS]}; then
comps=$( __systemctl $mode list-jobs | { while read -r a b; do echo " $a"; done; } )
elif [ "$verb" = 'unset-environment' ]; then
comps=$( __systemctl $mode show-environment \
| while read -r line; do echo " ${line%%=*}"; done )
compopt -o nospace
elif [ "$verb" = 'set-environment' ]; then
comps=$( __systemctl $mode show-environment \
| while read -r line; do echo " ${line%%=*}="; done )
compopt -o nospace
elif [ "$verb" = 'import-environment' ]; then
COMPREPLY=( $(compgen -A variable -- "$cur_orig") )
return 0
elif __contains_word "$verb" ${VERBS[FILE]}; then
comps=$( compgen -A file -- "$cur" )
compopt -o filenames
elif __contains_word "$verb" ${VERBS[TARGETS]}; then
comps=$( __systemctl $mode list-unit-files --type target --full --all "$cur*" \
| { while read -r a b; do echo " $a"; done; } )
elif __contains_word "$verb" ${VERBS[LOG_LEVEL]}; then
comps='debug info notice warning err crit alert emerg'
elif __contains_word "$verb" ${VERBS[LOG_TARGET]}; then
comps='console journal kmsg journal-or-kmsg null'
elif __contains_word "$verb" ${VERBS[SERVICE_LOG_LEVEL]}; then
if __contains_word "$prev" ${VERBS[SERVICE_LOG_LEVEL]}; then
comps=$( __get_all_unit_files $mode "$cur" )
elif __contains_word "$prev" debug info notice warning err crit alert emerg; then
return 0
else
comps='debug info notice warning err crit alert emerg'
fi
elif __contains_word "$verb" ${VERBS[SERVICE_LOG_TARGET]}; then
if __contains_word "$prev" ${VERBS[SERVICE_LOG_TARGET]}; then
comps=$( __get_all_unit_files $mode "$cur" )
elif __contains_word "$prev" console journal kmsg journal-or-kmsg null; then
return 0
else
comps='console journal kmsg journal-or-kmsg null'
fi
elif __contains_word "$verb" ${VERBS[SERVICE_WATCHDOGS]}; then
comps='on off'
elif __contains_word "$verb" ${VERBS[MOUNT]}; then
if __contains_word "$prev" ${VERBS[MOUNT]}; then
comps=$( __get_active_services $mode "$cur" )
elif [[ "$prev" =~ .service ]]; then
comps=$( compgen -A file -- "$cur" )
compopt -o filenames
else
return 0
fi
fi
COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur_orig") )
return 0
}
complete -F _systemctl systemctl
@@ -0,0 +1,207 @@
# systemd-analyze(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
__get_units_all() {
systemctl list-units --no-legend --no-pager --plain --all $1 | \
{ while read -r a b c; do echo " $a"; done }
}
__get_services() {
systemctl list-units --no-legend --no-pager --plain -t service --all $1 | \
{ while read -r a b c; do [[ $b == "loaded" ]]; echo " $a"; done }
}
__get_syscall_sets() {
local line
systemd-analyze syscall-filter --no-pager | while IFS= read -r line; do
if [[ $line == @* ]]; then
printf '%s\n' "$line"
fi
done
}
_systemd_analyze() {
local i verb comps mode
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version --system --user --global --order --require --no-pager
--man=no --generators=yes -q --quiet'
[ARG]='-H --host -M --machine --fuzz --from-pattern --to-pattern --root'
)
local -A VERBS=(
[STANDALONE]='time blame unit-paths exit-status calendar timestamp timespan'
[CRITICAL_CHAIN]='critical-chain'
[DOT]='dot'
[DUMP]='dump'
[VERIFY]='verify'
[SECCOMP_FILTER]='syscall-filter'
[CAT_CONFIG]='cat-config'
[SECURITY]='security'
[CONDITION]='condition'
[INSPECT_ELF]='inspect-elf'
[PLOT]='plot'
)
local CONFIGS='systemd/bootchart.conf systemd/coredump.conf systemd/journald.conf
systemd/journal-remote.conf systemd/journal-upload.conf systemd/logind.conf
systemd/resolved.conf systemd/networkd.conf systemd/resolved.conf
systemd/sleep.conf systemd/system.conf systemd/timedated.conf
systemd/timesyncd.conf systemd/user.conf udev/udev.conf'
_init_completion || return
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if __contains_word "--user" ${COMP_WORDS[*]}; then
mode=--user
else
mode=--system
fi
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--host|-H)
comps=$(compgen -A hostname)
;;
--machine|-M)
comps=$( __get_machines )
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ -z ${verb-} && $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --global --no-pager'
fi
elif __contains_word "$verb" ${VERBS[CRITICAL_CHAIN]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --fuzz --no-pager'
else
comps=$( __get_units_all $mode )
fi
elif __contains_word "$verb" ${VERBS[DOT]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --global --from-pattern --to-pattern --order --require'
fi
elif __contains_word "$verb" ${VERBS[DUMP]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --no-pager'
else
comps=$( __get_units_all $mode )
fi
elif __contains_word "$verb" ${VERBS[SECCOMP_FILTER]}; then
if [[ $cur = -* ]]; then
comps='--help --version --no-pager'
else
comps=$( __get_syscall_sets )
fi
elif __contains_word "$verb" ${VERBS[VERIFY]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --global --man=no --generators=yes --root --image --recursive-errors=no --recursive-errors=yes --recursive-errors=one'
else
comps=$( compgen -A file -- "$cur";
__get_units_all $mode )
compopt -o filenames
fi
elif __contains_word "$verb" ${VERBS[CAT_CONFIG]}; then
if [[ $cur = -* ]]; then
comps='--help --version --root --no-pager'
elif [[ -z $cur ]]; then
comps="$CONFIGS"
compopt -o filenames
else
comps="$CONFIGS $( compgen -A file -- "$cur" )"
compopt -o filenames
fi
elif __contains_word "$verb" ${VERBS[SECURITY]}; then
if [[ $cur = -* ]]; then
comps='--help --version --no-pager --system --user -H --host -M --machine --offline --threshold --security-policy --json=off --json=pretty --json=short --root --image --profile=default --profile=nonetwork --profile=strict --profile=trusted'
elif ! __contains_word "--offline" ${COMP_WORDS[*]}; then
comps=$( __get_services $mode )
else
comps="$CONFIGS $( compgen -A file -- "$cur" )"
compopt -o filenames
fi
elif __contains_word "$verb" ${VERBS[CONDITION]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --global --no-pager --root --image'
elif [[ $prev = "-u" ]] || [[ $prev = "--unit" ]]; then
comps=$( __get_services $mode )
fi
elif __contains_word "$verb" ${VERBS[INSPECT_ELF]}; then
if [[ $cur = -* ]]; then
comps='--help --version --json=off --json=pretty --json=short'
else
comps=$( compgen -A file -- "$cur" )
compopt -o filenames
fi
elif __contains_word "$verb" ${VERBS[PLOT]}; then
if [[ $cur = -* ]]; then
comps='--help --version --system --user --global --no-pager --json=off --json=pretty --json=short --table --no-legend'
fi
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _systemd_analyze systemd-analyze
@@ -0,0 +1,57 @@
# systemd-cat(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
_systemd_cat() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local i verb comps
local -A OPTS=(
[STANDALONE]='-h --help --version'
[ARG]='-t --identifier -p --priority --level-prefix'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--identifier|-t)
comps=''
;;
--priority|-p)
comps='emerg alert crit err warning notice info debug'
;;
--level-prefix)
comps='yes no'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
}
complete -F _systemd_cat systemd-cat
@@ -0,0 +1,71 @@
# systemd-cgls(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
__get_units_have_cgroup() {
systemctl $1 --full --no-legend --no-pager --plain list-units | {
while read -r a b c d; do
[[ $c == "active" && ${a##*.} =~ (service|socket|mount|swap|slice|scope) ]] && echo " $a"
done
};
}
_systemd_cgls() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local i verb comps
local -A OPTS=(
[STANDALONE]='-h --help --version --all -l --full -k --no-pager --xattr=no --cgroup-id=no'
[ARG]='-M --machine -u --unit --user-unit'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--machine|-M)
comps=$( __get_machines )
;;
--unit|-u)
comps=$( __get_units_have_cgroup --system )
;;
--user-unit)
comps=$( __get_units_have_cgroup --user )
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
}
complete -F _systemd_cgls systemd-cgls
@@ -0,0 +1,68 @@
# systemd-cgtop(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
_systemd_cgtop() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local comps
local -A OPTS=(
[STANDALONE]='-h --help --version -p -t -c -m -i -b --batch -r --raw -k -P'
[ARG]='--cpu --depth -M --machine --recursive -n --iterations -d --delay --order'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--machine|-M)
comps=$( __get_machines )
;;
--recursive)
comps='yes no'
;;
--order)
comps='path tasks cpu memory io'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
if [ -d /sys/fs/cgroup/systemd/ ]; then
COMPREPLY+=( $(cd /sys/fs/cgroup/systemd/ && compgen -o nospace -o dirnames "$cur") )
elif [ -d /sys/fs/cgroup/ ]; then
COMPREPLY+=( $(cd /sys/fs/cgroup/ && compgen -o nospace -o dirnames "$cur") )
fi
}
complete -F _systemd_cgtop systemd-cgtop
@@ -0,0 +1,117 @@
# systemd-cryptenroll(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_fido2_devices() {
local i
for i in /dev/hidraw*; do
[ -c "$i" ] && printf '%s\n' "$i"
done
}
__get_tpm2_devices() {
local i
for i in /dev/tpmrm*; do
[ -c "$i" ] && printf '%s\n' "$i"
done
}
__get_block_devices() {
local i
for i in /dev/*; do
[ -b "$i" ] && printf '%s\n' "$i"
done
}
_systemd_cryptenroll() {
local comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version
--password --recovery-key'
[ARG]='--unlock-key-file
--unlock-fido2-device
--pkcs11-token-uri
--fido2-credential-algorithm
--fido2-device
--fido2-with-client-pin
--fido2-with-user-presence
--fido2-with-user-verification
--tpm2-device
--tpm2-device-key
--tpm2-seal-key-handle
--tpm2-pcrs
--tpm2-public-key
--tpm2-public-key-pcrs
--tpm2-signature
--tpm2-with-pin
--tpm2-pcrlock
--wipe-slot'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--unlock-key-file|--tpm2-device-key|--tpm2-public-key|--tpm2-signature|--tpm2-pcrlock)
comps=$(compgen -A file -- "$cur")
compopt -o filenames
;;
--unlock-fido2-device)
comps="auto $(__get_fido2_devices)"
;;
--pkcs11-token-uri)
comps='auto list pkcs11:'
;;
--fido2-credential-algorithm)
comps='es256 rs256 eddsa'
;;
--fido2-device)
comps="auto list $(__get_fido2_devices)"
;;
--fido2-with-client-pin|--fido2-with-user-presence|--fido2-with-user-verification|--tpm2-with-pin)
comps='yes no'
;;
--tpm2-device)
comps="auto list $(__get_tpm2_devices)"
;;
--wipe-slot)
comps='all empty password recovery pkcs11 fido2 tpm2'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
comps=$(__get_block_devices)
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _systemd_cryptenroll systemd-cryptenroll
@@ -0,0 +1,60 @@
# systemd-delta(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
_systemd-delta() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local comps
local -A OPTS=(
[STANDALONE]='--help -h --no-pager --version'
[ARG]='--diff --type -t'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--diff)
comps='yes no'
;;
--type|-t)
comps='masked equivalent redirected overridden unchanged extended default'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
COMPREPLY=( $(compgen -W '${comps-}' -- "$cur") )
return 0
}
complete -F _systemd-delta systemd-delta
@@ -0,0 +1,40 @@
# systemd-detect-virt(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
_systemd_detect_virt() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local i verb comps
local -A OPTS=(
[STANDALONE]='-h --help --version -c --container -v --vm -q --quiet --cvm
--private-users --list --list-cvm'
)
_init_completion || return
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
}
complete -F _systemd_detect_virt systemd-detect-virt
@@ -0,0 +1,127 @@
# systemd-dissect(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
_systemd_dissect() {
local comps
local cur=${COMP_WORDS[COMP_CWORD]} prev_1=${COMP_WORDS[COMP_CWORD-1]} prev_2=${COMP_WORDS[COMP_CWORD-2]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version
--discover
--no-pager
--no-legend
-r --read-only
--mkdir
--rmdir
--in-memory'
[ARG]='-m --mount -M
-u --umount -U
--attach
--detach
-l --list
--mtree
--with
-x --copy-from
-a --copy-to
--validate
--fsck
--growfs
--discard
--root-hash
--root-hash-sig
--verity-data
--image-policy
--json
--loop-ref
--mtree-hash'
)
_init_completion || return
if __contains_word "$prev_1" ${OPTS[STANDALONE]}; then
case $prev_1 in
-h|--help|--version|--discover)
return 0
;;
esac
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
if __contains_word "$prev_1" ${OPTS[ARG]}; then
case $prev_1 in
-l|--list|--mtree|-m|--mount|-M|--attach|--detach|-x|--copy-from|-a|--copy-to|--verity-data|--validate|--with)
comps=$(compgen -A file -- "$cur")
compopt -o filenames
;;
-u|--umount|-U)
comps=$(compgen -A directory -- "$cur")
compopt -o dirnames
;;
--fsck|--growfs|--mtree-hash)
comps='yes no'
;;
--discard)
comps='disabled loop all crypto'
;;
--root-hash-sig)
comps="base64: $(compgen -A file -- "$cur")"
compopt -o filenames
;;
--json)
comps='pretty short off'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if __contains_word "$prev_2" ${OPTS[ARG]}; then
case $prev_2 in
-m|--mount|-M)
comps=$(compgen -A directory -- "$cur")
compopt -o dirnames
;;
--with)
comps=$(compgen -A command -- "$cur")
compopt -o filenames
;;
*)
comps=$(compgen -A file -- "$cur")
compopt -o filenames
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
COMPREPLY=( $(compgen -A file -- "$cur") )
compopt -o filenames
return 0
}
complete -F _systemd_dissect systemd-dissect
@@ -0,0 +1,74 @@
# systemd-id128(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
return 1
}
_systemd_id128() {
local i verb comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version -p --pretty'
[ARG]='-a --app-specific'
)
local -A VERBS=(
[STANDALONE]='new machine-id boot-id invocation-id help'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--app-specific|-a)
comps=""
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _systemd_id128 systemd-id128
@@ -0,0 +1,61 @@
# systemd-path(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
return 1
}
__get_names() {
systemd-path | { while IFS=: read -r a b; do echo " $a"; done; }
}
_systemd_path() {
local comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version'
[ARG]='--suffix'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--suffix)
comps=''
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
comps=$( __get_names )
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _systemd_path systemd-path
@@ -0,0 +1,132 @@
# systemd-run(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__systemctl() {
local mode=$1; shift 1
systemctl $mode --full --no-legend --no-pager --plain "$@"
}
__get_slice_units () { __systemctl $1 list-units --all -t slice \
| { while read -r a b c d; do echo " $a"; done; }; }
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
_systemd_run() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local OPTS='--no-ask-password --scope -u --unit -p --property --description --slice --slice-inherit
-r --remain-after-exit --send-sighup --service-type --uid --gid --nice
--working-directory -d --same-dir -E --setenv -t --pty -P --pipe -S --shell -q --quiet
--on-active --on-boot --on-startup --on-unit-active --on-unit-inactive --on-calendar
--on-clock-change --on-timezone-change --path-property --socket-property
--timer-property --no-block --wait -G --collect --user --system -H --host -M --machine
-h --help --version'
local mode=--system
local i
local opts_with_values=(
--unit -p --property --slice --description --service-type --uid --gid --nice --working-directory
-E --setenv --on-active --on-boot --on-startup --on-unit-active --on-unit-inactive --on-calendar
--path-property --socket-property --timer-property -H --host -M --machine
)
for (( i=1; i <= COMP_CWORD; i++ )); do
if [[ ${COMP_WORDS[i]} != -* ]]; then
local root_command=${COMP_WORDS[i]}
_command_offset $i
return
fi
[[ ${COMP_WORDS[i]} == "--user" ]] && mode=--user
[[ $i -lt $COMP_CWORD && " ${opts_with_values[@]} " =~ " ${COMP_WORDS[i]} " ]] && ((i++))
done
case "$prev" in
--unit|--description|--on-active|--on-boot|--on-startup|--on-unit-active|--on-unit-inactive|--on-calendar)
# argument required but no completions available
return
;;
--slice)
local comps=$(__get_slice_units $mode)
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
--service-type)
local comps='simple forking oneshot dbus notify idle'
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
-p|--property)
local comps='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='
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
-H|--host)
local comps=$(compgen -A hostname)
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
-M|--machine)
local comps=$( __get_machines )
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
--timer-property)
local comps='AccuracySec= WakeSystem='
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
;;
--working-directory)
local comps
if [[ -z $cur ]]; then
comps=$(compgen -A directory -- "/" )
else
comps=$(compgen -A directory -- "$cur" )
fi
compopt -o filenames
COMPREPLY=( $(compgen -W '$comps' -- "$cur" ) )
return 0
;;
esac
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
}
complete -F _systemd_run systemd-run
@@ -0,0 +1,85 @@
# systemd-sysext(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word() {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
_systemd-sysext() {
local i verb comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
local -A OPTS=(
[STANDALONE]='-h --help --version
--no-pager
--no-legend
--force'
[ARG]='--root
--json'
)
local -A VERBS=(
[STANDALONE]='status
merge
unmerge
refresh
list'
)
_init_completion || return
if __contains_word "$prev" ${OPTS[ARG]}; then
case $prev in
--root)
comps=$(compgen -A directory -- "$cur" )
compopt -o dirnames
;;
--json)
comps='pretty short off'
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ "$cur" = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
comps=''
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _systemd-sysext systemd-sysext
@@ -0,0 +1,47 @@
_taskset_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-c'|'--cpu-list')
local prefix realcur CPULIST_ALL CPULIST
realcur="${cur##*,}"
prefix="${cur%$realcur}"
CPULIST_ALL=$(sed 's/^/{/; s/-/../g; s/,/} {/g; s/$/}/' /sys/devices/system/cpu/online)
for WORD in $(eval echo $CPULIST_ALL); do
if ! [[ $prefix == *"$WORD"* ]]; then
CPULIST="$WORD ${CPULIST:-""}"
fi
done
compopt -o nospace
COMPREPLY=( $(compgen -P "$prefix" -W "$CPULIST" -S ',' -- $realcur) )
return 0
;;
'-p'|'--pid')
local PIDS
# FIXME: the pid argument is ambiguous. When
# setting an affinity the optarg has to be cpu
# mask. The following is good only for getting
# affinity.
PIDS=$(cd /proc && echo [0-9]*)
COMPREPLY=( $(compgen -W "$PIDS" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--all-tasks --pid --cpu-list --help --version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _taskset_module taskset
@@ -0,0 +1,97 @@
# timedatectl(1) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# Copyright © 2010 Ran Benita
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# systemd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <https://www.gnu.org/licenses/>.
__contains_word () {
local w word=$1; shift
for w in "$@"; do
[[ $w = "$word" ]] && return
done
}
__get_machines() {
local a b
{ machinectl list --full --max-addresses=0 --no-legend --no-pager 2>/dev/null; echo ".host"; } | \
{ while read a b; do echo " $a"; done; } | \
sort -u
}
__get_interfaces(){
local name
for name in $(cd /sys/class/net && command ls); do
[[ "$name" != "lo" ]] && echo "$name"
done
}
_timedatectl() {
local i verb comps
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local OPTS='-h --help --version --adjust-system-clock --no-pager
--no-ask-password -H --host -M --machine --monitor
-p --property -a --all --value'
if __contains_word "$prev" $OPTS; then
case $prev in
--host|-H)
comps=$(compgen -A hostname)
;;
--machine|-M)
comps=$( __get_machines )
;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
fi
if [[ $cur = -* ]]; then
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
return 0
fi
local -A VERBS=(
[BOOLEAN]='set-local-rtc set-ntp'
[STANDALONE]='status show list-timezones timesync-status show-timesync'
[TIMEZONES]='set-timezone'
[TIME]='set-time'
[IFNAME]='ntp-servers revert'
)
for ((i=0; i < COMP_CWORD; i++)); do
if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
verb=${COMP_WORDS[i]}
break
fi
done
if [[ -z ${verb-} ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[BOOLEAN]}; then
comps='true false'
elif __contains_word "$verb" ${VERBS[TIMEZONES]}; then
comps=$(command timedatectl list-timezones)
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[TIME]}; then
comps=''
elif __contains_word "$verb" ${VERBS[TIMEZONES]}; then
comps=$( __get_interfaces )
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
}
complete -F _timedatectl timedatectl
@@ -0,0 +1,39 @@
_uclampset_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="
--all-tasks
--help
--pid
--system
--reset-on-fork
--verbose
--version
"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local i
for i in ${COMP_WORDS[*]}; do
case $i in
'-p'|'--pid')
COMPREPLY=( $(compgen -W "$(cd /proc && echo [0-9]*)" -- $cur) )
return 0
;;
esac
done
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _uclampset_module uclampset
@@ -0,0 +1,89 @@
_umount_points_list()
{
# List of characters to escape shamelessly stolen from "scp" completion
local escape_chars='[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]'
findmnt -lno TARGET | awk '
function literal_ere(s) {
gsub(/[][^$.*?+{}\\()|]/, "\\\\&", s)
return s
}
{
home_ere = literal_ere(ENVIRON["HOME"])
print home_ere
if ($0 ~ "^"home_ere) {
homeless = $0
sub("^"home_ere, "~", homeless)
gsub("'"$escape_chars"'", "\\\\&", homeless)
print homeless " "
}
pwd_ere = literal_ere(ENVIRON["PWD"])
if ($0 ~ "^"pwd_ere) {
reldir = $0
sub("^"pwd_ere"/?", "", reldir)
gsub("'"$escape_chars"'", "\\\\&", reldir)
print "./" reldir " "
print reldir " "
}
gsub("'"$escape_chars"'", "\\\\&")
print $0 " "
}'
}
_umount_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-t'|'--types')
local TYPES
TYPES="
$(\ls /lib/modules/$(uname -r)/kernel/fs | awk '{print $1, "no" $1}')
$(awk '{print $NF, "no" $NF}' /proc/filesystems)
"
COMPREPLY=( $(compgen -W "$TYPES" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
'-N'|'--namespace')
local NAMESPACE
NAMESPACE="$(lsns --type mnt --output PATH --noheadings)"
COMPREPLY=( $(compgen -W "$NAMESPACE" -- $cur) )
return 0
;;
esac
case $cur in
-*)
OPTS=" --all
--all-targets
--no-canonicalize
--detach-loop
--fake
--force
--internal-only
--namespace
--no-mtab
--lazy
--test-opts
--recursive
--read-only
--types
--quiet
--verbose
--help
--version"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
COMPREPLY=( $( compgen -W '$( _umount_points_list )' -- "$cur" ) )
}
complete -F _umount_module -o nospace umount
@@ -0,0 +1,54 @@
_unshare_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'--propagation')
COMPREPLY=( $(compgen -W "slave shared private unchanged" -- $cur) )
return 0
;;
'-s'|'--setgroups')
COMPREPLY=( $(compgen -W "allow deny" -- $cur) )
return 0
;;
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--mount
--uts
--ipc
--net
--pid
--user
--cgroup
--time
--fork
--kill-child
--keep-caps
--mount-proc
--map-current-user
--map-root-user
--propagation
--setgroups
--help
--version
--root
--wd
--monotonic
--boottime
--setuid
--setgid"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
compopt -o bashdefault
COMPREPLY=( $(compgen -c -- $cur) )
return 0
}
complete -F _unshare_module unshare
@@ -0,0 +1,24 @@
_utmpdump_module()
{
local cur prev OPTS
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
'-h'|'--help'|'-V'|'--version')
return 0
;;
esac
case $cur in
-*)
OPTS="--follow --reverse --output --version --help"
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
return 0
;;
esac
local IFS=$'\n'
compopt -o filenames
COMPREPLY=( $(compgen -f -- $cur) )
return 0
}
complete -F _utmpdump_module utmpdump
Loaded 100 of 15893 files, more files were not shown because too many files have changed in this diff. Show more