replace password-store with rbw

This commit is contained in:
Simon Rieger 2024-10-30 17:06:32 +01:00
parent 150084635e
commit 618c7ed3ec
4 changed files with 762 additions and 1 deletions

View file

@ -15,7 +15,7 @@ sudo usermod -s /bin/zsh simono41
curl -sS https://starship.rs/install.sh | sh
dnf install jetbrains-mono-fonts tmux perl-Time-HiRes
dnf install jetbrains-mono-fonts tmux perl-Time-HiRes rbw
sh -c "$(curl -fsLS get.chezmoi.io)"
chezmoi init -v --apply --force https://code.brothertec.eu/simono41/dotfiles.git

View file

@ -28,6 +28,7 @@ brew install htop
brew install btop
brew install asciiquarium
brew install lolcat
brew install rbw
brew install openjdk@17
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
brew install openjdk@21

View file

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Use fuzzel to find a password from password-store and copy it to clipboard.
# inpired by: https://gist.github.com/igemnace/2b8609d280752e8a1b173204c14f6892
pass_name=$(rbw list | fuzzel -d)
[[ $pass_name != "" ]] && rbw get "$pass_name" | wl-copy

753
dot_zsh/completion/_rbw Normal file
View file

@ -0,0 +1,753 @@
#compdef rbw
autoload -U is-at-least
_rbw() {
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[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
'-V[Print version]' \
'--version[Print version]' \
":: :_rbw_commands" \
"*::: :->rbw" \
&& ret=0
case $state in
(rbw)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:rbw-command-$line[1]:"
case $line[1] in
(config)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
":: :_rbw__config_commands" \
"*::: :->config" \
&& ret=0
case $state in
(config)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:rbw-config-command-$line[1]:"
case $line[1] in
(show)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
':key -- Configuration key to set:' \
':value -- Value to set the configuration option to:' \
&& ret=0
;;
(unset)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
':key -- Configuration key to unset:' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
":: :_rbw__config__help_commands" \
"*::: :->help" \
&& ret=0
case $state in
(help)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:rbw-config-help-command-$line[1]:"
case $line[1] in
(show)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(unset)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
esac
;;
esac
;;
esac
;;
esac
;;
(register)
_arguments "${_arguments_options[@]}" : \
'-h[Print help (see more with '\''--help'\'')]' \
'--help[Print help (see more with '\''--help'\'')]' \
&& ret=0
;;
(login)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(unlock)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(unlocked)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(sync)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(list)
_arguments "${_arguments_options[@]}" : \
'*--fields=[Fields to display. Available options are id, name, user, folder. Multiple fields will be separated by tabs.]:FIELDS: ' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(ls)
_arguments "${_arguments_options[@]}" : \
'*--fields=[Fields to display. Available options are id, name, user, folder. Multiple fields will be separated by tabs.]:FIELDS: ' \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-f+[Field to get]:FIELD: ' \
'--field=[Field to get]:FIELD: ' \
'--full[Display the notes in addition to the password]' \
'--raw[Display output as JSON]' \
'--clipboard[Copy result to clipboard]' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':needle -- Name, URI or UUID of the entry to display:' \
'::user -- Username of the entry to display:' \
&& ret=0
;;
(search)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-h[Print help]' \
'--help[Print help]' \
':term -- Search term to locate entries:' \
&& ret=0
;;
(code)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'--clipboard[Copy result to clipboard]' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':needle -- Name, URI or UUID of the entry to display:' \
'::user -- Username of the entry to display:' \
&& ret=0
;;
(totp)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'--clipboard[Copy result to clipboard]' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':needle -- Name, URI or UUID of the entry to display:' \
'::user -- Username of the entry to display:' \
&& ret=0
;;
(add)
_arguments "${_arguments_options[@]}" : \
'*--uri=[URI for the password entry]:URI: ' \
'--folder=[Folder for the password entry]:FOLDER: ' \
'-h[Print help (see more with '\''--help'\'')]' \
'--help[Print help (see more with '\''--help'\'')]' \
':name -- Name of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(generate)
_arguments "${_arguments_options[@]}" : \
'*--uri=[URI for the password entry]:URI: ' \
'--folder=[Folder for the password entry]:FOLDER: ' \
'--no-symbols[Generate a password with no special characters]' \
'--only-numbers[Generate a password consisting of only numbers]' \
'--nonconfusables[Generate a password without visually similar characters (useful for passwords intended to be written down)]' \
'--diceware[Generate a password of multiple dictionary words chosen from the EFF word list. The len parameter for this option will set the number of words to generate, rather than characters.]' \
'-h[Print help (see more with '\''--help'\'')]' \
'--help[Print help (see more with '\''--help'\'')]' \
':len -- Length of the password to generate:' \
'::name -- Name of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(gen)
_arguments "${_arguments_options[@]}" : \
'*--uri=[URI for the password entry]:URI: ' \
'--folder=[Folder for the password entry]:FOLDER: ' \
'--no-symbols[Generate a password with no special characters]' \
'--only-numbers[Generate a password consisting of only numbers]' \
'--nonconfusables[Generate a password without visually similar characters (useful for passwords intended to be written down)]' \
'--diceware[Generate a password of multiple dictionary words chosen from the EFF word list. The len parameter for this option will set the number of words to generate, rather than characters.]' \
'-h[Print help (see more with '\''--help'\'')]' \
'--help[Print help (see more with '\''--help'\'')]' \
':len -- Length of the password to generate:' \
'::name -- Name of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(edit)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help (see more with '\''--help'\'')]' \
'--help[Print help (see more with '\''--help'\'')]' \
':name -- Name or UUID of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(remove)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':name -- Name or UUID of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(rm)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':name -- Name or UUID of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(history)
_arguments "${_arguments_options[@]}" : \
'--folder=[Folder name to search in]:FOLDER: ' \
'-i[Ignore case]' \
'--ignorecase[Ignore case]' \
'-h[Print help]' \
'--help[Print help]' \
':name -- Name or UUID of the password entry:' \
'::user -- Username for the password entry:' \
&& ret=0
;;
(lock)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(purge)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(stop-agent)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
&& ret=0
;;
(gen-completions)
_arguments "${_arguments_options[@]}" : \
'-h[Print help]' \
'--help[Print help]' \
':shell:(bash elvish fish powershell zsh)' \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
":: :_rbw__help_commands" \
"*::: :->help" \
&& ret=0
case $state in
(help)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:rbw-help-command-$line[1]:"
case $line[1] in
(config)
_arguments "${_arguments_options[@]}" : \
":: :_rbw__help__config_commands" \
"*::: :->config" \
&& ret=0
case $state in
(config)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:rbw-help-config-command-$line[1]:"
case $line[1] in
(show)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(unset)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
esac
;;
esac
;;
(register)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(login)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(unlock)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(unlocked)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(sync)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(list)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(search)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(code)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(add)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(generate)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(edit)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(remove)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(history)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(lock)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(purge)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(stop-agent)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(gen-completions)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
(help)
_arguments "${_arguments_options[@]}" : \
&& ret=0
;;
esac
;;
esac
;;
esac
;;
esac
}
(( $+functions[_rbw_commands] )) ||
_rbw_commands() {
local commands; commands=(
'config:Get or set configuration options' \
'register:Register this device with the Bitwarden server' \
'login:Log in to the Bitwarden server' \
'unlock:Unlock the local Bitwarden database' \
'unlocked:Check if the local Bitwarden database is unlocked' \
'sync:Update the local copy of the Bitwarden database' \
'list:List all entries in the local Bitwarden database' \
'ls:List all entries in the local Bitwarden database' \
'get:Display the password for a given entry' \
'search:Search for entries' \
'code:Display the authenticator code for a given entry' \
'totp:Display the authenticator code for a given entry' \
'add:Add a new password to the database' \
'generate:Generate a new password' \
'gen:Generate a new password' \
'edit:Modify an existing password' \
'remove:Remove a given entry' \
'rm:Remove a given entry' \
'history:View the password history for a given entry' \
'lock:Lock the password database' \
'purge:Remove the local copy of the password database' \
'stop-agent:Terminate the background agent' \
'gen-completions:Generate completion script for the given shell' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'rbw commands' commands "$@"
}
(( $+functions[_rbw__add_commands] )) ||
_rbw__add_commands() {
local commands; commands=()
_describe -t commands 'rbw add commands' commands "$@"
}
(( $+functions[_rbw__code_commands] )) ||
_rbw__code_commands() {
local commands; commands=()
_describe -t commands 'rbw code commands' commands "$@"
}
(( $+functions[_rbw__config_commands] )) ||
_rbw__config_commands() {
local commands; commands=(
'show:Show the values of all configuration settings' \
'set:Set a configuration option' \
'unset:Reset a configuration option to its default' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'rbw config commands' commands "$@"
}
(( $+functions[_rbw__config__help_commands] )) ||
_rbw__config__help_commands() {
local commands; commands=(
'show:Show the values of all configuration settings' \
'set:Set a configuration option' \
'unset:Reset a configuration option to its default' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'rbw config help commands' commands "$@"
}
(( $+functions[_rbw__config__help__help_commands] )) ||
_rbw__config__help__help_commands() {
local commands; commands=()
_describe -t commands 'rbw config help help commands' commands "$@"
}
(( $+functions[_rbw__config__help__set_commands] )) ||
_rbw__config__help__set_commands() {
local commands; commands=()
_describe -t commands 'rbw config help set commands' commands "$@"
}
(( $+functions[_rbw__config__help__show_commands] )) ||
_rbw__config__help__show_commands() {
local commands; commands=()
_describe -t commands 'rbw config help show commands' commands "$@"
}
(( $+functions[_rbw__config__help__unset_commands] )) ||
_rbw__config__help__unset_commands() {
local commands; commands=()
_describe -t commands 'rbw config help unset commands' commands "$@"
}
(( $+functions[_rbw__config__set_commands] )) ||
_rbw__config__set_commands() {
local commands; commands=()
_describe -t commands 'rbw config set commands' commands "$@"
}
(( $+functions[_rbw__config__show_commands] )) ||
_rbw__config__show_commands() {
local commands; commands=()
_describe -t commands 'rbw config show commands' commands "$@"
}
(( $+functions[_rbw__config__unset_commands] )) ||
_rbw__config__unset_commands() {
local commands; commands=()
_describe -t commands 'rbw config unset commands' commands "$@"
}
(( $+functions[_rbw__edit_commands] )) ||
_rbw__edit_commands() {
local commands; commands=()
_describe -t commands 'rbw edit commands' commands "$@"
}
(( $+functions[_rbw__gen-completions_commands] )) ||
_rbw__gen-completions_commands() {
local commands; commands=()
_describe -t commands 'rbw gen-completions commands' commands "$@"
}
(( $+functions[_rbw__generate_commands] )) ||
_rbw__generate_commands() {
local commands; commands=()
_describe -t commands 'rbw generate commands' commands "$@"
}
(( $+functions[_rbw__get_commands] )) ||
_rbw__get_commands() {
local commands; commands=()
_describe -t commands 'rbw get commands' commands "$@"
}
(( $+functions[_rbw__help_commands] )) ||
_rbw__help_commands() {
local commands; commands=(
'config:Get or set configuration options' \
'register:Register this device with the Bitwarden server' \
'login:Log in to the Bitwarden server' \
'unlock:Unlock the local Bitwarden database' \
'unlocked:Check if the local Bitwarden database is unlocked' \
'sync:Update the local copy of the Bitwarden database' \
'list:List all entries in the local Bitwarden database' \
'get:Display the password for a given entry' \
'search:Search for entries' \
'code:Display the authenticator code for a given entry' \
'add:Add a new password to the database' \
'generate:Generate a new password' \
'edit:Modify an existing password' \
'remove:Remove a given entry' \
'history:View the password history for a given entry' \
'lock:Lock the password database' \
'purge:Remove the local copy of the password database' \
'stop-agent:Terminate the background agent' \
'gen-completions:Generate completion script for the given shell' \
'help:Print this message or the help of the given subcommand(s)' \
)
_describe -t commands 'rbw help commands' commands "$@"
}
(( $+functions[_rbw__help__add_commands] )) ||
_rbw__help__add_commands() {
local commands; commands=()
_describe -t commands 'rbw help add commands' commands "$@"
}
(( $+functions[_rbw__help__code_commands] )) ||
_rbw__help__code_commands() {
local commands; commands=()
_describe -t commands 'rbw help code commands' commands "$@"
}
(( $+functions[_rbw__help__config_commands] )) ||
_rbw__help__config_commands() {
local commands; commands=(
'show:Show the values of all configuration settings' \
'set:Set a configuration option' \
'unset:Reset a configuration option to its default' \
)
_describe -t commands 'rbw help config commands' commands "$@"
}
(( $+functions[_rbw__help__config__set_commands] )) ||
_rbw__help__config__set_commands() {
local commands; commands=()
_describe -t commands 'rbw help config set commands' commands "$@"
}
(( $+functions[_rbw__help__config__show_commands] )) ||
_rbw__help__config__show_commands() {
local commands; commands=()
_describe -t commands 'rbw help config show commands' commands "$@"
}
(( $+functions[_rbw__help__config__unset_commands] )) ||
_rbw__help__config__unset_commands() {
local commands; commands=()
_describe -t commands 'rbw help config unset commands' commands "$@"
}
(( $+functions[_rbw__help__edit_commands] )) ||
_rbw__help__edit_commands() {
local commands; commands=()
_describe -t commands 'rbw help edit commands' commands "$@"
}
(( $+functions[_rbw__help__gen-completions_commands] )) ||
_rbw__help__gen-completions_commands() {
local commands; commands=()
_describe -t commands 'rbw help gen-completions commands' commands "$@"
}
(( $+functions[_rbw__help__generate_commands] )) ||
_rbw__help__generate_commands() {
local commands; commands=()
_describe -t commands 'rbw help generate commands' commands "$@"
}
(( $+functions[_rbw__help__get_commands] )) ||
_rbw__help__get_commands() {
local commands; commands=()
_describe -t commands 'rbw help get commands' commands "$@"
}
(( $+functions[_rbw__help__help_commands] )) ||
_rbw__help__help_commands() {
local commands; commands=()
_describe -t commands 'rbw help help commands' commands "$@"
}
(( $+functions[_rbw__help__history_commands] )) ||
_rbw__help__history_commands() {
local commands; commands=()
_describe -t commands 'rbw help history commands' commands "$@"
}
(( $+functions[_rbw__help__list_commands] )) ||
_rbw__help__list_commands() {
local commands; commands=()
_describe -t commands 'rbw help list commands' commands "$@"
}
(( $+functions[_rbw__help__lock_commands] )) ||
_rbw__help__lock_commands() {
local commands; commands=()
_describe -t commands 'rbw help lock commands' commands "$@"
}
(( $+functions[_rbw__help__login_commands] )) ||
_rbw__help__login_commands() {
local commands; commands=()
_describe -t commands 'rbw help login commands' commands "$@"
}
(( $+functions[_rbw__help__purge_commands] )) ||
_rbw__help__purge_commands() {
local commands; commands=()
_describe -t commands 'rbw help purge commands' commands "$@"
}
(( $+functions[_rbw__help__register_commands] )) ||
_rbw__help__register_commands() {
local commands; commands=()
_describe -t commands 'rbw help register commands' commands "$@"
}
(( $+functions[_rbw__help__remove_commands] )) ||
_rbw__help__remove_commands() {
local commands; commands=()
_describe -t commands 'rbw help remove commands' commands "$@"
}
(( $+functions[_rbw__help__search_commands] )) ||
_rbw__help__search_commands() {
local commands; commands=()
_describe -t commands 'rbw help search commands' commands "$@"
}
(( $+functions[_rbw__help__stop-agent_commands] )) ||
_rbw__help__stop-agent_commands() {
local commands; commands=()
_describe -t commands 'rbw help stop-agent commands' commands "$@"
}
(( $+functions[_rbw__help__sync_commands] )) ||
_rbw__help__sync_commands() {
local commands; commands=()
_describe -t commands 'rbw help sync commands' commands "$@"
}
(( $+functions[_rbw__help__unlock_commands] )) ||
_rbw__help__unlock_commands() {
local commands; commands=()
_describe -t commands 'rbw help unlock commands' commands "$@"
}
(( $+functions[_rbw__help__unlocked_commands] )) ||
_rbw__help__unlocked_commands() {
local commands; commands=()
_describe -t commands 'rbw help unlocked commands' commands "$@"
}
(( $+functions[_rbw__history_commands] )) ||
_rbw__history_commands() {
local commands; commands=()
_describe -t commands 'rbw history commands' commands "$@"
}
(( $+functions[_rbw__list_commands] )) ||
_rbw__list_commands() {
local commands; commands=()
_describe -t commands 'rbw list commands' commands "$@"
}
(( $+functions[_rbw__lock_commands] )) ||
_rbw__lock_commands() {
local commands; commands=()
_describe -t commands 'rbw lock commands' commands "$@"
}
(( $+functions[_rbw__login_commands] )) ||
_rbw__login_commands() {
local commands; commands=()
_describe -t commands 'rbw login commands' commands "$@"
}
(( $+functions[_rbw__purge_commands] )) ||
_rbw__purge_commands() {
local commands; commands=()
_describe -t commands 'rbw purge commands' commands "$@"
}
(( $+functions[_rbw__register_commands] )) ||
_rbw__register_commands() {
local commands; commands=()
_describe -t commands 'rbw register commands' commands "$@"
}
(( $+functions[_rbw__remove_commands] )) ||
_rbw__remove_commands() {
local commands; commands=()
_describe -t commands 'rbw remove commands' commands "$@"
}
(( $+functions[_rbw__search_commands] )) ||
_rbw__search_commands() {
local commands; commands=()
_describe -t commands 'rbw search commands' commands "$@"
}
(( $+functions[_rbw__stop-agent_commands] )) ||
_rbw__stop-agent_commands() {
local commands; commands=()
_describe -t commands 'rbw stop-agent commands' commands "$@"
}
(( $+functions[_rbw__sync_commands] )) ||
_rbw__sync_commands() {
local commands; commands=()
_describe -t commands 'rbw sync commands' commands "$@"
}
(( $+functions[_rbw__unlock_commands] )) ||
_rbw__unlock_commands() {
local commands; commands=()
_describe -t commands 'rbw unlock commands' commands "$@"
}
(( $+functions[_rbw__unlocked_commands] )) ||
_rbw__unlocked_commands() {
local commands; commands=()
_describe -t commands 'rbw unlocked commands' commands "$@"
}
if [ "$funcstack[1]" = "_rbw" ]; then
_rbw "$@"
else
compdef _rbw rbw
fi