diff options
Diffstat (limited to 'completion/zsh/_yadm')
-rw-r--r-- | completion/zsh/_yadm | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/completion/zsh/_yadm b/completion/zsh/_yadm new file mode 100644 index 0000000..a1997a1 --- /dev/null +++ b/completion/zsh/_yadm @@ -0,0 +1,164 @@ +#compdef yadm + +# This completion tries to fallback to git's completion for git commands. + +zstyle -T ':completion:*:yadm:argument-1:descriptions:' format && \ + zstyle ':completion:*:yadm:argument-1:descriptions' format '%d:' +zstyle -T ':completion:*:yadm:*:yadm' group-name && \ + zstyle ':completion:*:yadm:*:yadm' group-name '' + +_yadm-alt() { + return 0 +} + +_yadm-bootstrap() { + return 0 +} + +_yadm-clone() { + _arguments \ + '(--bootstrap --no-bootstrap)--bootstrap[force bootstrap, without prompt]' \ + '(--bootstrap --no-bootstrap)--no-bootstrap[prevent bootstrap, without prompt]' \ + '-b[branch name]:' \ + '-f[force overwrite of existing repository]' \ + '-w[work tree path]: :_files -/' \ + '*:' +} + +_yadm-config() { + # TODO: complete config names +} + +_yadm-decrypt() { + _arguments \ + '-l[list files]' +} + +_yadm-encrypt() { + return 0 +} + +_yadm-enter() { + _arguments \ + ':command: _command_names -e' \ + '*::arguments: _normal' +} + +_yadm-git-crypt() { + # TODO: complete git-crypt options +} + +_yadm-help() { + return 0 +} + +_yadm-init() { + _arguments \ + '-f[force overwrite of existing repository]' \ + '-w[work tree path]: :_files -/' +} + +_yadm-list() { + _arguments \ + '-a[list all tracked files]' +} + +_yadm-perms() { + return 0 +} + +_yadm-transcrypt() { + integer _ret=1 + _call_function _ret _transcrypt + return _ret +} + +_yadm-upgrade() { + _arguments \ + '-f[force deinit of submodules]' \ + ': ' +} + +_yadm-version() { + return 0 +} + +_yadm_commands() { + local -a commands=( + alt:'create links for alternates' + bootstrap:'execute bootstrap' + clone:'clone an existing yadm repository' + config:'configure an yadm setting' + decrypt:'decrypt files' + encrypt:'encrypt files' + enter:'run sub-shell with GIT variables set' + git-crypt:'run git-crypt commands for the yadm repository' + gitconfig:'run the git config command' + help:'display yadm help information' + init:'initialize an empty yadm repository' + list:'list files tracked by yadm' + perms:'fix perms for private files' + transcrypt:'run transcrypt commands for the yadm repository' + upgrade:'upgrade legacy yadm paths' + version:'show yadm version' + ) + + local oldcontext="$curcontext" + local curcontext="${curcontext%:*:*}:git:" + + words=("git" "${words[-1]}") CURRENT=2 service=git _git + + curcontext="$oldcontext" + _describe -t yadm "yadm commands" commands + + return 0 +} + +_yadm() { + local curcontext=$curcontext state state_descr line + declare -A opt_args + + _arguments -C \ + '(-Y --yadm-dir)'{-Y,--yadm-dir}'[override the standard yadm directory]: :_files -/' \ + '--yadm-data[override the standard yadm data directory]: :_files -/' \ + '--yadm-repo[override the standard repo path]: :_files -/' \ + '--yadm-config[override the standard config path]: :_files -/' \ + '--yadm-encrypt[override the standard encrypt path]: :_files -/' \ + '--yadm-archive[override the standard archive path]: :_files -/' \ + '--yadm-bootstrap[override the standard bootstrap path]: :_files' \ + '--help[display yadm help information]' \ + '--version[show yadm version]' \ + '(-): :->command' \ + '(-)*:: :->option-or-argument' && return + + local -a repo_args + (( $+opt_args[--yadm-repo] )) && repo_args+=(--yadm-repo "$opt_args[--yadm-repo]") + (( $+opt_args[--yadm-data] )) && repo_args+=(--yadm-data "$opt_args[--yadm-data]") + local -x GIT_DIR="$(_call_program gitdir yadm "${repo_args[@]}" introspect repo)" + [[ -z "$GIT_DIR" ]] && return 1 + + integer _ret=1 + case $state in + (command) + _yadm_commands && _ret=0 + ;; + (option-or-argument) + curcontext=${curcontext%:*:*}:yadm-${words[1]}: + if ! _call_function _ret _yadm-${words[1]}; then + + # Translate gitconfig to use the regular completion for config + [[ ${words[1]} = "gitconfig" ]] && words[1]=config + + words=("git" "${(@)words}") + CURRENT=$(( CURRENT + 1 )) + + curcontext=${curcontext%:*:*}:git: + service=git _git && _ret=0 + fi + ;; + esac + + return _ret +} + +(( $+functions[_git] )) && _yadm |