From 9a62cf6bf1a07e09b23f7b33f6e3b43491f76d76 Mon Sep 17 00:00:00 2001
From: eSh <mr.eshua@gmail.com>
Date: Fri, 16 Sep 2022 01:14:20 +0200
Subject: [PATCH] add systemd timers for periodic fixes

---
 PKGBUILD                                      |  8 +++-
 bin/periodic/fix-flatpaks-theming             |  9 ++---
 bin/periodic/fix-theming                      | 37 ++++++++----------
 bin/periodic/fix-tweaked-desktop-files        | 39 +++++++++----------
 fixes-package.install                         |  3 ++
 systemd/services/fix-flatpaks-theming.service | 13 +++++++
 systemd/services/fix-theming.service          | 13 +++++++
 .../fix-tweaked-desktop-files.service         | 13 +++++++
 systemd/timers/fix-flatpaks-theming.timer     | 14 +++++++
 systemd/timers/fix-theming.timer              | 14 +++++++
 .../timers/fix-tweaked-desktop-files.timer    | 14 +++++++
 11 files changed, 128 insertions(+), 49 deletions(-)
 create mode 100644 fixes-package.install
 create mode 100644 systemd/services/fix-flatpaks-theming.service
 create mode 100644 systemd/services/fix-theming.service
 create mode 100644 systemd/services/fix-tweaked-desktop-files.service
 create mode 100644 systemd/timers/fix-flatpaks-theming.timer
 create mode 100644 systemd/timers/fix-theming.timer
 create mode 100644 systemd/timers/fix-tweaked-desktop-files.timer

diff --git a/PKGBUILD b/PKGBUILD
index 08e9001..7cf0b29 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -12,9 +12,10 @@ depends=('xfce4-appfinder'
 provides=('tromjaro-fixes')
 backup=()
 options=(!strip)
+install='fixes-package.install'
 
 prepare() {
-    cp -R ../bin ../flatpak-overrides ../alpm-hooks . 
+    cp -R ../bin ../flatpak-overrides ../alpm-hooks ../systemd . 
 }
 
 package() {
@@ -23,6 +24,11 @@ package() {
     install -Dm755 ${srcdir}/bin/standalone/*                          ${pkgdir}/usr/bin
     install -Dm755 ${srcdir}/bin/periodic/*                            ${pkgdir}/usr/bin
 
+    # copy systemd units
+    install -d ${pkgdir}/usr/lib/systemd/system
+    install -Dm644 ${srcdir}/systemd/services/*                        ${pkgdir}/usr/lib/systemd/system
+    install -Dm644 ${srcdir}/systemd/timers/*                          ${pkgdir}/usr/lib/systemd/system
+
     # copy alpm hooks
     install -d ${pkgdir}/usr/share/libalpm/hooks
     install -Dm644 ${srcdir}/alpm-hooks/*                              ${pkgdir}/usr/share/libalpm/hooks
diff --git a/bin/periodic/fix-flatpaks-theming b/bin/periodic/fix-flatpaks-theming
index c4ab141..d0e973c 100755
--- a/bin/periodic/fix-flatpaks-theming
+++ b/bin/periodic/fix-flatpaks-theming
@@ -1,7 +1,4 @@
 #!/bin/sh
-while :; do
-    rm -r ~/.themes/* 2> /dev/null
-    rsync -av --progress /usr/share/themes/* ~/.themes/ --exclude Windowck
-    rsync -av --progress ~/.local/share/themes/* ~/.themes/ --exclude Windowck-dark
-    sleep 600
-done
\ No newline at end of file
+rm -r ~/.themes/* 2> /dev/null
+rsync -av --progress /usr/share/themes/* ~/.themes/ --exclude Windowck
+rsync -av --progress ~/.local/share/themes/* ~/.themes/ --exclude Windowck-dark
diff --git a/bin/periodic/fix-theming b/bin/periodic/fix-theming
index 7ea4d30..1ced0dc 100755
--- a/bin/periodic/fix-theming
+++ b/bin/periodic/fix-theming
@@ -11,7 +11,6 @@ sync_theme() {
 	# Apply the current theme with gsettings
 	gsettings set org.gnome.desktop.interface gtk-theme "$theme"
 }
-
 sync_icon_theme() {
 	# Get the current icon theme
 	icon_theme=$(xfconf-query -c xsettings -p /Net/IconThemeName)
@@ -20,25 +19,21 @@ sync_icon_theme() {
 	sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt6ct/qt6ct.conf
 }
 
-while :; do
-	# Get the current system theme
-	theme_new=$(xfconf-query -c xsettings -p /Net/ThemeName)
-	# Get the current icon theme
-	icon_theme_new=$(xfconf-query -c xsettings -p /Net/IconThemeName)
-	# Get the current font name
-	font_new=$(xfconf-query -c xsettings -p /Gtk/FontName)
+# Get the current system theme
+theme_new=$(xfconf-query -c xsettings -p /Net/ThemeName)
+# Get the current icon theme
+icon_theme_new=$(xfconf-query -c xsettings -p /Net/IconThemeName)
+# Get the current font name
+font_new=$(xfconf-query -c xsettings -p /Gtk/FontName)
 
-	# Run sync_theme if the new system theme doesn't match the previous one
-	[ "$theme_new" != "$theme_prev" ] && sync_theme
-	# Run sync_icon_theme if the new icon theme doesn't match the previous one
-	[ "$icon_theme_new" != "$icon_theme_prev" ] && sync_icon_theme
-	# If the new font doesn't match the previous one, apply the new font for the title of xfce windows
-	[ "$font_new" != "$font_prev" ] && xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font_new"
+# Run sync_theme if the new system theme doesn't match the previous one
+[ "$theme_new" != "$theme_prev" ] && sync_theme
+# Run sync_icon_theme if the new icon theme doesn't match the previous one
+[ "$icon_theme_new" != "$icon_theme_prev" ] && sync_icon_theme
+# If the new font doesn't match the previous one, apply the new font for the title of xfce windows
+[ "$font_new" != "$font_prev" ] && xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font_new"
 
-	# The new values become the previous values
-	theme_prev=$theme_new
-	icon_theme_prev=$icon_theme_new
-	font_prev=$font_new
-
-	sleep 3
-done
+# The new values become the previous values
+theme_prev=$theme_new
+icon_theme_prev=$icon_theme_new
+font_prev=$font_new
diff --git a/bin/periodic/fix-tweaked-desktop-files b/bin/periodic/fix-tweaked-desktop-files
index f9bc687..9ebc42f 100755
--- a/bin/periodic/fix-tweaked-desktop-files
+++ b/bin/periodic/fix-tweaked-desktop-files
@@ -66,24 +66,21 @@ fixfiles() {
 	done
 }
 
-while :; do
-	user_new=$(ls -ad "$user"/*.desktop 2>/dev/null)
-	flatpak_local_new=$(ls -ad "$flatpak_local"/*.desktop 2>/dev/null)
-	flatpak_global_new=$(ls -ad "$flatpak_global"/*.desktop 2>/dev/null)
-	pacman_local_new=$(ls -ad "$pacman_local"/*.desktop 2>/dev/null)
-	pacman_global_new=$(ls -ad "$pacman_global"/*.desktop 2>/dev/null)
-	snap_new=$(ls -ad "$snap"/*.desktop 2>/dev/null)
-	[ "$user_new" != "$user_old" ] && detectfiles
-	[ "$flatpak_local_new" != "$flatpak_local_old" ] ||
-		[ "$flatpak_global_new" != "$flatpak_global_old" ] ||
-		[ "$pacman_local_new" != "$pacman_local_old" ] ||
-		[ "$pacman_global_new" != "$pacman_global_old" ] ||
-		[ "$snap_new" != "$snap_old" ] && fixfiles
-	user_old=$user_new
-	flatpak_local_old=$flatpak_local_new
-	flatpak_global_old=$flatpak_global_new
-	pacman_local_old=$pacman_local_new
-	pacman_global_old=$pacman_global_new
-	snap_old=$snap_new
-	sleep 5
-done
\ No newline at end of file
+user_new=$(ls -ad "$user"/*.desktop 2>/dev/null)
+flatpak_local_new=$(ls -ad "$flatpak_local"/*.desktop 2>/dev/null)
+flatpak_global_new=$(ls -ad "$flatpak_global"/*.desktop 2>/dev/null)
+pacman_local_new=$(ls -ad "$pacman_local"/*.desktop 2>/dev/null)
+pacman_global_new=$(ls -ad "$pacman_global"/*.desktop 2>/dev/null)
+snap_new=$(ls -ad "$snap"/*.desktop 2>/dev/null)
+[ "$user_new" != "$user_old" ] && detectfiles
+[ "$flatpak_local_new" != "$flatpak_local_old" ] ||
+	[ "$flatpak_global_new" != "$flatpak_global_old" ] ||
+	[ "$pacman_local_new" != "$pacman_local_old" ] ||
+	[ "$pacman_global_new" != "$pacman_global_old" ] ||
+	[ "$snap_new" != "$snap_old" ] && fixfiles
+user_old=$user_new
+flatpak_local_old=$flatpak_local_new
+flatpak_global_old=$flatpak_global_new
+pacman_local_old=$pacman_local_new
+pacman_global_old=$pacman_global_new
+snap_old=$snap_new
diff --git a/fixes-package.install b/fixes-package.install
new file mode 100644
index 0000000..5febd7f
--- /dev/null
+++ b/fixes-package.install
@@ -0,0 +1,3 @@
+post_install() {
+    systemctl enable fix-*.timer
+}
diff --git a/systemd/services/fix-flatpaks-theming.service b/systemd/services/fix-flatpaks-theming.service
new file mode 100644
index 0000000..e144dc8
--- /dev/null
+++ b/systemd/services/fix-flatpaks-theming.service
@@ -0,0 +1,13 @@
+# This service unit is for fix-flatpaks-theming script
+#
+
+[Unit]
+Description=Fix flatpak theming script
+Wants=fix-flatpaks-theming.timer
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/fix-flatpaks-theming
+
+[Install]
+WantedBy=multi-user.target
diff --git a/systemd/services/fix-theming.service b/systemd/services/fix-theming.service
new file mode 100644
index 0000000..c82d37a
--- /dev/null
+++ b/systemd/services/fix-theming.service
@@ -0,0 +1,13 @@
+# This service unit is for fix-theming script
+#
+
+[Unit]
+Description=Fix theming script
+Wants=fix-theming.timer
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/fix-theming
+
+[Install]
+WantedBy=multi-user.target
diff --git a/systemd/services/fix-tweaked-desktop-files.service b/systemd/services/fix-tweaked-desktop-files.service
new file mode 100644
index 0000000..5fc7195
--- /dev/null
+++ b/systemd/services/fix-tweaked-desktop-files.service
@@ -0,0 +1,13 @@
+# This service unit is for fix-tweaked-desktop-files script
+#
+
+[Unit]
+Description=Fix tweaked desktop files script
+Wants=fix-tweaked-desktop-files.timer
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/fix-tweaked-desktop-files
+
+[Install]
+WantedBy=multi-user.target
diff --git a/systemd/timers/fix-flatpaks-theming.timer b/systemd/timers/fix-flatpaks-theming.timer
new file mode 100644
index 0000000..614059c
--- /dev/null
+++ b/systemd/timers/fix-flatpaks-theming.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-flatpaks-theming service unit
+#
+
+[Unit]
+Description=Run fix flatpaks theming script every 600 seconds
+Requires=fix-flatpaks-theming.service
+
+[Timer]
+Unit=fix-flatpaks-theming.service
+OnBootSec=1
+OnUnitActiveSec=600
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file
diff --git a/systemd/timers/fix-theming.timer b/systemd/timers/fix-theming.timer
new file mode 100644
index 0000000..7dd921f
--- /dev/null
+++ b/systemd/timers/fix-theming.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-theming service unit
+#
+
+[Unit]
+Description=Run fix theming script every 3 seconds
+Requires=fix-theming.service
+
+[Timer]
+Unit=fix-theming.service
+OnBootSec=1
+OnUnitActiveSec=3
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file
diff --git a/systemd/timers/fix-tweaked-desktop-files.timer b/systemd/timers/fix-tweaked-desktop-files.timer
new file mode 100644
index 0000000..675a196
--- /dev/null
+++ b/systemd/timers/fix-tweaked-desktop-files.timer
@@ -0,0 +1,14 @@
+# This timer unit is for fix-tweaked-desktop-files service unit
+#
+
+[Unit]
+Description=Run fix tweaked desktop files script every 5 seconds
+Requires=fix-tweaked-desktop-files.service
+
+[Timer]
+Unit=ffix-tweaked-desktop-files.service
+OnBootSec=1
+OnUnitActiveSec=5
+
+[Install]
+WantedBy=timers.target
\ No newline at end of file