You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			197 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| set -e
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| # Variables
 | |
| #-----------------------------------------------------
 | |
| COLOR_RED=`tput setaf 1`
 | |
| COLOR_GREEN=`tput setaf 2`
 | |
| COLOR_YELLOW=`tput setaf 3`
 | |
| COLOR_BLUE=`tput setaf 4`
 | |
| COLOR_RESET=`tput sgr0`
 | |
| SILENT=false
 | |
| ALLOW_ROOT=false
 | |
| SHOW_CHANGELOG=false
 | |
| 
 | |
| print() {
 | |
|     if [[ "${SILENT}" == false ]] ; then
 | |
|         echo -e "$@"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| showLogo() {
 | |
|     print "${COLOR_BLUE}"
 | |
|     print "     _             _ _       "
 | |
|     print "    | | ___  _ __ | (_)_ __  "
 | |
|     print " _  | |/ _ \| '_ \| | | '_ \ "
 | |
|     print "| |_| | (_) | |_) | | | | | |"
 | |
|     print " \___/ \___/| .__/|_|_|_| |_|"
 | |
|     print "            |_|"
 | |
|     print ""
 | |
|     print "Linux Installer and Updater"
 | |
|     print "${COLOR_RESET}"
 | |
| }
 | |
| 
 | |
| showHelp() {
 | |
|     showLogo
 | |
|     print "Available Arguments:"
 | |
|     print "\t" "--help" "\t" "Show this help information" "\n"
 | |
|     print "\t" "--allow-root" "\t" "Allow the install to be run as root"
 | |
|     print "\t" "--changelog" "\t" "Show the changelog after installation"
 | |
|     print "\t" "--force" "\t" "Always download the latest version"
 | |
| 
 | |
|     if [[ ! -z $1 ]]; then
 | |
|         print "\n" "${COLOR_RED}ERROR: " "$*" "${COLOR_RESET}" "\n"
 | |
|     else
 | |
|         exit 0
 | |
|     fi
 | |
| 
 | |
| }
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| # PARSE ARGUMENTS
 | |
| #-----------------------------------------------------
 | |
| 
 | |
| optspec=":h-:"
 | |
| while getopts "${optspec}" OPT; do
 | |
|   [ "${OPT}" = " " ] && continue
 | |
|   if [ "${OPT}" = "-" ]; then   # long option: reformulate OPT and OPTARG
 | |
|     OPT="${OPTARG%%=*}"       # extract long option name
 | |
|     OPTARG="${OPTARG#$OPT}"   # extract long option argument (may be empty)
 | |
|     OPTARG="${OPTARG#=}"      # if long option argument, remove assigning `=`
 | |
|   fi
 | |
|   case "${OPT}" in
 | |
|     h | help )     showHelp ;;
 | |
|     allow-root )   ALLOW_ROOT=true ;;
 | |
|     silent )       SILENT=true ;;
 | |
|     force )        FORCE=true ;;
 | |
|     changelog )    SHOW_CHANGELOG=true ;;
 | |
|     [^\?]* )       showHelp "Illegal option --${OPT}"; exit 2 ;;
 | |
|     \? )           showHelp "Illegal option -${OPTARG}"; exit 2 ;;
 | |
|   esac
 | |
| done
 | |
| shift $((OPTIND-1)) # remove parsed options and args from $@ list
 | |
| 
 | |
| ## Check and warn if running as root.
 | |
| if [[ $EUID = 0 ]] && [[ "${ALLOW_ROOT}" != true ]]; then
 | |
|     showHelp "It is not recommended (nor necessary) to run this script as root. To do so anyway, please use '--allow-root'"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| # START
 | |
| #-----------------------------------------------------
 | |
| showLogo
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| print "Checking architecture..."
 | |
| ## uname actually gives more information than needed, but it contains all architectures (hardware and software)
 | |
| ARCHITECTURE=$(uname -a || echo "NO CHECK")
 | |
| 
 | |
| if [[ $ARCHITECTURE = "NO CHECK" ]] ; then
 | |
|   print "${COLOR_YELLOW}WARNING: Can't get system architecture, skipping check${COLOR_RESET}"
 | |
| elif [[ $ARCHITECTURE =~ .*aarch.*|.*arm.* ]] ; then
 | |
|   showHelp "Arm systems are not officially supported by Joplin, please search the forum (https://discourse.joplinapp.org/) for more information"
 | |
|   exit 1
 | |
| elif [[ $ARCHITECTURE =~ .*i386.*|.*i686.* ]] ; then
 | |
|   showHelp "32-bit systems are not supported by Joplin, please search the forum (https://discourse.joplinapp.org/) for more information"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| # Download Joplin
 | |
| #-----------------------------------------------------
 | |
| 
 | |
| # Get the latest version to download
 | |
| RELEASE_VERSION=$(wget -qO - "https://api.github.com/repos/laurent22/joplin/releases/latest" | grep -Po '"tag_name": ?"v\K.*?(?=")')
 | |
| 
 | |
| # Check if it's in the latest version
 | |
| if [[ -e ~/.joplin/VERSION ]] && [[ $(< ~/.joplin/VERSION) == "${RELEASE_VERSION}" ]]; then
 | |
|     print "${COLOR_GREEN}You already have the latest version${COLOR_RESET} ${RELEASE_VERSION} ${COLOR_GREEN}installed.${COLOR_RESET}"
 | |
|     ([[ "$FORCE" == true ]] && print "Forcing installation...") || exit 0
 | |
| else
 | |
|     [[ -e ~/.joplin/VERSION ]] && CURRENT_VERSION=$(< ~/.joplin/VERSION)
 | |
|     print "The latest version is ${RELEASE_VERSION}, but you have ${CURRENT_VERSION:-no version} installed."
 | |
| fi
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| print 'Downloading Joplin...'
 | |
| TEMP_DIR=$(mktemp -d)
 | |
| wget -qnv --show-progress -O ${TEMP_DIR}/Joplin.AppImage https://github.com/laurent22/joplin/releases/download/v${RELEASE_VERSION}/Joplin-${RELEASE_VERSION}.AppImage
 | |
| wget -qnv --show-progress -O ${TEMP_DIR}/joplin.png https://joplinapp.org/images/Icon512.png
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| print 'Installing Joplin...'
 | |
| # Delete previous version (in future versions joplin.desktop shouldn't exist)
 | |
| rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION
 | |
| 
 | |
| # Creates the folder where the binary will be stored
 | |
| mkdir -p ~/.joplin/
 | |
| 
 | |
| # Download the latest version
 | |
| mv ${TEMP_DIR}/Joplin.AppImage ~/.joplin/Joplin.AppImage
 | |
| 
 | |
| # Gives execution privileges
 | |
| chmod +x ~/.joplin/Joplin.AppImage
 | |
| 
 | |
| print "${COLOR_GREEN}OK${COLOR_RESET}"
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| print 'Installing icon...'
 | |
| mkdir -p ~/.local/share/icons/hicolor/512x512/apps
 | |
| mv ${TEMP_DIR}/joplin.png ~/.local/share/icons/hicolor/512x512/apps/joplin.png
 | |
| print "${COLOR_GREEN}OK${COLOR_RESET}"
 | |
| 
 | |
| # Detect desktop environment
 | |
| if [ "$XDG_CURRENT_DESKTOP" = "" ]
 | |
| then
 | |
|   DESKTOP=$(echo "${XDG_DATA_DIRS}" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
 | |
| else
 | |
|   DESKTOP=$XDG_CURRENT_DESKTOP
 | |
| fi
 | |
| DESKTOP=${DESKTOP,,}  # convert to lower case
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| echo 'Create Desktop icon...'
 | |
| if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.*|.*pantheon.*|.*lxde.* ]]
 | |
| then
 | |
|     : "${TMPDIR:=$TEMP_DIR}"
 | |
|     # This command extracts to squashfs-root by default and can't be changed...
 | |
|     # So we run it in the tmp directory and clean up after ourselves
 | |
|     (cd $TMPDIR && ~/.joplin/Joplin.AppImage --appimage-extract joplin.desktop &> /dev/null)
 | |
|     APPIMAGE_VERSION=$(grep "^X-AppImage-Version=" $TMPDIR/squashfs-root/joplin.desktop | head -n 1 | cut -d "=" -f 2)
 | |
|     rm -rf $TMPDIR/squashfs-root
 | |
|     # Only delete the desktop file if it will be replaced
 | |
|     rm -f ~/.local/share/applications/appimagekit-joplin.desktop
 | |
| 
 | |
|     # On some systems this directory doesn't exist by default
 | |
|     mkdir -p ~/.local/share/applications
 | |
|     echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=${HOME}/.joplin/Joplin.AppImage\nIcon=joplin\nStartupWMClass=Joplin\nType=Application\nCategories=Office;\n#${APPIMAGE_VERSION}" >> ~/.local/share/applications/appimagekit-joplin.desktop
 | |
|     # Update application icons
 | |
|     [[ `command -v update-desktop-database` ]] && update-desktop-database ~/.local/share/applications
 | |
|     print "${COLOR_GREEN}OK${COLOR_RESET}"
 | |
| else
 | |
|     print "${COLOR_RED}NOT DONE, unknown desktop '${DESKTOP}'${COLOR_RESET}"
 | |
| fi
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| # FINISH INSTALLATION
 | |
| #-----------------------------------------------------
 | |
| 
 | |
| # Informs the user that it has been installed
 | |
| print "${COLOR_GREEN}Joplin version${COLOR_RESET} ${RELEASE_VERSION} ${COLOR_GREEN}installed.${COLOR_RESET}"
 | |
| 
 | |
| # Record version
 | |
| echo $RELEASE_VERSION > ~/.joplin/VERSION
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| if [[ "$SHOW_CHANGELOG" == true ]]; then
 | |
|     NOTES=$(wget -qO - https://api.github.com/repos/laurent22/joplin/releases/latest | grep -Po '"body": "\K.*(?=")')
 | |
|     print "${COLOR_BLUE}Changelog:${COLOR_RESET}\n${NOTES}"
 | |
| fi
 | |
| 
 | |
| #-----------------------------------------------------
 | |
| print "Cleaning up..."
 | |
| rm -rf $TEMP_DIR
 | |
| print "${COLOR_GREEN}OK${COLOR_RESET}"
 |