mirror of
https://github.com/shvedes/photoshop-linux.git
synced 2025-09-08 12:14:59 +00:00
Dependencies based on OS id
This commit is contained in:
parent
087a0085b7
commit
082221133b
212
install.sh
212
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user