128 lines
4.0 KiB
Bash
128 lines
4.0 KiB
Bash
#compdef pacdef
|
|
|
|
_pacdef() {
|
|
integer ret=1
|
|
local line
|
|
|
|
if [ -z "${XDG_CONFIG_HOME}" ]; then
|
|
GROUPDIR="~/.config/pacdef/groups"
|
|
else
|
|
GROUPDIR="${XDG_CONFIG_HOME}/pacdef/groups"
|
|
fi
|
|
|
|
function _subcommands {
|
|
local -a subcommands
|
|
subcommands=(
|
|
'group:manage groups'
|
|
'g:manage groups'
|
|
'package:manage packages'
|
|
'p:manage packages'
|
|
'version:show version'
|
|
)
|
|
_describe 'pacdef subcommand' subcommands
|
|
}
|
|
|
|
function _group_actions {
|
|
local -a group_actions
|
|
group_actions=(
|
|
'ed:edit an imported group file'
|
|
'edit:edit an imported group file'
|
|
'ex:export a non-symlink group'
|
|
'export:export a non-symlink group'
|
|
'l:show names of imported groups'
|
|
'list:show names of imported groups'
|
|
'i:import a new group file'
|
|
'import:import a new group file'
|
|
'n:create a new group file'
|
|
'new:create a new group file'
|
|
'r:remove a group file'
|
|
'remove:remove a group file'
|
|
's:show packages under an imported group'
|
|
'show:show packages under an imported group'
|
|
)
|
|
_describe 'pacdef group action' group_actions
|
|
}
|
|
|
|
|
|
function _package_actions {
|
|
local -a package_actions
|
|
package_actions=(
|
|
'c:uninstall packages not managed by pacdef'
|
|
'clean:uninstall packages not managed by pacdef'
|
|
'r:review unmanaged packages'
|
|
'review:review unmanaged packages'
|
|
'se:show the group containing a package'
|
|
'search:show the group containing a package'
|
|
'sy:install all packages from imported groups'
|
|
'sync:install all packages from imported groups'
|
|
'u:show explicitly installed packages not managed by pacdef'
|
|
'unmanaged:show explicitly installed packages not managed by pacdef'
|
|
)
|
|
_describe 'pacdef package action' package_actions
|
|
}
|
|
|
|
_arguments -C \
|
|
"1: :_subcommands" \
|
|
"*::arg:->args" \
|
|
&& ret=0
|
|
|
|
case $state in
|
|
(args)
|
|
case $line[1] in
|
|
(p|package)
|
|
case $line[2] in
|
|
(se|search)
|
|
_arguments \
|
|
"2:regex:" && ret=0
|
|
;;
|
|
(c|clean|r|review|sy|sync|u|unmanaged)
|
|
_message "no more arguments" && ret=0
|
|
;;
|
|
*)
|
|
_arguments \
|
|
"1: :_package_actions" \
|
|
"*::arg:->args" && ret=0
|
|
;;
|
|
esac
|
|
;;
|
|
(g|group)
|
|
case $line[2] in
|
|
(l|list)
|
|
_message "no more arguments" && ret=0
|
|
;;
|
|
(ed|edit|r|remove|s|show)
|
|
_arguments "*:group file(s):_files -W '$GROUPDIR'" && ret=0
|
|
|
|
;;
|
|
(i|import)
|
|
_arguments "*:new group file(s):_files" && ret=0
|
|
;;
|
|
(n|new)
|
|
_arguments \
|
|
{-e,--edit}"[edit group file after creating them]" \
|
|
"*:new group name(s):" \
|
|
&& ret=0
|
|
;;
|
|
*) _arguments \
|
|
"1: :_group_actions" \
|
|
"*::arg:->args" && ret=0
|
|
;;
|
|
esac
|
|
;;
|
|
version)
|
|
_message "no more arguments" && ret=0
|
|
;;
|
|
*)
|
|
_message "unknown subcommand" && ret=1
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
return ret
|
|
}
|
|
|
|
_pacdef
|
|
|
|
|