#!/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 "$@"