Compare commits

..

19 commits

Author SHA1 Message Date
3cbc1c2ad6 re init 2026-01-23 22:52:22 +01:00
7f1042927c loop finished 2026-01-18 00:47:33 +01:00
4932d84c67 Several restore checks added 2026-01-18 00:15:42 +01:00
6c601ad66b update 2026-01-17 11:18:55 +01:00
519e36de43 Bad typo fixed 2026-01-17 11:18:42 +01:00
60136a75fe Restore select function added; Decompress function added; Configure restore function added 2026-01-16 14:47:24 +01:00
53307fa77a Init restore function added;
path correction function added
2026-01-16 14:47:24 +01:00
96d4f1421d Merge backup call fix - miss behavior when declining overwrite 2026-01-12 22:18:40 +01:00
4aa3755b19 revert help abuse 2026-01-12 19:25:20 +01:00
b0ce07b9e1 Merge backup fix from main 2026-01-12 19:22:23 +01:00
0807f98eea Backup function fixed if pbzip2 was not installed 2026-01-12 19:18:29 +01:00
1f1573f58c Backup function fixed if pbzip2 was not installed 2026-01-12 19:17:23 +01:00
e7580571ce Backup initialisation started 2026-01-12 00:41:50 +01:00
8bace469da update 2026-01-11 22:27:22 +01:00
ae18eac9b9 Backup logger refinements 2026-01-11 22:26:47 +01:00
f9a6599993 Config logger added for reverting from backup 2026-01-11 21:57:56 +01:00
489fb720c2 Update 2026-01-11 17:49:55 +01:00
42689a9605 DE check for propper notification on kde and gnome 2026-01-11 17:49:20 +01:00
3620277b98 Output adjustment 2026-01-10 19:03:18 +01:00
8 changed files with 599 additions and 72 deletions

1
.gitignore vendored Normal file → Executable file
View file

@ -1,3 +1,2 @@
test.sh
devdoc.md
binaries

8
README.md Normal file → Executable file
View file

@ -1,4 +1,4 @@
# Helium Bowser installer & updater
# Helium Browser installer & updater
## Purpose
This script was initially designed to just update my Helium browser but over time and interest it got more functional and universal. It includes functions to install, update, remove, add launcher, etc... It's supposed to run in user space and is (Linux) distro independent I suppose.
@ -10,7 +10,7 @@ With "little" tinkering it should be possible to apply this script to install, u
```
---
### First Install
To initally install Helium browser via this script, download helium_helper.sh and make it executable:
To initally install Helium browser via this script, download `helium_helper.sh` and make it executable:
```sh
wget https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/helium_helper.sh && chmod +x helium_helper.sh
```
@ -30,7 +30,7 @@ Run script with install parameter _-i_
### Updating
**From launcher** (if added during install or by running `./helium_helper.sh -l`)
Checking for the latest version and updating can simply be done for the browser as well as the script by right clicking the app icon and choosing either update option, which will be run by `helium_launcher_update.sh`. This will backup all files that are being updated and write a log.
Checking for the latest version and updating can simply be done for the browser as well as the script by right clicking the app icon and choosing either update option, which will be run by `helium_launcher_update.sh`. This will backup all files and configuration and write a log.
**Terminal**
@ -80,7 +80,7 @@ Backing up, by default, pulls all important files, folders & configuration and c
### Helium_Launcher_Update.sh
- Update Helium from launcher
- Assumes:
- Presence of `$HOME/.apps/Helium` when updating | changeable in line 22 `INSTALL_PATH`
- Presence of `$HOME/.apps/Helium` when updating | changeable in line 21 `INSTALL_PATH`
- Executable named `Helium.AppImage`
- Loggs to `$HOME/.apps/Helium/assets/logs`
- Keeps backup archives from

0
assets/icon/helium.png Normal file → Executable file
View file

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before After
Before After

0
assets/launcher/helium.desktop.template Normal file → Executable file
View file

0
assets/workflow/merge.yml Normal file → Executable file
View file

104
devdoc.md Executable file
View file

@ -0,0 +1,104 @@
# To Do List Helium installer
## Last Jobs
- Readme updated
- Desktop Entry updater --> Complete
- Launcher has an update option now
- Launcher installer refined
- Clean Up
---
- Script updater
- Remote script check simplified
- Remover function extended
- Alias remover added
- Script remover added
- helium_auto_update.sh renamed to helium_launcher_update.sh
- Desktop notifications added
- Launcher functions extended
- Update script option added
- Show log option added
- Variables universalized
- Wiki created
---
- sed command fixed in remover
- ARCH variable added
- APP_SOURCE variable changed
- BRANCH variable added
- FILE_EXTENSION variable added
- Readme updated
- Documentation/Wiki updated
---
- Shell detection added
- Alias support for fish added
- Removal process refined and adapted to fish
- Browser config backup
---
- Arch detection working
- Clean Up
- Copy Paste mistake fixed
- Backup process rewritten
- Custom backup method to pass as argument
- Custom backup path to pass as argument
- Default if left blank
- Removal process adjusted
- $1 verifier added
- Readme updated
---
- Notification adjusted for KDE & GNOME
- Backup compression to pass as argument
- Restoration process added --> partially
- Backup selector works
- Backup decompression works
- Restoration config generator --> incomplete
- Restoration function --> incomlete
- Alias changed to "helium-helper"
## Add/To Do
- Roll back from backup
- Update Readme
- Make functional launcher optional
- Variable transfer script
## Repo
- Merge workflow
- Convert URLs from __main__ to __stable__
- Remove to do list
- Remove comment from script
## Fix
## Notes
- Auto Update
```sh
while true ; do
read -p " Enable automatic update check on login? (y/N) : " AUTO_UPDATE
if [[ "$AUTO_UPDATE" == "" || "$AUTO_UPDATE" == "n" || "$AUTO_UPDATE" == "N" ]] ; then
break
elif [[ "$AUTO_UPDATE" == "y" || "$AUTO_UPDATE" == "Y" ]] ; then
if ! [ -f "$PROFILE" ] ; then
echo -e "\n ${RED}Following file is missing :\n\n${YEL}$PROFILE\n\n ${CYN}Please investigate and re-run script !${CRS}"
exit 1
else
wget -P $TMP https://lab.c95.org/fr4nz/shell-scripts/src/branch/main/helium-browser/helium_auto_update.sh -q --show-progress
chmod +x $TMP/helium_auto_update.sh
mv $TMP/helium_auto_update.sh $INSTALL_PATH/helium_auto_update.sh
echo >> $PROFILE
echo "### HELIUM AUTO UPDATE ###" >> $PROFILE
echo "${INSTALL_PATH}/helium_auto_update.sh" >> $PROFILE
echo >> $PROFILE
echo -e "\n ${GRN}Automatic updates enabled ! ${CRS}\n"
break
fi
else
echo -e " ${YEL}Invalid response !${CRS}\n"
fi
done
```

View file

@ -5,6 +5,7 @@ set -e
## SOME COLOR
CYN="\e[0;36m"
MGT="\e[0;35m"
YEL="\e[0;33m"
RED="\e[0;31m"
GRN="\e[0;32m"
@ -24,29 +25,30 @@ SCRIPT_NAME="$APP_NAME Helper Script"
SCRIPT_FILE_NAME="helium_helper.sh"
AUTO_SCRIPT_FILE_NAME="helium_launcher_update.sh"
SCRIPT_VERSION="0.5.9.1"
ALIAS="update-helium"
ALIAS="helium-helper"
DATE=$(date +"%d%m%y")
## LOCATIONS
TMP=/tmp/$APP_NAME
INSTALL_PATH=$HOME/.apps/$APP_NAME
APP_CONFIG_PATH=$HOME/.config/net.imput.helium
INSTALL_PATH=$HOME/.apps/$APP_NAME\1
APP_CONFIG_FOLDER="net.imput.helium"
APP_CONFIG_PATH=$HOME/.config/$APP_CONFIG_FOLDER
ASSET_PATH=$INSTALL_PATH/assets
BACKUP_PATH=$ASSET_PATH/backup
LOG_PATH=$ASSET_PATH/logs
LOG=$LOG_PATH/log
LAUNCHER_PATH=$HOME/.local/share/applications
SCRIPT_PATH=$HOME/.local/bin
LAUNCHER_PATH=$HOME/.local/share/applications1
SCRIPT_PATH=$HOME/.local/bin1
## REMOTE LOCATIONS
REMOTE_REPO_BRANCH="stable"
REMOTE_REPO_BRANCH="main"
REMOTE_REPO_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/$REMOTE_REPO_BRANCH
REMOTE_SCRIPT_URL=$REMOTE_REPO_URL/$SCRIPT_FILE_NAME
APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/latest
########## FUNCTIONS ###########
########################### FUNCTIONS ############################
### DEPENDENCIES
#################### DEPENDENCY CHECK ####################
cmd_query() {
if ! command -v $PACKAGE > /dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps
@ -63,29 +65,27 @@ dependency_check () {
done
if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps)
echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}\n"
echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$(cat $TMP/missingDeps)\n\n ${CYN}Please install and re-run script !${CRS}\n"
exit_clean
fi
}
### SHELL CHECK
#################### SHELL CHECK ####################
shell_query() {
if [ "$(echo $SHELL | grep "$SHELL_OPTION")" ] ; then
ACTIVE_SHELL=$SHELL_OPTION
fi
}
shell_check() {
SHELLS=("bash" "fish" "zsh")
for SHELL_OPTION in "${SHELLS[@]}" ; do
for SHELL_OPTION in ${SHELLS[@]} ; do
shell_query "$SHELL_OPTION"
done
}
### ARCH CHECK
#################### ARCH CHECK ####################
arch_check() {
if [ "$ARCH_OVERRIDE" ] ; then
ARCH=$ARCH_OVERRIDE
@ -106,7 +106,7 @@ arch_check() {
fi
}
### CHECK LOCAL INSTALL
#################### LOCAL INSTALL CHECK ####################
local_check() {
if ! [ -d "$INSTALL_PATH" ] ; then
echo -e "\n ${YEL}$APP_NAME_LONG directory not found!${CRS}\n"
@ -120,7 +120,33 @@ local_check() {
fi
}
### INSTALL
#################### VARIABLE CHECK ####################
path_correction() {
if [ "$TARGET" == "INSTALL" ] ; then
TARGET_PATH=$INSTALL_PATH
elif [ "$TARGET" == "BACKUP" ] ; then
TARGET_PATH=$BACKUP_PATH
fi
if ! [ ${TARGET_PATH:0:1} == "/" ] ; then
TARGET_PATH=$(pwd)/$TARGET_PATH
fi
REVERSE_PATH=$(echo $TARGET_PATH | rev)
if [ "${REVERSE_PATH:0:1}" == "/" ] ; then
TARGET_PATH=$(echo $TARGET_PATH | sed "s|.$||")
fi
if [ "$TARGET" == "INSTALL" ] ; then
INSTALL_PATH=$TARGET_PATH
elif [ "$TARGET" == "BACKUP" ] ; then
BACKUP_PATH=$TARGET_PATH
fi
}
#################### INSTALL ####################
install_application() {
if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e " ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}"
@ -153,7 +179,7 @@ install_application() {
done
}
### LAUNCHER
#################### LAUNCHER ####################
add_launcher() {
if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then
echo -e "\n ${YEL}${APP_NAME}.desktop already exists!${CRS}"
@ -206,7 +232,7 @@ add_launcher() {
fi
}
### ALIAS
#################### ALIAS ####################
add_alias() {
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
mkdir -p $SCRIPT_PATH
@ -258,29 +284,31 @@ add_alias() {
fi
}
### UPDATE
#################### UPDATE ####################
update_application() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}')
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$APP_SOURCE_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}"
echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}\n"
exit
elif [ -z "$LOCAL_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}local AppImage${RED}! Can't compare, exiting...${CRS}"
echo -e "\n ${RED}Empty version tag from ${CYN}local $FILE_EXTENSION${RED}! Can't compare, exiting...${CRS}\n"
exit
fi
### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
APP_SOURCE_VERSION_NUM=$(echo "1.$APP_SOURCE_VERSION_NUM")
LOCAL_VERSION_NUM=$(echo "1.$LOCAL_VERSION_NUM")
if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
echo -e "\n ${GRN}$APP_NAME_LONG is already up-to-date!${CRS}\n"
elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
elif [ $(echo "$APP_SOURCE_VERSION_NUM > $LOCAL_VERSION_NUM" | bc -l) -eq 1 ] ; then
echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n"
app_version_info
@ -317,9 +345,10 @@ update_application() {
fi
}
### BACKUP
#################### BACKUP ####################
call_backup() {
if [ -f $BACKUP_PATH\/$APP_NAME\.$BACKUP_METHOD\.backup_* ] ; then
BACKUP_COUNT=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_* 2> /dev/null | wc -l)
if [[ "$BACKUP_COUNT" -gt "0" ]] ; then
echo -e "\n ${CYN}A $BACKUP_METHOD backup already exists!${CRS}\n"
while true ; do
@ -327,22 +356,86 @@ call_backup() {
if [[ "$OVERWRITE_BACKUP" == "" || "$OVERWRITE_BACKUP" == "n" || "$OVERWRITE_BACKUP" == "N" ]] ; then
echo -e "\n ${YEL}Skipping backup process...${CRS}\n"
break
exit_clean
elif [[ "$OVERWRITE_BACKUP" == "y" || "$OVERWRITE_BACKUP" == "Y" ]] ; then
echo -e "\n ${YEL}Overwriting backup...${CRS}"
rm $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_*
${BACKUP_METHOD}_backup
break
else
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
fi
${BACKUP_METHOD}_backup
}
backup_logger() {
echo "### $APP_NAME_LONG CONFIG SNAPSHOT $(date) ###" >> $TMP/backup/conf_log
echo >> $TMP/backup/conf_log
echo -e "\n - ${CRS}Creating ${CYN}config log${CRS}...${CRS}"
shell_check
if [ "$ACTIVE_SHELL" == "zsh" ] ; then
if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : TRUE" >> $TMP/backup/conf_log
elif ! [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : FALSE" >> $TMP/backup/conf_log
fi
elif [ "$ACTIVE_SHELL" == "bash" ] ; then
if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : TRUE" >> $TMP/backup/conf_log
elif ! [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : FALSE" >> $TMP/backup/conf_log
fi
elif [ "$ACTIVE_SHELL" == "fish" ] ; then
if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : TRUE" >> $TMP/backup/conf_log
elif ! [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : FALSE" >> $TMP/backup/conf_log
fi
else
${BACKUP_METHOD}_backup
echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log
echo " # Alias : FALSE" >> $TMP/backup/conf_log
fi
LOGGABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH")
for LOG_ITEM in ${LOGGABLE[@]} ; do
if [ -d "$LOG_ITEM" ] ; then
echo " # Folder : $LOG_ITEM" >> $TMP/backup/conf_log
elif [ -f "$LOG_ITEM" ] ; then
echo " # File : $LOG_ITEM" >> $TMP/backup/conf_log
else
echo " # N/A : $LOG_ITEM" >> $TMP/backup/conf_log
fi
done
echo >> $TMP/backup/conf_log
echo >> $TMP/backup/conf_log
echo "### $SCRIPT_FILE_NAME VARIABLES ###" >> $TMP/backup/conf_log
echo >> $TMP/backup/conf_log
echo "INSTALL_PATH = $INSTALL_PATH" >> $TMP/backup/conf_log
echo "SCRIPT_PATH = $SCRIPT_PATH" >> $TMP/backup/conf_log
echo "LAUNCHER_PATH = $LAUNCHER_PATH" >> $TMP/backup/conf_log
echo "APP_CONFIG_PATH = $APP_CONFIG_PATH" >> $TMP/backup/conf_log
echo >> $TMP/backup/conf_log
}
backup_file_collector() {
@ -357,6 +450,8 @@ backup_file_collector() {
cp $BACKUP_ITEM $TMP/backup
fi
done
backup_logger
}
script_backup() {
@ -367,7 +462,7 @@ script_backup() {
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
echo -e "\n ${YEL}Nothing to back up...${CRS}\n"
fi
}
@ -379,7 +474,7 @@ app_backup() {
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
echo -e "\n ${YEL}Nothing to back up...${CRS}\n"
fi
}
@ -391,7 +486,7 @@ config_backup() {
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
echo -e "\n ${YEL}Nothing to back up...${CRS}\n"
fi
}
@ -403,7 +498,7 @@ full_backup() {
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
echo -e "\n ${YEL}Nothing to back up...${CRS}\n"
fi
}
@ -426,9 +521,9 @@ pack_backup() {
COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip")
until [ "$BACKUP_COMPRESSION" ] ; do
for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do
for COMPRESSION_TYPE in "${COMPRESSION_METHOD[@]}" ; do
if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then
if command -v $COMPRESSION_TYPE > /dev/null 2>&1 ; then
BACKUP_COMPRESSION=$COMPRESSION_TYPE
break
fi
@ -478,7 +573,295 @@ pack_backup() {
fi
}
### REMOVE
#################### RESTORE BACKUP ####################
select_backup() {
BACKUP_COUNT=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_TYPE.backup_* 2> /dev/null | wc -l)
if [ "$BACKUP_COUNT" -gt "1" ] ; then
i=1
mkdir -p $TMP/backup_restore
CWD=$(pwd)
cd $BACKUP_PATH
RESTORE_OPTIONS=$(ls -lt $APP_NAME\.$BACKUP_TYPE\.backup_* | awk '{print $9}')
for RESTORE_TARGET in ${RESTORE_OPTIONS[@]} ; do
echo " $i - $RESTORE_TARGET" >> $TMP/backup_restore/options
i=$(($i+1))
done
cd $CWD
echo -e "\n ${CYN}Choose one of the $BACKUP_COUNT options below${CRS}\n"
echo -e "$(cat $TMP/backup_restore/options)\n"
while true ; do
read -p " Enter backup ID (1-$BACKUP_COUNT) or exit : " RESTORE_SELECT
if [[ "$RESTORE_SELECT" -le "$BACKUP_COUNT" && "$RESTORE_SELECT" -gt "0" ]] ; then
RESTORE_FILE=$(sed -n $RESTORE_SELECT\p $TMP/backup_restore/options | awk '{print $3}')
BACKUP_TYPE=$(echo $RESTORE_FILE | awk -F'.' '{print $2}')
RESTORE_SOURCE=$BACKUP_PATH/$RESTORE_FILE
break
elif [[ "$RESTORE_SELECT" == "exit" || "$RESTORE_SELECT" == "EXIT" ]] ; then
echo
exit_clean
else
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
elif [ "$BACKUP_COUNT" -lt "1" ] ; then
echo -e " ${RED}No backup archive found in ${CYN}$BACKUP_PATH${RED}!${CRS}\n"
exit_clean
else
RESTORE_SOURCE=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_TYPE.backup_*)
RESTORE_FILE=$(echo $RESTORE_SOURCE | rev | awk -F'/' '{print $1}' | rev)
if [ "$BACKUP_TYPE" == "*" ] ; then
BACKUP_TYPE=$(file $RESTORE_SOURCE | awk '{print $1}' | awk -F'.' '{print $2}')
fi
fi
BACKUP_COMPRESSION=$(file $RESTORE_SOURCE | awk '{print $2}')
decompress_backup
}
decompress_backup() {
CWD=$(pwd)
mkdir -p $TMP/backup_restore
cd $TMP/backup_restore
echo -e "\n - ${CRS}Decompressing backup archive ${CYN}$RESTORE_FILE${CRS}...${CRS}\n"
cp $RESTORE_SOURCE .
if [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then
tar -xjf $APP_NAME.*.backup_*.tar.bz2
rm $APP_NAME.*.backup_*.tar.bz2
elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then
tar -xzf $APP_NAME.*.backup_*.tar.gz
rm $APP_NAME.*.backup_*.tar.gz
elif [ "$BACKUP_COMPRESSION" == "Zip" ] ; then
unzip $APP_NAME.*.backup_*.tar.zip > /dev/null 2>&1
tar -xf $APP_NAME.*.backup_*.tar
rm $APP_NAME.*.backup_*.tar.zip $APP_NAME.*.backup_*.tar
else
echo -e " ${YEL}TBA...${CRS}\n" #######################################################################
fi
configure_restore
}
configure_restore() {
echo -e " - ${CRS}Analysing ${CYN}$BACKUP_TYPE${CRS} backup content...${CRS}\n"
RESTORABLE=("$APP_NAME.$FILE_EXTENSION" "$SCRIPT_FILE_NAME" "$APP_NAME.desktop" "$APP_CONFIG_FOLDER")
for RESTORE_ITEM in ${RESTORABLE[@]} ; do
if [ -d "$RESTORE_ITEM" ] ; then
if [ -d "$APP_CONFIG_PATH" ] ; then
echo "APP_CONFIG_PATH=\"$APP_CONFIG_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
else
echo "APP_CONFIG_PATH=\"$APP_CONFIG_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
echo "APP_CONFIG_PATH=\"$APP_CONFIG_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_diff
fi
elif [ -f "$RESTORE_ITEM" ] ; then
if [[ -f "$INSTALL_PATH/$RESTORE_ITEM" || -f "$SCRIPT_PATH/$RESTORE_ITEM" || -f "$LAUNCHER_PATH/$RESTORE_ITEM" ]] ; then
if [ "$RESTORE_ITEM" == "$APP_NAME.$FILE_EXTENSION" ] ; then
echo "INSTALL_PATH=\"$INSTALL_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
elif [[ "$RESTORE_ITEM" == "$SCRIPT_FILE_NAME" || "$RESTORE_ITEM" == "$AUTO_SCRIPT_FILE_NAME" ]] ; then
echo "SCRIPT_PATH=\"$SCRIPT_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
elif [ "$RESTORE_ITEM" == "$APP_NAME.desktop" ] ; then
echo "LAUNCHER_PATH=\"$LAUNCHER_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
fi
else
if [ "$RESTORE_ITEM" == "$APP_NAME.$FILE_EXTENSION" ] ; then
echo "INSTALL_PATH=\"$INSTALL_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
echo "INSTALL_PATH=\"$INSTALL_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_diff
elif [[ "$RESTORE_ITEM" == "$SCRIPT_FILE_NAME" || "$RESTORE_ITEM" == "$AUTO_SCRIPT_FILE_NAME" ]] ; then
echo "SCRIPT_PATH=\"$SCRIPT_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
echo "SCRIPT_PATH=\"$SCRIPT_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_diff
elif [ "$RESTORE_ITEM" == "$APP_NAME.desktop" ] ; then
echo "LAUNCHER_PATH=\"$LAUNCHER_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_check
echo "LAUNCHER_PATH=\"$LAUNCHER_PATH\" FILE_NAME=\"$RESTORE_ITEM\"" >> $TMP/restore_diff
fi
fi
fi
done
echo -e " - ${CRS}Configuring ${CYN}$BACKUP_TYPE${CRS} restoration process...${CRS}\n"
i=1
RESTORE_PATH=$(cat $TMP/restore_check | awk -F'=' '{print $1}')
for PATH_VARIABLE in ${RESTORE_PATH[@]} ; do
PATH_CHECK=$(cat $TMP/restore_diff 2> /dev/null| grep "$PATH_VARIABLE" | awk '{print $1}' | awk -F'=' '{print $2}' | tr -d "\"")
if [[ "$PATH_CHECK" == "$INSTALL_PATH" || "$PATH_CHECK" == "$SCRIPT_PATH" || "$PATH_CHECK" == "$LAUNCHER_PATH" || "$PATH_CHECK" == "$APP_CONFIG_PATH" ]] ; then
echo " $i - DEFAULT_$PATH_VARIABLE = $PATH_CHECK" >> $TMP/restore_path_change
echo " BACKUP_$(cat conf_log | grep "$PATH_VARIABLE")" >> $TMP/restore_path_change
echo >> $TMP/restore_path_change
i=$(($i+1))
fi
done
if [ -f "$TMP/restore_path_change" ] ; then
echo -e " ${YEL}Path change detected!\n${CRS}"
echo -e "$(cat $TMP/restore_path_change)\n"
while true ; do
read -p " Which path to use? (DEFAULT/backup) : " PATH_OVERWRITE
echo
if [[ "$PATH_OVERWRITE" == "" || "$PATH_OVERWRITE" == "default" || "$PATH_OVERWRITE" == "DEFAULT" ]] ; then
break
elif [[ "$PATH_OVERWRITE" == "backup" || "$PATH_OVERWRITE" == "BACKUP" ]] ; then
TARGET_TO_CHANGE=$(cat $TMP/restore_diff | awk '{print $1}' | awk -F'=' '{print $1}')
for TARGET_VARIABLE in ${TARGET_TO_CHANGE[@]} ; do
PATH_TO_CHANGE=$(cat conf_log | grep "$TARGET_VARIABLE" | awk -F'=' '{print $2}' | tr -d " ")
if [ "$TARGET_VARIABLE" == "INSTALL_PATH" ] ; then
INSTALL_PATH=$PATH_TO_CHANGE
elif [ "$TARGET_VARIABLE" == "SCRIPT_PATH" ] ; then
SCRIPT_PATH=$PATH_TO_CHANGE
elif [ "$TARGET_VARIABLE" == "LAUNCHER_PATH" ] ; then
LAUNCHER_PATH=$PATH_TO_CHANGE
elif [ "$TARGET_VARIABLE" == "APP_CONFIG_PATH" ] ; then
APP_CONFIG_PATH=$PATH_TO_CHANGE
fi
done
break
else
echo -e " ${YEL}Invalid response!${CRS}\n"
fi
done
fi
for RESTORE_ITEM in ${RESTORABLE[@]} ; do
if [ -d "$RESTORE_ITEM" ] ; then
if [ -d "$APP_CONFIG_PATH" ] ; then
echo -e " - Folder : $RESTORE_ITEM \t| ${RED}directory existing${CRS}" >> $TMP/restore_content
else
echo -e " - Folder : $RESTORE_ITEM \t| ${GRN}not present${CRS}" >> $TMP/restore_content
fi
elif [ -f "$RESTORE_ITEM" ] ; then
if [[ -f "$INSTALL_PATH/$RESTORE_ITEM" || -f "$SCRIPT_PATH/$RESTORE_ITEM" || -f "$LAUNCHER_PATH/$RESTORE_ITEM" ]] ; then
echo -e " - File : $RESTORE_ITEM \t| ${RED}file existing${CRS}" >> $TMP/restore_content
else
echo -e " - File : $RESTORE_ITEM \t| ${GRN}not present${CRS}" >> $TMP/restore_content
fi
fi
done
restore_backup
}
restore_backup() { ###############################################
echo -e "\t${LCY}###### Restore Summary ######${CRS}\n"
echo -e " ${MGT}Destination${CRS}"
echo -e " - Install path \t: ${CYN}$INSTALL_PATH${CRS}"
echo -e " - Script path \t: ${CYN}$SCRIPT_PATH${CRS}"
echo -e " - Launcher path \t: ${CYN}$LAUNCHER_PATH${CRS}"
echo -e " - $APP_NAME config \t: ${CYN}$APP_CONFIG_PATH${CRS}\n"
echo -e " ${MGT}Backup content${CRS}"
echo -e "$(cat $TMP/restore_content)\n"
if [ -f "$TMP/restore_check" ] ; then
echo -e " ${RED}WARNING: Some items are existent on your system!${CRS}\n"
while true ; do
read -p " Overwrite existing? (y/N) : " RESTORE_OVERWRITE
if [[ "$RESTORE_OVERWRITE" == "" || "$RESTORE_OVERWRITE" == "n" || "$RESTORE_OVERWRITE" == "N" ]] ; then
echo -e "\n ${RED}Cancelled!${CRS}\n"
break
elif [[ "$RESTORE_OVERWRITE" == "y" || "$RESTORE_OVERWRITE" == "Y" ]] ; then
echo -e "\n - ${CRS}Restoring ${CYN}$BACKUP_TYPE${CRS} backup files...${CRS}\n"
EXISTING=$(cat $TMP/restore_check | awk -F'=' '{print $1}')
for REPLACE in ${EXISTING[@]} ; do
if [ "$REPLACE" == "INSTALL_PATH" ] ; then
rm -rf $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
chmod +x $APP_NAME.$FILE_EXTENSION
mv $APP_NAME.$FILE_EXTENSION $INSTALL_PATH
elif [ "$REPLACE" == "SCRIPT_PATH" ] ; then
rm -rf $SCRIPT_PATH/$SCRIPT_FILE_NAME $SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME
chmod +x *.sh
mv *.sh $SCRIPT_PATH
elif [ "$REPLACE" == "LAUNCHER_PATH" ] ; then
rm -rf $LAUNCHER_PATH/$APP_NAME.desktop
mv $APP_NAME.desktop $LAUNCHER_PATH
elif [ "$REPLACE" == "APP_CONFIG_PATH" ] ; then
rm -rf $APP_CONFIG_PATH
mv $APP_CONFIG_FOLDER $HOME/.config
fi
done
fi
done
else
echo -e " ${CYN}The content above is about to be restored...${CRS}\n"
while true ; do
read -p " Proceed with changes? (Y/n) : " RESTORE_CONFIRM
if [[ "$RESTORE_CONFIRM" == "" || "$RESTORE_CONFIRM" == "y" || "$RESTORE_CONFIRM" == "Y" ]] ; then
echo -e " - ${CRS}Restoring ${CYN}$BACKUP_TYPE${CRS} backup files...${CRS}\n"
for REPLACE in ${EXISTING[@]} ; do
if [ "$REPLACE" == "INSTALL_PATH" ] ; then
rm -rf $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
chmod +x $APP_NAME.$FILE_EXTENSION
mv $APP_NAME.$FILE_EXTENSION $INSTALL_PATH
elif [ "$REPLACE" == "SCRIPT_PATH" ] ; then
rm -rf $SCRIPT_PATH/$SCRIPT_FILE_NAME $SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME
chmod +x *.sh
mv *.sh $SCRIPT_PATH
elif [ "$REPLACE" == "LAUNCHER_PATH" ] ; then
rm -rf $LAUNCHER_PATH/$APP_NAME.desktop
mv $APP_NAME.desktop $LAUNCHER_PATH
elif [ "$REPLACE" == "APP_CONFIG_PATH" ] ; then
rm -rf $APP_CONFIG_PATH
mv $APP_CONFIG_FOLDER $HOME/.config
fi
done
elif [[ "$RESTORE_CONFIRM" == "n" || "$RESTORE_CONFIRM" == "N" ]] ; then
echo -e "\n ${RED}Cancelled!${CRS}\n"
break
else
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
fi
}
#################### REMOVE ####################
remove_application() {
if [ -d "$INSTALL_PATH" ] ; then
@ -523,11 +906,11 @@ remove_application() {
break
elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}"
echo -e "\n ${RED}Cancelled!${CRS}"
exit
else
echo -e " ${YEL}Invalid response!${CRS}\n"
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
@ -537,12 +920,12 @@ remove_application() {
fi
}
### SCRIPT VERSION
#################### SCRIPT VERSION ####################
script_version() {
echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${CRS}$SCRIPT_VERSION\n"
}
### UPDATE SCRIPT
#################### UPDATE SCRIPT ####################
scrip_version_info() {
echo -e " - ${CYN}Local Version :\t${CRS}$SCRIPT_VERSION"
echo -e " - ${CYN}Remote Version :\t${CRS}$REMOTE_SCRIPT_VERSION"
@ -558,13 +941,12 @@ update_script() {
read -p " Copy script to $SCRIPT_PATH? (Y/n) : " CONFIRM_SCRIPT_INSTALL
if [[ "$CONFIRM_SCRIPT_INSTALL" == "" || "$CONFIRM_SCRIPT_INSTALL" == "y" || "$CONFIRM_SCRIPT_INSTALL" == "Y" ]] ; then
mkdir -p $SCRIPT_PATH
mkdir -p $TMP
mkdir -p $SCRIPT_PATH $TMP
wget -P $TMP $REMOTE_SCRIPT_URL -q
wget -P $TMP $REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME -q
chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH
echo -e "\n ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}"
echo -e "\n ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}\n"
break
elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then
@ -581,11 +963,11 @@ update_script() {
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$SCRIPT_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}local script${RED}! Can't compare, exiting...${CRS}"
echo -e "\n ${RED}Empty version tag from ${CYN}local script${RED}! Can't compare, exiting...${CRS}\n"
exit
elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}remote script${RED}! Can't compare, exiting...${CRS}"
echo -e "\n ${RED}Empty version tag from ${CYN}remote script${RED}! Can't compare, exiting...${CRS}\n"
exit
fi
@ -602,7 +984,6 @@ update_script() {
while true ; do
read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE
echo
if [[ "$CONFIRM_SCRIPT_UPDATE" == "" || "$CONFIRM_SCRIPT_UPDATE" == "y" || "$CONFIRM_SCRIPT_UPDATE" == "Y" ]] ; then
if ! [ -d "$BACKUP_PATH" ] ; then
@ -618,11 +999,11 @@ update_script() {
break
elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}\n"
echo -e "\n ${RED}Cancelled!${CRS}\n"
break
else
echo -e " ${YEL}Invalid response!${CRS}\n"
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
@ -633,7 +1014,7 @@ update_script() {
fi
}
### COMPARE APP VERSION
#################### COMPARE APP VERSION ####################
app_version_info() {
echo -e " - ${CYN}Local Version :\t${CRS}$LOCAL_VERSION"
echo -e " - ${CYN}$APP_SOURCE Version :\t${CRS}$APP_SOURCE_VERSION\n"
@ -669,17 +1050,18 @@ compare_version() {
fi
}
### HELP
#################### HELP ####################
help() {
echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n"
echo -e "$APP_NAME_LONG installer & updater script\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -b | -r | -c | -s | -S | -h ]\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -b | -B | -r | -c | -s | -S | -h ]\n"
echo -e "Options:\n"
echo -e "\t-i\tInstall $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-l\tCreate desktop launcher"
echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME"
echo -e "\t-u\tUpdate $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-b\tBackup $APP_NAME_LONG & configuration"
echo -e "\t-B\tRestore $APP_NAME_LONG & configuration from backup"
echo -e "\t-r\tRemove $APP_NAME_LONG"
echo -e "\t-c\tCompare local to remote version"
echo -e "\t-s\tShow script version"
@ -691,7 +1073,7 @@ help() {
echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n"
}
### EXIT CLEAN
#################### EXIT CLEAN ####################
exit_clean() {
if [ -d "$TMP" ] ; then
rm -rf $TMP
@ -700,10 +1082,9 @@ exit_clean() {
exit
}
########## MAIN ##########
########################### MAIN ###########################
## GET OPTIONS
while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
while getopts ":i,:l,:a,:u,:b,:B,:r,:c,:s,:S,:h" OPTION ; do
if [ "$(echo $1 | wc -m)" -gt "3" ] ; then
echo -e "\n${YEL}Option ${RED}$1${YEL} not valid! Use only one parameter at a time...${CRS}"
@ -713,6 +1094,7 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
case $OPTION in
i)
TARGET="INSTALL"
echo -e "\n ${YEL}Installing $APP_NAME_LONG...${CRS}\n"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
@ -725,6 +1107,7 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
fi
dependency_check
arch_check
path_correction
install_application
exit_clean ;;
@ -759,6 +1142,7 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
exit_clean ;;
b)
TARGET="BACKUP"
echo -e "\n ${YEL}Backing up $APP_NAME_LONG...${CRS}"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
@ -770,13 +1154,41 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
elif [[ "$PARAMETER" == "pbzip2" || "$PARAMETER" == "gzip" || "$PARAMETER" == "bzip2" || "$PARAMETER" == "zip" ]] ; then
BACKUP_COMPRESSION_OVERRIDE=$PARAMETER
elif [ -d "$PARAMETER" ] ; then
elif [[ -d "$PARAMETER" || -d "$(pwd)/$PARAMETER" ]] ; then
BACKUP_PATH=$PARAMETER
fi
done
fi
path_correction
call_backup
exit ;;
exit_clean ;;
B)
TARGET="BACKUP"
echo -e "\n ${YEL}Restoring $APP_NAME_LONG from backup...${CRS}"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [[ "$PARAMETER" == "script" || "$PARAMETER" == "config" || "$PARAMETER" == "app" || "$PARAMETER" == "full" ]] ; then
BACKUP_TYPE=$PARAMETER
elif [[ -d $PARAMETER || -d $(pwd)/$PARAMETER ]] ; then
BACKUP_PATH=$PARAMETER
else
BACKUP_TYPE=*
fi
done
else
BACKUP_TYPE=*
fi
dependency_check
path_correction
select_backup
exit_clean ;;
r)
echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}\n"
@ -814,8 +1226,6 @@ done
## ENVIRONMENT CHECK
dependency_check
arch_check
## CHECK LOCAL INSTALL
local_check
## UPDATE

View file

@ -9,7 +9,6 @@ APP_NAME_LONG="Helium Web Browser"
ARCH="x86_64"
FILE_EXTENSION="AppImage"
APP_SOURCE="GitHub"
NOTIFY_NAME="Helium Helper"
SCRIPT_NAME="$APP_NAME Launcher Updater"
PARENT_SCRIPT_FILE_NAME="helium_helper.sh"
SCRIPT_FILE_NAME="helium_launcher_update.sh"
@ -17,6 +16,9 @@ SCRIPT_VERSION="0.5.9.1"
LOG_DATE=$(date)
DATE=$(date +"%d%m%y")
## NOTIFICATIONS
NOTIFY_NAME="Helium Helper"
## LOCATIONS
TMP=/tmp/$APP_NAME
INSTALL_PATH=$HOME/.apps/$APP_NAME
@ -30,7 +32,7 @@ ICON=$ASSET_PATH/icon/helium.png
SCRIPT_PATH=$HOME/.local/bin
## REMOTE LOCATIONS
REMOTE_REPO_BRANCH="stable"
REMOTE_REPO_BRANCH="main"
REMOTE_REPO_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/$REMOTE_REPO_BRANCH
REMOTE_SCRIPT_URL=$REMOTE_REPO_URL/$SCRIPT_FILE_NAME
APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/latest
@ -87,6 +89,15 @@ dependency_check () {
}
### DE CHECK
desktop_environment() {
ALTERNATIVE_NOTIFY="--app-name="$NOTIFY_NAME""
if [[ "$(echo $XDG_CURRENT_DESKTOP | grep -iF "kde")" || "$(echo $XDG_CURRENT_DESKTOP | grep -iF "gnome")" ]] ; then
NOTIFY_NAME=$ALTERNATIVE_NOTIFY
fi
}
### BACKUP
backup_helium() {
if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then
@ -154,13 +165,13 @@ backup_helium() {
cd $TMP && rm -rf backup
else
echo "$LOG_DATE | Backup - Backup (uncompressed) written to $BACKUP_PATH" >> $LOG
echo "$LOG_DATE | Backup (uncompressed) written to $BACKUP_PATH" >> $LOG
mkdir -p $BACKUP_PATH
mv $TMP/backup $BACKUP_PATH/$APP_NAME.auto_backup_$DATE
cd $TMP && rm -rf backup
fi
echo "$LOG_DATE | Backup - Backup (compressed $BACKUP_COMPRESSION archive) written to $BACKUP_PATH" >> $LOG
echo "$LOG_DATE | Backup (compressed $BACKUP_COMPRESSION archive) written to $BACKUP_PATH" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Backup created"
cd $CWD
fi
@ -353,6 +364,9 @@ done
## DEPENDENCY CHECK
dependency_check
## DE CHECK
desktop_environment
## UPDATE
update_helium