Compare commits

...

77 commits

Author SHA1 Message Date
f253e87973 Readme update 2026-01-10 18:25:53 +01:00
da7ca0c5f7 Merge branch 'main' into stable 2026-01-10 18:24:15 +01:00
dd615058c4 Hotfix date confusion 2026-01-10 18:22:32 +01:00
dc3e69071e Merge branch 'main' into stable 2026-01-10 17:03:00 +01:00
969f8b2eb5 zip hotfix 2026-01-10 17:02:12 +01:00
4db4454a90 Architecture verification added 2026-01-10 15:25:06 +01:00
1d8d70c54b Update .gitignore 2026-01-10 14:45:32 +01:00
685cd78993 Delete devdoc.md 2026-01-10 14:45:07 +01:00
c6f2f2bd3f gitignore updated 2026-01-10 14:32:45 +01:00
69a14a82b6 gitignore updated 2026-01-10 14:30:04 +01:00
3fa31db0ff More research on workflows 2026-01-10 14:19:07 +01:00
e608de8eed Version bumped --> 0.5.9 2026-01-10 14:18:16 +01:00
66054bd6b1 Prep for workflows 2026-01-10 12:59:59 +01:00
88510e971a Backup process refined 2026-01-10 12:58:37 +01:00
1a253d6de5 Docu updated 2026-01-10 12:07:17 +01:00
ebc4809ef3 Readme updated 2026-01-10 12:06:50 +01:00
2cae941eea Typo fixed 2026-01-09 00:24:30 +01:00
c12ea4e331 Readme updated 2026-01-09 00:16:24 +01:00
6eaf261db2 Readme updated 2026-01-09 00:14:29 +01:00
90dd1ea68b Readme updated 2026-01-09 00:10:56 +01:00
6c91e896bc update 2026-01-08 23:44:14 +01:00
3d4c84ef6c Backup function added 2026-01-08 23:43:56 +01:00
f2335fd148 Backup function added ;
Script output refined ;
Custom alias through $2 added;
Arch detection added ;
Removal Process adatptions ;
2026-01-08 23:42:44 +01:00
Fr4nz D13trich
434f8b0b70 binaries ignored 2026-01-05 11:49:59 -07:00
65453aa3ed deleted: assets/binaries/helium_helper.sh.x.c
deleted:    assets/binaries/helium_launcher_update.sh.x.c
modified:   devdoc.md
deleted:    launcher-update-helium
deleted:    update-helium
2026-01-02 23:24:52 +01:00
3e699cb4db Level Up --> 0.5.8 2026-01-02 23:11:14 +01:00
c86f164430 post merge 2026-01-02 19:27:55 +01:00
eb18320180 merged 2026-01-02 19:25:22 +01:00
c49679dd35 Config Backup added; FISH alias added; FISH alias removal added 2026-01-02 19:15:14 +01:00
4910932c43 FISH config removal process added 2026-01-02 17:24:11 +01:00
cf7d8d009c Alias configuration for FISH added 2026-01-02 17:07:18 +01:00
834f929161 Alias configuration for FISH added 2026-01-02 17:01:13 +01:00
a88ba74608 Alias configuration for FISH added 2026-01-02 16:55:48 +01:00
1090a4cdd0 Alias configuration for FISH added 2026-01-02 16:51:06 +01:00
abc1016148 Alias configuration for FISH added 2026-01-02 16:12:54 +01:00
f8498fb44f Alias configuration for FISH added 2026-01-02 16:07:13 +01:00
e00b22378e Alias configuration for FISH added 2026-01-02 16:05:16 +01:00
805a80ff89 Alias configuration for FISH added 2026-01-02 16:03:07 +01:00
35ddd28a3b Removal process updated; Alias configuration for FISH added 2026-01-02 16:00:52 +01:00
5d9d0cb515 Helium config variable added 2025-12-31 00:20:35 +01:00
8b2473ee3d Script compiled with shc 2025-12-28 18:29:49 +01:00
6d9b818911 Update 2025-12-28 18:26:22 +01:00
6d190c60bb Update 2025-12-28 18:25:27 +01:00
36d673fcd1 Script compiled with shc 2025-12-28 18:19:46 +01:00
3dfa62a71a Docs updated; gitignore added 2025-12-28 14:11:40 +01:00
48b8553198 Output beautified 2025-12-28 14:11:00 +01:00
950ceaf898 Branch value changed 2025-12-28 00:37:57 +01:00
bb47814565 Merge pull request 'WIP make main stable' (#1) from main into stable
Reviewed-on: #1
2025-12-28 00:33:43 +01:00
e216d9cc4b Script version bumped 2025-12-28 00:29:54 +01:00
d480d5c657 update 2025-12-28 00:25:25 +01:00
a638306f2f update 2025-12-28 00:20:53 +01:00
5cc2a37985 update 2025-12-28 00:19:05 +01:00
08982535e7 Cleanup 2025-12-28 00:18:58 +01:00
2995cc29b1 update 2025-12-27 23:33:11 +01:00
75c5bffbe9 Multiple variables added 2025-12-27 23:33:01 +01:00
17d2815039 Fixed faulty sed command in removal function 2025-12-27 22:30:02 +01:00
2d8c254621 update 2025-12-27 18:53:36 +01:00
0bdf836eb3 Readme update 2025-12-27 15:21:24 +01:00
f79c997f16 Alias removed 2025-12-27 15:17:22 +01:00
5aa8ee1915 Readme update 2025-12-27 15:17:00 +01:00
c1ec805b1b Version bumped up 2025-12-27 14:25:16 +01:00
99755d40fc update 2025-12-27 13:10:09 +01:00
1a3927e689 Logging changed 2025-12-27 13:05:22 +01:00
a97e77a370 Fixed SED command 2025-12-27 12:58:40 +01:00
f072d0608c update 2025-12-27 12:52:09 +01:00
62d0671f03 Fixed missing variable 2025-12-27 12:51:52 +01:00
4f1d453e9e More accessible url variables 2025-12-27 12:34:17 +01:00
d1da40494b Log view function extended 2025-12-27 12:07:28 +01:00
9586095f86 Log View added; Removal extended 2025-12-27 11:53:59 +01:00
f42029b0f6 Log view function added 2025-12-27 11:53:18 +01:00
57c0770950 Fixed missing variable 2025-12-27 11:01:30 +01:00
6dccf9c1e4 Remote script check simplified; Icon added to desktop notification 2025-12-27 10:51:11 +01:00
2f8d7b8246 Remote script check simplified 2025-12-27 10:50:45 +01:00
69378db024 update 2025-12-27 00:01:25 +01:00
e394371b2c update 2025-12-26 23:52:12 +01:00
a03f59d3ee Launcher option added 2025-12-26 23:46:17 +01:00
5ad81a5997 Desktop notifications added 2025-12-26 23:34:50 +01:00
8 changed files with 924 additions and 539 deletions

3
.gitignore vendored Normal file
View file

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

102
README.md
View file

@ -1,19 +1,93 @@
# Helium Bowser installer & updater # Helium Bowser 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.
With "little" tinkering it should be possible to apply this script to install, update & configure many kinds of releases from source, like Debian packages, AppImages, binaries, etc...
## Usage
### Help
```sh
./helium_helper.sh -h
```
---
### First Install
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
```
Run script with install parameter _-i_
- Default install directory = `$HOME/.apps/Helium`
```sh
./helium_helper.sh -i
```
**OPTIONAL** : Add alias to `.shellrc` | _working in zsh, bash & fish_
- Default alias = `update-helium`
```sh
./helium_helper.sh -a
```
---
### 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.
**Terminal**
Updating can also be done by running:
- Update Helium Browser
```sh
./helium_helper.sh -u
```
- Update Helium Helper
```sh
./helium_helper.sh -S
```
---
### Backing up
Backing up, by default, pulls all important files, folders & configuration and compresses an archive, which is stored in `$HOME/.apps/Helium/assets`
- Default backup
```sh
./helium_helper.sh -b
```
- Backup to custom path
```sh
./helium_helper.sh -b </PATH/TO/DESTINATION>
```
**NOTE:** The backup path specified won't be overridden within the script yet. Working on it...
**Since this script is interactive, it doesn't keep logs.**
## Overview ## Overview
### Helium_Helper.sh ### Helium_Helper.sh
- Interactive installer and updater script - Interactive installer, updater & configuration script
- Installs to `/home/<USER>/.apps/Helium` | changeable in line 28 `INSTALL_PATH` - Installs to `$HOME/.apps/Helium` | changeable in line 32 `INSTALL_PATH`
- Assumes: - Assumes:
- Presence of `/home/<USER>/.apps/Helium` when updating | changeable in line 28 `INSTALL_PATH` - Presence of `$HOME/.apps/Helium` when updating | changeable in line 32 `INSTALL_PATH`
- Executable named `Helium.AppImage` | for convenience so launchers don't have to be edited at each update - Executable named `Helium.AppImage`
- Keeps prior AppImage as `Helium.old` which will be replaced at every update - Keeps backup archives from
- Adds desktop launcher to `/home/<USER>/.local/share/applications` - `Helium.AppImage`
- `helium_helper.sh`
### Helium_Auto_Update.sh - `helium_launcher_update.sh`
- Automatic updater script - `Helium.desktop`
- Installs to `/home/<USER>/.apps/Helium` | changeable in line 8 `INSTALL_PATH` - `net.imput.helium`
- Adds desktop launcher to `$HOME/.local/share/applications`
- Adds options to launcher which are run by `helium_launcher_updater.sh`
- Update Helium
- Update Script
- View Log
- Run `helium_helper.sh -h` for help
---
### Helium_Launcher_Update.sh
- Update Helium from launcher
- Assumes: - Assumes:
- Presence of `/home/<USER>/.apps/Helium` when updating | changeable in line 8 `INSTALL_PATH` - Presence of `$HOME/.apps/Helium` when updating | changeable in line 22 `INSTALL_PATH`
- Executable named `helium-browser.AppImage` | for convenience so launchers don't have to be edited at each update - Executable named `Helium.AppImage`
- Loggs to `/home/<USER>/.apps/Helium/updateLog` - Loggs to `$HOME/.apps/Helium/assets/logs`
- Keeps prior AppImage as `helium-browser.OldAppImage` which will be replaced at every update - Keeps backup archives from
- `Helium.AppImage`
- `helium_helper.sh`
- `helium_launcher_update.sh`
- `Helium.desktop`
- `net.imput.helium`
- Run `helium_launcher_update.sh -h` for help
&nbsp;

View file

@ -11,7 +11,7 @@ Icon=%ICON_LOCATION%
Type=Application Type=Application
Categories=Network;WebBrowser; Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https; MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
Actions=new-window;new-private-window;update; Actions=new-window;new-private-window;update;update-script;show-log;
X-AppImage-Version=%APP_VERSION% X-AppImage-Version=%APP_VERSION%
[Desktop Action new-window] [Desktop Action new-window]
@ -24,4 +24,12 @@ Exec=%APP_LOCATION% --incognito
[Desktop Action update] [Desktop Action update]
Name=Update Helium Name=Update Helium
Exec=%AUTO_UPDATE_SCRIPT% Exec=%QUIET_UPDATE_SCRIPT%
[Desktop Action update-script]
Name=Update Helium Helper
Exec=%SCRIPT_UPDATE%
[Desktop Action show-log]
Name=Show Update Log
Exec=%OPEN_LOG_EDITOR%

View file

@ -0,0 +1,3 @@
on:
pull_requests:
pull_request_target:

View file

@ -1,235 +0,0 @@
#!/bin/bash
# HELIUM BOWSER AUTO UPDATE SCRIPT WITH LOGGING
########## PREREQUISITES ###########
set -e
## GLOBAL VARIABLES
APP_NAME="Helium"
APP_NAME_LONG="Helium Web Browser"
SOURCE="GitHub"
SCRIPT_NAME="$APP_NAME silent updater"
SCRIPT_FILE_NAME="helium_auto_update.sh"
SCRIPT_VERSION="0.5.4"
ALIAS="auto-update-helium"
## LOCATIONS
TMP=/tmp/$APP_NAME
INSTALL_PATH=$HOME/.apps/$APP_NAME
CONFIG_PATH=$INSTALL_PATH/assets
BACKUP_PATH=$INSTALL_PATH/assets/backup
LOG_PATH=$INSTALL_PATH/assets/logs
LOG=$LOG_PATH/log
LAUNCHER_PATH=$HOME/.local/share/applications
SCRIPT_PATH=$HOME/.local/bin
DATE=$(date)
########## FUNCTIONS ###########
### DEPENDENCIES
cmd_query() {
local PACKAGE="$1"
if ! command -v "$PACKAGE" >/dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps
fi
}
dependency_check () {
DEPENDENCIES=("curl" "wget")
mkdir -p $TMP
for PACKAGE in "${DEPENDENCIES[@]}" ; do
cmd_query "$PACKAGE"
done
if ! [ -d "$LOG_PATH" ] ; then
mkdir -p $LOG_PATH
echo "${DATE} | Log created" >> $LOG
fi
if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps)
echo "${DATE} | Failed to update - missing dependencies : $MISSING" >> $LOG
exit_clean
fi
if ! [ -d "$INSTALL_PATH" ] ; then
mkdir -p $INSTALL_PATH
echo "${DATE} | Failed to update - $APP_NAME installation path not present - But created for logging" >> $LOG
exit
elif ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then
echo "${DATE} | Failed to update - Local $APP_NAME AppImage not found" >> $LOG
exit
fi
}
### UPDATE SCRIPT
remote_script_check() {
REMOTE_SCRIPT_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/$SCRIPT_FILE_NAME
mkdir -p $TMP
wget -P $TMP $REMOTE_SCRIPT_URL -q
chmod +x $TMP/$SCRIPT_FILE_NAME
}
update_script() {
remote_script_check
### CHECK FOR LOCAL SCRIPT
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
echo "${DATE} | Failed to update script - local file not found" >> $LOG
fi
REMOTE_SCRIPT_VERSION=$($TMP/$SCRIPT_FILE_NAME -s | awk '{print $8}' | tr -d '\n' )
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$SCRIPT_VERSION" ] ; then
echo "${DATE} | Failed to update script - Empty version tag --> local" >> $LOG
elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then
echo "${DATE} | Failed to update script - Empty version tag --> $SOURCE" >> $LOG
fi
### COMPARE LOCAL & REMOTE VERSION
SCRIPT_VERSION_NUM=$(echo $SCRIPT_VERSION | tr -d .)
REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .)
if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then
:
elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then
mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH
echo "${DATE} | Script updated" >> $LOG
else
echo "${DATE} | Failed to update - Malformed version tags" >> $LOG
fi
}
### UPDATE
update_helium() {
#update_script ### NEEDS REVIEW
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}')
GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}')
### CHECK FOR EMPTY VERSION TAGS
if [[ -z "$GIT_VERSION" ]] ; then
echo "${DATE} | Failed to update - Empty version tag --> $SOURCE" >> $LOG
exit
elif [[ -z "$LOCAL_VERSION" ]] ; then
echo "${DATE} | Failed to update - Empty version tag --> LOCAL" >> $LOG
exit
fi
### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .)
if [ "$GIT_VERSION" == "$LOCAL_VERSION" ] ; then
:
elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}')
GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
mkdir -p $TMP $BACKUP_PATH
wget -P $TMP $GIT_URL -q --show-progress
chmod +x $TMP/$GIT_FILENAME
if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then
rm $BACKUP_PATH/$APP_NAME.old
fi
mv $INSTALL_PATH/$APP_NAME.AppImage $BACKUP_PATH/$APP_NAME.old
mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage
cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old
sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
echo "${DATE} | $APP_NAME updated to ${GIT_VERSION}" >> $LOG
else
echo "${DATE} | Failed to update - Version tags malformed" >> $LOG
exit
fi
}
### SCRIPT VERSION
script_version() {
echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version :${CRS} $SCRIPT_VERSION\n"
exit
}
### HELP
help() {
echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n"
echo -e "$APP_NAME_LONG automatic updater script\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -a | -s | -h ]\n"
echo -e "Options:\n"
echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME ${YEL}--> Working with zsh${CRS}"
echo -e "\t-s\tShow script version"
echo -e "\t-h\tPrint this help page.\n"
echo -e "Configured locations:\n"
echo -e "\t${CYN}${INSTALL_PATH}${CRS}\t\tInstall location"
echo -e "\t${CYN}${LAUNCHER_PATH}${CRS}\tLauncher location"
echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n"
}
### EXIT CLEAN
exit_clean() {
if [ -d "$TMP" ] ; then
rm -rf $TMP
fi
exit
}
########## MAIN ##########
## GET OPTIONS
while getopts ":a,:s,:h" OPTION ; do
case $OPTION in
a)
add_alias
exit ;;
s)
script_version
exit ;;
h)
help
exit ;;
*)
echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}"
help
exit ;;
esac
done
## DEPENDENCY CHECK
dependency_check
## UPDATE
update_helium
## CLEAN
exit_clean

View file

@ -1,7 +1,5 @@
#!/bin/bash #!/bin/bash
# Helium BOWSER INSTALL & UPDATE SCRIPT ---> INTERACTIVE # Helium BOWSER INSTALL & UPDATE SCRIPT ---> INTERACTIVE
########## PREREQUISITES ########### ########## PREREQUISITES ###########
set -e set -e
@ -11,43 +9,52 @@ YEL="\e[0;33m"
RED="\e[0;31m" RED="\e[0;31m"
GRN="\e[0;32m" GRN="\e[0;32m"
LCY="\e[1;36m" LCY="\e[1;36m"
WHT="\e[1;37m"
CRS="\e[0m" CRS="\e[0m"
## GLOBAL VARIABLES ## GLOBAL VARIABLES
APP_NAME="Helium" APP_NAME="Helium"
APP_NAME_LONG="Helium Web Browser" APP_NAME_LONG="Helium Web Browser"
SOURCE="GitHub" FILE_EXTENSION="AppImage"
APP_SOURCE="GitHub"
ARCH_OVERRIDE=""
BACKUP_METHOD="full"
BACKUP_COMPRESSION_OVERRIDE=""
SCRIPT_NAME="$APP_NAME Helper Script" SCRIPT_NAME="$APP_NAME Helper Script"
SCRIPT_FILE_NAME="helium_helper.sh" SCRIPT_FILE_NAME="helium_helper.sh"
AUTO_SCRIPT_FILE_NAME="helium_auto_update.sh" AUTO_SCRIPT_FILE_NAME="helium_launcher_update.sh"
SCRIPT_VERSION="0.5.5" SCRIPT_VERSION="0.5.9.1"
ALIAS="update-helium" ALIAS="update-helium"
DATE=$(date +"%d%m%y")
## LOCATIONS ## LOCATIONS
TMP=/tmp/$APP_NAME TMP=/tmp/$APP_NAME
INSTALL_PATH=$HOME/.apps/$APP_NAME INSTALL_PATH=$HOME/.apps/$APP_NAME
CONFIG_PATH=$INSTALL_PATH/assets APP_CONFIG_PATH=$HOME/.config/net.imput.helium
BACKUP_PATH=$INSTALL_PATH/assets/backup ASSET_PATH=$INSTALL_PATH/assets
LOG_PATH=$INSTALL_PATH/assets/logs BACKUP_PATH=$ASSET_PATH/backup
LOG_PATH=$ASSET_PATH/logs
LOG=$LOG_PATH/log LOG=$LOG_PATH/log
LAUNCHER_PATH=$HOME/.local/share/applications LAUNCHER_PATH=$HOME/.local/share/applications
SCRIPT_PATH=$HOME/.local/bin SCRIPT_PATH=$HOME/.local/bin
#PROFILE=$HOME/.profile ### for AUTO UPDATE
## REMOTE LOCATIONS
REMOTE_REPO_BRANCH="stable"
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 ### DEPENDENCIES
cmd_query() { cmd_query() {
local PACKAGE="$1" if ! command -v $PACKAGE > /dev/null 2>&1 ; then
if ! command -v "$PACKAGE" >/dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps echo " - $PACKAGE" >> $TMP/missingDeps
fi fi
} }
dependency_check () { dependency_check () {
DEPENDENCIES=("curl" "wget") DEPENDENCIES=("curl" "wget" "tar")
mkdir -p $TMP mkdir -p $TMP
for PACKAGE in "${DEPENDENCIES[@]}" ; do for PACKAGE in "${DEPENDENCIES[@]}" ; do
@ -57,60 +64,92 @@ dependency_check () {
if [ -f "$TMP/missingDeps" ] ; then if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps) MISSING=$(cat $TMP/missingDeps)
echo -e "\n ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}" echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}\n"
exit_clean exit_clean
fi
}
### 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
shell_query "$SHELL_OPTION"
done
}
### ARCH CHECK
arch_check() {
if [ "$ARCH_OVERRIDE" ] ; then
ARCH=$ARCH_OVERRIDE
else
ARCH=$(uname -m)
if [ "$ARCH" == "aarch64" ] ; then
ARCH="arm64"
elif [ "$ARCH" == "amd64" ] ; then
ARCH="x86_64"
fi
fi
if ! [[ "$ARCH" == "arm64" || "$ARCH" == "x86_64" ]] ; then
echo -e "\n ${CYN}$ARCH ${RED}unsupported! Only ${CYN}x86_68 ${RED}or ${CYN}arm64 ${RED}architecture are supported!${CRS}\n"
exit
fi fi
} }
### CHECK LOCAL INSTALL ### CHECK LOCAL INSTALL
local_check() { local_check() {
if ! [ -d "$INSTALL_PATH" ] ; then if ! [ -d "$INSTALL_PATH" ] ; then
echo -e "\n ${RED}$APP_NAME_LONG directory not found!${CRS}" echo -e "\n ${YEL}$APP_NAME_LONG directory not found!${CRS}\n"
install_helium install_application
exit exit
elif ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e "\n ${RED}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.AppImage${RED}!${CRS}" echo -e "\n ${YEL}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.$FILE_EXTENSION${YEL}!${CRS}\n"
install_helium install_application
exit exit
fi fi
} }
### INSTALL ### INSTALL
install_helium() { install_application() {
if [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e "\n ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}" echo -e " ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}"
update_helium update_application
exit exit
fi fi
while true ; do while true ; do
read -p " Download and install $APP_NAME_LONG from $SOURCE? (Y/n) : " CONFIRM_INSTALL read -p " Download and install $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM_INSTALL
echo
if [[ "$CONFIRM_INSTALL" == "" || "$CONFIRM_INSTALL" == "y" || "$CONFIRM_INSTALL" == "Y" ]] ; then if [[ "$CONFIRM_INSTALL" == "" || "$CONFIRM_INSTALL" == "y" || "$CONFIRM_INSTALL" == "Y" ]] ; then
GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}')
GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
wget -P $TMP $GIT_URL -q --show-progress echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..."
chmod +x $TMP/$GIT_FILENAME wget -P $TMP $DOWNLOAD_URL -q
chmod +x $TMP/$APP_SOURCE_FILENAME
mkdir -p $INSTALL_PATH mkdir -p $INSTALL_PATH
mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
add_launcher add_launcher
echo -e "\n ${GRN}$APP_NAME_LONG is installed!${CRS}\n" echo -e "\n ${GRN}$APP_NAME_LONG is installed!${CRS}\n"
break break
elif [[ "$CONFIRM_INSTALL" == "n" || "$CONFIRM_INSTALL" == "N" ]] ; then elif [[ "$CONFIRM_INSTALL" == "n" || "$CONFIRM_INSTALL" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}" echo -e "\n ${RED}Cancelled!${CRS}\n"
break break
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi fi
done done
} }
@ -119,31 +158,35 @@ add_launcher() {
if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then
echo -e "\n ${YEL}${APP_NAME}.desktop already exists!${CRS}" echo -e "\n ${YEL}${APP_NAME}.desktop already exists!${CRS}"
elif [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then elif [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
while true ; do while true ; do
echo echo
read -p " Add $APP_NAME_LONG launcher to $LAUNCHER_PATH? (Y/n) : " CONFIRM_LAUNCHER read -p " Add $APP_NAME_LONG launcher to $LAUNCHER_PATH? (Y/n) : " CONFIRM_LAUNCHER
if [[ "$CONFIRM_LAUNCHER" == "" || "$CONFIRM_LAUNCHER" == "y" || "$CONFIRM_LAUNCHER" == "Y" ]] ; then if [[ "$CONFIRM_LAUNCHER" == "" || "$CONFIRM_LAUNCHER" == "y" || "$CONFIRM_LAUNCHER" == "Y" ]] ; then
LAUNCHER_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/assets/launcher/helium.desktop.template LAUNCHER_URL=$REMOTE_REPO_URL/assets/launcher/helium.desktop.template
ICON_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/assets/icon/helium.png ICON_URL=$REMOTE_REPO_URL/assets/icon/helium.png
AUTO_SCRIPT_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/$AUTO_SCRIPT_FILE_NAME AUTO_SCRIPT_URL=$REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
mkdir -p $LAUNCHER_PATH $SCRIPT_PATH $BACKUP_PATH $CONFIG_PATH/icon mkdir -p $LAUNCHER_PATH $SCRIPT_PATH $BACKUP_PATH $ASSET_PATH/icon
if ! [ -f "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" ] ; then if ! [ -f "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" ] ; then
wget -P $TMP $AUTO_SCRIPT_URL -q --show-progress echo -e "\n - Downloading ${CYN}$AUTO_SCRIPT_FILE_NAME${CRS}..."
wget -P $TMP $AUTO_SCRIPT_URL -q
chmod +x $TMP/$AUTO_SCRIPT_FILE_NAME chmod +x $TMP/$AUTO_SCRIPT_FILE_NAME
mv $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH mv $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH
fi fi
wget -P $TMP $LAUNCHER_URL -q --show-progress echo -e "\n - Downloading ${CYN}launcher files${CRS}..."
wget -P $TMP $ICON_URL -q --show-progress wget -P $TMP $LAUNCHER_URL -q
sed -i "s|%APP_LOCATION%|$INSTALL_PATH/$APP_NAME.AppImage|" $TMP/helium.desktop.template wget -P $TMP $ICON_URL -q
sed -i "s|%ICON_LOCATION%|$CONFIG_PATH/icon/helium.png|" $TMP/helium.desktop.template sed -i "s|%APP_LOCATION%|$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION|" $TMP/helium.desktop.template
sed -i "s|%ICON_LOCATION%|$ASSET_PATH/icon/helium.png|" $TMP/helium.desktop.template
sed -i "s|%APP_VERSION%|$LOCAL_VERSION|" $TMP/helium.desktop.template sed -i "s|%APP_VERSION%|$LOCAL_VERSION|" $TMP/helium.desktop.template
sed -i "s|%AUTO_UPDATE_SCRIPT%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME|" $TMP/helium.desktop.template sed -i "s|%QUIET_UPDATE_SCRIPT%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME|" $TMP/helium.desktop.template
sed -i "s|%SCRIPT_UPDATE%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME -S|" $TMP/helium.desktop.template
sed -i "s|%OPEN_LOG_EDITOR%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME -L|" $TMP/helium.desktop.template
mv $TMP/helium.desktop.template $LAUNCHER_PATH/$APP_NAME.desktop mv $TMP/helium.desktop.template $LAUNCHER_PATH/$APP_NAME.desktop
mv $TMP/helium.png $CONFIG_PATH/icon mv $TMP/helium.png $ASSET_PATH/icon
echo -e "\n ${GRN}$APP_NAME_LONG launcher is set up!${CRS}" echo -e "\n ${GRN}$APP_NAME_LONG launcher is set up!${CRS}"
break break
@ -153,156 +196,331 @@ add_launcher() {
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e " ${YEL}Invalid response!${CRS}\n"
fi fi
done done
else else
echo -e "\n ${RED}$APP_NAME_LONG AppImage not found! Can't add launcher...${CRS}" echo -e "\n ${RED}$APP_NAME_LONG AppImage not found! Can't add launcher...${CRS}"
install_helium install_application
exit exit
fi fi
} }
### ALIAS ### ALIAS
add_alias() { ### WORKS BUT NEEDS WORK add_alias() {
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
mkdir -p $SCRIPT_PATH mkdir -p $SCRIPT_PATH
wget -P $TMP $SCRIPT_URL -q wget -P $TMP $REMOTE_SCRIPT_URL -q
chmod +x $TMP/$SCRIPT_FILE_NAME chmod +x $TMP/$SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH
fi fi
if [ -f "$HOME/.zshrc" ] ; then if [ "$ACTIVE_SHELL" == "zsh" ] ; then
if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.zshrc" echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.zshrc${CRS}\n"
exit
fi
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.zshrc"
elif [ -f "$HOME/.bashrc" ] ; then
if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.bashrc"
exit
fi
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.bashrc"
else else
echo -e "\n ${RED}No .shellrc file found!${CRS}" echo "### $APP_NAME_LONG Alias zsh ###" >> $HOME/.zshrc
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.zshrc${CRS}\n"
fi
elif [ "$ACTIVE_SHELL" == "bash" ] ; then
if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.bashrc${CRS}\n"
else
echo "### $APP_NAME_LONG Alias bash ###" >> $HOME/.bashrc
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.bashrc
echo >> $HOME/.bashrc
echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.bashrc${CRS}\n"
fi
elif [ "$ACTIVE_SHELL" == "fish" ] ; then
if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.config/fish/config.fish${CRS}\n"
else
echo "### $APP_NAME_LONG Alias FISH ###" > $HOME/.config/fish/$ALIAS.fish
echo >> $HOME/.config/fish/$ALIAS.fish
echo "function $ALIAS" >> $HOME/.config/fish/$ALIAS.fish
echo " $SCRIPT_PATH/$SCRIPT_FILE_NAME \$argv" >> $HOME/.config/fish/$ALIAS.fish
echo "end" >> $HOME/.config/fish/$ALIAS.fish
echo >> $HOME/.config/fish/$ALIAS.fish
echo "source $HOME/.config/fish/$ALIAS.fish" >> $HOME/.config/fish/config.fish
echo -e "\n ${LCY}$ALIAS ${CRS}added to ${CYN}$HOME/.config/fish/config.fish${CRS}\n"
fi
else
echo -e "\n ${LCY}$ACTIVE_SHELL${RED}shell is not yet supported!${CRS}\n"
echo -e " ${CRS}Working implementation are available for bash, zsh & fish!${CRS}\n"
fi fi
} }
### UPDATE ### UPDATE
update_helium() { update_application() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}') APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}')
### CHECK FOR EMPTY VERSION TAGS ### CHECK FOR EMPTY VERSION TAGS
if [ -z "$GIT_VERSION" ] ; then if [ -z "$APP_SOURCE_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}$SOURCE${RED}! Can't compare, exiting...${CRS}" echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}"
exit exit
elif [ -z "$LOCAL_VERSION" ] ; then 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 AppImage${RED}! Can't compare, exiting...${CRS}"
exit exit
fi fi
### COMPARE LOCAL & REMOTE VERSION ### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .) APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
if [ "$GIT_VERSION" == "$LOCAL_VERSION" ] ; then if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
echo -e "\n ${GRN}$APP_NAME_LONG is already up-to-date!${CRS}\n" echo -e "\n ${GRN}$APP_NAME_LONG is already up-to-date!${CRS}\n"
elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n" echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" app_version_info
echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n"
while true ; do while true ; do
read -p " Download and update $APP_NAME_LONG from $SOURCE? (Y/n) : " CONFIRM read -p " Download and update $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM
echo
if [[ "$CONFIRM" == "" || "$CONFIRM" == "y" || "$CONFIRM" == "Y" ]] ; then if [[ "$CONFIRM" == "" || "$CONFIRM" == "y" || "$CONFIRM" == "Y" ]] ; then
GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}')
GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
mkdir -p $TMP $BACKUP_PATH mkdir -p $TMP
wget -P $TMP $GIT_URL -q --show-progress echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..."
chmod +x $TMP/$GIT_FILENAME wget -P $TMP $DOWNLOAD_URL -q
if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then ${BACKUP_METHOD}_backup
rm $BACKUP_PATH/$APP_NAME.old chmod +x $TMP/$APP_SOURCE_FILENAME
fi mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
mv $INSTALL_PATH/$APP_NAME.AppImage $BACKUP_PATH/$APP_NAME.old sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage echo -e " ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n"
cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old
sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date !${CRS}\n"
break break
elif [[ "$CONFIRM" == "n" || "$CONFIRM" == "N" ]] ; then elif [[ "$CONFIRM" == "n" || "$CONFIRM" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}" echo -e "\n ${RED}Cancelled!${CRS}\n"
exit exit
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi fi
done done
else else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" app_version_info
echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n"
echo -e " ${RED}Update failed... Exiting...${CRS}\n" echo -e " ${RED}Update failed... Exiting...${CRS}\n"
exit exit
fi fi
} }
### AUTOMATIC UPDATE --> TO DO ### BACKUP
auto_update() { call_backup() {
if ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then if [ -f $BACKUP_PATH\/$APP_NAME\.$BACKUP_METHOD\.backup_* ] ; then
echo -e "\n ${RED}$APP_NAME AppImage not found! Can't add auto update script...${CRS}" echo -e "\n ${CYN}A $BACKUP_METHOD backup already exists!${CRS}\n"
exit
while true ; do
read -p " Overwrite backup? (y/N) : " OVERWRITE_BACKUP
if [[ "$OVERWRITE_BACKUP" == "" || "$OVERWRITE_BACKUP" == "n" || "$OVERWRITE_BACKUP" == "N" ]] ; then
echo -e "\n ${YEL}Skipping backup process...${CRS}\n"
break
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 else
echo -e "\n ${RED}Not implemented yet...${CRS}" echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
else
${BACKUP_METHOD}_backup
fi
}
backup_file_collector() {
for BACKUP_ITEM in ${BACKUPABLE[@]} ; do
if [ -d "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp -r $BACKUP_ITEM $TMP/backup
elif [ -f "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp $BACKUP_ITEM $TMP/backup
fi
done
}
script_backup() {
if [ -d "$SCRIPT_PATH" ] ; then
BACKUPABLE=("$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
app_backup() {
if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
config_backup() {
if [[ -d "$LAUNCHER_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
full_backup() {
if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$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")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
pack_backup() {
if [ -d "$TMP/backup" ] ; then
CWD=$(pwd)
cd $TMP/backup
if [[ -f "*.sh" ]] ; then
chmod -x *.sh
elif [[ -f "*.$FILE_EXTENSION" ]] ; then
chmod -x *.$FILE_EXTENSION
fi
if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE
else
COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip")
until [ "$BACKUP_COMPRESSION" ] ; do
for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do
if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then
BACKUP_COMPRESSION=$COMPRESSION_TYPE
break
fi
done
done
fi
echo -e "\n - ${CRS}Packing backup archive with ${CYN}$BACKUP_COMPRESSION${CRS}...${CRS}\n"
if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
pbzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
gzip $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.gz $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
bzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
zip -r $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.zip $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar > /dev/null 2>&1
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.zip $BACKUP_PATH
cd $TMP && rm -rf backup
else
echo -e " ${YEL}No supported compression method detected! Copying backup uncompressed...${CRS}\n"
mkdir -p $BACKUP_PATH
mv $TMP/backup $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_$DATE
cd $TMP && rm -rf backup
fi
echo -e " - ${CRS}Backup stored in ${CYN}$BACKUP_PATH${CRS}...${CRS}\n"
cd $CWD
fi fi
} }
### REMOVE ### REMOVE
remove_helium() { remove_application() {
if [ -d "$INSTALL_PATH" ] ; then if [ -d "$INSTALL_PATH" ] ; then
while true ; do while true ; do
read -p " Remove $APP_NAME_LONG incl. backups and launcher? (Y/n) : " CONFIRM_REMOVE read -p " Remove $APP_NAME_LONG incl. backups, configuration and launcher? (Y/n) : " CONFIRM_REMOVE
if [[ "$CONFIRM_REMOVE" == "" || "$CONFIRM_REMOVE" == "y" || "$CONFIRM_REMOVE" == "Y" ]] ; then if [[ "$CONFIRM_REMOVE" == "" || "$CONFIRM_REMOVE" == "y" || "$CONFIRM_REMOVE" == "Y" ]] ; then
rm -rf $INSTALL_PATH REMOVABLE=("$INSTALL_PATH" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME")
if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then echo -e "\n - ${CRS}Removing ${CYN}$APP_NAME_LONG${CRS} files, directories and configuration...${CRS}"
rm $LAUNCHER_PATH/$APP_NAME.desktop
for RM_PATH in "${REMOVABLE[@]}" ; do
if [[ -f "$RM_PATH" || -d "$RM_PATH" ]] ; then
rm -rf "$RM_PATH"
fi
done
shell_check
if [ "$ACTIVE_SHELL" == "zsh" ] ; then
if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
sed -i "/$APP_NAME_LONG/d" $HOME/.zshrc
sed -i "/$ALIAS/d" $HOME/.zshrc
echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi fi
if [ -f "$HOME/.zshrc" ] ; then elif [ "$ACTIVE_SHELL" == "bash" ] ; then
sed -i "s|$ALIAS|d|" $HOME/.zshrc if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
sed -i "/$APP_NAME_LONG/d" $HOME/.bashrc
elif [ -f "$HOME/.bashrc" ] ; then sed -i "/$ALIAS/d" $HOME/.bashrc
sed -i "s|$ALIAS|d|" $HOME/.bashrc echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi fi
echo -e "\n ${RED}$APP_NAME_LONG removed!${CRS}" elif [ "$ACTIVE_SHELL" == "fish" ] ; then
exit if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
sed -i "/$ALIAS/d" $HOME/.config/fish/config.fish
rm $HOME/.config/fish/$ALIAS.fish
echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi
fi
echo -e "\n ${YEL}$APP_NAME_LONG removed!${CRS}\n"
break
elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}" echo -e " ${RED}Cancelled!${CRS}"
@ -310,37 +528,28 @@ remove_helium() {
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e " ${YEL}Invalid response!${CRS}\n"
fi fi
done done
else else
echo -e "\n ${RED}Can't remove $APP_NAME_LONG! ${YEL}$INSTALL_PATH ${RED}directory not found...${CRS}" echo -e " ${RED}Can't remove $APP_NAME_LONG! ${CYN}$INSTALL_PATH ${RED}directory not found...${CRS}\n"
exit exit
fi fi
} }
### SCRIPT VERSION ### SCRIPT VERSION
script_version() { script_version() {
echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version :${CRS} $SCRIPT_VERSION\n" echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${CRS}$SCRIPT_VERSION\n"
exit
} }
### UPDATE SCRIPT ### UPDATE SCRIPT
remote_script_check() { scrip_version_info() {
REMOTE_SCRIPT_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/$SCRIPT_FILE_NAME echo -e " - ${CYN}Local Version :\t${CRS}$SCRIPT_VERSION"
mkdir -p $TMP echo -e " - ${CYN}Remote Version :\t${CRS}$REMOTE_SCRIPT_VERSION"
wget -P $TMP $REMOTE_SCRIPT_URL -q echo -e " - ${CYN}Update Branch :\t${CRS}$REMOTE_REPO_BRANCH\n"
chmod +x $TMP/$SCRIPT_FILE_NAME
} }
update_script() { update_script() {
remote_script_check
### CHECK FOR LOCAL SCRIPT
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
echo -e "\n ${YEL}$SCRIPT_FILE_NAME not found...${CRS}" echo -e "\n ${YEL}$SCRIPT_FILE_NAME not found...${CRS}"
@ -349,28 +558,26 @@ update_script() {
read -p " Copy script to $SCRIPT_PATH? (Y/n) : " CONFIRM_SCRIPT_INSTALL 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 if [[ "$CONFIRM_SCRIPT_INSTALL" == "" || "$CONFIRM_SCRIPT_INSTALL" == "y" || "$CONFIRM_SCRIPT_INSTALL" == "Y" ]] ; then
if ! [ -d "$SCRIPT_PATH" ] ; then
mkdir -p $SCRIPT_PATH mkdir -p $SCRIPT_PATH
fi mkdir -p $TMP
wget -P $TMP $REMOTE_SCRIPT_URL -q
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH 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}"
exit_clean break
elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}" echo -e " ${RED}Cancelled!${CRS}\n"
exit exit
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e " ${YEL}Invalid response!${CRS}\n"
fi fi
done done
fi fi
REMOTE_SCRIPT_VERSION=$($TMP/$SCRIPT_FILE_NAME -s | awk '{print $8}' | tr -d '\n' ) REMOTE_SCRIPT_VERSION=$(curl -s $REMOTE_SCRIPT_URL | grep -m 1 "SCRIPT_VERSION" | tr -d 'SCRIPT_VERSION="')
### CHECK FOR EMPTY VERSION TAGS ### CHECK FOR EMPTY VERSION TAGS
if [ -z "$SCRIPT_VERSION" ] ; then if [ -z "$SCRIPT_VERSION" ] ; then
@ -380,7 +587,6 @@ update_script() {
elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then 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}"
exit exit
fi fi
### COMPARE LOCAL & REMOTE VERSION ### COMPARE LOCAL & REMOTE VERSION
@ -391,9 +597,8 @@ update_script() {
echo -e "\n ${GRN}$SCRIPT_FILE_NAME is already up-to-date!${CRS}\n" echo -e "\n ${GRN}$SCRIPT_FILE_NAME is already up-to-date!${CRS}\n"
elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then
echo -e "\n ${YEL}$SCRIPT_FILE_NAME is updatable!${CRS}\n" echo -e "\n ${LCY}$SCRIPT_FILE_NAME is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}" scrip_version_info
echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n"
while true ; do while true ; do
read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE
@ -404,69 +609,63 @@ update_script() {
mkdir -p $BACKUP_PATH mkdir -p $BACKUP_PATH
fi fi
mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH mv $SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME $BACKUP_PATH/$AUTO_SCRIPT_FILE_NAME.old
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 " ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}" echo -e " ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}"
break break
elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}" echo -e " ${RED}Cancelled!${CRS}\n"
break break
else else
echo -e " ${YEL}Invalid response!${CRS}\n" echo -e " ${YEL}Invalid response!${CRS}\n"
fi fi
done done
else else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}" scrip_version_info
echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n"
echo -e " ${RED}Updating script failed...${CRS}\n" echo -e " ${RED}Updating script failed...${CRS}\n"
fi fi
} }
### COMPARE APPIMAGE VERSION ### COMPARE APP VERSION
compare_version() { app_version_info() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') echo -e " - ${CYN}Local Version :\t${CRS}$LOCAL_VERSION"
GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}') echo -e " - ${CYN}$APP_SOURCE Version :\t${CRS}$APP_SOURCE_VERSION\n"
}
### CHECK FOR EMPTY VERSION TAGS compare_version() {
if [ -z "$GIT_VERSION" ] ; then LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
echo -e "\n ${RED}Empty version tag from ${CYN}$SOURCE${RED}! Can't compare, exiting...${CRS}" APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}')
if [ -z "$APP_SOURCE_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}\n"
exit exit
elif [ -z "$LOCAL_VERSION" ] ; then 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 AppImage${RED}! Can't compare, exiting...${CRS}\n"
exit exit
fi fi
### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .) APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
if [ "$GIT_VERSION" == "$LOCAL_VERSION" ] ; then if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n" echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" app_version_info
echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n"
exit
elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
echo -e "\n ${YEL}$APP_NAME_LONG is updatable!${CRS}\n" echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" app_version_info
echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n"
exit
else else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" app_version_info
echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n"
echo -e " ${RED}Update failed ... Exiting ...${CRS}\n"
exit
fi fi
} }
@ -474,19 +673,19 @@ compare_version() {
help() { help() {
echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n" echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n"
echo -e "$APP_NAME_LONG installer & updater script\n" echo -e "$APP_NAME_LONG installer & updater script\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -r | -c | -s | -S | -h ]\n" # | -U | echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -b | -r | -c | -s | -S | -h ]\n"
echo -e "Options:\n" echo -e "Options:\n"
echo -e "\t-i\tDownload & install $APP_NAME_LONG from $SOURCE" echo -e "\t-i\tInstall $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-l\tCreate desktop launcher" echo -e "\t-l\tCreate desktop launcher"
echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME ${YEL}--> Partially working with zsh & bash${CRS}" echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME"
echo -e "\t-u\tDownload & update $APP_NAME_LONG from $SOURCE" echo -e "\t-u\tUpdate $APP_NAME_LONG from $APP_SOURCE"
#echo -e "\t-U\tEnable automatic updates on login ${RED}--> Not yet working${CRS}" echo -e "\t-b\tBackup $APP_NAME_LONG & configuration"
echo -e "\t-r\tRemove $APP_NAME_LONG" echo -e "\t-r\tRemove $APP_NAME_LONG"
echo -e "\t-c\tCompare local to remote version" echo -e "\t-c\tCompare local to remote version"
echo -e "\t-s\tShow script version" echo -e "\t-s\tShow script version"
echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME" echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME"
echo -e "\t-h\tPrint this help page.\n" echo -e "\t-h\tPrint this help page\n"
echo -e "Configured locations:\n" echo -e "Configured directories:\n"
echo -e "\t${CYN}${INSTALL_PATH}${CRS}\t\tInstall location" echo -e "\t${CYN}${INSTALL_PATH}${CRS}\t\tInstall location"
echo -e "\t${CYN}${LAUNCHER_PATH}${CRS}\tLauncher location" echo -e "\t${CYN}${LAUNCHER_PATH}${CRS}\tLauncher location"
echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n" echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n"
@ -496,7 +695,6 @@ help() {
exit_clean() { exit_clean() {
if [ -d "$TMP" ] ; then if [ -d "$TMP" ] ; then
rm -rf $TMP rm -rf $TMP
fi fi
exit exit
@ -505,47 +703,88 @@ exit_clean() {
########## MAIN ########## ########## MAIN ##########
## GET OPTIONS ## GET OPTIONS
while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do while getopts ":i,:l,:a,:u,: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}"
help
exit
fi
case $OPTION in case $OPTION in
i) i)
echo -e "\n ${CYN}Installing $APP_NAME_LONG...${CRS}" echo -e "\n ${YEL}Installing $APP_NAME_LONG...${CRS}\n"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [ -d "$PARAMETER" ] ; then
INSTALL_PATH=$PARAMETER
fi
done
fi
dependency_check dependency_check
install_helium arch_check
install_application
exit_clean ;; exit_clean ;;
l) l)
echo -e "\n ${CYN}Adding $APP_NAME_LONG launcher...${CRS}" echo -e "\n ${YEL}Adding $APP_NAME_LONG launcher...${CRS}"
dependency_check dependency_check
local_check local_check
add_launcher add_launcher
exit_clean ;; exit_clean ;;
a) a)
echo -e "\n ${CYN}Adding alias...${CRS}" echo -e "\n ${YEL}Adding alias...${CRS}"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [ "$PARAMETER" ] ; then
ALIAS=$PARAMETER
fi
done
fi
shell_check
add_alias add_alias
exit ;; exit ;;
u) u)
echo -e "\n ${CYN}Updating $APP_NAME_LONG...${CRS}" echo -e "\n ${YEL}Updating $APP_NAME_LONG...${CRS}"
dependency_check dependency_check
arch_check
local_check local_check
update_helium update_application
exit_clean ;; exit_clean ;;
U) b)
echo -e "\n ${CYN}Enabling automatic updates...${CRS}" echo -e "\n ${YEL}Backing up $APP_NAME_LONG...${CRS}"
dependency_check if [ "$#" -gt "1" ] ; then
local_check ALL_PARAMETER=$@
auto_update
exit_clean ;; for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [[ "$PARAMETER" == "script" || "$PARAMETER" == "config" || "$PARAMETER" == "app" || "$PARAMETER" == "full" ]] ; then
BACKUP_METHOD=$PARAMETER
elif [[ "$PARAMETER" == "pbzip2" || "$PARAMETER" == "gzip" || "$PARAMETER" == "bzip2" || "$PARAMETER" == "zip" ]] ; then
BACKUP_COMPRESSION_OVERRIDE=$PARAMETER
elif [ -d "$PARAMETER" ] ; then
BACKUP_PATH=$PARAMETER
fi
done
fi
call_backup
exit ;;
r) r)
echo -e "\n ${CYN}Removing $APP_NAME_LONG...${CRS}" echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}\n"
remove_helium remove_application
exit ;; exit ;;
c) c)
echo -e "\n ${CYN}Comparing remote to local version...${CRS}" echo -e "\n ${YEL}Comparing remote to local version...${CRS}"
dependency_check dependency_check
local_check local_check
compare_version compare_version
@ -556,7 +795,7 @@ while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do
exit ;; exit ;;
S) S)
echo -e "\n ${CYN}Updating script...${CRS}" echo -e "\n ${YEL}Updating script...${CRS}"
dependency_check dependency_check
update_script update_script
exit_clean ;; exit_clean ;;
@ -569,19 +808,18 @@ while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do
echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}" echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}"
help help
exit ;; exit ;;
esac esac
done done
## DEPENDENCY CHECK ## ENVIRONMENT CHECK
dependency_check dependency_check
arch_check
## CHECK FOR LOCAL INSTALL ## CHECK LOCAL INSTALL
local_check local_check
## UPDATE ## UPDATE
update_helium update_application
## CLEAN ## CLEAN
exit_clean exit_clean

360
helium_launcher_update.sh Executable file
View file

@ -0,0 +1,360 @@
#!/bin/bash
# HELIUM BOWSER AUTO UPDATE SCRIPT WITH LOGGING
########## PREREQUISITES ###########
set -e
## GLOBAL VARIABLES
APP_NAME="Helium"
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"
SCRIPT_VERSION="0.5.9.1"
LOG_DATE=$(date)
DATE=$(date +"%d%m%y")
## LOCATIONS
TMP=/tmp/$APP_NAME
INSTALL_PATH=$HOME/.apps/$APP_NAME
APP_CONFIG_PATH=$HOME/.config/net.imput.helium
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
ICON=$ASSET_PATH/icon/helium.png
SCRIPT_PATH=$HOME/.local/bin
## REMOTE LOCATIONS
REMOTE_REPO_BRANCH="stable"
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 ###########
### DEPENDENCIES
cmd_query() {
local PACKAGE="$1"
if ! command -v "$PACKAGE" >/dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps
fi
}
dependency_check () {
DEPENDENCIES=("curl" "wget")
mkdir -p $TMP
for PACKAGE in "${DEPENDENCIES[@]}" ; do
cmd_query "$PACKAGE"
done
if ! [ -f "$LOG" ] ; then
mkdir -p $LOG_PATH
echo "########## $APP_NAME_LONG update log ##########" >> $LOG
echo >> $LOG
echo "$LOG_DATE | Log created" >> $LOG
fi
if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps)
echo "$LOG_DATE | Failed to update - missing dependencies : $MISSING" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit_clean
fi
if ! [ -d "$INSTALL_PATH" ] ; then
mkdir -p $INSTALL_PATH
echo "$LOG_DATE | Failed to update - $APP_NAME installation path not present - But created for logging" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit
elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo "$LOG_DATE | Failed to update - Local $APP_NAME AppImage not found" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit
fi
}
### BACKUP
backup_helium() {
if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$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 BACKUP_ITEM in ${BACKUPABLE[@]} ; do
if [ -d "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp -r $BACKUP_ITEM $TMP/backup
elif [ -f "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp $BACKUP_ITEM $TMP/backup
fi
done
if [ -d "$TMP/backup" ] ; then
CWD=$(pwd)
cd $TMP/backup
chmod -x *.sh *.$FILE_EXTENSION > /dev/null 2>&1
if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE
elif ! [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip")
until [ "$BACKUP_COMPRESSION" ] ; do
for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do
if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then
BACKUP_COMPRESSION=$COMPRESSION_TYPE
break
fi
done
done
fi
if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then
tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1
pbzip2 $APP_NAME.auto_backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.auto_backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then
tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1
gzip $APP_NAME.auto_backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.auto_backup_$DATE.tar.gz $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then
tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1
bzip2 $APP_NAME.auto_backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.auto_backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then
tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1
zip -r $APP_NAME.auto_backup_$DATE.tar.zip $APP_NAME.auto_backup_$DATE.tar > /dev/null 2>&1
mkdir -p $BACKUP_PATH
mv $APP_NAME.auto_backup_$DATE.tar.zip $BACKUP_PATH
cd $TMP && rm -rf backup
else
echo "$LOG_DATE | Backup - 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
notify-send --icon="$ICON" "$NOTIFY_NAME" "Backup created"
cd $CWD
fi
else
echo "$LOG_DATE | Failed to backup - Nothing worth backing up found" >> $LOG
fi
}
### UPDATE SCRIPT
update_script() {
### CHECK FOR LOCAL SCRIPT
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
echo "$LOG_DATE | Failed to update script - local file not found" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
fi
REMOTE_SCRIPT_VERSION=$(curl -s $REMOTE_SCRIPT_URL | grep -m 1 "SCRIPT_VERSION" | tr -d 'SCRIPT_VERSION="')
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$SCRIPT_VERSION" ] ; then
echo "$LOG_DATE | Failed to update script - Empty version tag --> local" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then
echo "$LOG_DATE | Failed to update script - Empty version tag --> $APP_SOURCE" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
fi
### COMPARE LOCAL & REMOTE VERSION
SCRIPT_VERSION_NUM=$(echo $SCRIPT_VERSION | tr -d .)
REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .)
if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script is up-to-date"
elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then
mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old
mkdir -p $TMP
wget -P $TMP $REMOTE_SCRIPT_URL -q
wget -P $TMP $REMOTE_REPO_URL/$PARENT_SCRIPT_FILE_NAME -q
chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME $SCRIPT_PATH
echo "$LOG_DATE | Script updated to version $REMOTE_SCRIPT_VERSION" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script updated to version $REMOTE_SCRIPT_VERSION"
else
echo "$LOG_DATE | Failed to update - Malformed version tags" >> $LOG
echo "$LOG_DATE | Remote Version: $REMOTE_SCRIPT_VERSION" >> $LOG
echo "$LOG_DATE | Local Version: $SCRIPT_VERSION" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
fi
}
### UPDATE
update_helium() {
DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}')
APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
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 "$LOG_DATE | Failed to update - Empty version tag --> $APP_SOURCE" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details"
exit
elif [[ -z "$LOCAL_VERSION" ]] ; then
echo "$LOG_DATE | Failed to update - Empty version tag --> LOCAL" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details"
exit
fi
### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser is up-to-date"
elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
mkdir -p $TMP
wget -P $TMP $DOWNLOAD_URL -q
chmod +x $TMP/$APP_SOURCE_FILENAME
backup_helium
mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
echo "$LOG_DATE | $APP_NAME updated to version ${APP_SOURCE_VERSION}" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser updated to version $APP_SOURCE_VERSION"
else
echo "$LOG_DATE | Failed to update - Version tags malformed" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details"
exit
fi
}
### SCRIPT VERSION
script_version() {
echo -e "\n ${CYN}$APP_NAME_LONG Auto Update Script Version :${CRS} $SCRIPT_VERSION\n"
}
### SHOW LOG
show_log() {
if [ -f "$LOG" ] ; then
xdg-open $LOG
else
notify-send --icon="$ICON" "$NOTIFY_NAME" "No log created yet"
fi
}
### HELP
help() {
echo -e "\n${LCY}$SCRIPT_NAME${CRS}\n"
echo -e "$APP_NAME_LONG launcher updater script\n"
echo -e "Description: Add functionality to $APP_NAME_LONG's launcher\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -s | -S | -L | -h ]\n"
echo -e "Options:\n"
echo -e "\t-s\tShow script version"
echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME"
echo -e "\t-L\tOpen log in default text editor"
echo -e "\t-h\tPrint this help page.\n"
echo -e "Configured locations:\n"
echo -e "\t${CYN}$INSTALL_PATH${CRS}\t\tInstall location"
echo -e "\t${CYN}$LOG_PATH${CRS}\tLog location"
echo -e "\t${CYN}$LAUNCHER_PATH${CRS}\tLauncher location"
echo -e "\t${CYN}$SCRIPT_PATH${CRS}\t\t\tScript location\n"
}
### EXIT CLEAN
exit_clean() {
if [ -d "$TMP" ] ; then
rm -rf $TMP
fi
exit
}
########## MAIN ##########
## GET OPTIONS
while getopts ":a,:s,:S,:L,: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}"
help
exit
fi
case $OPTION in
S)
dependency_check
update_script
exit_clean ;;
s)
script_version
exit_clean ;;
L)
show_log
exit_clean ;;
h)
help
exit_clean ;;
*)
echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}"
help
exit_clean ;;
esac
done
## DEPENDENCY CHECK
dependency_check
## UPDATE
update_helium
## CLEAN
exit_clean

66
todo.md
View file

@ -1,66 +0,0 @@
# 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
## Add
- Internet connectivity check in [Auto Update Script](https://lab.c95.org/fr4nz/helium-helper/src/branch/main/helium_auto_update.sh)
- Auto update setup
- shell recognition missing
- Architecture detection
- Set alias --> Partially
- shell recognition missing
- Roll back from backup
- Config check
- Desktop notifications in [Auto Update Script](https://lab.c95.org/fr4nz/helium-helper/src/branch/main/helium_auto_update.sh)
- Log viewer & config editor
- Add alias remover to remover function
## 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
```