Compare commits

...

77 commits
v1.0.1 ... main

Author SHA1 Message Date
4912cfa2c8 Added preliminary work on a cleanup script to move files around 2023-08-21 00:41:30 -05:00
9cee7f2904 Cleaned up more, removed analytics 2023-08-20 18:22:29 -05:00
b958afb09b Merge branch 'main' of https://github.com/G2-Games/welcome.sh 2023-08-20 18:19:51 -05:00
965477d62b Updated installer script, made a bit more streamlined and fixed errors 2023-08-20 18:19:02 -05:00
e82a0cf000 Added support for OpenSUSE update checks with Zypper 2023-05-07 17:44:44 -05:00
G2
f78aed8316
Update README.md 2023-03-08 19:35:49 -06:00
G2
979978a7f8 Added update tracking to installer 2023-03-07 14:00:44 -06:00
G2
54f3619274 Bumped version, v1.1.2 2023-03-07 10:32:06 -06:00
G2
bd27870290 Fixed #6, used proper array indexing technique 2023-03-07 10:29:30 -06:00
G2
741fe542f1 Bumped version, v1.1.1 2023-03-07 09:53:34 -06:00
G2
b905684b63 Fixed issues with strict mode by removing it for now. Fixes #5 2023-03-07 09:41:36 -06:00
G2
68ab6a6310 Updated installer to download itself properly 2023-03-07 09:41:11 -06:00
4e5b2a848e Bumped version, 1.1.0 2023-03-07 00:20:30 -06:00
61ddc11af7 Fixed automatic update check in both welcome.sh and installer 2023-03-06 23:52:55 -06:00
44c14ad494 Cleaned up install.sh even more, conformed to all shellcheck rules 2023-03-06 23:49:23 -06:00
a863f8ddc6 Significantly cleaned up install script, dropped support for wget 2023-03-06 19:00:50 -06:00
49563932e0 Removed wget support, too hard to maintain 2023-03-06 18:32:01 -06:00
e072e7c7fc Fixed a bunch of small possible issues with the script 2023-03-06 18:06:57 -06:00
b7608a59d0 Fixed major issue with apt update checking on debian systems 2023-03-06 16:58:39 -06:00
bd0f3f2cc0 Added automatic update checking functionality 2022-11-29 22:45:46 -06:00
c58f9f5224 Added more comments, changed to strict mode (might cause issues) 2022-11-26 14:42:16 -06:00
84874298c4 Merge branch 'main' of https://github.com/G2-Games/welcome.sh 2022-11-26 14:40:50 -06:00
56883965c5 Streamlined install script, added support for checking latest release automatically 2022-11-26 14:40:23 -06:00
G2
24a1dd5319
Update README.md 2022-11-25 04:11:39 -06:00
cc7ec85760 Added a possibly better way to check for updates on Arch 2022-11-25 01:59:07 -06:00
74a570a107 Used bash strict mode to clean up the code a bit, couldn't get everything 2022-11-25 01:37:56 -06:00
decec76c61 Version bump, v1.0.5 2022-11-25 00:52:05 -06:00
bdcb586589 Supressed random error, cleaned up update code 2022-11-25 00:48:22 -06:00
5dcf4a77f8 Fixed update not getting checked... again 2022-11-25 00:45:14 -06:00
G2
df8decfd6e
Version bump 2022-11-25 00:37:11 -06:00
c6c9254a9d Fixed ZSH issues, added strict mode (http://redsymbol.net/articles/unofficial-bash-strict-mode/) 2022-11-25 00:35:59 -06:00
g2
4226a00c31 Fixed another error 2022-09-30 10:13:38 -05:00
g2
5acea7fd34 Fixed file paths 2022-09-30 10:10:06 -05:00
g2
aee6ee9e67 version bump, 1.0.4 2022-09-30 09:11:34 -05:00
g2
2b801c0a57 version bump 1.0.4 2022-09-30 09:06:30 -05:00
g2
1760701f89 Reverted changes 2022-09-30 08:58:07 -05:00
g2
5335b5a6bb Fixed async update check, added more streamlined system 2022-09-30 08:57:19 -05:00
g2
ccfb158843 Merge branch 'main' of https://github.com/G2-Games/welcome.sh 2022-09-30 08:31:04 -05:00
g2
df5d43dea3 Add timeout for update check, 5 seconds 2022-09-30 08:30:45 -05:00
g2
05f0fd6ec8 Fixed formatting 2022-09-30 08:30:27 -05:00
G2
5052c35831
Merge pull request #4 from ClonkDroid/main
Fix LC_LOCALE, fixes issue #3
2022-09-30 08:26:28 -05:00
ClonkDroid
affac2e291
Fix LC_LOCALE 2022-09-30 11:33:56 +02:00
g2
a44b54186b Version bump, 1.0.3 2022-09-28 14:40:45 -05:00
g2
ab6a2daf8d Version bump, 1.0.3 2022-09-28 14:37:35 -05:00
g2
69330845b7 Fixed wording in comment 2022-09-28 14:35:29 -05:00
G2
6265b2f27c
Close #3, printf error on non "en_US.UTF-8" 2022-09-28 14:30:41 -05:00
G2-Games
eb10f90ce1 Merge branch 'main' of https://github.com/G2-Games/welcome.sh 2022-09-21 14:39:28 -05:00
G2-Games
f82d1c4098 Fixed spot where cURL was the only option, added Wget 2022-09-21 14:38:53 -05:00
G2
ac77fa236f
Update README.md 2022-09-21 13:54:06 -05:00
G2-Games
544ed01199 Improved updater and uninstaller, should have complete compatibility with MacOS 2022-09-21 12:56:44 -05:00
G2
d576cf98fb
Update README.md 2022-09-21 09:22:18 -05:00
1b8ffa05a9 Made installer prettier 2022-09-21 02:26:11 -05:00
3da39bfefb Update README 2022-09-20 17:34:48 -05:00
3ce09125dc Improved config updating system 2022-09-20 15:34:36 -05:00
5d1920dfb2 Patch, fixed ZSH line removal 2022-09-20 15:26:58 -05:00
G2-Games
caa1e26c0f More fixes 2022-09-20 13:27:33 -05:00
G2-Games
ee34c250dd Finalized config version checker 2022-09-20 13:15:13 -05:00
G2-Games
a827741e69 Cfg version bump 2022-09-20 13:06:04 -05:00
G2-Games
a0b7d43b4f Fix version checking, revert changes 2022-09-20 13:03:48 -05:00
G2-Games
355ba1aa86 Version bump, 1.0.2 2022-09-20 12:39:21 -05:00
G2-Games
6340d87388 Added checks for config version to updater 2022-09-20 12:34:10 -05:00
G2-Games
d28195b401 Fixed overwriting config.cfg 2022-09-20 12:23:18 -05:00
G2-Games
1bdf2a6ff6 Updated config options, version bump 2022-09-20 12:22:58 -05:00
36870bc04e Added toggle for update checker 2022-09-20 12:09:39 -05:00
316cc6fda8 Fixed issue with failsafe 2022-09-20 03:02:24 -05:00
G2
b3ab8b3b04
Update install.sh 2022-09-20 03:00:47 -05:00
51159c3b39 Fixed install for Zsh 2022-09-20 02:52:58 -05:00
f6aface51a Much improved many parts of the install file, should be much more reliable 2022-09-20 02:31:31 -05:00
666601105a Small change 2022-09-20 01:23:33 -05:00
bd06940b6a Streamlined version tag use 2022-09-20 01:20:36 -05:00
f26c99f2a5 Version flag addition 2022-09-20 01:16:55 -05:00
c01e097140 Fixed version number 2022-09-20 00:03:47 -05:00
f8d862d353 Merge branch 'main' of https://github.com/G2-Games/welcome.sh 2022-09-19 23:58:45 -05:00
63423aa0e0 Fixed download path 2022-09-19 23:58:15 -05:00
G2
6286a69dcd
Update README.md 2022-09-19 21:08:46 -05:00
beb2e27859 Version bump, 1.0.1 2022-09-19 20:26:25 -05:00
e2d183adaa Version bump, 1.0.1 2022-09-19 20:22:21 -05:00
5 changed files with 359 additions and 226 deletions

View file

@ -12,10 +12,17 @@ My goal with this script is to keep it simple, just a single line that gives use
- Clean and simple
- Customizable
- Easy to install and update
#### Requirements:
- Terminal with 24-bit true color support
- Can check with `printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"`, will return `TRUECOLOR` in Brown if supported<br>
<sup>Source: [https://github.com/termstandard/colors](https://github.com/termstandard/colors)</sup>
- [List of supported terminal emulators](https://github.com/termstandard/colors#truecolor-support-in-output-devices)
- A modern version of Bash or Zsh (eg. the `/bin/sh` shell in Ubuntu does **not** work)
<hr>
### Installing:
#### Via Curl
#### Automatic Installation via Curl
<sub>Bash:</sub>
```
bash -c "$(curl -s https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh)"
@ -24,23 +31,14 @@ bash -c "$(curl -s https://raw.githubusercontent.com/G2-Games/welcome.sh/main/in
```
zsh -c "$(curl -s https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh)"
```
#### Or wget
<sub>Bash:</sub>
```
bash -c "$(wget -q https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh -O -)"
```
<sub>Zsh:</sub>
```
zsh -c "$(wget -q https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh -O -)"
```
It installs to `~/.welcome/welcome.sh`, and adds a line to the bottom of `~/.bashrc` or `~/.zshrc`
#### Manual Installation
To use it, download the latest `welcome.sh` from <a href="https://github.com/G2-Games/welcome.sh/releases">releases</a> and place it in your home directory. Then add `~/welcome.sh` to your `.bashrc`. It works without the config file, but you can also add that to your home directory for easier manual updates.
To install it manually, download the latest `welcome.sh` from <a href="https://github.com/G2-Games/welcome.sh/releases/latest">releases</a> and place it in your home directory. Then add `bash ~/welcome.sh` to your `.bashrc`. It works without the config file, but you can also add that to your home directory for easier manual updates.
### Updating:
Run the script again to check for an update. If you have an older version it will prompt you.
Run the script again to check for an update. If you have an older version it will prompt you. You can update **from** any version **to** any newer version. The proper files will be downloaded as necessary.
<hr>
@ -60,6 +58,7 @@ greetings=("Welcome" "Greetings" "Hello" "Hi") # Add your own greetings!
randgreeting="off" #< Turn the random greetings on (eg. "Hello <user>, Hi <user>")
twelvehour="on" #< Switch between 12 and 24 hour time (eg. 8:00 PM vs 20:00)
rechargenotif="off" #< Notify that you should recharge if below 15%
updatecheck="on" #< Check for all updates, slows startup a bit
flatpakupd="off" #< Check for flatpak updates, this slows startup down A LOT
goodgreeting="on" #< Display greetings like "Good afternoon," else "It's afternoon"
displaydate="off" #< Unused so far
@ -87,7 +86,7 @@ MORN='\e[38;2;255;164;74m'
AFTN='\e[38;2;250;245;110m'
EVEN='\e[38;2;171;54;3m'
cfgversion=1
cfgversion=2
```
<hr>

25
cleanup.sh Normal file
View file

@ -0,0 +1,25 @@
#!/bin/bash
version=1
echo "Ensuring welcome.sh is installed in the new location..."
# Check if welcome.sh is installed in the old location
if [[ -f ~/.welcome ]]\
|| [[ -f ~/.welcome/welcome.sh ]]\
|| [[ -f ~/.welcome/config.cfg ]];
then
# Modify the files with proper paths
sed "${i}d" "$zshrc" > file.tmp && mv file.tmp "$zshrc"
# Create the directories in the proper spots
mkdir -p ~/.config/welcome.sh/
mkdir -p ~/.local/bin/
# Move the welcome files to the proper folders
mv ~/.welcome/config.cfg ~/.config/welcome.sh/config.cfg
mv ~/.welcome/welcome.sh ~/.local/bin/welcome.sh
echo "welcome.sh is now installed in the new location!"
else
echo "welcome.sh is already installed properly!"
fi

View file

@ -10,6 +10,7 @@ greetings=("Welcome" "Greetings" "Hello" "Hi") # Add your own greetings!
randgreeting="off" #< Turn the random greetings on (eg. "Hello <user>, Hi <user>")
twelvehour="on" #< Switch between 12 and 24 hour time (eg. 8:00 PM vs 20:00)
rechargenotif="off" #< Notify that you should recharge if below 15%
updatecheck="on" #< Check for all updates, slows startup a bit
flatpakupd="off" #< Check for flatpak updates, this slows startup down A LOT
goodgreeting="on" #< Display greetings like "Good afternoon," else "It's afternoon"
displaydate="off" #< Unused so far
@ -37,4 +38,4 @@ MORN='\e[38;2;255;164;74m'
AFTN='\e[38;2;250;245;110m'
EVEN='\e[38;2;171;54;3m'
cfgversion=1
cfgversion=2

View file

@ -1,159 +1,207 @@
version=1.0.0
getVersion () {
local ver
ver=$(grep version ~/.welcome/welcome.sh 2> /dev/null | sed 's/.*=//')
if [ -z "$ver" ]; then
echo -e "\bUnknown"
return
fi
echo "$ver"
}
# Universal read command for bash and zsh
univRead () {
echo -en "$1"
echo -en "\n[\e[36mY/n\e[0m]"
if [[ "$environment" = "bash" ]]; then
read -p " " -r
elif [[ "$environment" = "zsh" ]]; then
read -q "REPLY? " -r
fi
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/install.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 2> /dev/null
rm ~/.welcome/install.sh 2> /dev/null
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/welcome.sh --output ~/.welcome/welcome.sh
curl -SL https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh --output ~/.welcome/install.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') # Find target line number
lines=$(printf '%s\n' "$lines" | sed '1!G;h;$!d' | sed ':a;N;$!ba;s/\n/ /g') # Format the line number properly (macos doesn't have Cut)
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 [[ -z "$1" ]] && [[ $1 != "auto" ]]; then
echo "Checking for latest release..."
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}"
if [[ $1 == "auto" ]] && [[ ${latestver//./} -le $oldver ]]; then
exit 0
elif [[ $1 == "auto" ]]; then
version=$latestver
fi
vernum=${version//./}
bashrc=~/.bashrc
zshrc=~/.zshrc
originaldir=$PWD
environment=$(ps -o args= -p $$ | grep -Em 1 -o '\w{0,5}sh' | head -1)
if [ "$environment" = "bash" ] || [ "$environment" = "zsh" ];
then
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
echo "Welcome! Installing v$version in $environment..."
tput sc
cd ~/
mkdir -p ~/.welcome
if which curl >/dev/null ;
then
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v${version}/welcome.sh --output ~/.welcome/welcome.sh
if [[ $(echo $version | sed 's/[.][.]*//g' ) -ge 100 ]]; then
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v${version}/config.cfg --output ~/.welcome/config.cfg
fi
elif which wget >/dev/null ;
then
wget https://github.com/G2-Games/welcome.sh/releases/download/v${version}/welcome.sh --P ~/.welcome/
if [[ $(echo $version | sed 's/[.][.]*//g' ) -ge 100 ]]; then
wget https://github.com/G2-Games/welcome.sh/releases/download/v${version}/config.cfg --P ~
fi
else
echo "Cannot download, neither wget nor curl is available."
# 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"
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
chmod +x ~/.welcome/welcome.sh
if [[ "$environment" = "bash" ]];
# 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
cd ~/ || exit 1
mkdir -p ~/.welcome
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/welcome.sh --output ~/.welcome/welcome.sh
curl -SL https://raw.githubusercontent.com/G2-Games/welcome.sh/main/install.sh --output ~/.welcome/install.sh
if [[ $vernum -ge 100 ]]; then
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v"${version}"/config.cfg --output ~/.welcome/config.cfg
fi
chmod +x ~/.welcome/welcome.sh
if [[ "$environment" = "bash" ]]; then
echo "Installing to bashrc"
echo 'bash ~/.welcome/welcome.sh' >> $bashrc
elif [[ "$environment" = "zsh" ]];
then
elif [[ "$environment" = "zsh" ]]; then
echo "Installing to zshrc"
echo 'zsh ~/.welcome/welcome.sh' >> $zshrc
fi
cd "$originaldir"
cd "$originaldir" || exit 1
tput rc el ed
echo -e "\e[36mInstalled! \e[0m"
else
tput sc
echo -e "\e[35mwelcome.sh\e[0m already installed!"
if [[ $(echo $version | sed 's/[.][.]*//g' ) -gt $(grep version ~/.welcome/welcome.sh | sed 's/.*=//' | sed 's/[.][.]*//g') ]]; then
echo -en "Do you want to \e[36mupdate \e[35mwelcome.sh\e[0m? (v$(grep version ~/.welcome/welcome.sh | sed 's/.*=//') => v$version) \n\e[36mY/n\e[0m"
if [[ "$environment" = "bash" ]]
then
read -p " " -n 1 -r
elif [[ "$environment" = "zsh" ]]
then
read -q "REPLY? " -n 1 -r
fi
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
tput rc el ed
echo "Updating..."
tput sc
rm ~/.welcome/welcome.sh
if which curl >/dev/null ;
then
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v${version}/welcome.sh --output ~/.welcome/welcome.sh
if ! [[ -a "~/.welcome/config.cfg" ]]; then
curl -SL https://github.com/G2-Games/welcome.sh/releases/download/v${version}/config.cfg --output ~/.welcome/config.cfg
fi
elif which wget >/dev/null ;
then
wget https://github.com/G2-Games/welcome.sh/releases/download/v${version}/welcome.sh --P ~/.welcome/
if ! [[ -a "~/.welcome/config.cfg" ]]; then
wget https://github.com/G2-Games/welcome.sh/releases/download/v${version}/config.cfg --P ~/.welcome/
fi
else
echo "Cannot download, neither Wget nor cURL is available."
exit 1
fi
# Check for older versions and replace bashrc lines #
if grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc ;
then
line=$(grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc)
line=${line%:*}
sed "${line}d" $bashrc > file.tmp && mv file.tmp $bashrc
echo 'bash ~/.welcome/welcome.sh' >> $bashrc
fi
if grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc ;
then
line=$(grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc)
line=${line%:*}
sed "${line}d" $zshrc > file.tmp && mv file.tmp $zshrc
echo 'zsh ~/.welcome/welcome.sh' >> $zshrc
fi
# End older version check #
#==== Execute if already installed...====#
tput rc el ed
echo -e "\e[32mUpdated to v$version! \e[0m"
tput rc sc el ed
mkdir -p ~/.welcome
if ! [[ $1 == "auto" ]]; then
echo -e "\e[35mwelcome.sh\e[0m already installed!"
else
echo -e "\e[32mUpdate available for \e[35mwelcome.sh!\e[0m"
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 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
univRead "Newer \e[36mconfig\e[0m version available. Do you want to \e[31moverwrite\e[0m your \e[36mconfig\e[0m? \nA backup will be created in the \e[36m.welcome\e[0m folder."
if [[ $REPLY =~ ^[Yy]$ ]]; then
overcfg=1
fi
elif [[ $oldver -lt 100 ]]; then
overcfg=1
else
overcfg=0
fi
fi
if [[ update -gt 0 ]]; then
update
exit 0
else
tput rc el ed
echo -e "\e[35mwelcome.sh\e[0m already installed!"
fi
fi
echo -en "Do you want to \e[31muninstall \e[35mwelcome.sh\e[0m?\n\e[36mY/n\e[0m"
if [[ "$environment" = "bash" ]]
then
read -p " " -n 1 -r
elif [[ "$environment" = "zsh" ]]
then
read -q "REPLY? " -n 1 -r
fi
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
tput rc el ed
echo "Goodbye. Uninstalling..."
tput sc
rm ~/.welcome/welcome.sh
rm ~/.welcome/config.cfg
rmdir ~/.welcome
if grep -sn 'bash ~/.welcome/welcome.sh' $bashrc ;
then
line=$(grep -sn 'bash ~/.welcome/welcome.sh' $bashrc)
line=${line%:*}
sed -i "${line}d" $bashrc
sed "${line}d" $bashrc > file.tmp && mv file.tmp $bashrc
fi
if grep -sn 'zsh ~/.welcome/welcome.sh' $zshrc ;
then
line=$(grep -sn 'zsh ~/.welcome/welcome.sh' $zshrc)
line=${line%:*}
sed "${line}d" $zshrc > file.tmp && mv file.tmp $zshrc
fi
# Check for older versions #
if grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc ;
then
line=$(grep -sn 'bash /home/$USER/.welcome/welcome.sh' $bashrc)
line=${line%:*}
sed "${line}d" $bashrc > file.tmp && mv file.tmp $bashrc
fi
if grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc ;
then
line=$(grep -sn 'zsh /home/$USER/.welcome/welcome.sh' $zshrc)
line=${line%:*}
sed "${line}d" $zshrc > file.tmp && mv file.tmp $zshrc
fi
# End older version check #
tput rc el ed
echo -e "\e[36mUninstalled! \e[0m"
else
tput rc el ed
echo -e "\e[31mCancelled. \e[0m"
if ! [[ $1 == "auto" ]]; then
uninstall
exit 0
fi
fi
else
printf "\e[31;5mERROR:\e[0m \e[31;3mThis script can only be installed in Bash or Zsh.\e[0m\n"
fi

View file

@ -1,8 +1,14 @@
version=1.0.0
export LC_NUMERIC="en_US.UTF-8" &> /dev/null #Fix for locales that use , instead of . as a decimal delimiter
# Define "global" variables
environment=$(ps -o args= -p $$ | grep -Em 1 -o '\w{0,5}sh' | head -1)
version=1.1.2
#========Welcome=======#
welcome () {
msg="Welcome" # Default
greetingsLength=${#greetings[@]}
greetingsNumber=$((RANDOM % greetingsLength))
if command -v whoami &>/dev/null ; then
usr=$(whoami)
@ -13,7 +19,7 @@ welcome () {
fi
if [ "$randgreeting" = "on" ]; then
msg=${greetings[$(($RANDOM % $(echo ${#greetings[@]})))]}
msg=${greetings[@]:$greetingsNumber:1}
fi
# Print the welcome message
@ -22,9 +28,10 @@ welcome () {
#=========Time=========#
clock () {
bksp=""
# Set the current hour and minute
if [ "$twelvehour" = "on" ]; then
if [ $(date +%_I) -lt 10 ]; then
if [[ "$(date +%_I)" -lt 10 ]]; then
hour="\b$(date +%_I)"
else
hour="$(date +%_I)"
@ -32,7 +39,7 @@ clock () {
ampm=$(date +%p)
else
hour=$(date +%H)
bksp="\b \b"
bksp="\b \b" # This is a hack to fix some spacing issues with AM and PM with different lengths of time
fi
minute=$(date +%M)
@ -50,13 +57,14 @@ greeting () {
greet="Good"
fi
if [ $hour -le 11 ] && [ $hour -gt 6 ]; then
# Change color and greeting depending on the segment of day
if [ "$hour" -le 11 ] && [ "$hour" -gt 6 ]; then
echo -en "$greet ${MORN}morning${NCOL}. "
elif [ $hour -eq 12 ]; then
elif [ "$hour" -eq 12 ]; then
echo -en "It's ${AFTN}noon${NCOL}. "
elif [ $hour -le 17 ] && [ $hour -gt 12 ]; then
elif [ "$hour" -le 17 ] && [ "$hour" -gt 12 ]; then
echo -en "$greet ${AFTN}afternoon${NCOL}. "
elif [ $hour -le 19 ] && [ $hour -gt 17 ]; then
elif [ "$hour" -le 19 ] && [ "$hour" -gt 17 ]; then
echo -en "$greet ${EVEN}evening${NCOL}. "
else
echo -en "It's ${NIGH}night${NCOL}. "
@ -69,6 +77,7 @@ battery () {
# Set a default to prevent errors
batlvl=0
# Check the two usually used battery locations
if [[ -a "/sys/class/power_supply/BAT0/capacity" ]]; then
batlvl=$(cat /sys/class/power_supply/BAT0/capacity)
elif [[ -a "/sys/class/power_supply/BAT1/capacity" ]]; then
@ -80,13 +89,13 @@ battery () {
fi
# Change color depending on level
if [ $batlvl -ge 100 ]; then
if [[ $batlvl -ge 100 ]]; then
echo -en "The battery is ${FULL}fully charged${NCOL}. "
elif [ $batlvl -gt 0 ]; then
elif [[ $batlvl -gt 0 ]]; then
echo -en "The battery level is "
if [ $batlvl -le 15 ]; then
if [[ $batlvl -le 15 ]]; then
echo -en "${CRIT}$batlvl%${NCOL}. "
if [ "$rechargenotif" = "on" ]; then
if [[ "$rechargenotif" = "on" ]]; then
echo -en "- ${NORM}You should probably recharge${NCOL}. "
fi
elif [ $batlvl -le 30 ]; then
@ -105,16 +114,20 @@ updates () {
fedora=0
brew=0
flatpak=0
chk=0
updates=0
# Check for updates from different places... wonder if there's a better way
# Check for APT
updchk () {
# Check for APT (Debian based)
if command -v apt-get &> /dev/null; then
debian=$(apt-get -s dist-upgrade -V 2> /dev/null | grep '=>' | awk '{print$1}' | wc -l)
debian=$(apt-get -s dist-upgrade -V | grep -c '=>')
fi
# Check for different Arch things
if command -v yay &> /dev/null; then
# Check for Arch things
if command -v checkupdates &> /dev/null; then
arch=$(checkupdates 2> /dev/null | wc -l)
elif command -v yay &> /dev/null; then
arch=$(yay -Qu 2> /dev/null | wc -l)
elif command -v paru &> /dev/null; then
arch=$(paru -Quq 2> /dev/null | wc -l)
@ -131,6 +144,12 @@ updates () {
fedora=$((fedora-1))
fi
# Check for OpenSUSE things
if command -v zypper &> /dev/null; then
suse=$(zypper list-updates 2> /dev/null | wc -l)
suse=$((suse-4))
fi
# Check for Brew updates
if command -v brew &> /dev/null; then
brew=$(brew outdated 2> /dev/null | wc -l)
@ -142,16 +161,44 @@ updates () {
fi
# Add all update counts together
updates=$(($debian + $arch + $fedora + $flatpak + $brew))
updates=$((debian + arch + fedora + suse + flatpak + brew))
echo $updates >| ~/.welcome/updates
pkill -P "${pid}" sleep # When update checking is finished, kill the sleep function running under this bash process
sleep 5
if [[ -a ~/.welcome/updates ]]; then
rm ~/.welcome/updates
fi
}
pid=$$ # Grab the PID of the process
updchk & # Check for updates Asynchronously
set +e # Allow nonzero exit status for killing sleep
exec 3>&2 # These exec commands simply supress the output of the "kill" command
exec 2> /dev/null
sleep 5
chk=$?
exec 2>&3 # And then re-enable it
exec 3>&-
set -e # Return to disallowing nonzero exit status
if [[ -a ~/.welcome/updates ]]; then
updates=$(cat ~/.welcome/updates)
rm ~/.welcome/updates
fi
# Check the update amounts and print them out
if [ $updates -eq 1 ]; then
echo -en "You have ${NORM}1${NCOL} pending update. "
elif [ $updates -eq 0 ]; then
if [ $chk -lt 1 ]; then
echo -en "Update check timed out. "
else
if [ "${updates}" -eq 0 ]; then
echo -en "You have no pending updates. "
elif [ "${updates}" -eq 1 ]; then
echo -en "You have ${NORM}1${NCOL} pending update. "
else
echo -en "You have ~${NORM}$updates${NCOL} pending updates. "
fi
fi
}
#=====Random Color=====#
@ -161,13 +208,12 @@ randcolor() {
# to modify it for a light one #
cluma=0
loops=0
while [ $(printf %.0f $cluma) -le 100 ] && [ $loops -le 10 ];
do
cr=$((0 + $RANDOM % 255))
while [ "$(printf %.0f $cluma)" -le 100 ] && [ $loops -le 10 ]; do
cr=$((0 + RANDOM % 255))
crl=$(echo "$cr 0.299" | awk '{print $1 * $2}')
cg=$((0 + $RANDOM % 255))
cg=$((0 + RANDOM % 255))
cgl=$(echo "$cg 0.587" | awk '{print $1 * $2}')
cb=$((0 + $RANDOM % 255))
cb=$((0 + RANDOM % 255))
cbl=$(echo "$cb 0.114" | awk '{print $1 * $2}')
cluma=$(echo "$crl $cgl $cbl" | awk '{print $1 + $2 + $3}')
loops=$((loops+1))
@ -198,26 +244,40 @@ MORN='\e[38;2;255;164;74m'
AFTN='\e[38;2;250;245;110m'
EVEN='\e[38;2;171;54;3m'
#==================SETUP=================#
# Select which parts you want active by #
# commenting them out. For example, on a #
# desktop, disabling the battery message #
# is a good idea. You can also re-order #
# them to change how they display! #
#========================================#
greetings=("Welcome" "Greetings" "Hello" "Hi") # Add your own greetings!
randgreeting="off" #< Turn the random greetings on (eg. "Hello <user>, Hi <user>")
twelvehour="on" #< Switch between 12 and 24 hour time (eg. 8:00 PM vs 20:00)
rechargenotif="off" #< Notify that you should recharge if below 15%
updatecheck="on" #< Check for general updates
flatpakupd="off" #< Check for flatpak updates, this slows startup down A LOT
goodgreeting="on" #< Display greetings like "Good afternoon," else "It's afternoon"
# ALL the stuff above this line and below the colors line is in the config, changing it here will do nothing only if the config doesn't exist!
source ~/.welcome/config.cfg
welcome
greeting
clock
battery
if [ "$updatecheck" = "on" ]; then
updates
fi
echo # Properly line break at the end
set +e
date=$(date +%s)
lastdate=$(cat ~/.welcome/udm 2>/dev/null)
if [[ $((date - lastdate)) -ge 86400 ]]; then
if [[ "$environment" = "bash" ]]; then
bash ~/.welcome/install.sh auto
elif [[ "$environment" = "zsh" ]]; then
zsh ~/.welcome/install.sh auto
fi
date +%s >| ~/.welcome/udm 2>/dev/null
elif ! [[ -f ~/.welcome/udm ]]; then
touch ~/.welcome/udm
date +%s >| ~/.welcome/udm 2>/dev/null
fi