forked from Shinonome/dots-hyprland
now adds new folders
This commit is contained in:
+47
-10
@@ -26,17 +26,21 @@ function file_in_excludes() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Then check which files have been modified by the user since the last update to preserve user configurations
|
# Then check which files have been modified by the user since the last update to preserve user configurations
|
||||||
modified_files=()
|
modified_files=()
|
||||||
|
|
||||||
# Find all files in the specified folders and their subfolders
|
# Find all files in the specified folders and their subfolders
|
||||||
while IFS= read -r -d '' file; do
|
while IFS= read -r -d '' file; do
|
||||||
|
# If the file is not in the home directory, skip it
|
||||||
|
if [[ ! -f "$HOME/$file" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
# Calculate checksums
|
# Calculate checksums
|
||||||
base_checksum=$(get_checksum "$base/$file")
|
base_checksum=$(get_checksum "$base/$file")
|
||||||
home_checksum=$(get_checksum "$HOME/$file")
|
home_checksum=$(get_checksum "$HOME/$file")
|
||||||
|
|
||||||
|
|
||||||
# Compare checksums and add to modified_files if necessary
|
# Compare checksums and add to modified_files if necessary
|
||||||
if [[ $base_checksum != $home_checksum ]]; then
|
if [[ $base_checksum != $home_checksum ]]; then
|
||||||
modified_files+=("$file")
|
modified_files+=("$file")
|
||||||
@@ -45,6 +49,7 @@ done < <(find "${folders[@]}" -type f -print0)
|
|||||||
|
|
||||||
|
|
||||||
echo "Modified files: ${modified_files[@]}"
|
echo "Modified files: ${modified_files[@]}"
|
||||||
|
echo "Excluded files and folders: ${excludes[@]}"
|
||||||
|
|
||||||
# Output all modified files
|
# Output all modified files
|
||||||
if [[ ${#modified_files[@]} -gt 0 ]]; then
|
if [[ ${#modified_files[@]} -gt 0 ]]; then
|
||||||
@@ -54,7 +59,7 @@ if [[ ${#modified_files[@]} -gt 0 ]]; then
|
|||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "No files found that have been modified since the last update. All files will be replaced. Are you sure you want to continue? [Y/n] "
|
echo "No files found that have been modified since the last update. All files will be replaced. Are you sure you want to continue? [Y/n] "
|
||||||
read -n 1 -r
|
read -r
|
||||||
echo
|
echo
|
||||||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||||||
echo "Exiting."
|
echo "Exiting."
|
||||||
@@ -67,12 +72,14 @@ echo "[y] Yes, keep them."
|
|||||||
echo "[n] No, replace them."
|
echo "[n] No, replace them."
|
||||||
echo "[i] Check the files individually."
|
echo "[i] Check the files individually."
|
||||||
# Ask if the user wants to keep them
|
# Ask if the user wants to keep them
|
||||||
read -p "Answer: " -n 1 -r
|
read -p "Answer: " -r
|
||||||
echo
|
echo
|
||||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||||
echo "Replacing all files."
|
echo "Replacing all files."
|
||||||
modified_files=()
|
modified_files=()
|
||||||
elif [[ $REPLY =~ ^[Ii]$ ]]; then
|
elif [[ $REPLY =~ ^[Ii]$ ]]; then
|
||||||
|
new_modified_files=()
|
||||||
|
replaced_files=()
|
||||||
for file in "${modified_files[@]}"; do
|
for file in "${modified_files[@]}"; do
|
||||||
echo "Do you want to keep $file untouched?"
|
echo "Do you want to keep $file untouched?"
|
||||||
echo "[y] Yes, keep it."
|
echo "[y] Yes, keep it."
|
||||||
@@ -81,10 +88,33 @@ elif [[ $REPLY =~ ^[Ii]$ ]]; then
|
|||||||
echo
|
echo
|
||||||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||||||
echo "Keeping $file."
|
echo "Keeping $file."
|
||||||
|
new_modified_files+=("$file")
|
||||||
else
|
else
|
||||||
modified_files=("${modified_files[@]/$file}")
|
replaced_files+=("$file")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
modified_files=("${new_modified_files[@]}")
|
||||||
|
# verify the files that will be kept
|
||||||
|
echo "_____________________________________________________"
|
||||||
|
echo "These User configured/modifed files will be kept:"
|
||||||
|
for file in "${modified_files[@]}"; do
|
||||||
|
echo "$file"
|
||||||
|
done
|
||||||
|
echo "_____________________________________________________"
|
||||||
|
echo "These User configured/modifed files will be replaced:"
|
||||||
|
for file in "${replaced_files[@]}"; do
|
||||||
|
echo "$file"
|
||||||
|
done
|
||||||
|
echo "_____________________________________________________"
|
||||||
|
echo "Do you want to continue?"
|
||||||
|
echo "[y] Yes, continue."
|
||||||
|
echo "[n] No, exit."
|
||||||
|
read -p "Answer: " -r
|
||||||
|
echo
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Exiting..."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Keeping every modified file"
|
echo "Keeping every modified file"
|
||||||
fi
|
fi
|
||||||
@@ -93,16 +123,18 @@ fi
|
|||||||
if git pull; then
|
if git pull; then
|
||||||
echo "Git pull successful."
|
echo "Git pull successful."
|
||||||
else
|
else
|
||||||
|
# If the pull failed, clone the repository to a temporary folder and copy the files from there
|
||||||
echo "Git pull failed. Consider recloning the project or resolving conflicts manually."
|
echo "Git pull failed. Consider recloning the project or resolving conflicts manually."
|
||||||
echo "Should I clone the repository to a temporary folder in chache and copy the files from there? [Y/n] "
|
echo "Should I clone the repository to a temporary folder in cache and copy the files from there? [y/N] "
|
||||||
read -n 1 -r
|
read -r
|
||||||
echo
|
echo
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
echo "Exiting..."
|
echo "Exiting..."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
temp_folder=$(mktemp -d -p /cache)
|
mkdir -p ./cache
|
||||||
|
temp_folder=$(mktemp -d -p ./cache)
|
||||||
git clone https://github.com/end-4/dots-hyprland/ "$temp_folder"
|
git clone https://github.com/end-4/dots-hyprland/ "$temp_folder"
|
||||||
# Replace the existing dotfiles with the new ones
|
# Replace the existing dotfiles with the new ones
|
||||||
for folder in "${folders[@]}"; do
|
for folder in "${folders[@]}"; do
|
||||||
@@ -126,7 +158,12 @@ fi
|
|||||||
# Now only replace the files that are not modified by the user
|
# Now only replace the files that are not modified by the user
|
||||||
for folder in "${folders[@]}"; do
|
for folder in "${folders[@]}"; do
|
||||||
# Find all files (including those in subdirectories) and copy them
|
# Find all files (including those in subdirectories) and copy them
|
||||||
find "$folder" -type f -print0 | while IFS= read -r -d '' file; do
|
find "$folder" -print0 | while IFS= read -r -d '' file; do
|
||||||
|
# if the file is a directory, ensure it exists in the home directory
|
||||||
|
if [[ -d "$file" ]]; then
|
||||||
|
mkdir -p "$HOME/$file"
|
||||||
|
fi
|
||||||
|
# Check if the file is a regular file and not in the exclude_folders
|
||||||
if [[ -f "$file" ]] && ! file_in_excludes "$file"; then
|
if [[ -f "$file" ]] && ! file_in_excludes "$file"; then
|
||||||
if [[ ! " ${modified_files[@]} " =~ " ${file} " ]]; then
|
if [[ ! " ${modified_files[@]} " =~ " ${file} " ]]; then
|
||||||
# Construct the destination path
|
# Construct the destination path
|
||||||
|
|||||||
Reference in New Issue
Block a user