#! /bin/bash # Install all required packages for this user. It only needs to be run once # when setting up the HOME directory. # ASSUME # - git repos referenced here are pulled/updated # - makepkg is installed/configured # - yay is installed/configured # NOTE to run without a sudo prompt, call with a user that has pacman # permissions in sudoers. pkgsrc_dir="$1" if [[ -z "${2+set}" ]]; then install_root="$HOME" else install_root="$2" fi makepkg_tmp=/tmp/bootstrap-makepkg mk_makepkg_dir() { echo "Creating temporary makepkg build directory at $makepkg_tmp" mkdir -p "$makepkg_tmp" echo "Populated with packages from $pkgsrc_dir" cp -r "$pkgsrc_dir"/* "$makepkg_tmp" } try_update() { if ! yay -Syy; then echo "Failed to update pacman cache as user $(whoami). Exiting." return 1 fi } call_makepkg() { cd "$makepkg_tmp/$1" || return 1 makepkg -s -r -i -f --noconfirm } run_install_scripts() { "$install_root/.config/rofi-extras/install_deps" "$install_root/.config/xmonad/install_deps" } run_yay() { # notifications pkgs=(dunst) # gtk pkgs+=(zuki-themes) # sleep enhancement pkgs+=(redshift) {{ if .features.seafile -}} # seafile pkgs+=(seafile-client) {{- end }} # elegant terminal pkgs+=(rxvt-unicode urxvt-perls) # shell pkgs+=(zsh zsh-completions zsh-syntax-highlighting) yay --needed --noconfirm --norebuild --removemake -S "${pkgs[@]}" } run_makepkg() { ## these are all packages that have some personal customizations and/or are ## not in the AUR ## TODO the clevo thingy requires a systemd file to turn on/off {{ if .features.clevo -}} call_makepkg "clevo-xsm-wmi-dkms" {{- end }} call_makepkg "conky-lua" call_makepkg "xkb-hypermode" } rm_makepkg_dir() { echo "Removing temporary makepkg build directory at $makepkg_tmp" rm -r -f "$makepkg_tmp" } clean_up() { rm_makepkg_dir exit } trap 'clean_up' ERR if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then echo "Usage: bootstrap_pkgs CUSTOM_PKGBUILD_SRC [INSTALL_ROOT]" exit 1 fi try_update run_install_scripts run_yay mk_makepkg_dir run_makepkg rm_makepkg_dir