dots/dot-config/zsh/functions/_dots

42 lines
1.3 KiB
Text

#compdef dots
: ${DOTFILES:=~/dotfiles}
local repo
local -a commands repos new_repos
commands=(
bootstrap:'set up initial dotfiles on a new system'
clone:'download dotfiles packages over Git'
fetch:'retrieve updates to your packages'
stow:'stow downloaded packages into your ~'
unstow:'unstow installed packages (cleans up their symlinks)'
restow:'unstow then stow installed packages (may be useful if package layout changed)'
pull:'fetch and apply package updates'
status:'check whether your packages have changes'
)
if ! _retrieve_cache dots-repositories; then
repos=($(curl -s -X GET "https://git.00dani.me/api/v1/orgs/dot/repos" -H "accept: application/json" | jq -r '.[].name'))
_store_cache dots-repositories repos
fi
for repo in $repos; [[ -d $DOTFILES/$repo ]] || new_repos+=$repo
_dots_subcommands() {
_describe -t commands command commands
}
_dots_subcommand_parameters() {
case $words[1] in
bootstrap) _nothing ;; # no more arguments!
clone)
if (( $#new_repos )); then
_values -w package $new_repos
else
_message 'all known packages are already installed, you can still enter a git url manually'
fi ;;
fetch|*stow|pull|st|status) _values -w package $DOTFILES/*(/:t) ;;
esac
}
_arguments \
'(-v --verbose)'{-v,--verbose}'[request verbose output from Git and Stow]' \
': :_dots_subcommands' \
'*:: :_dots_subcommand_parameters'