11#! /usr/bin/env bash
2-
32set -euo pipefail
43
54__list_installed_plugins () {
6- asdf plugin-list 2> /dev/null | sort
5+ asdf plugin-list 2> /dev/null | sort
6+ }
7+
8+ __select_installed_plugin () {
9+ __list_installed_plugins | fzf
10+ }
11+
12+ __color_installed () {
13+ awk '
14+ BEGIN {
15+ green="\033[32m";
16+ red="\033[31m";
17+ reset="\033[0m";
18+ }
19+ /(installed)/{
20+ print green $0 reset;
21+ next;
22+ }
23+ {
24+ print red $0 reset;
25+ }'
726}
827
928__list_all_plugins () {
1029 join -t ' ' -a 1 \
11- <( asdf plugin-list-all 2> /dev/null | awk ' {print $1}' | sort) \
12- <( __list_installed_plugins | awk ' {print $1 " (installed)"}' | sort) | \
13- awk '
14- BEGIN {
15- green="\033[32m";
16- red="\033[31m";
17- reset="\033[0m";
18- }
19- /(installed)/{
20- print green $0 reset;
21- next;
22- }
23- {
24- print red $0 reset
25- }'
30+ <( asdf plugin-list-all 2> /dev/null | awk ' {print $1}' | sort ) \
31+ <( __list_installed_plugins | awk ' {print $1 " (installed)"}' | sort ) |
32+ __color_installed
2633}
2734
35+
36+ __list_current () {
37+ asdf current 2>&1 | awk ' { print $1,$2 }' | column -t
38+ }
39+
40+
2841__select_available_plugins () {
29- plugins=` __list_all_plugins`
30- cat <( echo " $plugins " | grep " installed" ) \
31- <( echo " $plugins " | grep -v " installed" ) | \
32- fzf -m --tac --ansi | awk ' {print $1}'
42+ plugins=$( __list_all_plugins )
43+ cat <( echo " $plugins " | grep " installed" ) \
44+ <( echo " $plugins " | grep -v " installed" ) |
45+ fzf -m --tac --ansi | awk ' { print $1 }'
3346}
3447
3548__select_installed_plugins () {
36- plugins=` __list_all_plugins`
37- cat <( echo " $plugins " | grep -v " installed" ) \
38- <( echo " $plugins " | grep " installed" ) | \
39- fzf -m --tac --ansi | awk ' {print $1}'
49+ plugins=$( __list_all_plugins )
50+ cat <( echo " $plugins " | grep -v " installed" ) \
51+ <( echo " $plugins " | grep " installed" ) |
52+ fzf -m --tac --ansi | awk ' { print $1 }'
53+ }
54+
55+ __version_filter () {
56+ # Allow user-defined command to filter versions.
57+ # Custom commands are either per tool with ASDFZF_VERSION_FILTER_COMMAND_plugin
58+ # where plugin is the name of the plugin that installs the tool
59+ # or defined globally with ASDFZF_VERSION_FILTER_COMMAND
60+ #
61+ # builtin filters are also selectable with ASDFZF_VERSION_FILTER_plugin
62+ # and ASDFZF_VERSION_FILTER for global selection
63+
64+ varname=" ASDFZF_VERSION_FILTER_COMMAND_$1 "
65+ if [[ -n " ${! varname:- } " ]]; then
66+ echo " ${! varname} "
67+ return
68+ fi
69+ varname=" ASDFZF_VERSION_KEEP_$1 "
70+ if [[ -n " ${! varname:- } " ]]; then
71+ filter=" ${! varname} "
72+ fi
73+ if [[ -z " ${filter:- } " ]]; then
74+ if [[ -n " ${ASDFZF_VERSION_FILTER_COMMAND:- } " ]]; then
75+ echo " $ASDFZF_VERSION_FILTER_COMMAND "
76+ return
77+ fi
78+ filter=" ${ASDFZF_VERSION_KEEP:- all} "
79+ fi
80+ case " $filter " in
81+ all)
82+ echo " cat"
83+ ;;
84+ semver-no-prerelease)
85+ echo " sed -E -n '/^[0-9]+(\.[0-9]+)*(\+[0-9A-Za-z\.-]+)*$/p'"
86+ ;;
87+ semver-only-prerelease)
88+ echo " sed -E -n '/^[0-9]+(\.[0-9]+)*-[0-9A-Za-z\.-]+(\+[0-9A-Za-z\.-]+)*/p'"
89+ ;;
90+ * )
91+ echo " Unknown version filter: $filter " >&2
92+ exit 1
93+ ;;
94+ esac
4095}
4196
4297__list_all_versions () {
98+ version_filter=$( __version_filter " $1 " )
4399 join -t ' ' -a 1 \
44- <( asdf list-all $1 2> /dev/null | awk ' {print $1}' | sort) \
45- <( asdf list $1 2> /dev/null | awk ' {print $1 " (installed)"}' | sort) | \
46- sort -V | \
47- awk '
48- BEGIN {
49- green="\033[32m";
50- red="\033[31m";
51- reset="\033[0m";
52- }
53- /(installed)/{
54- print green $0 reset;
55- next;
56- }
57- {
58- print red $0 reset
59- }'
100+ <( asdf list-all " $1 " 2> /dev/null | awk ' {print $1}' | eval " $version_filter " | sort ) \
101+ <( asdf list " $1 " 2> /dev/null | awk ' {print $1}' | eval " $version_filter " | awk ' {print $1 " (installed)"}' | sort ) | \
102+ sort -V |
103+ __color_installed
60104}
61105
62106__list_installed_versions () {
63- __list_all_versions $1 | grep ' installed'
107+ __list_all_versions " $1 " | grep ' installed'
64108}
65109
66110__select_installed_version () {
67- __list_installed_versions $1 | \
68- fzf --tac --ansi --no-sort | \
69- awk ' {print $1}'
111+ __list_installed_versions " $1 " |
112+ fzf --tac --ansi --no-sort |
113+ awk ' { print $1 }'
70114
71115}
72116
73117__select_available_versions () {
74- versions=` __list_all_versions $1 `
118+ versions=$( __list_all_versions " $1 " )
75119 cat <( echo " $versions " | grep " installed" ) \
76120 <( echo " $versions " | grep -v " installed" ) | \
77- fzf -m --tac --ansi --no-sort | awk ' {print $1}'
121+ fzf -m --tac --ansi --no-sort | awk ' { print $1 }'
78122}
79123
80124__select_installed_versions () {
81- versions=` __list_all_versions $1 `
125+ versions=$( __list_all_versions " $1 " )
82126 cat <( echo " $versions " | grep -v " installed" ) \
83127 <( echo " $versions " | grep " installed" ) | \
84- fzf -m --tac --ansi --no-sort | awk ' {print $1}'
128+ fzf -m --tac --ansi --no-sort | awk ' { print $1 }'
85129}
86130
87131__get_current_version () {
88132 set +e
89- asdf current terraform | awk ' {print $1}'
133+ asdf current terraform | awk ' { print $1 }'
90134 set -e
91135}
92136
137+ __multi () {
138+ xargs -t -r -n 1 " $@ "
139+ }
140+
93141_install () {
94- plugin=` __list_installed_plugins | fzf `
95- __select_available_versions $plugin | xargs -t -r -n 1 asdf install $plugin
142+ plugin=$( __select_installed_plugin )
143+ __select_available_versions " $plugin " | __multi asdf install " $plugin "
96144}
97145
98146_uninstall () {
99- plugin=` __list_installed_plugins | fzf `
100- __select_installed_versions $plugin | xargs -t -r -n 1 asdf uninstall $plugin
147+ plugin=$( __select_installed_plugin )
148+ __select_installed_versions " $plugin " | __multi asdf uninstall " $plugin "
101149}
102150
103151_plugin-add () {
104- __select_available_plugins | xargs -t -r -n 1 asdf plugin-add
152+ __select_available_plugins | __multi asdf plugin-add
105153}
106154
107155_plugin-remove () {
108- __select_installed_plugins | xargs -t -r -n 1 asdf plugin-remove
156+ __select_installed_plugins | __multi asdf plugin-remove
109157}
110158
159+
111160_list () {
112- plugin=` __list_installed_plugins | fzf `
113- __list_all_versions $plugin | grep installed
161+ plugin=$( __select_installed_plugin )
162+ __list_all_versions " $plugin " | grep installed
114163}
115164
116165_list-all () {
117- plugin=` __list_installed_plugins | fzf `
118- __list_all_versions $plugin
166+ plugin=$( __select_installed_plugin )
167+ __list_all_versions " $plugin "
119168}
120169
121170_global () {
122- plugin=` __list_installed_plugins | fzf`
123- __select_installed_version $plugin | xargs -t -r -n 1 asdf global $plugin
171+ plugin=$( __select_installed_plugin )
172+ version=$( __select_installed_version " $plugin " )
173+ asdf global " $plugin " " $version "
124174}
125175
126176_local () {
127- plugin=` __list_installed_plugins | fzf`
128- __select_installed_version $plugin | xargs -t -r -n 1 asdf local $plugin
177+ plugin=$( __select_installed_plugin )
178+ version=$( __select_installed_version " $plugin " )
179+ asdf local " $plugin " " $version "
129180}
130181
131182_current () {
132- asdf current 2>&1 | awk ' {print $1,$2} ' | column -t | fzf
183+ __list_current | fzf
133184}
134185
135186
136- main () {
137- operation=$( cat << -EOF | fzf
187+
188+ __list_operations () {
189+ cat << -EOF
138190install
139191uninstall
140192plugin-add
@@ -145,8 +197,15 @@ local
145197global
146198current
147199EOF
148- )
149- _$operation
200+ }
201+
202+ __select_operation () {
203+ __list_operations | fzf
204+ }
205+
206+ main () {
207+ operation=$( __select_operation)
208+ " _$operation "
150209}
151210
152211main
0 commit comments