-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: create a basic installer script
- Loading branch information
Showing
1 changed file
with
179 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
#!/bin/bash | ||
|
||
|
||
INSTLLATION_DIR=/usr/share/spotube | ||
DESKTOP_FILE_PATH=/usr/share/applications/spotube.desktop | ||
APP_DATA_PATH=/usr/share/appdata/spotube.appdata.xml | ||
ICON_PATH=/usr/share/icons/spotube/spotube-logo.png | ||
BIN_SYMLINK_PATH=/usr/bin/spotube | ||
|
||
TEMP_DIR=/tmp/spotube-installer | ||
VERSION="2.7.1" | ||
|
||
function spotube_help(){ | ||
# available flags are -v or --version to specify what version to download | ||
echo "Usage: ./install.sh [flags]" | ||
echo "Flags:" | ||
echo " -v, --version <version> Specify what version to download. Default: $VERSION" | ||
echo " -h, --help Show this help message" | ||
echo " -r, --remove Remove spotube from your system" | ||
exit 0 | ||
} | ||
|
||
# a function to check if a given command exists or not and returns bool | ||
function command_exists() { | ||
command -v "$@" >/dev/null 2>&1 | ||
} | ||
|
||
function install_deps(){ | ||
local DEBIAN_DEPS="curl tar mpv libappindicator3-1 gir1.2-appindicator3-0.1 libsecret-1-0 libnotify-bin libjsoncpp25" | ||
local RPM_DEPS="curl tar mpv libappindicator jsoncpp libsecret libnotify" | ||
local ARCH_DEPS="curl tar mpv libappindicator-gtk3 libsecret jsoncpp libnotify" | ||
|
||
if command_exists apt; then | ||
sudo apt install -y $DEBIAN_DEPS | ||
elif command_exists dnf; then | ||
sudo dnf install -y $RPM_DEPS | ||
elif command_exists yum; then | ||
sudo yum install -y $RPM_DEPS | ||
elif command_exists zypper; then | ||
sudo zypper install -y $RPM_DEPS | ||
elif command_exists pacman; then | ||
sudo pacman -Sy $ARCH_DEPS | ||
else | ||
echo "Your package manager is not supported by this script. Please install the dependencies manually." | ||
echo "The dependencies are: curl, tar, mpv, appindicator, libsecret, jsoncpp, libnotify" | ||
fi | ||
} | ||
|
||
function download_extract_spotube(){ | ||
local TAR_PATH=/tmp/spotube-$VERSION.tar.xz | ||
local DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/v$VERSION/spotube-linux-$VERSION-x86_64.tar.xz | ||
|
||
# check if version is nightly | ||
|
||
if [ "$VERSION" = "nightly" ]; then | ||
DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/nightly/spotube-linux-nightly-x86_64.tar.xz | ||
fi | ||
|
||
|
||
rm -rf $TEMP_DIR | ||
mkdir -p $TEMP_DIR | ||
|
||
|
||
# check if already exists downloaded file | ||
if [ -f $TAR_PATH ]; then | ||
echo "Found spotube-$VERSION.tar.xz in /tmp. Skipping download..." | ||
else | ||
echo "Downloading spotube-$VERSION.tar.xz..." | ||
curl -L $DOWNLOAD_URL -o $TAR_PATH | ||
fi | ||
|
||
# Extract the tarball | ||
tar -xf $TAR_PATH -C $TEMP_DIR | ||
|
||
# check if $TEMP_DIR empty or not | ||
|
||
if [ ! "$(ls -A $TEMP_DIR)" ]; then | ||
echo "Failed to extract the tarball. Redownloading..." | ||
rm -f $TAR_PATH | ||
curl -L $DOWNLOAD_URL -o $TAR_PATH | ||
tar -xf $TAR_PATH -C $TEMP_DIR | ||
fi | ||
|
||
# checking one last time | ||
if [ ! "$(ls -A $TEMP_DIR)" ]; then | ||
echo "Failed to extract the tarball. Aborting installation..." | ||
exit 1 | ||
fi | ||
} | ||
|
||
function install_spotube(){ | ||
# check if exists and uninstall if user allows | ||
|
||
if [ -d $INSTLLATION_DIR ]; then | ||
echo "Spotube is already installed. Do you want to uninstall it and then install? [y/N]" | ||
read -r uninstall | ||
if [ "$uninstall" = "y" ] || [ "$uninstall" = "Y" ]; then | ||
uninstall_spotube | ||
else | ||
echo "Aborting installation..." | ||
exit 1 | ||
fi | ||
fi | ||
|
||
# Move the files to /usr/share/spotube | ||
|
||
sudo mkdir -p $INSTLLATION_DIR | ||
|
||
sudo mv $TEMP_DIR/data $INSTLLATION_DIR | ||
sudo mv $TEMP_DIR/lib $INSTLLATION_DIR | ||
sudo mv $TEMP_DIR/spotube $INSTLLATION_DIR | ||
|
||
# Move the desktop file to /usr/share/applications | ||
|
||
sudo mv $TEMP_DIR/spotube.desktop $DESKTOP_FILE_PATH | ||
|
||
# Move the appdata file to /usr/share/appdata | ||
|
||
sudo mv $TEMP_DIR/com.github.KRTirtho.Spotube.appdata.xml $APP_DATA_PATH | ||
|
||
# Move the logo to /usr/share/icons/spotube | ||
|
||
sudo mkdir -p /usr/share/icons/spotube | ||
|
||
sudo mv $TEMP_DIR/spotube-logo.png $ICON_PATH | ||
|
||
# Create a symlink to /usr/bin | ||
|
||
sudo ln -s /usr/share/spotube/spotube $BIN_SYMLINK_PATH | ||
|
||
# Clean up | ||
|
||
rm -rf $TEMP_DIR | ||
|
||
echo "Spotube $VERSION has been installed successfully!" | ||
} | ||
|
||
function uninstall_spotube(){ | ||
# confirm | ||
|
||
echo "Are you sure you want to uninstall Spotube?" | ||
echo | ||
echo "This will remove following files and directories:" | ||
echo " $INSTLLATION_DIR" | ||
echo " $DESKTOP_FILE_PATH" | ||
echo " $APP_DATA_PATH" | ||
echo " $ICON_PATH" | ||
echo " $BIN_SYMLINK_PATH" | ||
echo | ||
echo "[y/N]" | ||
|
||
read -r CONFIRMATION | ||
|
||
if [[ "$CONFIRMATION" != "y" ]]; then | ||
echo "Aborting uninstallation..." | ||
exit 0 | ||
fi | ||
|
||
# remove the files | ||
|
||
|
||
sudo rm -rf $INSTLLATION_DIR $DESKTOP_FILE_PATH $APP_DATA_PATH $ICON_PATH $BIN_SYMLINK_PATH | ||
} | ||
|
||
# parse arguments -v, --version, -r, --remove, -h, --help | ||
|
||
while [[ "$#" -gt 0 ]]; do | ||
case $1 in | ||
-v|--version) VERSION="$2"; shift ;; | ||
-r|--remove) uninstall_spotube; exit 0 ;; | ||
-h|--help) spotube_help; exit 0 ;; | ||
*) echo "Unknown parameter passed: $1"; spotube_help; exit 1 ;; | ||
esac | ||
shift | ||
done | ||
|
||
install_deps | ||
download_extract_spotube | ||
install_spotube |