diff --git a/MANUAL b/MANUAL index d2f3c58..3ef3dc7 100644 --- a/MANUAL +++ b/MANUAL @@ -11,6 +11,11 @@ DESCRIPTION scripts for ongoing synchronization. Uses tar for initial sync and rsync for subsequent syncs. + Server project path defaults to ~/public_leo if left empty. Paths starting + with ~ are automatically resolved to full paths via SSH. + + New servers are automatically trusted (StrictHostKeyChecking=accept-new). + OPTIONS -h, --help Display this help and exit. @@ -26,6 +31,7 @@ OPTIONS MODES Default mode: + - Syncs terminal info (xterm-ghostty or xterm-kitty) - Downloads all project files - Creates .vscode/sftp.json - Generates all helper scripts diff --git a/sync-project.sh b/sync-project.sh index 68aeabe..36fbee0 100755 --- a/sync-project.sh +++ b/sync-project.sh @@ -15,6 +15,9 @@ SCRIPT_PATH="$(realpath "$0")" SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" ARCHIVE_NAME="sync.tar.gz" +# SSH options - auto-accept new host keys +SSH_OPTS="-o StrictHostKeyChecking=accept-new" + # Parse command line arguments SFTP_ONLY=false FILES_ONLY=false @@ -55,15 +58,31 @@ echo "" if [ -f ".sync-credentials" ]; then source ".sync-credentials" else - # Prompt for configuration + # Prompt for configuration (password before path for SSH resolution) read -p "Server user@host (e.g., leo@server.com): " SERVER_HOST - read -p "Server project path (e.g., /home/leo/public_leo): " SERVER_PROJECT_PATH - read -p "Local folder path (e.g., Delta Pharmacy): " LOCAL_FOLDER read -sp "SSH Password: " SSH_PASSWORD echo "" + read -p "Server project path (default: ~/public_leo): " SERVER_PROJECT_PATH + read -p "Local folder path (e.g., Delta Pharmacy): " LOCAL_FOLDER echo "" fi +# Default path to ~/public_leo if empty +if [ -z "$SERVER_PROJECT_PATH" ]; then + SERVER_PROJECT_PATH="~/public_leo" +fi + +# Resolve ~ to full path via SSH +if [[ "$SERVER_PROJECT_PATH" == ~* ]]; then + echo "Resolving path..." + SERVER_PROJECT_PATH=$(sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && pwd") + if [ $? -ne 0 ]; then + echo -e "${RED}Failed to resolve path${NC}" + exit 1 + fi + echo -e "${GREEN}Resolved to: ${SERVER_PROJECT_PATH}${NC}" +fi + # Validate required variables (all except password) if [ -z "$SERVER_HOST" ]; then echo -e "${RED}Error: SERVER_HOST is not set${NC}" @@ -80,15 +99,35 @@ if [ -z "$LOCAL_FOLDER" ]; then exit 1 fi +# Sync terminal info on full sync (no flags) +if [ "$SFTP_ONLY" = false ] && [ "$FILES_ONLY" = false ]; then + # Detect terminal type + if [[ "$TERM" == *"ghostty"* ]]; then + TERM_TYPE="xterm-ghostty" + elif [[ "$TERM" == *"kitty"* ]]; then + TERM_TYPE="xterm-kitty" + else + TERM_TYPE="" + fi + + if [ -n "$TERM_TYPE" ]; then + echo "Syncing terminal info ($TERM_TYPE)..." + infocmp -x "$TERM_TYPE" | sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} -- tic -x - + echo -e "${GREEN}Terminal info synced${NC}" + else + echo -e "${YELLOW}Warning: Unknown terminal ($TERM), skipping terminfo sync${NC}" + fi +fi + # Start sync process echo "Starting project sync..." # Step 1: SSH into server and create tar archive echo "Creating archive on server..." if [ "$FILES_ONLY" = true ]; then - sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} --exclude='node_modules' --exclude='vendor' ." + sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} --exclude='node_modules' --exclude='vendor' ." else - sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} ." + sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} ." fi if [ $? -ne 0 ]; then @@ -103,7 +142,7 @@ mkdir -p "${LOCAL_FOLDER}" # Step 3: Copy archive from server to local echo "Copying archive to local machine..." -sshpass -p "${SSH_PASSWORD}" scp ${SERVER_HOST}:~/${ARCHIVE_NAME} "${LOCAL_FOLDER}/" +sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS ${SERVER_HOST}:~/${ARCHIVE_NAME} "${LOCAL_FOLDER}/" if [ $? -ne 0 ]; then echo -e "${RED}Failed to copy archive${NC}" @@ -130,7 +169,7 @@ rm ${ARCHIVE_NAME} # Step 6: Clean up - delete server archive echo "Cleaning up server archive..." -sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "rm ~/${ARCHIVE_NAME}" +sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} "rm ~/${ARCHIVE_NAME}" echo -e "${GREEN}File sync complete!${NC}" @@ -209,7 +248,7 @@ done if [ "$SFTP_ONLY" = false ]; then echo "Uploading lazygit to server..." - sshpass -p "${SSH_PASSWORD}" scp "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH} + sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH} echo -e "${GREEN}lazygit uploaded successfully${NC}" # Add lazygit to .gitignore