Files
Hyprland-Dots/upgrade.sh
Don Williams ca0c23cce0 Integrate Quickshell-Overview with Qt6 fixes and automation scripts
## Overview
This commit integrates the corrected Quickshell-Overview feature across all
installation and update workflows. The overview provides an AGS alternative
with live window previews toggled via Super+TAB keybind.

## Changes

### 1. Quickshell Overview QML Files
- Added config/quickshell/overview/ subdirectory with Qt6-compatible QML
- Includes 20+ files covering:
  * OverviewWindow.qml with proper clipping (no OpacityMask, uses QtQuick.Effects)
  * OverviewWidget.qml for window handling
  * Overview.qml main component with Hyprland integration
  * Common utilities and styling
  * Services for Hyprland data and global state management

### 2. copy.sh Updates
- Removes default shell.qml that blocks quickshell named config detection
- Auto-copies config/quickshell/overview to ~/.config/quickshell/overview/
- Updates old 'qs' startup commands to 'qs -c overview'
- Handles both fresh installs and config overwrite scenarios

### 3. upgrade.sh Updates
- Added config/quickshell/ to upgrade directory list
- Excludes shell.qml to preserve overview config detection capability
- Enables seamless upgrades without losing quickshell settings

### 4. IPC Command Fixes
- Corrected OverviewToggle.sh to use proper 'qs ipc -c overview call overview toggle'
- Fixed startup commands from old 'qs' to 'qs -c overview'
- Hyprland-Dots now uses corrected toggle script

## Qt6 Compatibility
- Replaced Qt5Compat.GraphicalEffects with QtQuick.Effects
- Removed OpacityMask in favor of Qt6-compatible clipping technique
- All QML properly imports Qt6 modules

## Release Script
- release.sh automatically uses copy.sh, inheriting all quickshell updates

## Testing
- Verified on target systems (Fedora 43 VM, jak-nixos)
- qs -c overview successfully launches overview config when shell.qml is removed
- IPC toggle commands work correctly within Wayland sessions

## Files Modified
- config/quickshell/overview/* (20 new files)
- copy.sh (enhanced QS handling)
- upgrade.sh (added quickshell to upgrade paths)
2025-11-30 20:04:02 -05:00

217 lines
8.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
# for Semi-Manual upgrading your system.
# NOTE: requires rsync
# 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)"
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
MAGENTA="$(tput setaf 5)"
ORANGE="$(tput setaf 214)"
WARNING="$(tput setaf 1)"
YELLOW="$(tput setaf 3)"
GREEN="$(tput setaf 2)"
BLUE="$(tput setaf 4)"
SKY_BLUE="$(tput setaf 6)"
RESET="$(tput sgr0)"
printf "\n%.0s" {1..1}
echo -e "\e[35m
╦╔═┌─┐┌─┐╦ ╔╦╗┌─┐┌┬┐┌─┐
╠╩╗│ ││ │║ ║║│ │ │ └─┐ 2025
╩ ╩└─┘└─┘╩═╝ ═╩╝└─┘ ┴ └─┘ upgrade.sh
\e[0m"
printf "\n%.0s" {1..1}
# On Ubuntu/Debian, warn about required Hyprland version and prompt to continue
if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then
echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}"
while true; do
echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}"
read _continue
_continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]')
case "${_continue}" in
y|yes)
echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation."
break
;;
n|no|"")
printf "\n%.0s" {1..1}
echo "${INFO} Aborting per user choice. No changes made."
printf "\n%.0s" {1..1}
exit 1
;;
*)
echo "${WARN} Please answer 'y' or 'n'."
;;
esac
done
fi
echo "${WARNING}A T T E N T I O N !${RESET}"
echo "${SKY_BLUE}This script is meant to manually upgrade your KooL Hyprland Dots${RESET}"
echo "${YELLOW}NOTE that you should edit this script and assign an Directory or Files exclusion${RESET}"
printf "\n%.0s" {1..1}
echo "${MAGENTA}If you are not sure what you are doing,ran the ${SKY_BLUE}copy.sh${RESET} ${MAGENTA}instead${RESET}"
printf "\n%.0s" {1..1}
read -p "${CAT} - Would you like to proceed (y/n): ${RESET}" proceed
if [ "$proceed" != "y" ]; then
printf "\n%.0s" {1..1}
echo "${INFO} Installation aborted. ${SKY_BLUE}No changes in your system.${RESET} ${YELLOW}Goodbye!${RESET}"
printf "\n%.0s" {1..1}
exit 1
fi
# Create Directory for Upgrade Logs
if [ ! -d Upgrade-Logs ]; then
mkdir Upgrade-Logs
fi
LOG="Upgrade-Logs/upgrade-$(date +%d-%H%M%S)_upgrade_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/nvim/"]="$HOME/.config/nvim/"
["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/quickshell/"]="$HOME/.config/quickshell/"
["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"
["config/quickshell/"]="--exclude=shell.qml"
# 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_directory in "${!directories[@]}"; do
target_directory="${directories[$source_directory]}"
echo "$YELLOW Comparing directories: $source_directory and $target_directory" $RESET
# Compare source and target directories
comparison=$(compare_directories "$source_directory" "$target_directory")
if [ -n "$comparison" ]; then
echo "$NOTE Here are difference of $source_directory and $target_directory:"
echo "$comparison"
printf "\n%.0s" {1..2}
# Prompt user for action
echo "$CAT Do you want to copy files and directories from $source_directory to $target_directory? (Y/N)"
read -r answer
if [[ "$answer" =~ ^[Yy]$ ]]; then
# Creating backup of the target directory
create_backup "$target_directory"
printf "\n%.0s" {1..2}
# Copy differences from source directory to target directory
rsync -av --delete ${exclusions[$source_directory]} "$source_directory" "$target_directory"
echo "$NOTE Differences of "$target_directory" copied successfully." 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..2}
else
echo "$NOTE No changes were made for $target_directory" 2>&1 | tee -a "$LOG"
fi
else
echo "$OK No differences found between $source_directory and $target_directory" 2>&1 | tee -a "$LOG"
fi
done
printf "\n%.0s" {1..2}
echo "$NOTE Files or directories updated successfully to version $latest_version" 2>&1 | tee -a "$LOG"
# Set some files as executable
chmod +x "$HOME/.config/hypr/scripts/"* 2>&1 | tee -a "$LOG"
chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG"
# Set executable for initial-boot.sh
chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG"
else
echo "$MAGENTA Upgrade declined. No files or directories changed" 2>&1 | tee -a "$LOG"
fi
else
echo "$OK 👌 No upgrade found. The installed version ${MAGENTA}($stored_version)${RESET} is up to date with the KooL Hyprland-Dots version ${YELLOW}($latest_version)${RESET}" 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 directory, 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}