#!/bin/bash set -e ### Default Configuration (can be overridden by .env file) SERVER_USER="${SERVER_USER:-$USER}" # Default: current user SERVER_SSH_PORT="${SERVER_SSH_PORT:-22}" # Default: standard SSH port SERVER_IP="${SERVER_IP:-192.168.1.100}" # Default: common local network SERVER_DB_DIR="${SERVER_DB_DIR:-/volume1/Darktable/darktable_db}" SERVER_PHOTO_DIR="${SERVER_PHOTO_DIR:-/volume1/Darktable/photo_library}" LOCAL_PHOTO_DIR="${PHOTO_DIR:-$HOME/Pictures/raw}" LOCAL_DARKTABLE_DB_DIR="${DARKTABLE_DB_DIR:-$HOME/.config/darktable}" BIN_DIR="${BIN_DIR:-$HOME/.local/bin}" APPLICATIONS_DIR="$HOME/.local/share/applications" SYNC_SCRIPT="$BIN_DIR/darktable_sync.sh" WRAPPER_SCRIPT="$BIN_DIR/darktable_wrapper.sh" DESKTOP_SHORTCUT="$APPLICATIONS_DIR/darktable-with-sync.desktop" SYNC_ONLY_SHORTCUT="$APPLICATIONS_DIR/darktable-sync-only.desktop" ### Prepare folders mkdir -p "$BIN_DIR" mkdir -p "$HOME/.config/systemd/user" mkdir -p "$APPLICATIONS_DIR" ### Load .env if present (overrides defaults) ENV_FILE=".env" if [[ -f "$ENV_FILE" ]]; then echo "Loading configuration from .env file..." set -a # shellcheck source=/dev/null . "$ENV_FILE" set +a fi ### Show effective configuration echo "Using configuration:" echo "SERVER_USER: $SERVER_USER" echo "SERVER_IP: $SERVER_IP" echo "SERVER_SSH_PORT: $SERVER_SSH_PORT" echo "SERVER_DB_DIR: $SERVER_DB_DIR" echo "SERVER_PHOTO_DIR: $SERVER_PHOTO_DIR" echo "PHOTO_DIR: $LOCAL_PHOTO_DIR" echo "DARKTABLE_DB_DIR: $LOCAL_DARKTABLE_DB_DIR" echo "BIN_DIR: $BIN_DIR" ### Check dependencies echo "Checking requirements..." REQUIRED_CMDS=("rsync" "notify-send" "ping" "darktable" "systemctl" "xdg-user-dir") for cmd in "${REQUIRED_CMDS[@]}"; do if ! command -v "$cmd" >/dev/null 2>&1; then echo "Error: '$cmd' is not installed." echo "Install it with: sudo apt install $cmd" exit 1 fi done # Check folder presence if [ ! -d "$LOCAL_PHOTO_DIR" ]; then echo "Local photo folder does not exist: $LOCAL_PHOTO_DIR" echo "Create it using: mkdir -p \"$LOCAL_PHOTO_DIR\"" exit 1 fi if [ ! -d "$LOCAL_DARKTABLE_DB_DIR" ]; then echo "Darktable database path does not exist: $LOCAL_DARKTABLE_DB_DIR" echo "Start Darktable once or create the directory manually." exit 1 fi # Check if server is reachable and remote dirs exist if ping -c 1 "$SERVER_IP" &>/dev/null; then echo "Server is reachable: $SERVER_IP" if ! ssh -p "$SERVER_SSH_PORT" "$SERVER_USER@$SERVER_IP" "[ -d '$SERVER_DB_DIR' ]"; then echo "Remote directory missing on server: $SERVER_DB_DIR" echo "Create it or adjust the path." exit 1 fi if ! ssh -p "$SERVER_SSH_PORT" "$SERVER_USER@$SERVER_IP" "[ -d '$SERVER_PHOTO_DIR' ]"; then echo "Remote directory missing on server: $SERVER_PHOTO_DIR" echo "Create it or adjust the path." exit 1 fi else echo "Server not reachable: $SERVER_IP" echo "Sync will fail until server is online." fi ### Install sync and wrapper scripts SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cp "$SCRIPT_DIR/scripts/darktable_sync.sh" "$SYNC_SCRIPT" cp "$SCRIPT_DIR/scripts/darktable_wrapper.sh" "$WRAPPER_SCRIPT" chmod +x "$SYNC_SCRIPT" "$WRAPPER_SCRIPT" ### Install systemd user service and timer cp "$SCRIPT_DIR/systemd/darktable-sync.service" "$HOME/.config/systemd/user/darktable-sync.service" cp "$SCRIPT_DIR/systemd/darktable-sync.timer" "$HOME/.config/systemd/user/darktable-sync.timer" systemctl --user daemon-reload systemctl --user enable darktable-sync.timer systemctl --user start darktable-sync.timer ### Install desktop shortcuts cp "$SCRIPT_DIR/desktop/darktable-with-sync.desktop" "$DESKTOP_SHORTCUT" cp "$SCRIPT_DIR/desktop/darktable-sync-only.desktop" "$SYNC_ONLY_SHORTCUT" update-desktop-database "$APPLICATIONS_DIR" 2>/dev/null || true echo "Installation finished."