From 9acee1babdd88cd166c7746142efb32f0aabc8b0 Mon Sep 17 00:00:00 2001 From: Albin Kauffmann Date: Fri, 30 Jun 2023 10:11:24 +0200 Subject: [PATCH] feat(scw): add new functions to handle profiles This commit adds the following commands: - ssp (Scaleway Set Profile) allows to set the current SCW_PROFILE - sgp (Scaleway Get Profile) allows to show the current SCW_PROFILE - scw_profiles allows to list available profiles Completion and error handling is supported for the ssp command. --- plugins/scw/scw.plugin.zsh | 48 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/plugins/scw/scw.plugin.zsh b/plugins/scw/scw.plugin.zsh index 4b5983bac..088842324 100644 --- a/plugins/scw/scw.plugin.zsh +++ b/plugins/scw/scw.plugin.zsh @@ -3,6 +3,54 @@ if ! command -v scw &> /dev/null; then return fi +function sgp() { + echo "$SCW_PROFILE" +} + +# SCW profile selection +function ssp() { + if [[ -z "$1" ]]; then + unset SCW_PROFILE + echo SCW profile cleared. + return + fi + + local -a available_profiles + available_profiles=($(scw_profiles)) + if [[ -z "${available_profiles[(r)$1]}" ]]; then + echo "${fg[red]}Profile '$1' not found in '$(scw_config_path)'" >&2 + echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2 + return 1 + fi + + export SCW_PROFILE=$1 +} + +function scw_profiles() { + scw autocomplete complete zsh 3 -- scw --profile 2> /dev/null +} + +function scw_config_path() { + if [[ -v SCW_CONFIG_PATH ]]; then + echo "$SCW_CONFIG_PATH" + return + fi + + for f in "$XDG_CONFIG_HOME/scw/config.yaml" \ + "$HOME/.config/scw/config.yaml" \ + "$USERPROFILE/.config/scw/config.yaml"; do + if [[ -f "$f" ]]; then + echo "$f" + return + fi + done +} + +function _scw_profiles() { + reply=($(scw_profiles)) +} +compctl -K _scw_profiles ssp + # Load scw autocompletion if autocompletion not already loaded if ! command -v _scw &> /dev/null; then eval "$(scw autocomplete script shell=zsh)"