mirror of
https://github.com/m-housh/dotfiles.git
synced 2026-02-13 22:02:34 +00:00
181 lines
4.0 KiB
Bash
Executable File
181 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Adapted from https://github.com/ThePrimeagen/dev/blob/master/run
|
|
#
|
|
# Runs scripts in the `./runs` directory, which will install or uninstall
|
|
# packages. It either runs a single script given an argument (filename in runs)
|
|
# or all scripts in the runs directory.
|
|
|
|
set -e
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
THIS_FILE=${BASH_SOURCE[0]}
|
|
LOG_LABEL=$(basename $THIS_FILE)
|
|
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
|
|
|
declare dry_run grep uninstall
|
|
|
|
log() {
|
|
logging log --source "$THIS_FILE" "$@"
|
|
}
|
|
|
|
# TODO: Remove.
|
|
run() {
|
|
local script=$1
|
|
local flag=$2
|
|
log "running script: $script $flag"
|
|
|
|
local actual_flags="-S --noconfirm"
|
|
|
|
if [[ $flag == "--uninstall" ]]; then
|
|
actual_flags="-Rns"
|
|
fi
|
|
log "ok, here's the actual script:: $s $actual_flags"
|
|
|
|
if [[ $dry_run == "0" ]]; then
|
|
$script $actual_flags
|
|
fi
|
|
}
|
|
|
|
after() {
|
|
local after
|
|
local file=${1:-""}
|
|
local arg=${2:-""}
|
|
|
|
# Check for after script, and run it if found.
|
|
after=$(find "$DEV_ENV/runs/after" -mindepth 1 -maxdepth 1 -executable -name "$(basename "$file")" | head -1)
|
|
if [[ -n "$after" ]]; then
|
|
log --echo " running after script: '$after'"
|
|
[[ $dry_run == "0" ]] && source "$after" "$arg"
|
|
fi
|
|
}
|
|
|
|
before() {
|
|
local before
|
|
local file=${1:-""}
|
|
local arg=${2:-""}
|
|
|
|
before=$(find "$DEV_ENV/runs/before" -mindepth 1 -maxdepth 1 -executable -name "$(basename "$file")" | head -1)
|
|
if [[ -n "$before" ]]; then
|
|
log --echo " running before script: '$before'"
|
|
[[ $dry_run == "0" ]] && source "$before" "$arg"
|
|
fi
|
|
}
|
|
|
|
install() {
|
|
local file line pkg after before
|
|
|
|
# Ensure yay is installed before proceeding.
|
|
[[ $dry_run == "0" ]] && . "$DEV_ENV/runs/before/yay"
|
|
|
|
file=${1:-""}
|
|
# Early out if the file is not readable.
|
|
[[ ! -r $file ]] && exit 1
|
|
log --echo "Installing packages from: $file"
|
|
|
|
before "$file" install
|
|
|
|
# Loop over lines in the file and install the packages.
|
|
while read -r line; do
|
|
# Skip lines that begin with '#' (comments)
|
|
if [[ ! $line =~ ^# ]]; then
|
|
# Remove any inline comments.
|
|
pkg=${line%% \#*}
|
|
if [[ -n $pkg ]]; then
|
|
log --echo " pkg: '$pkg'"
|
|
[[ $dry_run == "0" ]] && yay -S --noconfirm --needed "$pkg"
|
|
fi
|
|
fi
|
|
done <"$file"
|
|
|
|
after "$file" install
|
|
}
|
|
|
|
uninstall() {
|
|
local file line pkg
|
|
|
|
file=${1:-""}
|
|
# Early out if the file is not readable.
|
|
[[ ! -r $file ]] && exit 1
|
|
|
|
log --echo "Uninstalling packages from: $file"
|
|
|
|
before "$file" uninstall
|
|
|
|
# Loop over lines in the file and uninstall the packages.
|
|
while read -r line; do
|
|
# Skip lines that begin with '#' (comments)
|
|
if [[ ! $line =~ ^# ]]; then
|
|
# Remove any inline comments.
|
|
pkg=${line%% \#*}
|
|
log --echo " pkg: '$pkg'"
|
|
[[ $dry_run == "0" ]] && yay -Rns "$pkg"
|
|
fi
|
|
done <"$file"
|
|
|
|
after "$file" uninstall
|
|
|
|
}
|
|
|
|
############################## MAIN ##############################
|
|
|
|
# Setup logging file and label.
|
|
source "$SCRIPTS/hypr/logging"
|
|
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
|
|
|
if [ -z "$DEV_ENV" ]; then
|
|
log --error "env var DEV_ENV needs to be present" && exit 1
|
|
fi
|
|
|
|
# if i just did DEV_ENV=$(pwd) ./run then this is needed for the rest of the
|
|
# scripts
|
|
export DEV_ENV="$DEV_ENV"
|
|
|
|
grep=""
|
|
dry_run="0"
|
|
uninstall="0"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
echo "ARG: \"$1\""
|
|
|
|
# TODO: Fix some of these arguments, should we add a '--grep' option, should '[un]install' be args / not options?
|
|
# Handle a --dry or --dry-run argument
|
|
if [[ "$1" =~ ^--dry ]]; then
|
|
dry_run="1"
|
|
# Handle an --uninstall argument
|
|
elif [[ "$1" =~ ^--u ]]; then
|
|
uninstall="1"
|
|
# Handle an --install argument (default)
|
|
elif [[ ! "$1" =~ ^--i ]]; then
|
|
grep="$1"
|
|
else
|
|
grep="$1"
|
|
fi
|
|
shift
|
|
done
|
|
|
|
export LOG_ENABLE_DRY_RUN="$dry_run"
|
|
|
|
log --echo "RUN: -- grep: '$grep'"
|
|
runs_dir=$(find $DEV_ENV/runs -mindepth 1 -maxdepth 1 -type f) # TODO: keep
|
|
|
|
#runs_dir=$(find $DEV_ENV/runs -mindepth 1 -maxdepth 1 -executable) # TODO: remove.
|
|
|
|
for s in $runs_dir; do
|
|
if basename $s | grep -vq "$grep"; then
|
|
log "grep \"$grep\" filtered out $s"
|
|
continue
|
|
fi
|
|
|
|
if [[ $uninstall == "1" ]]; then
|
|
# TODO: Use function instead.
|
|
# run $s --uninstall
|
|
uninstall "$s"
|
|
else
|
|
# TODO: Use function instead.
|
|
# run $s --install
|
|
install "$s"
|
|
fi
|
|
done
|