From 082221133b91258e0cb614f8eef56f92020a8812 Mon Sep 17 00:00:00 2001 From: Katy248 Date: Mon, 28 Oct 2024 15:34:54 +0300 Subject: [PATCH] Dependencies based on OS id --- install.sh | 212 +++++++++++++++++++++++++---------------------------- 1 file changed, 100 insertions(+), 112 deletions(-) diff --git a/install.sh b/install.sh index 4054e1d..1c6d9bb 100755 --- a/install.sh +++ b/install.sh @@ -12,14 +12,14 @@ XDG_DATA_HOME="$HOME/.local/share" XDG_CACHE_HOME="$HOME/.cache" # LOGGING SYSTEM -# ##################################################################### -# +# ##################################################################### +# -BLUE="\e[1;34m" # Blue -RED="\e[1;31m" # Red +BLUE="\e[1;34m" # Blue +RED="\e[1;31m" # Red YELLOW="\e[1;33m" # Yellow -GREEN="\e[1;32m" # Green -RESET="\e[0m" # Reset colors +GREEN="\e[1;32m" # Green +RESET="\e[0m" # Reset colors LOG="${BLUE}[LOG]${RESET}" WARNING="${YELLOW}[WARNING]${RESET}" @@ -28,7 +28,7 @@ SUCCES="${GREEN}[SUCCES]${RESET}" CHECK="${GREEN}[CHECK]${RESET}" # CHECKS & OTHER FUNCTIONS -# ################################################################### +# ################################################################### # if [ -z "$XDG_DATA_HOME" ] && [ -z "$XDG_CACHE_HOME" ]; then @@ -54,7 +54,7 @@ on_interrupt() { if [ -d "$INSTALL_PATH" ]; then if ask_user "Do you want to ${RED}delete${RESET} a newly created folder?"; then - if rm -rfv "${INSTALL_PATH:?}" 2>> ./install_log.log; then + if rm -rfv "${INSTALL_PATH:?}" 2>>./install_log.log; then exit 0 else echo -e "$ERORR The last command ended with an error." @@ -81,84 +81,73 @@ ask_user() { read -r -p "$(echo -e "${WARNING} $* (yes/no): ")" answer case "$answer" in - [yY]|[yY][eE][sS]) - return 0 - ;; - [nN]|[nN][oO]) - return 1 - ;; + [yY] | [yY][eE][sS]) + return 0 + ;; + [nN] | [nN][oO]) + return 1 + ;; - *) - echo "Invalid input, try again" + *) + echo "Invalid input, try again" + ;; esac done } -# Imagemagick is needed in case you are not using Papirus Icons. -# One of the functions will load a Photoshop `.webp` icon and convert it to `.png`. The `.png` file will be used in the `.desktop` entry. -check_deps() { - declare -A packages=( - ["curl"]="curl" - ["wine"]="wine" - ["winetricks"]="winetricks" - ["magick"]="imagemagick" - ) - - missed_packages=() - - for bin in "${!packages[@]}"; do - if ! command -v "$bin" > /dev/null; then - missed_packages+=("${packages[$bin]}") - fi - done - - if [ ${#missed_packages[@]} -eq 0 ]; then - echo -e "$CHECK All dependencies are installed." - else - echo -e "$WARNING Missing dependencies: ${YELLOW}${missed_packages[*]}${RESET}." - return 1 - fi -} - -install_deps() { - if [ ! -f /etc/os-release ]; then - echo -e "$WARNING Cannot find '${YELLOW}/etc/os-release${RESET}'." +OS_ID=$(source /etc/os-release && echo "${ID}") + if ! ask_user "Script will use '${_bold}${RED}sudo${RESET}'. Proceed?"; then + echo -e "$LOG Exiting." exit 1 fi +DEPENDENCIES=() - source /etc/os-release +case "${OS_ID}" in +"arch") + DEPENDENCIES=(curl wine winetricks imagemagick) + ;; +"redos") + winetricks_opensuse="https://ftp.lysator.liu.se/pub/opensuse/distribution/leap/15.6/repo/oss/x86_64/winetricks-20240105-bp156.1.1.x86_64.rpm" + DEPENDENCIES=(curl wine ImageMagick zstd "${winetricks_opensuse}") + ;; +*) + echo -e "$ERROR For now only ${BLUE}Arch Linux${RESET} is supported." + exit 1 + ;; +esac + +install_deps() { + + _bold=$(tput bold) # Refer to /etc/os-release for more info - case "$ID" in - "arch") - # To display the list of packages correctly, we need to format the string. - # Otherwise `read` will not display the whole list of packages and will stop in the middle of the line. - missing_packages_str=$(printf "%s " "${missed_packages[@]}") - # Here we can do without it, but in that case there will be an annoying space before the period at the end of the package listing. - missing_packages_str=${missing_packages_str% } - - if ask_user "Script will execute: '${RED}sudo ${BLUE}pacman -S ${YELLOW}${missing_packages_str}${RESET}'. Proceed?"; then - echo -e "$LOG Installing missing dependencies" - if ! sudo pacman -S "${missed_packages[@]}"; then - echo -e "$ERROR Pacman terminated with an error." - exit 1 - else - echo -e "$LOG Missing dependencies was installed" - fi - else - echo -e "$LOG Exiting." - exit 1 - fi - ;; - *) - echo -e "$ERROR For now only ${BLUE}Arch Linux${RESET} is supported." + case "${OS_ID}" in + "arch") + if ! ask_user "Script will use '${_bold}${RED}sudo${RESET}'. Proceed?"; then + echo -e "$LOG Exiting." + exit 1 + fi + if ! sudo pacman -S "${DEPENDENCIES[@]}"; then + echo -e "$ERROR Pacman terminated with an error." exit 1 - ;; + fi + ;; + "redos") + if ! pkexec dnf install "${DEPENDENCIES[@]}" -y --comment "Installed via 'photoshop-linux' script" ;then + echo -e "${ERROR} ${_bold}DNF${RESET} terminated with an error." >&2 + exit 1 + fi + ;; + *) + echo -e "$ERROR For now only ${BLUE}Arch Linux${RESET} is supported." + exit 1 + ;; esac + echo -e "$LOG Missing dependencies was installed" } # MAIN SCRIPT -# ################################################################### +# ################################################################### # is_path_exists() { @@ -168,7 +157,7 @@ is_path_exists() { echo -e "$WARNING The specified path '${YELLOW}${1}${RESET}' already exists." if ask_user "Do you want to ${RED}delete${RESET} previous installation?"; then - if rm -rfv "${1:?}" 2>> ./install_log.log; then + if rm -rfv "${1:?}" 2>>./install_log.log; then echo -e "$LOG Deleted old installation." else echo -e "$ERROR Something went wrong." @@ -186,11 +175,11 @@ setup_wine() { local vc_libraries=("vcrun2003" "vcrun2005" "vcrun2010" "vcrun2012" "vcrun2013" "vcrun2022") echo -e "$LOG Setting up wine prefix." - winecfg /v win10 2> /dev/null + winecfg /v win10 2>/dev/null echo -e "$LOG Downloading and installing core components for wine prefix. This could take some time." - if ! winetricks --unattended corefonts win10 vkd3d dxvk2030 msxml3 msxml6 gdiplus &> ./install_log.log; then + if ! winetricks --unattended corefonts win10 vkd3d dxvk2030 msxml3 msxml6 gdiplus &>./install_log.log; then echo -e "$ERORR Winetricks terminated with an error." echo -e "$ERROR Please open an issue by mentioning the contents of ${YELLOW}./install_log.log${RESET}." exit 1 @@ -200,10 +189,10 @@ setup_wine() { echo "---------------------------------------------------------------------" echo " Downloading Visual C++ Libraries " echo "---------------------------------------------------------------------" - } >> ./install_log.log # Thanks to Katy248 for the idea. + } >>./install_log.log # Thanks to Katy248 for the idea. echo -e "$LOG Downloading and installing Visual C++ libraries." - if ! winetricks --unattended "${vc_libraries[@]}" &>> ./install_log.log; then + if ! winetricks --unattended "${vc_libraries[@]}" &>>./install_log.log; then echo -e "$ERROR Winetricks terminated with an error. Please, refer to ${YELLOW}install_log.log${RESET} for more info." echo -e "$ERROR If you can't solve the issue yourself, please, open an issue on the GitHub." exit 1 @@ -224,7 +213,7 @@ download_photoshop() { if [[ "$CHECKSUM" != "$local_checksum" ]]; then echo -e "$LOG Checksums don't match!" echo -e "$LOG Deleting corrupted archive." - rm -v "${archive_name:?}" &>> ./install_log.log + rm -v "${archive_name:?}" &>>./install_log.log fi return 0 @@ -238,7 +227,7 @@ download_photoshop() { echo -e "$ERROR If you can't solve the issue yourself, please, open an issue on the GitHub." exit 1 fi - + # TODO: # A separate function so you don't have to write this code multiple times echo -e "$LOG Comparing checksums." @@ -302,10 +291,10 @@ install_photoshop() { local filename="Photoshop.tar.xz" echo -e "$LOG Extracting Photoshop." - if ! tar xvf "$filename" &>> ./install_log.log; then + if ! tar xvf "$filename" &>>./install_log.log; then echo -e "$ERORR An error occurred while unpacking the archive." exit 1 - # TODO: + # TODO: # A separate function so you don't have to write this code multiple times # while true; do # read -p "Delete wine prefix?" @@ -343,10 +332,10 @@ install_photoshop() { fi echo -e "$LOG Extracting Photoshop." - if ! tar xvf "$LOCAL_ARCHIVE" &>> ./install_log.log; then + if ! tar xvf "$LOCAL_ARCHIVE" &>>./install_log.log; then echo -e "$ERROR An error occurred while unpacking the archive." exit 1 - # TODO: + # TODO: # A separate function so you don't have to write this code multiple times # while true; do # read -p "Delete wine prefix?" @@ -361,16 +350,16 @@ install_photoshop() { exit 1 fi fi -} +} install_icon() { - # Papirus Icon Theme already has a Photoshop icon in it. + # Papirus Icon Theme already has a Photoshop icon in it. # The script will check if you have Papirus installed and use its icon. If Papirus is not installed, the script will download the icon from the Internet and use it. - if find /usr/share/icons -name "Papirus*" &> /dev/null; then + if find /usr/share/icons -name "Papirus*" &>/dev/null; then ICON="photoshop" else if [ -d "$XDG_DATA_HOME/icons" ]; then - if find "$XDG_DATA_HOME/icons" -name "Papirus*" &> /dev/null; then + if find "$XDG_DATA_HOME/icons" -name "Papirus*" &>/dev/null; then ICON="photoshop" fi else @@ -380,11 +369,11 @@ install_icon() { if [ -z "$ICON" ]; then local icon_url="https://cdn3d.iconscout.com/3d/premium/thumb/adobe-photoshop-file-3d-icon-download-in-png-blend-fbx-gltf-formats--logo-format-graphic-design-pack-development-icons-9831950.png" - if ! curl "$icon_url" -o "icon.webp" &>> ./install_log.log; then + if ! curl "$icon_url" -o "icon.webp" &>>./install_log.log; then echo -e "$ERROR Failed to download icon. Please refer ${YELLOW}install_log.log${RESET} for info." exit 1 fi - + magick "icon.webp" "icon.png" rm "./icon.webp" @@ -403,15 +392,15 @@ install_desktop_entry() { echo -e "$LOG Genarating application menu item." - echo "[Desktop Entry]" > "$path" - echo "Name=Adobe Photoshop CC 2021" >> "$path" - echo "Exec=bash -c "$HOME/.local/bin/photoshop/photoshop.sh %F"" >> "$path" - echo "Type=Application" >> "$path" - echo "Comment=The industry-standard photo editing software (Wine" >> "$path" - echo "Categories=Graphics" >> "$path" - echo "Icon=$ICON" >> "$path" - echo "MimeType=image/psd;image/x-psd;image/png;image/jpg;image/jpeg;image/webp;image/heif;image/raw" >> "$path" - echo "StartupWMClass=photoshop.exe" >> "$path" + echo "[Desktop Entry]" >"$path" + echo "Name=Adobe Photoshop CC 2021" >>"$path" + echo "Exec=bash -c "$HOME/.local/bin/photoshop/photoshop.sh %F"" >>"$path" + echo "Type=Application" >>"$path" + echo "Comment=The industry-standard photo editing software (Wine" >>"$path" + echo "Categories=Graphics" >>"$path" + echo "Icon=$ICON" >>"$path" + echo "MimeType=image/psd;image/x-psd;image/png;image/jpg;image/jpeg;image/webp;image/heif;image/raw" >>"$path" + echo "StartupWMClass=photoshop.exe" >>"$path" } install_launcher() { @@ -430,23 +419,21 @@ install_launcher() { echo "" echo "echo -e \"All logs are saved in \$LOG_FILE\"" echo "wine64 \"\$PHOTOSHOP\" \"\$@\" &> \"\$LOG_FILE\" " - } > "$LAUNCHER" + } >"$LAUNCHER" chmod +x "$LAUNCHER" } main() { - if ! check_deps; then - install_deps - fi + install_deps - verify_path "$INSTALL_PATH" + verify_path "$INSTALL_PATH" is_path_exists "$INSTALL_PATH" setup_wine if [ -z "$LOCAL_ARCHIVE" ]; then download_photoshop - install_photoshop + install_photoshop else install_photoshop fi @@ -459,25 +446,26 @@ main() { } if [[ $# -eq 0 ]]; then - get_help - exit 0 + get_help + exit 0 fi while getopts "a:i:h" flag; do - case $flag in - a) + case $flag in + a) LOCAL_ARCHIVE="$OPTARG" - ;; + ;; h) get_help ;; i) INSTALL_PATH="$OPTARG" ;; - \?) - echo "Invalid option: -$OPTARG Use -h for help." - exit 1 - esac + \?) + echo "Invalid option: -$OPTARG Use -h for help." + exit 1 + ;; + esac done main