From 27bc346953d7cd9b13dc6dc556ff5f4764795e09 Mon Sep 17 00:00:00 2001 From: JaKooLit Date: Wed, 3 Jan 2024 09:53:22 +0900 Subject: [PATCH] Enhance Logging of Copy.sh Introduced upgrade.sh bump v2.2.4 --- config/hypr/{v2.2.3 => v2.2.4} | 0 copy.sh | 21 +++-- upgrade.sh | 145 +++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 7 deletions(-) rename config/hypr/{v2.2.3 => v2.2.4} (100%) create mode 100755 upgrade.sh diff --git a/config/hypr/v2.2.3 b/config/hypr/v2.2.4 similarity index 100% rename from config/hypr/v2.2.3 rename to config/hypr/v2.2.4 diff --git a/copy.sh b/copy.sh index 9bdd16f..7b513a9 100755 --- a/copy.sh +++ b/copy.sh @@ -28,8 +28,13 @@ ORANGE=$(tput setaf 166) YELLOW=$(tput setaf 3) RESET=$(tput sgr0) +# Create Directory for Copy Logs +if [ ! -d Copy-Logs ]; then + mkdir Copy-Logs +fi + # Set the name of the log file to include the current date and time -LOG="install-$(date +%d-%H%M%S)_dotfiles.log" +LOG="Copy-Logs/install-$(date +%d-%H%M%S)_dotfiles.log" # update home folders xdg-user-dirs-update 2>&1 | tee -a "$LOG" || true @@ -85,6 +90,7 @@ while true; do # If the detected layout is correct, update the 'kb_layout=' line in the file awk -v layout="$layout" '/kb_layout/ {$0 = " kb_layout=" layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf mv temp.conf config/hypr/UserConfigs/UserSettings.conf + echo "${NOTE} kb_layout $layout configured in settings. " 2>&1 | tee -a "$LOG" break ;; [nN]) printf "\n%.0s" {1..2} @@ -98,6 +104,7 @@ while true; do # Update the 'kb_layout=' line with the correct layout in the file awk -v new_layout="$new_layout" '/kb_layout/ {$0 = " kb_layout=" new_layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf mv temp.conf config/hypr/UserConfigs/UserSettings.conf + echo "${NOTE} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$LOG" break ;; *) echo "Please enter either 'y' or 'n'." ;; @@ -129,7 +136,7 @@ while true; do done # Use the selected resolution in your existing script -echo "You chose $resolution resolution for better Rofi appearance." +echo "You chose $resolution resolution for better Rofi appearance." 2>&1 | tee -a "$LOG" # Add your commands based on the resolution choice if [ "$resolution" == "≤ 1080p" ]; then @@ -211,21 +218,21 @@ while true; do [Yy]) echo "${NOTE} Downloading additional wallpapers..." if git clone "https://github.com/JaKooLit/Wallpaper-Bank.git"; then - echo "${NOTE} Wallpapers downloaded successfully." + echo "${NOTE} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" if cp -R Wallpaper-Bank/wallpapers/* ~/Pictures/wallpapers/ >> "$LOG" 2>&1; then - echo "${NOTE} Wallpapers copied successfully." + echo "${NOTE} Wallpapers copied successfully." 2>&1 | tee -a "$LOG" rm -rf Wallpaper-Bank 2>&1 # Remove cloned repository after copying wallpapers break else - echo "${ERROR} Copying wallpapers failed" >&2 + echo "${ERROR} Copying wallpapers failed" 2>&1 | tee -a "$LOG" fi else - echo "${ERROR} Downloading additional wallpapers failed" >&2 + echo "${ERROR} Downloading additional wallpapers failed" 2>&1 | tee -a "$LOG" fi ;; [Nn]) - echo "You chose not to download additional wallpapers." >&2 + echo "You chose not to download additional wallpapers." 2>&1 | tee -a "$LOG" break ;; *) diff --git a/upgrade.sh b/upgrade.sh new file mode 100755 index 0000000..22ec17a --- /dev/null +++ b/upgrade.sh @@ -0,0 +1,145 @@ +#!/bin/bash +### https://github.com/JaKooLit/JaKooLit + +# Set some colors for output messages +OK="$(tput setaf 2)[OK]$(tput sgr0)" +ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)" +NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)" +WARN="$(tput setaf 166)[WARN]$(tput sgr0)" +CAT="$(tput setaf 6)[ACTION]$(tput sgr0)" +ORANGE=$(tput setaf 166) +YELLOW=$(tput setaf 3) +RESET=$(tput sgr0) + + +# Create Directory for Upgrade Logs +if [ ! -d Upgrade-Logs ]; then + mkdir Upgrade-Logs +fi + +LOG="Upgrade-Logs/upgrade-$(date +%d-%H%M%S)_dotfiles.log" + +# source and target versions +source_dir="config" +target_dir="$HOME/.config" + +# Specify the update source directories, their corresponding target directories, and their exclusions +declare -A directories=( + ["config/hypr/"]="$HOME/.config/hypr/" + ["config/kitty/"]="$HOME/.config/kitty/" + ["config/Kvantum/"]="$HOME/.config/Kvantum/" + ["config/qt5ct/"]="$HOME/.config/qt5ct" + ["config/qt6ct/"]="$HOME/.config/qt6ct/" + ["config/rofi/"]="$HOME/.config/rofi/" + ["config/swaync/"]="$HOME/.config/swaync/" + ["config/waybar/"]="$HOME/.config/waybar/" + # Add more directories to compare as needed +) + +# Update the exclusion rules +declare -A exclusions=( + ["config/hypr/"]="--exclude=UserConfigs/ --exclude=UserScripts/" + ["config/waybar/"]="--exclude=config --exclude=style.css" + ["config/rofi/"]="--exclude=pywal-color/ --exclude=.current_wallpaper" + ["config/waybar/"]="--exclude=config --exclude=style.css" + # Add more exclusions as needed +) + +# Function to compare directories +compare_directories() { + local source_dir="$1" + local target_dir="$2" + local exclusion="${exclusions[$source_dir]}" # Get exclusions for the source directory + + # Perform dry-run comparison using rsync with exclusions + diff=$(rsync -avn --delete "$source_dir" "$target_dir" $exclusion) + echo "$diff" +} + +# Function to create backup of target directory +create_backup() { + local target_dir="$1" + local backup_suffix="-b4-upgrade" + local target_base=$(basename "$target_dir") + local backup_dir="$HOME/.config/${target_base}${backup_suffix}" + + if [ -d "$backup_dir" ]; then + echo "$NOTE Updating existing backup of the $target_dir..." + rsync -av --delete "$target_dir" "$backup_dir" + echo "$NOTE $backup_dir Backup updated successfully." 2>&1 | tee -a "$LOG" + else + echo "$NOTE Creating backup of the $target_dir..." + rsync -av --exclude="${backup_suffix}" "$target_dir" "$backup_dir"/ + echo "$NOTE $backup_dir Backup created successfully." 2>&1 | tee -a "$LOG" + fi +} + +# Check if the version file exists in target directory, if not exit +target_version_file=$(find "$target_dir/hypr" -name 'v*' | sort -V | tail -n 1) +if [ -z "$target_version_file" ]; then + echo "$ERROR Version number not found in ~/.config/hypr/" 2>&1 | tee -a "$LOG" + echo "$ERROR Upgrade your dots first by running ./copy.sh" 2>&1 | tee -a "$LOG" + exit 1 +fi + +# Get the stored version from the target directory +stored_version=$(basename "$target_version_file") + +# Get the latest version from the source directory +source_version_file=$(find "$source_dir/hypr" -name 'v*' | sort -V | tail -n 1) +latest_version=$(basename "$source_version_file") + +# Function to compare versions +version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } + +# Compare versions +if version_gt "$latest_version" "$stored_version"; then + echo "$CAT newer version ($latest_version) is available. Do you want to upgrade? (Y/N)" 2>&1 | tee -a "$LOG" + read -r answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Loop through directories for comparison + for source_folder in "${!directories[@]}"; do + target_folder="${directories[$source_folder]}" + echo "$YELLOW Comparing directories: $source_folder and $target_folder" $RESET + # Compare source and target folders + comparison=$(compare_directories "$source_folder" "$target_folder") + if [ -n "$comparison" ]; then + echo "$NOTE Here are difference of $source_folder and $target_folder:" + echo "$comparison" + + printf "\n%.0s" {1..2} + + # Prompt user for action + echo "$CAT Do you want to copy files and folders from $source_folder to $target_folder? (Y/N)" + read -r answer + + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Creating backup of the target folder + create_backup "$target_folder" + + printf "\n%.0s" {1..2} + # Copy differences from source folder to target folder + rsync -av --delete ${exclusions[$source_folder]} "$source_folder" "$target_folder" + echo "$NOTE Differences of "$target_folder" copied successfully." 2>&1 | tee -a "$LOG" + printf "\n%.0s" {1..2} + else + echo "$NOTE No changes were made for $target_folder" 2>&1 | tee -a "$LOG" + fi + else + echo "$OK No differences found between $source_folder and $target_folder" 2>&1 | tee -a "$LOG" + fi + done + printf "\n%.0s" {1..2} + echo "$NOTE Files updated successfully to version $latest_version" 2>&1 | tee -a "$LOG" + + # Set some files as executable + chmod +x ~/.config/hypr/scripts/* 2>&1 | tee -a "$LOG" + chmod +x ~/.config/hypr/UserScripts/* 2>&1 | tee -a "$LOG" + chmod +x ~/.config/hypr/initial-boot.sh 2>&1 | tee -a "$LOG" + + else + echo "$ORANGE Upgrade declined. No files or folders changed" 2>&1 | tee -a "$LOG" + fi +else + echo "$OK No upgrade found. The installed version ($stored_version) is up to date with the Hyprland-Dots version ($latest_version)." 2>&1 | tee -a "$LOG" +fi