From 4811e675d8573e1c1ceb11196000eacbc333424b Mon Sep 17 00:00:00 2001
From: Tio TROM <tio@trom.tf>
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