Marty Oehme
cac0aee4ca
New config syntax uses [ids] section to select which input devices are affected instead of file names, so we can have all settings (for similarly set up keyboards) in a single default config file. The file itself needs to end in `.conf` instead of the old `.cfg` and there is a slight difference in syntax between the old `C` and the new `control` for mapping the control key. That is about it.
121 lines
3.7 KiB
Bash
Executable file
121 lines
3.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# install.sh
|
|
#
|
|
# Installs dotfiles and packages for my setup.
|
|
# Needs to be invoked from containing dotfile directory to work correctly.
|
|
#
|
|
# Will first install yay, then all my used packages (read from bootstrap/packages.txt)
|
|
#
|
|
# 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\nby Marty Oehme\n\nv0.2\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
|
|
}
|
|
|
|
# takes default value (y/n), question, abort message as arguments
|
|
# automatically answers yes if unattended install
|
|
check_consent() {
|
|
if [ "$UNATTENDED" == "true" ]; then
|
|
true
|
|
else
|
|
[[ "$1" == "y" ]] && default_consent="[Y/n]" || default_consent="[y/N]"
|
|
printf "%s %s " "$2" "$default_consent"
|
|
read -r answer
|
|
if [[ "$1" == "n" ]] && [[ "$answer" != y* ]]; then
|
|
printf "%s\n" "$3"
|
|
false
|
|
elif [[ "$1" == "y" ]] && [[ "$answer" == n* ]]; then
|
|
echo second
|
|
printf "%s\n" "$3"
|
|
false
|
|
else
|
|
true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
entry_question() {
|
|
check_consent n "This will take a while, install many packages and link dotfiles all over the place. Proceed?" "Aborting." || exit
|
|
}
|
|
|
|
enable_git_hooks() {
|
|
check_consent y "Should we enable git hooks for this repository, so that installed packages are automatically compared when committing?" "Not changing repository settings." || return
|
|
git config --local core.hooksPath .githooks/
|
|
echo "Changed repository settings."
|
|
}
|
|
|
|
stow_dotfiles() {
|
|
check_consent y "Link home directory dot files?" "Not linking dotfiles." || return
|
|
# get all top level directories, remove their slashes and dots
|
|
# finally get rid of .dot-directories, since they are for the repo not for my homedir
|
|
targets="$(find . -maxdepth 1 -type d | sed -e 's/^\.\/\(.*\)$/\1/' | sed -e '/^\./d')"
|
|
|
|
# shellcheck disable=2086
|
|
# -- for some reason stow only works with unqoted var expansion
|
|
stow -R ${targets} 2> >(grep -v 'Absolute/relative mismatch between Stow dir' 1>&2)
|
|
echo "Linked dotfiles."
|
|
}
|
|
|
|
stow_system_packages() {
|
|
check_consent n "Link system settings as well? This will require sudo access." "Not touching system files." || return
|
|
sudo stow --dir="$bootstrap_dir" --target="/" -R system-packages/
|
|
echo "Linked system files."
|
|
}
|
|
|
|
install_packages() {
|
|
check_consent n "Install pre-designated packages? This will take a while." "Not installing packages." || return
|
|
export BOOTSTRAP_PACKAGES="bootstrap/packages.txt"
|
|
if ! "$UNATTENDED"; then
|
|
"$bootstrap_dir"/install_packages.sh
|
|
else
|
|
"$bootstrap_dir"/install_packages.sh -f
|
|
fi
|
|
unset BOOTSTRAP_PACKAGES
|
|
echo "Installed packages."
|
|
}
|
|
|
|
install() {
|
|
UNATTENDED=$1
|
|
if ! "$UNATTENDED"; then
|
|
entry_question
|
|
fi
|
|
|
|
echo "====================== BEGINNING INSTALLATION ============================="
|
|
install_packages
|
|
|
|
echo "=================== BEGINNING DOTFILE MANAGEMENT =========================="
|
|
stow_dotfiles
|
|
stow_system_packages
|
|
|
|
echo "================== ENABLING GIT REPOSITORY HOOKS =========================="
|
|
enable_git_hooks
|
|
|
|
echo "====================== INSTALLATION FINISHED =============================="
|
|
exit 0
|
|
}
|
|
|
|
main "$@"
|