summaryrefslogtreecommitdiff
path: root/completion/zsh/_yadm
diff options
context:
space:
mode:
Diffstat (limited to 'completion/zsh/_yadm')
-rw-r--r--completion/zsh/_yadm164
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