From 44c14ad4941fa11d128aa9ff4736fa3ec5205c0b Mon Sep 17 00:00:00 2001 From: G2-Games Date: Mon, 6 Mar 2023 23:49:23 -0600 Subject: [PATCH] Cleaned up install.sh even more, conformed to all shellcheck rules --- install.sh | 177 +++++++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 79 deletions(-) diff --git a/install.sh b/install.sh index 941dfb6..c51fa2a 100755 --- a/install.sh +++ b/install.sh @@ -1,6 +1,5 @@ -# shellcheck disable=SC2016 - getVersion () { + local ver ver=$(grep version ~/.welcome/welcome.sh 2> /dev/null | sed 's/.*=//') if [ -z "$ver" ]; then @@ -11,7 +10,8 @@ getVersion () { echo "$ver" } -univRead () { # Universal read command for bash and zsh +# Universal read command for bash and zsh +univRead () { echo -en "$1" echo -en "\n[\e[36mY/n\e[0m]" if [[ "$environment" = "bash" ]]; then @@ -22,13 +22,84 @@ univRead () { # Universal read command for bash and zsh echo } +uninstall () { + # Check if the user actually wishes to uninstall the script + univRead "Do you want to \e[31muninstall \e[35mwelcome.sh\e[0m?" + if ! [[ $REPLY =~ ^[Yy]$ ]]; then + tput rc el ed + echo -e "\e[31mUninstall cancelled.\e[0m" + exit 0 + fi + + tput rc el ed + echo "Goodbye. Uninstalling..." + tput sc + rm ~/.welcome/welcome.sh 2> /dev/null + rm ~/.welcome/config.cfg 2> /dev/null + rm ~/.welcome/config_old.cfg 2> /dev/null + rm -r ~/.welcome + + #remove all lines that match the string + lines=$(grep -sn 'bash ~/.welcome/welcome.sh' "$bashrc" | sed -e 's/:.*//g' && grep -sn 'bash /home/$USER/.welcome/welcome.sh' "$bashrc" | sed -e 's/:.*//g') + lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') + for i in $lines; do + sed "${i}d" "$bashrc" > file.tmp && mv file.tmp "$bashrc" + done + + lines=$(grep -sn 'zsh ~/.welcome/welcome.sh' "$zshrc" | sed -e 's/:.*//g' && grep -sn 'zsh /home/$USER/.welcome/welcome.sh' "$zshrc" | sed -e 's/:.*//g') + lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') + for i in $lines; do + sed "${i}d" "$zshrc" > file.tmp && mv file.tmp "$zshrc" + done + + tput rc && tput el && tput ed + echo -e "\e[36mUninstalled! \e[0m" +} + +update () { + tput rc el ed + echo "Updating..." + tput sc + mkdir -p ~/.welcome + rm ~/.welcome/welcome.sh + + curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/welcome.sh --output ~/.welcome/welcome.sh + if [[ $vernum -ge 100 ]] && [[ $overcfg -gt 0 ]]; then + echo "Backing up: config.cfg >> config_old.cfg" + mv ~/.welcome/config.cfg ~/.welcome/config_old.cfg + curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/config.cfg --output ~/.welcome/config.cfg + fi + + # Check for older versions and replace bashrc lines + lines=$(grep -sn 'bash ~/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g' && grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g') + lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') + for i in $lines; do + sed "${i}d" $bashrc > file.tmp && mv file.tmp $bashrc + done + echo 'bash ~/.welcome/welcome.sh' >> $bashrc + + lines=$(grep -sn 'zsh ~/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g' && grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g') + lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') + for i in $lines; do + sed "${i}d" $zshrc > file.tmp && mv file.tmp $zshrc + done + echo 'zsh ~/.welcome/welcome.sh' >> $zshrc + + tput rc el ed + echo -e "\e[32mUpdated to v$version! \e[0m" +} + tput sc -if ! [[ $1 == "auto" ]] && [[ -z "$1" ]]; then +if [[ -z "$1" ]] && [[ $1 != "auto" ]]; then echo "Checking for latest release..." fi -latestver=$(curl -Ls https://github.com/G2-Games/welcome.sh/releases/latest/download/welcome.sh | grep version | sed 's/.*=//') -oldver=$(grep version ~/.welcome/welcome.sh 2> /dev/null | sed 's/.*=//' | sed 's/[.][.]*//g') && if [[ -z "$oldver" ]]; then oldver=0; fi +if ! [[ $(command -v curl) ]]; then + exit 1 +fi + +latestver=$(curl -Ls https://github.com/G2-Games/welcome.sh/releases/latest/download/welcome.sh | grep version | cut -d= -f2) +oldver=$(grep version ~/.welcome/welcome.sh 2> /dev/null | cut -d= -f2 | sed 's/[.][.]*//g') && if [[ -z "$oldver" ]]; then oldver=0; fi version="${1:-$latestver}" @@ -46,11 +117,17 @@ environment=$(ps -o args= -p $$ | grep -Em 1 -o '\w{0,5}sh' | head -1) # Check if the environment is bash or zsh if [[ "$environment" != "bash" ]] && [[ "$environment" != "zsh" ]]; then + tput rc printf "\e[31;5mERROR:\e[0m \e[31;3mThis script can only be installed in Bash or Zsh.\e[0m\n" - exit 0 + printf "\e[32mYou appear to be using %s, which is not a valid shell for\n\ +this script!\e[0m Please use \e[3mBash \e[0mor \e[3mZsh.\e[0m\n" "${environment}" + exit 1 fi +# Check if already installed if ! grep -qs 'bash ~/.welcome/welcome.sh' $bashrc && ! grep -qs 'zsh ~/.welcome/welcome.sh' $zshrc && ! grep -qs 'bash /home/$USER/.welcome/welcome.sh' $bashrc && ! grep -qs 'zsh /home/$USER/.welcome/welcome.sh' $zshrc; then + #==== Execute if first time installing...====# + tput rc echo "Welcome! Installing v$version in $environment..." tput sc @@ -63,7 +140,6 @@ if ! grep -qs 'bash ~/.welcome/welcome.sh' $bashrc && ! grep -qs 'zsh ~/.welcome fi chmod +x ~/.welcome/welcome.sh - if [[ "$environment" = "bash" ]]; then echo "Installing to bashrc" echo 'bash ~/.welcome/welcome.sh' >> $bashrc @@ -73,11 +149,12 @@ if ! grep -qs 'bash ~/.welcome/welcome.sh' $bashrc && ! grep -qs 'zsh ~/.welcome fi cd "$originaldir" || exit 1 - tput rc && tput el && tput ed + tput rc el ed echo -e "\e[36mInstalled! \e[0m" else - tput rc - tput sc + #==== Execute if already installed...====# + + tput rc sc el ed mkdir -p ~/.welcome if ! [[ $1 == "auto" ]]; then echo -e "\e[35mwelcome.sh\e[0m already installed!" @@ -86,18 +163,16 @@ else fi if [[ $vernum -gt $oldver ]]; then - # Pull the new configuration version from github newCfgVer=$(curl -Ls https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/config.cfg | grep version | cut -d= -f2) univRead "Do you want to \e[36mupdate \e[35mwelcome.sh\e[0m? (\e[36mv$(getVersion)\e[0m => \e[32mv$version\e[0m)" if ! [[ $REPLY =~ ^[Yy]$ ]]; then - tput rc && tput el && tput ed - echo -e "\e[31mCancelled" - if [[ $1 != "auto" ]]; then - echo -e "\e[35mwelcome.sh\e[0m already installed!" - fi - exit 0 + tput rc sc el ed + echo -e "\e[31mUpdate cancelled.\e[0m" + update=0 + else + update=1 fi if [[ $newCfgVer -gt $(grep version ~/.welcome/config.cfg 2> /dev/null | cut -d= -f2) ]]; then @@ -110,69 +185,13 @@ else else overcfg=0 fi + fi - tput rc && tput el && tput ed - echo "Updating..." - tput sc - mkdir -p ~/.welcome - rm ~/.welcome/welcome.sh - - curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/welcome.sh --output ~/.welcome/welcome.sh - if [[ $vernum -ge 100 ]] && [[ $overcfg -gt 0 ]]; then - echo "Backing up: config.cfg >> config_old.cfg" - mv ~/.welcome/config.cfg ~/.welcome/config_old.cfg - curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/config.cfg --output ~/.welcome/config.cfg - fi - - # Check for older versions and replace bashrc lines - lines=$(grep -sn 'bash ~/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g' && grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g') - lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') - for i in $lines; do - sed "${i}d" $bashrc > file.tmp && mv file.tmp $bashrc - done - echo 'bash ~/.welcome/welcome.sh' >> $bashrc - - lines=$(grep -sn 'zsh ~/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g' && grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g') - lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') - for i in $lines; do - sed "${i}d" $zshrc > file.tmp && mv file.tmp $zshrc - done - echo 'zsh ~/.welcome/welcome.sh' >> $zshrc - - tput rc && tput el && tput ed - echo -e "\e[32mUpdated to v$version! \e[0m" + if [[ update -gt 0 ]]; then + update exit 0 fi - # Check if the user actually wishes to uninstall the script - univRead "Do you want to \e[31muninstall \e[35mwelcome.sh\e[0m?" - if ! [[ $REPLY =~ ^[Yy]$ ]]; then - tput rc && tput el && tput ed - echo -e "\e[31mCancelled. \e[0m" - exit 0 - fi - - tput rc && tput el && tput ed - echo "Goodbye. Uninstalling..." - tput sc - rm ~/.welcome/welcome.sh 2> /dev/null - rm ~/.welcome/config.cfg 2> /dev/null - rm ~/.welcome/config_old.cfg 2> /dev/null - rm -r ~/.welcome - - #remove all lines that match the string - lines=$(grep -sn 'bash ~/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g' && grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc | sed -e 's/:.*//g') - lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') - for i in $lines; do - sed "${i}d" $bashrc > file.tmp && mv file.tmp $bashrc - done - - lines=$(grep -sn 'zsh ~/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g' && grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc | sed -e 's/:.*//g') - lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') - for i in $lines; do - sed "${i}d" $zshrc > file.tmp && mv file.tmp $zshrc - done - - tput rc && tput el && tput ed - echo -e "\e[36mUninstalled! \e[0m" + uninstall + exit 0 fi