global: Switch from zsh to fish

This commit is contained in:
traxys 2024-08-26 14:01:04 +02:00
parent 68b04ca784
commit dc185e73a7
10 changed files with 96 additions and 921 deletions

View file

@ -25,9 +25,6 @@ in
services.syncthing.enable = true;
programs.ssh.enable = true;
programs.zsh.initExtraBeforeCompInit = ''
fpath+="$HOME/.zfunc"
'';
services.nextcloud-client = {
enable = true;
@ -103,9 +100,5 @@ in
source = ./scripts;
recursive = true;
};
".zfunc" = {
source = ./zfunc;
recursive = true;
};
};
}

View file

@ -1,205 +0,0 @@
#compdef jira
# zsh completion for jira -*- shell-script -*-
__jira_debug()
{
local file="$BASH_COMP_DEBUG_FILE"
if [[ -n ${file} ]]; then
echo "$*" >> "${file}"
fi
}
_jira()
{
local shellCompDirectiveError=1
local shellCompDirectiveNoSpace=2
local shellCompDirectiveNoFileComp=4
local shellCompDirectiveFilterFileExt=8
local shellCompDirectiveFilterDirs=16
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace
local -a completions
__jira_debug "\n========= starting completion logic =========="
__jira_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"
# The user could have moved the cursor backwards on the command-line.
# We need to trigger completion from the $CURRENT location, so we need
# to truncate the command-line ($words) up to the $CURRENT location.
# (We cannot use $CURSOR as its value does not work when a command is an alias.)
words=("${=words[1,CURRENT]}")
__jira_debug "Truncated words[*]: ${words[*]},"
lastParam=${words[-1]}
lastChar=${lastParam[-1]}
__jira_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"
# For zsh, when completing a flag with an = (e.g., jira -n=<TAB>)
# completions must be prefixed with the flag
setopt local_options BASH_REMATCH
if [[ "${lastParam}" =~ '-.*=' ]]; then
# We are dealing with a flag with an =
flagPrefix="-P ${BASH_REMATCH}"
fi
# Prepare the command to obtain completions
requestComp="${words[1]} __complete ${words[2,-1]}"
if [ "${lastChar}" = "" ]; then
# If the last parameter is complete (there is a space following it)
# We add an extra empty parameter so we can indicate this to the go completion code.
__jira_debug "Adding extra empty parameter"
requestComp="${requestComp} \"\""
fi
__jira_debug "About to call: eval ${requestComp}"
# Use eval to handle any environment variables and such
out=$(eval ${requestComp} 2>/dev/null)
__jira_debug "completion output: ${out}"
# Extract the directive integer following a : from the last line
local lastLine
while IFS='\n' read -r line; do
lastLine=${line}
done < <(printf "%s\n" "${out[@]}")
__jira_debug "last line: ${lastLine}"
if [ "${lastLine[1]}" = : ]; then
directive=${lastLine[2,-1]}
# Remove the directive including the : and the newline
local suffix
(( suffix=${#lastLine}+2))
out=${out[1,-$suffix]}
else
# There is no directive specified. Leave $out as is.
__jira_debug "No directive found. Setting do default"
directive=0
fi
__jira_debug "directive: ${directive}"
__jira_debug "completions: ${out}"
__jira_debug "flagPrefix: ${flagPrefix}"
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
__jira_debug "Completion received error. Ignoring completions."
return
fi
local activeHelpMarker="_activeHelp_ "
local endIndex=${#activeHelpMarker}
local startIndex=$((${#activeHelpMarker}+1))
local hasActiveHelp=0
while IFS='\n' read -r comp; do
# Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)
if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then
__jira_debug "ActiveHelp found: $comp"
comp="${comp[$startIndex,-1]}"
if [ -n "$comp" ]; then
compadd -x "${comp}"
__jira_debug "ActiveHelp will need delimiter"
hasActiveHelp=1
fi
continue
fi
if [ -n "$comp" ]; then
# If requested, completions are returned with a description.
# The description is preceded by a TAB character.
# For zsh's _describe, we need to use a : instead of a TAB.
# We first need to escape any : as part of the completion itself.
comp=${comp//:/\\:}
local tab="$(printf '\t')"
comp=${comp//$tab/:}
__jira_debug "Adding completion: ${comp}"
completions+=${comp}
lastComp=$comp
fi
done < <(printf "%s\n" "${out[@]}")
# Add a delimiter after the activeHelp statements, but only if:
# - there are completions following the activeHelp statements, or
# - file completion will be performed (so there will be choices after the activeHelp)
if [ $hasActiveHelp -eq 1 ]; then
if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then
__jira_debug "Adding activeHelp delimiter"
compadd -x "--"
hasActiveHelp=0
fi
fi
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
__jira_debug "Activating nospace."
noSpace="-S ''"
fi
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
# File extension filtering
local filteringCmd
filteringCmd='_files'
for filter in ${completions[@]}; do
if [ ${filter[1]} != '*' ]; then
# zsh requires a glob pattern to do file filtering
filter="\*.$filter"
fi
filteringCmd+=" -g $filter"
done
filteringCmd+=" ${flagPrefix}"
__jira_debug "File filtering command: $filteringCmd"
_arguments '*:filename:'"$filteringCmd"
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
# File completion for directories only
local subdir
subdir="${completions[1]}"
if [ -n "$subdir" ]; then
__jira_debug "Listing directories in $subdir"
pushd "${subdir}" >/dev/null 2>&1
else
__jira_debug "Listing directories in ."
fi
local result
_arguments '*:dirname:_files -/'" ${flagPrefix}"
result=$?
if [ -n "$subdir" ]; then
popd >/dev/null 2>&1
fi
return $result
else
__jira_debug "Calling _describe"
if eval _describe "completions" completions $flagPrefix $noSpace; then
__jira_debug "_describe found some completions"
# Return the success of having called _describe
return 0
else
__jira_debug "_describe did not find completions."
__jira_debug "Checking if we should do file completion."
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
__jira_debug "deactivating file completion"
# We must return an error code here to let zsh know that there were no
# completions found by _describe; this is what will trigger other
# matching algorithms to attempt to find completions.
# For example zsh can match letters in the middle of words.
return 1
else
# Perform file completion
__jira_debug "Activating file completion"
# We must return the result of this command, so it must be the
# last command, or else we must store its result to return it.
_arguments '*:filename:_files'" ${flagPrefix}"
fi
fi
fi
}
# don't run the completion function when being source-ed or eval-ed
if [ "$funcstack[1]" = "_jira" ]; then
_jira
fi

View file

@ -1,555 +0,0 @@
#compdef kabalist_cli
autoload -U is-at-least
_kabalist_cli() {
typeset -A opt_args
typeset -a _arguments_options
local ret=1
if is-at-least 5.2; then
_arguments_options=(-s -S -C)
else
_arguments_options=(-s -C)
fi
local context curcontext="$curcontext" state line
_arguments "${_arguments_options[@]}" \
'-u+[]:URL: ' \
'--url=[]:URL: ' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli_commands" \
"*::: :->kabalist_cli" \
&& ret=0
case $state in
(kabalist_cli)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-command-$line[1]:"
case $line[1] in
(account)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli__account_commands" \
"*::: :->account" \
&& ret=0
case $state in
(account)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-account-command-$line[1]:"
case $line[1] in
(login)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':name:' \
'::password:' \
&& ret=0
;;
(recover)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':id:' \
'::password:' \
&& ret=0
;;
(register)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':id:' \
':username:' \
'::password:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(list)
_arguments "${_arguments_options[@]}" \
'-t+[]:TOKEN: ' \
'--token=[]:TOKEN: ' \
'-h[Print help information]' \
'--help[Print help information]' \
':list:' \
":: :_kabalist_cli__list_commands" \
"*::: :->list" \
&& ret=0
case $state in
(list)
words=($line[2] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-list-command-$line[2]:"
case $line[2] in
(delete)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(add)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':name:' \
'::amount:' \
&& ret=0
;;
(item)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':item:' \
":: :_kabalist_cli__list__item_commands" \
"*::: :->item" \
&& ret=0
case $state in
(item)
words=($line[2] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-list-item-command-$line[2]:"
case $line[2] in
(tick)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(update)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
'::name:' \
'::amount:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(share)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli__list__share_commands" \
"*::: :->share" \
&& ret=0
case $state in
(share)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-list-share-command-$line[1]:"
case $line[1] in
(add)
_arguments "${_arguments_options[@]}" \
'-r[]' \
'--readonly[]' \
'-h[Print help information]' \
'--help[Print help information]' \
':name:' \
&& ret=0
;;
(delete)
_arguments "${_arguments_options[@]}" \
'--all[]' \
'-h[Print help information]' \
'--help[Print help information]' \
'*::names:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(public)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli__list__public_commands" \
"*::: :->public" \
&& ret=0
case $state in
(public)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-list-public-command-$line[1]:"
case $line[1] in
(set)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(remove)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(history)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
'::search:' \
&& ret=0
;;
(pantry)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli__list__pantry_commands" \
"*::: :->pantry" \
&& ret=0
case $state in
(pantry)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-list-pantry-command-$line[1]:"
case $line[1] in
(add)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':name:' \
':target:' \
&& ret=0
;;
(edit)
_arguments "${_arguments_options[@]}" \
'-t+[]:TARGET: ' \
'--target=[]:TARGET: ' \
'-a+[]:AMOUNT: ' \
'--amount=[]:AMOUNT: ' \
'-h[Print help information]' \
'--help[Print help information]' \
':item:' \
&& ret=0
;;
(delete)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':item:' \
&& ret=0
;;
(refill)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(lists)
_arguments "${_arguments_options[@]}" \
'-t+[]:TOKEN: ' \
'--token=[]:TOKEN: ' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_kabalist_cli__lists_commands" \
"*::: :->lists" \
&& ret=0
case $state in
(lists)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:kabalist_cli-lists-command-$line[1]:"
case $line[1] in
(create)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':list:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
;;
(completions)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
':shell:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" \
'*::subcommand -- The subcommand whose help message to display:' \
&& ret=0
;;
esac
;;
esac
}
(( $+functions[_kabalist_cli_commands] )) ||
_kabalist_cli_commands() {
local commands; commands=(
'account:' \
'list:' \
'lists:' \
'completions:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli commands' commands "$@"
}
(( $+functions[_kabalist_cli__account_commands] )) ||
_kabalist_cli__account_commands() {
local commands; commands=(
'login:' \
'recover:' \
'register:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli account commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__add_commands] )) ||
_kabalist_cli__list__add_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list add commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry__add_commands] )) ||
_kabalist_cli__list__pantry__add_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list pantry add commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__share__add_commands] )) ||
_kabalist_cli__list__share__add_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list share add commands' commands "$@"
}
(( $+functions[_kabalist_cli__completions_commands] )) ||
_kabalist_cli__completions_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli completions commands' commands "$@"
}
(( $+functions[_kabalist_cli__lists__create_commands] )) ||
_kabalist_cli__lists__create_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli lists create commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__delete_commands] )) ||
_kabalist_cli__list__delete_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list delete commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry__delete_commands] )) ||
_kabalist_cli__list__pantry__delete_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list pantry delete commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__share__delete_commands] )) ||
_kabalist_cli__list__share__delete_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list share delete commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry__edit_commands] )) ||
_kabalist_cli__list__pantry__edit_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list pantry edit commands' commands "$@"
}
(( $+functions[_kabalist_cli__account__help_commands] )) ||
_kabalist_cli__account__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli account help commands' commands "$@"
}
(( $+functions[_kabalist_cli__help_commands] )) ||
_kabalist_cli__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__help_commands] )) ||
_kabalist_cli__list__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__item__help_commands] )) ||
_kabalist_cli__list__item__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list item help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry__help_commands] )) ||
_kabalist_cli__list__pantry__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list pantry help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__public__help_commands] )) ||
_kabalist_cli__list__public__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list public help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__share__help_commands] )) ||
_kabalist_cli__list__share__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list share help commands' commands "$@"
}
(( $+functions[_kabalist_cli__lists__help_commands] )) ||
_kabalist_cli__lists__help_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli lists help commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__history_commands] )) ||
_kabalist_cli__list__history_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list history commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__item_commands] )) ||
_kabalist_cli__list__item_commands() {
local commands; commands=(
'tick:' \
'update:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli list item commands' commands "$@"
}
(( $+functions[_kabalist_cli__list_commands] )) ||
_kabalist_cli__list_commands() {
local commands; commands=(
'delete:' \
'add:' \
'item:' \
'share:' \
'public:' \
'history:' \
'pantry:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli list commands' commands "$@"
}
(( $+functions[_kabalist_cli__lists_commands] )) ||
_kabalist_cli__lists_commands() {
local commands; commands=(
'create:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli lists commands' commands "$@"
}
(( $+functions[_kabalist_cli__account__login_commands] )) ||
_kabalist_cli__account__login_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli account login commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry_commands] )) ||
_kabalist_cli__list__pantry_commands() {
local commands; commands=(
'add:' \
'edit:' \
'delete:' \
'refill:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli list pantry commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__public_commands] )) ||
_kabalist_cli__list__public_commands() {
local commands; commands=(
'set:' \
'remove:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli list public commands' commands "$@"
}
(( $+functions[_kabalist_cli__account__recover_commands] )) ||
_kabalist_cli__account__recover_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli account recover commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__pantry__refill_commands] )) ||
_kabalist_cli__list__pantry__refill_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list pantry refill commands' commands "$@"
}
(( $+functions[_kabalist_cli__account__register_commands] )) ||
_kabalist_cli__account__register_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli account register commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__public__remove_commands] )) ||
_kabalist_cli__list__public__remove_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list public remove commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__public__set_commands] )) ||
_kabalist_cli__list__public__set_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list public set commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__share_commands] )) ||
_kabalist_cli__list__share_commands() {
local commands; commands=(
'add:' \
'delete:' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'kabalist_cli list share commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__item__tick_commands] )) ||
_kabalist_cli__list__item__tick_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list item tick commands' commands "$@"
}
(( $+functions[_kabalist_cli__list__item__update_commands] )) ||
_kabalist_cli__list__item__update_commands() {
local commands; commands=()
_describe -t commands 'kabalist_cli list item update commands' commands "$@"
}
_kabalist_cli "$@"