Marty Oehme
c7ed986c0e
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.
92 lines
2.1 KiB
Bash
Executable file
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 "$@"
|