dotfiles/_bootstrap/install_packages.sh
Marty Oehme c7ed986c0e
Update package list
Updated package list in preparation for unified package management. For
the moment still uses basic bash script to manage package installation.
Packages are collected in a big list, with some packages being ignored.

This is in preparation for the possibility to manage future package
'groups' directly in pacman meta packages. They will then be added /
removed to the individual PKGBUILD files as dependencies and will
automatically be kept up-to-date, added and removed on all systems which
use the corresponding meta group.

It also opens the path to have commit-time checking of irregularities
between the packages stipulated in the dotfile repository and the
current running system. This can be done by adding all packages of the
different package group lists, unifying them and removing potential
ignored packages.

It allows e.g. printing a warning when committing changes to the
repository while the system packages and the repository packages differ,
to make sure no package dependencies were introduced without knowing it
and which would introduce potential breaking changes into the dotfiles.
2020-02-07 22:07:53 +01:00

92 lines
2.1 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
#==============================================================================
packages="${BOOTSTRAP_PACKAGES:-packages.txt}"
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_yay() {
# check for existing yay installation
if type yay >/dev/null 2>&1; then
echo "Existing yay installation found ..........................................."
return
fi
# use tmp dir to make yay
target=$(mktemp -d)
git clone https://aur.archlinux.org/yay.git "$target"
cd "$target" || exit
makepkg -si
}
update_repos() {
unattended="$1"
if "$unattended"; then
yay -Sqyy --noconfirm
else
yay -Syy
fi
}
install_packages() {
unattended="$1"
if "$unattended"; then
yay -Squ --noconfirm --needed - <"$packages"
else
yay -Su --needed - <"$packages"
fi
}
check_consent() {
echo "This will take a while and install many packages. Proceed [y/N]?"
read -r yes
if [[ "$yes" != y* ]]; then
echo "Exiting."
exit
fi
}
install() {
unattended=$1
echo "Beginning package bootstrap ..............................................."
if ! "$unattended"; then
check_consent
fi
echo "Installing yay ............................................................"
install_yay
echo "Installing apps ..........................................................."
update_repos "$unattended"
install_packages "$unattended"
echo "Done ......................................................................"
}
main "$@"