dotfiles/bootstrap/install_packages.sh

117 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
#
# Simple app bootstrapping script
#=== main function ============================================================
# NAME: main
# DESCRIPTION: Display usage information for this script.
# PARAMETERS: see usage function
#==============================================================================
PKG_TSV_FILE=${PKG_TSV_FILE:-bootstrap/packages_stable.tsv}
packages_repo="${BOOTSTRAP_PACKAGES:-$(grep -e ' R ' "$PKG_TSV_FILE" | cut -f1 -d' ')}"
packages_aur="${BOOTSTRAP_PACKAGES_AUR:-$(grep -e ' A ' "$PKG_TSV_FILE" | cut -f1 -d' ')}"
packages_pipx="${BOOTSTRAP_PACKAGES_PIPX:-$(grep -e ' P ' "$PKG_TSV_FILE" | cut -f1,5 -d' ')}"
main() {
local cmd=""
local ret=0
case "$1" in
-v | --version)
printf "Package bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.3\n"
;;
-h | --help)
printf "Usage: install [-f|--force][-v|--version][-h|--help]\n\n-f Do not ask for any confirmations but force update and installation.\n"
;;
-f | --force)
install true
;;
*)
install false
;;
esac
shift
$cmd "$@"
ret=$((ret + $?))
exit $ret
}
install_paru() {
# check for existing paru installation
if type paru >/dev/null 2>&1; then
echo "Existing paru installation found ..........................................."
return
fi
# use tmp dir to make paru
tempdir=".paru"
git clone https://aur.archlinux.org/paru.git "$tempdir"
pushd "$tempdir" || exit 1
makepkg -si
popd || exit 1
rm -rf "$tempdir"
}
update_repos() {
unattended="$1"
if "$unattended"; then
paru -Sqyy --noconfirm
else
paru -Syy
fi
}
install_packages() {
unattended="$1"
if "$unattended"; then
echo "$packages_repo" "$packages_aur" | paru -Squ --noconfirm --needed -
else
echo "$packages_repo" | paru -Squ --needed -
echo "$packages_aur" | paru -S --needed -
fi
}
install_pipx() {
if type pipx >/dev/null 2>&1; then
echo "Existing pipx installation found .........................................."
return
fi
if "$unattended"; then
paru -S --noconfirm python-pipx
else
paru -S python-pipx
fi
}
install_pipx_pkgs() {
while IFS= read -r line; do
if [ -z "$line" ]; then return; fi
prog=$(echo "$line" | cut -f1 -d' ')
pipx install "$prog"
injections=$(echo "$line" | cut -f2 -d' ')
for inject_args in ${injections//,/ }; do
pipx inject "$prog" "$inject_args"
done
done <<<"$packages_pipx"
}
install() {
unattended=$1
echo "Beginning package bootstrap ..............................................."
echo "Installing paru ............................................................"
install_paru
echo "Installing apps ..........................................................."
update_repos "$unattended"
install_packages "$unattended"
echo "Done ......................................................................"
echo "Installing pipx ..........................................................."
install_pipx
echo "Installing pipx packages .................................................."
install_pipx_pkgs
echo "Done ......................................................................"
}
main "$@"