pyPhotoAlbum/install.sh
Duncan Tourolle ca21f3ae4c
All checks were successful
Python CI / test (push) Successful in 1m6s
Lint / lint (push) Successful in 1m10s
Tests / test (3.10) (push) Successful in 53s
Tests / test (3.11) (push) Successful in 52s
Tests / test (3.9) (push) Successful in 50s
more tests and gnoem+fedora installer
2025-11-11 12:51:15 +01:00

230 lines
6.7 KiB
Bash
Executable File

#!/bin/bash
# Installation script for pyPhotoAlbum
# Supports both system-wide and user-local installation
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Print functions
print_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if running as root
is_root() {
[ "$(id -u)" -eq 0 ]
}
# Detect distribution
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
echo "$ID"
else
echo "unknown"
fi
}
# Install system dependencies
install_dependencies() {
local distro=$(detect_distro)
print_info "Detected distribution: $distro"
case "$distro" in
fedora)
print_info "Installing dependencies for Fedora..."
sudo dnf install -y python3 python3-pip python3-qt6 python3-pyopengl \
python3-numpy python3-pillow python3-reportlab python3-lxml
;;
arch|cachyos)
print_info "Installing dependencies for Arch/CachyOS..."
sudo pacman -S --needed --noconfirm python python-pip python-pyqt6 \
python-pyopengl python-numpy python-pillow python-reportlab python-lxml
;;
ubuntu|debian)
print_info "Installing dependencies for Ubuntu/Debian..."
sudo apt update
sudo apt install -y python3 python3-pip python3-pyqt6 python3-opengl \
python3-numpy python3-pil python3-reportlab python3-lxml
;;
*)
print_warn "Unknown distribution. Please install dependencies manually."
print_info "Required packages: python3, python3-pip, PyQt6, PyOpenGL, numpy, Pillow, reportlab, lxml"
;;
esac
}
# Install Python package
install_package() {
local install_mode=$1
if [ "$install_mode" = "system" ]; then
print_info "Installing pyPhotoAlbum system-wide..."
sudo pip install .
else
print_info "Installing pyPhotoAlbum for current user..."
pip install --user .
fi
}
# Install desktop integration
install_desktop_integration() {
local install_mode=$1
if [ "$install_mode" = "system" ]; then
print_info "Installing desktop integration system-wide..."
# Install desktop file
sudo install -Dm644 pyphotoalbum.desktop \
/usr/share/applications/pyphotoalbum.desktop
# Install icons in multiple sizes for GNOME
print_info "Installing application icons..."
# Install main icon (256x256)
sudo install -Dm644 pyPhotoAlbum/icons/icon.png \
/usr/share/icons/hicolor/256x256/apps/pyphotoalbum.png
# Install additional sizes if they exist
for size in 16 22 24 32 48 64 128 512; do
icon_file="pyPhotoAlbum/icons/icon-${size}x${size}.png"
if [ -f "$icon_file" ]; then
sudo install -Dm644 "$icon_file" \
"/usr/share/icons/hicolor/${size}x${size}/apps/pyphotoalbum.png"
fi
done
# Update desktop database
if command -v update-desktop-database &> /dev/null; then
sudo update-desktop-database /usr/share/applications
fi
# Update icon cache
if command -v gtk-update-icon-cache &> /dev/null; then
print_info "Updating icon cache..."
sudo gtk-update-icon-cache -f /usr/share/icons/hicolor/
fi
else
print_info "Installing desktop integration for current user..."
# Create directories if they don't exist
mkdir -p ~/.local/share/applications
# Copy desktop file
cp pyphotoalbum.desktop ~/.local/share/applications/
# Install icons in multiple sizes for GNOME
print_info "Installing application icons..."
# Install main icon (256x256)
mkdir -p ~/.local/share/icons/hicolor/256x256/apps
cp pyPhotoAlbum/icons/icon.png ~/.local/share/icons/hicolor/256x256/apps/pyphotoalbum.png
# Install additional sizes if they exist
for size in 16 22 24 32 48 64 128 512; do
icon_file="pyPhotoAlbum/icons/icon-${size}x${size}.png"
if [ -f "$icon_file" ]; then
mkdir -p ~/.local/share/icons/hicolor/${size}x${size}/apps
cp "$icon_file" ~/.local/share/icons/hicolor/${size}x${size}/apps/pyphotoalbum.png
fi
done
# Update desktop database
if command -v update-desktop-database &> /dev/null; then
update-desktop-database ~/.local/share/applications
fi
# Update icon cache
if command -v gtk-update-icon-cache &> /dev/null; then
print_info "Updating icon cache..."
gtk-update-icon-cache -f ~/.local/share/icons/hicolor/
fi
fi
}
# Main installation
main() {
echo "========================================"
echo " pyPhotoAlbum Installation Script "
echo "========================================"
echo ""
# Check for required files
if [ ! -f "pyproject.toml" ]; then
print_error "pyproject.toml not found. Please run this script from the project root."
exit 1
fi
# Determine installation mode
local install_mode="user"
if is_root || [ "${1}" = "--system" ]; then
install_mode="system"
fi
print_info "Installation mode: $install_mode"
echo ""
# Ask user what to install
echo "What would you like to install?"
echo "1) Dependencies only"
echo "2) Application only (no dependencies)"
echo "3) Everything (recommended)"
echo "4) Exit"
echo ""
read -p "Enter your choice [1-4]: " choice
case "$choice" in
1)
install_dependencies
;;
2)
install_package "$install_mode"
install_desktop_integration "$install_mode"
;;
3)
install_dependencies
install_package "$install_mode"
install_desktop_integration "$install_mode"
;;
4)
print_info "Installation cancelled."
exit 0
;;
*)
print_error "Invalid choice. Exiting."
exit 1
;;
esac
echo ""
print_info "Installation complete!"
echo ""
echo "You can now run pyPhotoAlbum by:"
echo " 1) Running 'pyphotoalbum' in the terminal"
echo " 2) Finding 'pyPhotoAlbum' in your application menu"
echo ""
if [ "$install_mode" = "user" ]; then
print_warn "Note: If the 'pyphotoalbum' command is not found, make sure ~/.local/bin is in your PATH"
echo "Add this to your ~/.bashrc or ~/.zshrc:"
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
fi
}
# Run main function
main "$@"