1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Tue, 11 Nov 2025 10:42:40 +0100
# bash-completion for cpsv
_cpsv_services()
{
CPSVSRC=$(ls --color=no ${CPSV_SOURCE:-/usr/share/runit/sv.current})
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
#username="$(id -u -n)"
for svd in $CPSVSRC ; do
[ $svd = ${svd%@user} ] && continue
[ $svd = runsvdir@user ] && continue
CPSVLIST="$CPSVLIST $svd"
done
else
for svd in $CPSVSRC ; do
[ $svd = ${svd%@user} ] || continue
CPSVLIST="$CPSVLIST $svd"
done
fi
echo "$CPSVLIST"
}
_cpsv_names()
{
CPSVSRC=$(ls --color=no ${CPSV_SOURCE:-/usr/share/runit/sv.current})
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
#username="$(id -u -n)"
for svd in $CPSVSRC ; do
[ $svd = ${svd%@user} ] && continue
[ $svd = runsvdir@user ] && continue
CPSVLIST="$CPSVLIST ${svd%@user}"
done
else
for svd in $CPSVSRC ; do
[ $svd = ${svd%@user} ] || continue
#TODO multi instances with meta files
#svd=${svd%default}
CPSVLIST="$CPSVLIST ${svd%default}"
done
fi
echo "$CPSVLIST"
}
_cpsv_diffs()
{
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
username="$(id -u -n)"
CPSVDEST=$(ls --color=no ${CPSV_DEST:-/home/$username/.runit/sv})
for svd in $CPSVDEST ; do
CPSVLIST="$CPSVLIST $svd"
done
else
CPSVDEST=$(ls --color=no ${CPSV_DEST:-/etc/sv})
for svd in $CPSVDEST ; do
[ $svd = ${svd%@user} ] || continue #?
CPSVLIST="$CPSVLIST ${svd%default}"
done
fi
echo "$CPSVLIST"
}
_cpsv_commands()
{
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ]; then
echo "d l p s"
else
echo "a d l p s"
fi
}
_cpsv()
{
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
cpsv_com=${COMP_WORDS[1]}
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -W "$(_cpsv_commands)" $cur ) )
elif [ $COMP_CWORD -eq 2 ]; then
case "$prev" in
s|l)
;;
a|d|p)
COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
;;
*)
;;
esac
elif [ $COMP_CWORD -eq 3 ]; then
case "$cpsv_com" in
a)
COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
;;
d)
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ] ; then
#COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" ${prev%@user} ) )
COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" $cur ) )
else
COMPREPLY=( $( compgen -W "$(_cpsv_diffs)" $cur ) )
fi
;;
p)
if [ "$(id -u)" != 0 ] && [ "$(id -u)" -ge '1000' ] ; then
COMPREPLY=( $( compgen -W "$(_cpsv_names)" ${prev%@user} ) )
else
#COMPREPLY=( $( compgen -W "$(_cpsv_names)" $cur ) )
COMPREPLY=( $( compgen -W "$(_cpsv_names)" ${prev%default} ) )
fi
;;
s|l|*)
;;
esac
elif [ $COMP_CWORD -ge 4 ]; then
case "$cpsv_com" in
a)
COMPREPLY=( $( compgen -W "$(_cpsv_services)" $cur ) )
;;
*)
;;
esac
fi
}
complete -F _cpsv cpsv
|