dotfiles/install.sh
Marty Oehme 71f9076846 Change bootstrap to use standard stow functions
Removed the `autostow.sh` scipt. Its use was to call stow for every
folder in base directory and ignore certain folders. Both those
functions can be handled by stow on its own.

Stow allows defining per-directory ignore patterns with
`.stow-loca-ignore` files, which can be set to `.*` to completely ignore
a folder, just as before. And Stow can be called with a glob pattern to
automatically call it for every directory in the repository.

`.stowrc` additionally makes sure that all operations take place
targeting the home directory of the current user, since that is where
the dotfiles will (generally) be stored. Of course, this can be
overridden with the stow command-line options (see option precedence in
stow manual).

Finally, the bootstrap stow module adds an alias `dotlink` to the shell,
which allows fast (re-)stowing of all directories in the dotfile
repository. It uses a hard-coded location for the .dotfiles base
directory, so if the dotfiles are cloned anywhere else this has to be
customized.
2020-02-06 12:48:08 +01:00

70 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# install.sh
#
# Installs dotfiles and packages for my setup
#
# Will first install yay, then all my used packages (read from bootstrap/packages.csv)
#
# Finally, symlinks all dotfiles into their correct locations using stow
bootstrap_dir="${BOOTSTRAP_DIRECTORY:-./_bootstrap}"
main() {
local cmd=""
local ret=0
case "$1" in
-v | --version)
printf "Personal system bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.1.1\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
}
check_consent() {
echo "This will take a while, install many packages and link dotfiles all over the place. Proceed [y/N]?"
read -r yes
if [[ "$yes" != y* ]]; then
echo "Exiting."
exit
fi
}
install() {
unattended=$1
if ! "$unattended"; then
check_consent
fi
echo "====================== BEGINNING INSTALLATION ============================="
if ! "$unattended"; then
export BOOTSTRAP_PACKAGES="bootstrap/packages.csv"
"$bootstrap_dir"/install_packages.sh
else
export BOOTSTRAP_PACKAGES="bootstrap/packages.csv"
"$bootstrap_dir"/install_packages.sh -f
fi
unset BOOTSTRAP_PACKAGES
echo "=================== BEGINNING DOTFILE MANAGEMENT =========================="
stow -R ./*/
echo "====================== INSTALLATION FINISHED =============================="
}
main "$@"