You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
#!/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 trizen 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[@]}"
|