From 4811e675d8573e1c1ceb11196000eacbc333424b Mon Sep 17 00:00:00 2001 From: Tio TROM Date: Fri, 4 Aug 2023 19:15:59 +0200 Subject: [PATCH] many improvements --- bin/periodic/fix-flatpaks-theming | 48 +++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/bin/periodic/fix-flatpaks-theming b/bin/periodic/fix-flatpaks-theming index e16c3f7..dd3f8f0 100755 --- a/bin/periodic/fix-flatpaks-theming +++ b/bin/periodic/fix-flatpaks-theming @@ -1,14 +1,44 @@ #!/bin/bash -shared_themes_dir=/usr/share/themes/ -home_local_themes_dir="$HOME/.local/share/themes/" -source_theme_dirs=("$shared_themes_dir" "$home_local_themes_dir") + +# Exit out if the same script is already running in the background +pidof -sq -o %PPID -x "$(basename "$0")" && exit + +# Set the directory paths + target_themes_dir="$HOME/.themes" +target_icons_dir="$HOME/.icons" -mkdir -p "$target_themes_dir" "$home_local_themes_dir" || - { echo "failed to make directoris $target_themes_dir & $home_local_themes_dir"; exit 1; } +# Create target directories if they don't exist +mkdir -p "$target_themes_dir" "$target_icons_dir" || + { echo "failed to make directories $target_themes_dir & $target_icons_dir"; exit 1; } -echo "Set watch for" "${source_theme_dirs[@]}" "directories ..." -inotifywait -qmr -e 'modify,attrib,move,move_self,create,delete,delete_self,unmount' "${source_theme_dirs[@]}" | while read -r events; do - rsync -av --delete --progress "${source_theme_dirs[@]}" "$target_themes_dir" - echo "Directory $target_themes_dir is synchronized with" "${source_theme_dirs[@]}" +# Go through each item in $XDG_DATA_DIRS to find all other directories where +# themes & icons are stored, and save these to source_themes_dirs & source_icons_dirs respectively +while read -r dir; do + themes_subdir=${dir%/}/themes + icons_subdir=${dir%/}/icons + # Directories inside user's home directory will be created if nonexistant + for subdir in $themes_subdir $icons_subdir; do + [[ "$subdir" = "$HOME"/* ]] && mkdir -p "$subdir" + done + [ -d "$themes_subdir" ] && source_themes_dirs+=("$themes_subdir/") + [ -d "$icons_subdir" ] && source_icons_dirs+=("$icons_subdir/") +done < <(printf '%s:%s\n' "$XDG_DATA_DIRS" "$HOME/.local/share" | tr ':' '\n' | sort -u) + +# Function to synchronize themes and icons from source to target directory +sync_themes_and_icons() { + rsync -av --delete --progress "${source_themes_dirs[@]}" "$target_themes_dir" + rsync -av --delete --progress "${source_icons_dirs[@]}" "$target_icons_dir" + echo "Directories $target_themes_dir and $target_icons_dir are synchronized with source directories" +} + +# Initial synchronization +sync_themes_and_icons + +echo "Set watch for theme directories:" "${source_themes_dirs[@]}" ", and icon directories:" "${source_icons_dirs[@]}" + +# Start watching for file changes in the source theme and icon directories +inotifywait -qmr -e 'modify,attrib,move,move_self,create,delete,delete_self,unmount' "${source_themes_dirs[@]}" "${source_icons_dirs[@]}" | +while read -r _; do + sync_themes_and_icons done