164 lines
5.7 KiB
Bash
164 lines
5.7 KiB
Bash
#!/bin/bash
|
|
# shellcheck source=/dev/null
|
|
#----------------------------
|
|
# Check if a command exists
|
|
#----------------------------
|
|
function _which() {
|
|
command -v "$1" &> /dev/null
|
|
}
|
|
|
|
#----------------------------
|
|
# Check if a URL is reachable
|
|
#----------------------------
|
|
function _url_exists() {
|
|
curl --output /dev/null --silent --head --write-out "%{http_code}" "$1"
|
|
}
|
|
|
|
#------------------
|
|
# Set working URLs
|
|
#------------------
|
|
function _urls() {
|
|
URL_1="https://git.fridu.us/heckyel/hyperterm"
|
|
URL_2="https://c.fridu.us/software/hyperterm.git"
|
|
|
|
if [ "$(_url_exists "$URL_1")" -eq 200 ]; then
|
|
URL="$URL_1"
|
|
RAW="$URL_1/raw/branch/master"
|
|
elif [ "$(_url_exists "$URL_2")" -eq 200 ]; then
|
|
URL="$URL_2"
|
|
RAW="$URL_2/plain"
|
|
else
|
|
msg_err "El repositorio no está disponible o no hay conexión a Internet." \
|
|
"The repository is unavailable or there's no internet connection."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
#----------------------------
|
|
# Download file with curl
|
|
#----------------------------
|
|
function download_file() {
|
|
local remote_path=$1
|
|
local local_path=$2
|
|
mkdir -p "$(dirname "$local_path")"
|
|
curl -Ls "$RAW/$remote_path" -o "$local_path"
|
|
}
|
|
|
|
#----------------------------
|
|
# Download _custom.sh if missing
|
|
#----------------------------
|
|
function ifexists_custom() {
|
|
_urls
|
|
local custom_path="$HOME/.hyperterm/_custom.sh"
|
|
if [ ! -e "$custom_path" ]; then
|
|
download_file "hyperterm/_custom.sh" "$custom_path"
|
|
fi
|
|
}
|
|
|
|
#----------------------------
|
|
# Show progress bar
|
|
#----------------------------
|
|
function show_progress() {
|
|
case $1 in
|
|
1) printf '%s\r' "##### (33%)" ;;
|
|
2) printf '%s\r' "############# (66%)" ;;
|
|
3) printf '%s\n' "####################### (100%) done!" ;;
|
|
esac
|
|
}
|
|
|
|
#----------------------------
|
|
# Update HyperTerm environment
|
|
#----------------------------
|
|
function updbashrc() {
|
|
_urls
|
|
|
|
# Step 1: Download checksum and _custom.sh
|
|
download_file "hyperterm/hyperterm.sha512" "$HOME/.hyperterm/hyperterm.sha512"
|
|
ifexists_custom
|
|
|
|
# Step 2: Verify checksum
|
|
(cd "$HOME/.hyperterm/" && sha512sum -c hyperterm.sha512 &> /dev/null)
|
|
local _interger=$?
|
|
|
|
if [[ "$_interger" -eq 0 ]]; then
|
|
# Load colors and print banner
|
|
_colors_bash "$@"
|
|
printf '%b' "${BOLD}${CYAN}"
|
|
printf '%s\n' ' __ __ ______ '
|
|
printf '%s\n' ' / / / /_ ______ ___ ____/_ __/__ _________ ___ '
|
|
printf '%s\n' ' / /_/ / / / / __ \/ _ \/ ___// / / _ \/ ___/ __ `__ \ '
|
|
printf '%s\n' ' / __ / /_/ / /_/ / __/ / / / / __/ / / / / / / / '
|
|
printf '%s\n' ' /_/ /_/\__, / .___/\___/_/ /_/ \___/_/ /_/ /_/ /_/ '
|
|
printf '%s\n' ' /____/_/ '
|
|
printf '%s\n' ' '
|
|
printf '%b' "${BOLD}${GREY}"
|
|
msg "✔️ HyperTerm se ha actualizado y/o está en la versión actual." \
|
|
"✔️ HyperTerm has been updated and/or is at the current version."
|
|
msg "Puede reportar errores en https://todo.sr.ht/~heckyel/hyperterm" \
|
|
"You can report issues at https://todo.sr.ht/~heckyel/hyperterm"
|
|
msg "Obtén tu copia en: https://c.fridu.us/software/hyperterm.git" \
|
|
"Get your copy at: https://c.fridu.us/software/hyperterm.git"
|
|
printf '%b\n' "$RESET"
|
|
else
|
|
msg "Fallo de checksum. Re-descargando archivos desde: $URL" \
|
|
"Checksum failed. Re-downloading files from: $URL"
|
|
show_progress 1
|
|
sleep 1
|
|
|
|
# Step 3: Core files
|
|
for f in autocomplete.sh colors.sh git.sh languages.sh status.sh update.sh; do
|
|
download_file "hyperterm/core/$f" "$HOME/.hyperterm/core/$f"
|
|
done
|
|
|
|
# Step 4: Themes
|
|
for f in default.sh joy.sh light_theme.sh minterm.sh pure.sh simple.sh special.sh; do
|
|
download_file "hyperterm/themes/$f" "$HOME/.hyperterm/themes/$f"
|
|
done
|
|
|
|
show_progress 2
|
|
sleep 1
|
|
|
|
# Step 5: Tools
|
|
for f in aliases.sh compress.sh export.sh listuser.sh network.sh proxy.sh rar2zip.sh ruby.sh ssh-agent.sh sysinfo.sh vconverter.sh virtualenv.sh; do
|
|
download_file "hyperterm/tools/$f" "$HOME/.hyperterm/tools/$f"
|
|
done
|
|
|
|
# Step 6: Main files
|
|
download_file "hyperterm/hyperterm.sh" "$HOME/.hyperterm/hyperterm.sh"
|
|
download_file "hyperterm/hyperterm.sha512" "$HOME/.hyperterm/hyperterm.sha512"
|
|
download_file ".bash_profile" "$HOME/.bash_profile"
|
|
|
|
ifexists_custom
|
|
show_progress 3
|
|
_colors_bash "$@"
|
|
source "$HOME/.bashrc"
|
|
fi
|
|
}
|
|
|
|
#------------------------------------
|
|
# Overwrite _custom.sh interactively
|
|
#------------------------------------
|
|
function updbashrc_custom() {
|
|
_urls
|
|
if [ "$(_url_exists "$URL")" -eq 200 ]; then
|
|
while true; do
|
|
question=$(msg "¿Estás seguro de sobre-escribir _custom.sh? [s/N]: " \
|
|
"Are you sure to overwrite _custom.sh? [y/N]: ")
|
|
read -r -p "$question" input
|
|
case "$input" in
|
|
[yY]|[sS])
|
|
download_file "hyperterm/_custom.sh" "$HOME/.hyperterm/_custom.sh"
|
|
source "$HOME/.bashrc"
|
|
break ;;
|
|
[nN]|"") break ;;
|
|
*) msg "Por favor responde sí o no." \
|
|
"Please answer yes or no." ;;
|
|
esac
|
|
done
|
|
else
|
|
msg_err "El repositorio no está disponible o no hay conexión a Internet." \
|
|
"The repository is unavailable or there's no internet connection."
|
|
return 1
|
|
fi
|
|
}
|