generated from me/template-mit
131 lines
2.6 KiB
Bash
Executable File
131 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 20260912 - Hyperling
|
|
# "Install" script to get this program runnable from anywhere on the system.
|
|
|
|
## Variables ##
|
|
|
|
DIR="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
|
PROJ="$(cd "$DIR"/.. &>/dev/null && pwd)"
|
|
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
|
LOCAL=~/bin
|
|
GLOBAL="$(npm prefix -g)"
|
|
GLOBAL_BIN="$GLOBAL/bin"
|
|
GLOBAL_SRC="$GLOBAL/src"
|
|
|
|
name_local="prototype.js"
|
|
name_short="nomad"
|
|
name_long="nomadic-weather"
|
|
name_abs="weather-list"
|
|
|
|
## Functions ##
|
|
|
|
function usage {
|
|
cat <<- EOF
|
|
$PROG [-h] [-g] [a|l|s] [-r]
|
|
|
|
Install $name_local to the system. Can be local, global, or removed.
|
|
|
|
Parameters)
|
|
h) Display this message.
|
|
g) Install globally ($GLOBAL), otherwise local ($LOCAL).
|
|
a) Abstract name, unrelated to being nomadic. ($name_abs)
|
|
l) Long name, the full name of the project. ($name_long)
|
|
s) Short name, the full name of the project. ($name_short)
|
|
r) Remove / uninstall the project according to the above flags.
|
|
|
|
Examples)
|
|
- Install to the local user with the abstract name.
|
|
$PROG
|
|
- Install to all users with all names.
|
|
$PROG -alsg
|
|
- Remove all instances.
|
|
$PROG -alsr && $PROG -alsrg
|
|
|
|
Happy weather watching! :)
|
|
|
|
~ Hyperling
|
|
EOF
|
|
exit $1
|
|
}
|
|
|
|
## Validations ##
|
|
|
|
count=0
|
|
while [[ ! -d "$DIR/node_modules" ]]; do
|
|
if (( count > 0 )); then
|
|
echo "Failed to download libraries, please intervene."
|
|
exit 3
|
|
fi
|
|
if [[ -z "`which npm`" ]]; then
|
|
echo "Libraries are missing, please run 'npm install' first."
|
|
exit 2
|
|
else
|
|
echo "Downloading libraries with 'npm install'."
|
|
cd $DIR && npm install
|
|
fi
|
|
count=$(( count++ ))
|
|
done
|
|
|
|
## Parameters ##
|
|
|
|
while getopts ":gslarh" arg; do
|
|
case $arg in
|
|
g) global="Y" ;;
|
|
s) short="Y" ;;
|
|
l) long="Y" ;;
|
|
a) abstract="Y" ;;
|
|
r) remove="Y" ;;
|
|
h) usage ;;
|
|
*) echo "ERROR: Parameter $OPTARG was not recognized." && usage 1 ;;
|
|
esac
|
|
done
|
|
|
|
## Processing ##
|
|
|
|
name=""
|
|
if [[ "$short" == "Y" ]]; then
|
|
name="$name $name_short"
|
|
fi
|
|
if [[ "$long" == "Y" ]]; then
|
|
name="$name $name_long"
|
|
fi
|
|
if [[ "$abstract" == "Y" || ( -z "$short" && -z "$long" ) ]]; then
|
|
name="$name $name_abs"
|
|
fi
|
|
|
|
cmd=""
|
|
dir="$LOCAL"
|
|
src="$PROJ"
|
|
if [[ "$global" == "Y" ]]; then
|
|
dir="$GLOBAL_BIN"
|
|
cmd="sudo"
|
|
echo "Requesting sudo privileges... "
|
|
sudo echo "Success!"
|
|
mkdir -pv /usr/local/src
|
|
sudo cp -Rv "$PROJ" "$GLOBAL_SRC"/
|
|
src="$GLOBAL_SRC/`basename "$PROJ"`"
|
|
fi
|
|
|
|
if [[ -z "$remove" ]]; then
|
|
cmd="$cmd ln -svf $src/cli/$name_local"
|
|
else
|
|
cmd="$cmd rm -v"
|
|
fi
|
|
|
|
## Main ##
|
|
|
|
# Untested
|
|
#if [[ "$global" == "Y" && "$remove" == "Y" ]]; then
|
|
# sudo rm -rfv "$src"
|
|
#fi
|
|
|
|
for prog in $name; do
|
|
mkdir -pv "$dir"
|
|
$cmd "$dir/$prog"
|
|
done
|
|
|
|
## Finish ##
|
|
|
|
echo "Done!"
|
|
exit 0
|