|
|
@@ -0,0 +1,59 @@ |
|
|
|
#!/usr/bin/env bash |
|
|
|
|
|
|
|
has() { |
|
|
|
local verbose=0 |
|
|
|
if [[ $1 = '-v' ]]; then |
|
|
|
verbose=1 |
|
|
|
shift |
|
|
|
fi |
|
|
|
for c; do c="${c%% *}" |
|
|
|
if ! command -v "$c" &> /dev/null; then |
|
|
|
(( "$verbose" > 0 )) && err "$c not found" |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
err() { |
|
|
|
printf "\e[31m%s\e[0m\n" "$*" >&2 |
|
|
|
} |
|
|
|
|
|
|
|
die() { |
|
|
|
(( $# > 0 )) && err "$*" |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
|
|
|
|
select_from() { |
|
|
|
local cmd='command -v' |
|
|
|
for a; do |
|
|
|
case "$a" in |
|
|
|
-c) |
|
|
|
cmd="$2" |
|
|
|
shift 2 |
|
|
|
;; |
|
|
|
esac |
|
|
|
done |
|
|
|
for c; do |
|
|
|
if $cmd "${c%% *}" &> /dev/null; then |
|
|
|
echo "$c" |
|
|
|
return 0 |
|
|
|
fi |
|
|
|
done |
|
|
|
return 1 |
|
|
|
} |
|
|
|
|
|
|
|
has -v fzf || die |
|
|
|
|
|
|
|
helper=$(select_from 'pacaur' 'yaourt' 'packer' 'apacman' 'pacman') |
|
|
|
|
|
|
|
mapfile -t pkgs < <( |
|
|
|
$helper -Qu --color=always | |
|
|
|
fzf --ansi -e -m --inline-info --cycle --reverse --bind='Ctrl-A:toggle-all' | |
|
|
|
awk '{print $3}' |
|
|
|
) |
|
|
|
|
|
|
|
count="${#pkgs[@]} package" |
|
|
|
(( ${#pkgs[@]} > 1 )) && count+='s' |
|
|
|
printf "upgrading %s: %s\n" "$count" "${pkgs[*]}" |
|
|
|
|
|
|
|
(( ${#pkgs[@]} > 0 )) && $helper -S "${pkgs[@]}" |