#!/bin/bash set -eu APP_NAME="simplex-chat" BIN_DIR="$HOME/.local/bin" BIN_PATH="$BIN_DIR/$APP_NAME" PLATFORM="$(uname)" if [ -n "${1:-}" ]; then RELEASE="tag/$1" DOWNLOAD="download/$1" echo "downloading SimpleX Chat $1 ..." else RELEASE=latest DOWNLOAD="latest/download" echo "downloading the latest version of SimpleX Chat ..." fi if [ $PLATFORM == "Darwin" ]; then PLATFORM="macos-x86-64" elif [ $PLATFORM == "Linux" ]; then PLATFORM="ubuntu-20_04-x86-64" else echo "Scripted installation on your platform is not supported." echo "See compiled binaries in the ${1:-latest} release: https://github.com/$APP_NAME/$APP_NAME/releases/$RELEASE" exit 1 fi # / Prepare to upgrade from v0 to v1 # Determine path of chat binary if [[ -n "$(which $APP_NAME)" ]]; then binary=$(which $APP_NAME) elif [[ -f "$BIN_PATH" ]]; then binary=$BIN_PATH else binary="" fi # If chat binary not found, check v0 initial migration and offer to abort or continue if [[ -z $binary ]]; then agent_db="$HOME/.simplex/simplex.agent.db" if [[ \ -f "$agent_db" && \ $(echo "select * from migrations;" | sqlite3 $agent_db | grep 20210101_initial) \ ]]; then echo "Warning: found SimpleX Chat database, the current version is not backwards compatible." echo "If you continue, the current version will be installed as $APP_NAME with a clean database, the old database will be preserved." while true; do read -p "Please choose to (a)bort or (c)ontinue: " yn < /dev/tty case $yn in [Aa]* ) exit 1 ;; [Cc]* ) break ;; * ) echo "Please answer 'a' or 'c'." esac done fi # If chat binary found, check version and offer to abort or continue, on continue rename chat binary elif [[ ! $($binary -h | grep v1) ]]; then echo "Warning: found a previous version of SimpleX Chat, the current version is not backwards compatible." echo "If you continue, it will be renamed to $APP_NAME-v0, and the new version will be installed as $APP_NAME with a clean database." while true; do read -p "Please choose (a)bort or (c)ontinue: " yn < /dev/tty case $yn in [Aa]* ) exit 1 ;; [Cc]* ) binary_v0="$binary-v0" mv ${binary} ${binary_v0} echo "Renamed $binary into $binary_v0" break ;; * ) echo "Please answer 'a' or 'c'." esac done fi # Prepare to upgrade from v0 to v1 / [[ ! -d $BIN_DIR ]] && mkdir -p $BIN_DIR if [ -n "$(command -v curl)" ]; then curl -L -o $BIN_PATH "https://github.com/$APP_NAME/$APP_NAME/releases/$DOWNLOAD/$APP_NAME-$PLATFORM" elif [ -n "$(command -v wget)" ]; then wget -O $BIN_PATH "https://github.com/$APP_NAME/$APP_NAME/releases/$DOWNLOAD/$APP_NAME-$PLATFORM" else echo "Cannot download $APP_NAME - please install curl or wget" exit 1 fi chmod +x $BIN_PATH echo "$APP_NAME installed successfully!" if [ -z "$(command -v $APP_NAME)" ]; then if [ -n "$($SHELL -c 'echo $ZSH_VERSION')" ]; then SHELL_FILE="$HOME/.zshrc" elif [ -n "$($SHELL -c 'echo $BASH_VERSION')" ]; then SHELL_FILE="$HOME/.bashrc" else echo "Unknown shell - cannot add $APP_NAME folder to PATH" echo "Please add $BIN_DIR to PATH variable" echo "Or you can run $APP_NAME via full path: $BIN_PATH" fi if [ -n "$SHELL_FILE" ]; then echo "export PATH=\$PATH:$BIN_DIR" >> $SHELL_FILE echo "Source your $SHELL_FILE or open a new shell and type $APP_NAME to run it" fi else echo "Type $APP_NAME in your terminal to run it" fi