Files
dotfiles/runs/utils/run-handler

86 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
set -o nounset
set -o pipefail
declare file
declare -a yayflags
THIS_FILE=${BASH_SOURCE[0]}
LOG_LABEL=${LOG_LABEL:-$(basename $THIS_FILE)}
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
DEV_ENV=${DEV_ENV:-""}
MODE=${RUN_MODE:-"install"}
DRY_RUN=${LOG_ENABLE_DRY_RUN:-"0"}
GREP_STR=${RUN_GREP_STR:-""}
log() {
logging log --source "$THIS_FILE" --echo "$@"
} && export -f log
run_before_or_after() {
local dir file run
dir=${1:-""}
run=${2:-""}
file=$(find "$dir" -mindepth 1 -maxdepth 1 -executable -name "$(basename "$run")" | head -1)
if [[ -n "$file" ]]; then
log " running $(basename "$dir") script: '$file'"
[[ $DRY_RUN == "0" ]] && source "$file" "$mode"
fi
}
main() {
local line pkg
log "RUN: file: $file"
if [[ -z $GREP_STR ]] || [[ $file =~ $GREP_STR ]]; then
log "${MODE}ing packages from: $file"
run_before_or_after "$DEV_ENV/runs/before" "$file"
# Loop over lines in the file and install the packages.
while IFS= read -r line; do
# Skip lines that begin with '#' (comments)
if [[ ! $line =~ ^# ]]; then
# Remove any inline comments.
pkg=${line%% \#*}
if [[ -n $pkg ]]; then
log " pkg: '$pkg'"
[[ $DRY_RUN == "0" ]] && yay "${yayflags[@]}" "$pkg"
fi
fi
done <"$file"
run_before_or_after "$DEV_ENV/runs/after" "$file"
else
log "Grep filtered out: '$file'"
fi
}
############################## MAIN ##############################
# Setup logging file and label.
source "$SCRIPTS/hypr/logging"
setup-logging "$LOG_FILE" "$LOG_LABEL"
file=${1:-""}
yayflags=("-S" "--noconfirm" "--needed")
[[ -z "$DEV_ENV" ]] &&
log --error "env var DEV_ENV needs to be present" && exit 1
[[ ! -r $file ]] &&
log --error "File not readable." && exit 1
# Change yay flags if mode is 'uninstall'
[[ $MODE == "uninstall" ]] && yayflags=("-Rns")
# Ensure yay is installed before proceeding.
[[ $DRY_RUN == "0" ]] && . "$DEV_ENV/runs/before/yay"
main