Handy dot files with sensible bindings and settings
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

157 lines
6.2 KiB

#!/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/"
["config/cava/"]="$HOME/.config/cava/"
["config/ags/"]="$HOME/.config/ags/"
["config/fastfetch/"]="$HOME/.config/fastfetch/"
["config/wallust/"]="$HOME/.config/wallust/"
["config/wlogout/"]="$HOME/.config/wlogout/"
# 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=.current_wallpaper"
# 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 or Folders 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
printf "\n%.0s" {1..3}
echo "$(tput bold)$(tput setaf 3)ATTENTION!!!! VERY IMPORTANT NOTICE!!!! $(tput sgr0)"
echo "$(tput bold)$(tput setaf 7)If you updated waybar folder, and you have your own waybar layout and styles $(tput sgr0)"
echo "$(tput bold)$(tput setaf 7)Copy those files from the created backup ~/.config/waybar-b4-upgrade $(tput sgr0)"
echo "$(tput bold)$(tput setaf 7)Make sure to set your waybar and style before logout or reboot $(tput sgr0)"
echo "$(tput bold)$(tput setaf 7)SUPER CTRL B for Waybar Styles and SUPER ALT B for Waybar Layout $(tput sgr0)"
printf "\n%.0s" {1..3}