1
1
#! /usr/bin/env bash
2
-
3
2
set -euo pipefail
4
3
5
4
__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
+ }'
7
26
}
8
27
9
28
__list_all_plugins () {
10
29
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
26
33
}
27
34
35
+
36
+ __list_current () {
37
+ asdf current 2>&1 | awk ' { print $1,$2 }' | column -t
38
+ }
39
+
40
+
28
41
__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 }'
33
46
}
34
47
35
48
__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
40
95
}
41
96
42
97
__list_all_versions () {
98
+ version_filter=$( __version_filter " $1 " )
43
99
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
60
104
}
61
105
62
106
__list_installed_versions () {
63
- __list_all_versions $1 | grep ' installed'
107
+ __list_all_versions " $1 " | grep ' installed'
64
108
}
65
109
66
110
__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 }'
70
114
71
115
}
72
116
73
117
__select_available_versions () {
74
- versions=` __list_all_versions $1 `
118
+ versions=$( __list_all_versions " $1 " )
75
119
cat <( echo " $versions " | grep " installed" ) \
76
120
<( 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 }'
78
122
}
79
123
80
124
__select_installed_versions () {
81
- versions=` __list_all_versions $1 `
125
+ versions=$( __list_all_versions " $1 " )
82
126
cat <( echo " $versions " | grep -v " installed" ) \
83
127
<( echo " $versions " | grep " installed" ) | \
84
- fzf -m --tac --ansi --no-sort | awk ' {print $1}'
128
+ fzf -m --tac --ansi --no-sort | awk ' { print $1 }'
85
129
}
86
130
87
131
__get_current_version () {
88
132
set +e
89
- asdf current terraform | awk ' {print $1}'
133
+ asdf current terraform | awk ' { print $1 }'
90
134
set -e
91
135
}
92
136
137
+ __multi () {
138
+ xargs -t -r -n 1 " $@ "
139
+ }
140
+
93
141
_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 "
96
144
}
97
145
98
146
_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 "
101
149
}
102
150
103
151
_plugin-add () {
104
- __select_available_plugins | xargs -t -r -n 1 asdf plugin-add
152
+ __select_available_plugins | __multi asdf plugin-add
105
153
}
106
154
107
155
_plugin-remove () {
108
- __select_installed_plugins | xargs -t -r -n 1 asdf plugin-remove
156
+ __select_installed_plugins | __multi asdf plugin-remove
109
157
}
110
158
159
+
111
160
_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
114
163
}
115
164
116
165
_list-all () {
117
- plugin=` __list_installed_plugins | fzf `
118
- __list_all_versions $plugin
166
+ plugin=$( __select_installed_plugin )
167
+ __list_all_versions " $plugin "
119
168
}
120
169
121
170
_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 "
124
174
}
125
175
126
176
_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 "
129
180
}
130
181
131
182
_current () {
132
- asdf current 2>&1 | awk ' {print $1,$2} ' | column -t | fzf
183
+ __list_current | fzf
133
184
}
134
185
135
186
136
- main () {
137
- operation=$( cat << -EOF | fzf
187
+
188
+ __list_operations () {
189
+ cat << -EOF
138
190
install
139
191
uninstall
140
192
plugin-add
@@ -145,8 +197,15 @@ local
145
197
global
146
198
current
147
199
EOF
148
- )
149
- _$operation
200
+ }
201
+
202
+ __select_operation () {
203
+ __list_operations | fzf
204
+ }
205
+
206
+ main () {
207
+ operation=$( __select_operation)
208
+ " _$operation "
150
209
}
151
210
152
211
main
0 commit comments