#!/usr/bin/env bash set -eo pipefail C_RED=$(tput setaf 1) C_GREEN=$(tput setaf 2) C_RESET=$(tput sgr0) fail() { echo "${C_RED}Error: $1${C_RESET}" >&2 exit 1 } BLENDER_VERSION="5.0.1" BLENDER_TAR="blender-${BLENDER_VERSION}-linux-x64.tar.xz" BLENDER_URL="https://download.blender.org/release/Blender${BLENDER_VERSION%.*}/${BLENDER_TAR}" INSTALL_DIR="/usr/local/blender" SYMLINK_PATH="/usr/bin/blender" sudo apt-get update || fail "Failed to update package lists" sudo apt-get install -y libxi6 libxrender1 libxrandr2 libxcursor1 libxinerama1 libfreetype6 xz-utils || fail "Failed to install dependencies" if [ -f "/tmp/${BLENDER_TAR}" ]; then echo "${C_GREEN}Blender archive already downloaded.${C_RESET}" else echo "Downloading Blender ${BLENDER_VERSION}..." wget "${BLENDER_URL}" -O "/tmp/${BLENDER_TAR}" || fail "Failed to download Blender from ${BLENDER_URL}" fi [ ! -d "${INSTALL_DIR}" ] && { sudo mkdir -p "${INSTALL_DIR}" || fail "Failed to create installation directory at ${INSTALL_DIR}" } if [ "$(ls -A ${INSTALL_DIR})" ]; then echo "${C_GREEN}Blender is already installed in ${INSTALL_DIR}.${C_RESET}" exit 0 fi echo "Extracting Blender to ${INSTALL_DIR}..." sudo tar -xf "/tmp/${BLENDER_TAR}" -C "${INSTALL_DIR}" --strip-components=1 || fail "Failed to extract Blender to ${INSTALL_DIR}" if [ ! -L "${SYMLINK_PATH}" ] && [ ! -e "${SYMLINK_PATH}" ]; then sudo ln -sf "${INSTALL_DIR}/blender-launcher" "${SYMLINK_PATH}" || fail "Failed to create symbolic link for Blender at ${SYMLINK_PATH}" echo "${C_GREEN}Created symlink for Blender at ${SYMLINK_PATH}.${C_RESET}" else echo "${C_GREEN}Blender symlink already exists at ${SYMLINK_PATH}.${C_RESET}" fi if [ -f "/usr/share/applications/blender.desktop" ]; then echo "${C_GREEN}Blender desktop entry already exists.${C_RESET}" else cat </dev/null 2>&1; then sudo update-desktop-database /usr/share/applications/ || fail "Failed to update desktop database" echo "${C_GREEN}Updated desktop database.${C_RESET}" fi [ -f "/tmp/${BLENDER_TAR}" ] && { rm "/tmp/${BLENDER_TAR}" || fail "Failed to remove temporary Blender archive" } echo "${C_GREEN}Blender ${BLENDER_VERSION} installed successfully!${C_RESET}"