Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package profile-sync-daemon for 
openSUSE:Factory checked in at 2026-09-14 16:21:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/profile-sync-daemon (Old)
 and      /work/SRC/openSUSE:Factory/.profile-sync-daemon.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "profile-sync-daemon"

Mon Sep 14 16:21:54 2026 rev:4 rq:1377689 version:7.04

Changes:
--------
--- /work/SRC/openSUSE:Factory/profile-sync-daemon/profile-sync-daemon.changes  
2024-04-29 17:57:48.886211266 +0200
+++ 
/work/SRC/openSUSE:Factory/.profile-sync-daemon.new.1265/profile-sync-daemon.changes
        2026-09-14 16:22:02.103693346 +0200
@@ -1,0 +2,17 @@
+Sun Sep 13 12:03:18 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 7.04:
+  * Overlayfs mode now uses fuse-overlayfs instead of the dropped
+    sudo helper psd-overlay-helper (binary and man page removed);
+    overlayfs mode requires fuse-overlayfs and fuse3
+  * Firefox: follow new profile location, honor XDG_CONFIG_HOME,
+    add Firefox Flatpak support
+  * New contrib browser profiles: floorp, thorium, zen,
+    helium-browser, firefox-flatpak{,-cache}
+  * psd-resync.timer reworked to OnCalendar scheduling
+  * Assign psd to the background systemd slice, reduce crash-recovery I/O
+  * Fix lingering gdbus process, fix bug in enforce()
+- Capitalize zsh-completion subpackage summary (rpmlint
+  summary-not-capitalized)
+
+-------------------------------------------------------------------

Old:
----
  profile-sync-daemon-6.50.tar.gz

New:
----
  profile-sync-daemon-7.04.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ profile-sync-daemon.spec ++++++
--- /var/tmp/diff_new_pack.1i2QnI/_old  2026-09-14 16:22:03.235740871 +0200
+++ /var/tmp/diff_new_pack.1i2QnI/_new  2026-09-14 16:22:03.237740955 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package profile-sync-daemon
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 # Copyright (c) 2013-2020 Artem Polishchuk & Christopher Meng
 #
 # All modifications and additions to the file contributed by third parties
@@ -19,7 +19,7 @@
 
 %global shortname psd
 Name:           profile-sync-daemon
-Version:        6.50
+Version:        7.04
 Release:        0
 Summary:        Symlinks and syncs browser profile dirs to RAM thus reducing 
HDD/SDD calls
 License:        MIT
@@ -30,6 +30,10 @@
 BuildRequires:  systemd-rpm-macros
 BuildRequires:  zsh
 Requires:       rsync
+# overlayfs mode needs fuse-overlayfs + fusermount3 (fuse3); soft dep
+# since the default sync mode works without them
+Recommends:     fuse-overlayfs
+Recommends:     fuse3
 BuildArch:      noarch
 
 %description
@@ -40,7 +44,7 @@
 the major design goals of psd is a completely transparent user experience.
 
 %package        zsh-completion
-Summary:        zsh completion for %{name}
+Summary:        Zsh completion for %{name}
 Requires:       %{name} = %{version}
 Supplements:    (%{name} and zsh)
 
@@ -71,7 +75,6 @@
 %license MIT LICENSE
 %{_bindir}/%{name}
 %{_bindir}/%{shortname}
-%{_bindir}/%{shortname}-overlay-helper
 %{_bindir}/%{shortname}-suspend-sync
 %{_datadir}/%{shortname}/
 %{_mandir}/man1/*.1%{?ext_man}

++++++ profile-sync-daemon-6.50.tar.gz -> profile-sync-daemon-7.04.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/INSTALL 
new/profile-sync-daemon-7.04/INSTALL
--- old/profile-sync-daemon-6.50/INSTALL        2023-10-02 09:51:14.000000000 
+0200
+++ new/profile-sync-daemon-7.04/INSTALL        2026-07-03 13:01:30.000000000 
+0200
@@ -2,6 +2,8 @@
  bash >=4.0
  coreutils
  findutils
+ fuse3
+ fuse-overlayfs
  glib2 (optional for suspend-sync support via gdbus)
  kmod
  rsync
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/MIT 
new/profile-sync-daemon-7.04/MIT
--- old/profile-sync-daemon-6.50/MIT    2023-10-02 09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/MIT    2026-07-03 13:01:30.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2023 graysky
+Copyright (c) 2013-2026 graysky
 
 Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
of the Software, and to permit persons to whom the Software is furnished to do 
so, subject to the following conditions:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/Makefile 
new/profile-sync-daemon-7.04/Makefile
--- old/profile-sync-daemon-6.50/Makefile       2023-10-02 09:51:14.000000000 
+0200
+++ new/profile-sync-daemon-7.04/Makefile       2026-07-03 13:01:30.000000000 
+0200
@@ -1,4 +1,4 @@
-VERSION = 6.50
+VERSION = 7.04
 PN = profile-sync-daemon
 
 PREFIX ?= /usr
@@ -27,7 +27,6 @@
        $(Q)echo -e '\033[1;32mInstalling main script...\033[0m'
        $(INSTALL_DIR) "$(DESTDIR)$(BINDIR)"
        $(INSTALL_PROGRAM) common/$(PN) "$(DESTDIR)$(BINDIR)/$(PN)"
-       $(INSTALL_PROGRAM) common/psd-overlay-helper 
"$(DESTDIR)$(BINDIR)/psd-overlay-helper"
        $(INSTALL_PROGRAM) common/psd-suspend-sync 
"$(DESTDIR)$(BINDIR)/psd-suspend-sync"
        ln -sf $(PN) "$(DESTDIR)$(BINDIR)/psd"
        $(INSTALL_DIR) "$(DESTDIR)$(ZSHDIR)"
@@ -42,7 +41,6 @@
        $(Q)echo -e '\033[1;32mInstalling manpage...\033[0m'
        $(INSTALL_DIR) "$(DESTDIR)$(MANDIR)"
        $(INSTALL_DATA) doc/psd.1 "$(DESTDIR)$(MANDIR)/psd.1"
-       $(INSTALL_DATA) doc/psd-overlay-helper.1 
"$(DESTDIR)$(MANDIR)/psd-overlay-helper.1"
        ln -sf psd.1 "$(DESTDIR)$(MANDIR)/$(PN).1"
 
 install-systemd:
@@ -58,7 +56,6 @@
        $(RM) "$(DESTDIR)$(BINDIR)/$(PN)"
        $(RM) "$(DESTDIR)$(BINDIR)/psd"
        $(RM) "$(DESTDIR)$(ZSHDIR)/_psd"
-       $(RM) "$(DESTDIR)$(BINDIR)/psd-overlay-helper"
        $(RM) "$(DESTDIR)$(BINDIR)/psd-suspend-sync"
        $(RM) "$(DESTDIR)$(SHAREDIR)/psd.conf"
        $(RM) -rf "$(DESTDIR)$(SHAREDIR)/browsers"
@@ -68,7 +65,6 @@
 uninstall-man:
        $(RM) -f "$(DESTDIR)$(MANDIR)/$(PN).1"
        $(RM) -f "$(DESTDIR)$(MANDIR)/psd.1"
-       $(RM) -f "$(DESTDIR)$(MANDIR)/psd-overlay-helper.1"
 
 uninstall-systemd:
        $(RM) "$(DESTDIR)$(INITDIR_SYSTEMD)/psd.service"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/README.md 
new/profile-sync-daemon-7.04/README.md
--- old/profile-sync-daemon-6.50/README.md      2023-10-02 09:51:14.000000000 
+0200
+++ new/profile-sync-daemon-7.04/README.md      2026-07-03 13:01:30.000000000 
+0200
@@ -11,7 +11,8 @@
 * Chromium
 * Conkeror
 * Epiphany
-* Firefox (stable, beta, and aurora)
+* Firefox (version 147 and above use freedesktop.org XDG base dir specs others 
use legacy `~/.mozilla`)
+* Firefox flatpak (run `flatpak override --user org.mozilla.firefox 
--filesystem=/run/user/$UID/psd` once to give required access)
 * Firefox-trunk (this is an Ubuntu-only browser: 
http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html)
 * Google Chrome (stable, beta, and dev)
 * Heftig's version of Aurora (this is an Arch Linux-only browser: 
https://bbs.archlinux.org/viewtopic.php?id=117157)
@@ -41,7 +42,6 @@
 * Arch: in the extra 
[repo](https://archlinux.org/packages/extra/any/profile-sync-daemon/).
 * Debian: in the official 
[repos](https://packages.debian.org/unstable/profile-sync-daemon).
 * Exherbo: in the official 
[repos](http://git.exherbo.org/summer/packages/net-www/profile-sync-daemon).
-* Fedora: in the official 
[repos](https://src.fedoraproject.org/rpms/profile-sync-daemon).
 * Gentoo: in the official 
[repos](http://packages.gentoo.org/package/www-misc/profile-sync-daemon).
 * NixOS: in the official 
[repo](https://search.nixos.org/packages?channel=22.11&from=0&size=50&sort=relevance&type=packages&query=profile-sync).
 * Ubuntu: in Universe 
[repo](https://packages.ubuntu.com/search?keywords=profile-sync-daemon).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/common/browsers/firefox 
new/profile-sync-daemon-7.04/common/browsers/firefox
--- old/profile-sync-daemon-6.50/common/browsers/firefox        2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/common/browsers/firefox        2026-07-03 
13:01:30.000000000 +0200
@@ -1,3 +1,21 @@
+if [[ -d "$XDG_CONFIG_HOME/mozilla/firefox" ]]; then
+    index=0
+    PSNAME="$browser"
+    while read -r profileItem; do
+        if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
+            # path is not relative
+            DIRArr[$index]="$profileItem"
+        else
+            # we need to append the default path to give a
+            # fully qualified path
+            DIRArr[$index]="$XDG_CONFIG_HOME/mozilla/firefox/$profileItem"
+        fi
+        (( index=index+1 ))
+    done < <(grep '^[Pp]ath=' "$XDG_CONFIG_HOME/mozilla/firefox/profiles.ini" 
| sed 's/[Pp]ath=//')
+fi
+
+check_suffix=1
+
 if [[ -d "$HOME"/.mozilla/firefox ]]; then
     index=0
     PSNAME="$browser"
@@ -11,7 +29,8 @@
             DIRArr[$index]="$HOME/.mozilla/firefox/$profileItem"
         fi
         (( index=index+1 ))
-    done < <(grep '[Pp]'ath= "$HOME"/.mozilla/firefox/profiles.ini | sed 
's/[Pp]ath=//')
+    done < <(grep '^[Pp]ath=' "$HOME"/.mozilla/firefox/profiles.ini | sed 
's/[Pp]ath=//')
 fi
 
-check_suffix=1
\ No newline at end of file
+check_suffix=1
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/profile-sync-daemon-6.50/common/profile-sync-daemon.in 
new/profile-sync-daemon-7.04/common/profile-sync-daemon.in
--- old/profile-sync-daemon-6.50/common/profile-sync-daemon.in  2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/common/profile-sync-daemon.in  2026-07-03 
13:01:30.000000000 +0200
@@ -121,7 +121,7 @@
 if [[ -f "$PID_FILE" ]]; then
   if [[ -f "$PSDCONFDIR/.psd.conf" ]]; then
     PSDCONF="$PSDCONFDIR/.psd.conf"
-    unset USE_OVERLAYFS USE_SUSPSYNC BROWSERS USE_BACKUPS BACKUP_LIMIT
+    unset USE_SUSPSYNC BROWSERS USE_BACKUPS BACKUP_LIMIT
     . "$PSDCONF"
     # defining VOLATILE in the config is deprecated since v6.16
     VOLATILE="$XDG_RUNTIME_DIR/psd"
@@ -157,16 +157,6 @@
 readarray -t BROWSERS < <(printf '%s\n' "${BROWSERS[@]}" | awk '!x[$0]++')
 
 # simple function to determine user intent rather than using a null value
-case "${USE_OVERLAYFS,,}" in
-  y|yes|true|t|on|1|enabled|enable|use)
-    OLFS=1
-    ;;
-  *)
-    OLFS=0
-    ;;
-esac
-
-# simple function to determine user intent rather than using a null value
 case "${USE_SUSPSYNC,,}" in
   y|yes|true|t|on|1|enabled|enable|use)
     SUSPSYNC=1
@@ -188,28 +178,6 @@
     ;;
 esac
 
-# determine if we are using overlayfs (v22 and below) or overlay (v23 and 
above)
-# since mount should call modprobe on invocation, check to see if either
-# module is in the tree using modinfo
-
-if [[ $OLFS -eq 1 ]]; then
-  # first check to see if either is hardcoded into the kernel
-  # and of course prefer version 23
-  [[ $(grep -ciE "overlayfs$" /proc/filesystems) -eq 1 ]] && OLFSVER=22
-  [[ $(grep -ciE "overlay$" /proc/filesystems) -eq 1 ]] && OLFSVER=23
-fi
-
-if [[ -z $OLFSVER ]]; then
-  # if neither is hardcoded, see if either module is available
-  if modinfo overlayfs &>/dev/null; then
-    OLFSVER=22
-  fi
-
-  if modinfo overlay &>/dev/null; then
-    OLFSVER=23
-  fi
-fi
-
 header() {
   echo -e "${BLD}Profile-sync-daemon v$VERS${NRM}"
   echo
@@ -235,14 +203,6 @@
       exit 1
     fi
   fi
-  if [[ $OLFS -eq 1 ]]; then
-    [[ $OLFSVER -ge 22 ]] || {
-      echo -e " ${BLD}Your kernel requires either the 
${BLU}overlay${NRM}${BLD} or ${BLU}overlayfs${NRM}${BLD} module to use${NRM}"
-          echo -e " ${BLD}to use psd's in overlay mode. Cannot find either in 
your kernel so compile it in and${NRM}"
-          echo -e " ${BLD}try again or remove the option from 
${BLU}$PSDCONF${NRM}${BLD}. ${RED}Aborting!${NRM}" >&2
-          exit 1
-        }
-  fi
 
   if [[ -f /etc/psd.conf ]]; then
     echo -e "${BLD} This version of psd does not support /etc/psd.conf since 
it runs as your user.${NRM}"
@@ -253,22 +213,13 @@
 }
 
 config_check() {
-  if [[ $OLFS -eq 1 ]]; then
-    # user must have sudo rights to call /usr/bin/mount
-    # and /usr/bin/umount to use overlay mode
-
-    if ! sudo -kn psd-overlay-helper &>/dev/null; then
-      FAILCODE=1
-    fi
-
-    if [[ $FAILCODE -ne 0 ]]; then
-      echo -e "${BLD}${RED} ERROR!${NRM}${BLD} To use overlayfs mode, $user 
needs sudo access to ${BLU}/usr/bin/psd-overlay-helper${NRM}${BLD}${NRM}"
-      echo
-      echo -e " ${BLD}Add the following line to the end of 
${BLU}/etc/sudoers${NRM}${BLD} to enable this functionality:${NRM}"
-      echo -e "  ${BLD}$user ALL=(ALL) NOPASSWD: 
/usr/bin/psd-overlay-helper${NRM}"
+  # fuse3 is a depends of fuse-overlayfs but there are static builds floating 
around so to protect data, check for both
+  for _bin in fuse-overlayfs fusermount3; do
+    if ! command -v "$_bin" >/dev/null 2>&1; then
+      echo -e "${BLD}${RED} ERROR!${NRM}${BLD} To use overlayfs mode, install 
fuse-overlayfs and fuse3${NRM}${BLD}${NRM}"
       exit 1
     fi
-  fi
+  done
 
   for browser in "${BROWSERS[@]}"; do
     if [[ ! -f "$SHAREDIR/browsers/$browser" ]]; then
@@ -306,8 +257,6 @@
         else
           echo "Ungraceful state detected for $DIR so fixing"
           unlink "$DIR"
-          # refuse to start browser while recovery
-          ln -s /dev/null "$DIR"
         fi
       fi
 
@@ -336,7 +285,6 @@
             cp -a --reflink=auto "$TARGETTOKEEP" "$BACKUP-crashrecovery-$NOW"
           fi
 
-          unlink "$DIR"
           mv --no-target-directory "$TARGETTOKEEP" "$DIR"
           rm -rf "$BACKUP"
         else
@@ -346,14 +294,10 @@
 
           if [[ $CRRE -eq 1 ]]; then
             cp -a --reflink=auto "$BACKUP" "$BACKUP-crashrecovery-$NOW"
-            unlink "$DIR"
             mv --no-target-directory "$BACKUP" "$DIR"
           fi
         fi
       fi
-
-      # if overlayfs was active but is no longer, remove $BACK_OVFS
-      [[ $OLFS -eq 1 ]] || rm -rf "$BACK_OVFS"
     done
   done
 }
@@ -368,7 +312,7 @@
       local CRASHArr=()
       while IFS= read -d '' -r backup; do
         CRASHArr=("${CRASHArr[@]}" "$backup")
-      done < <(find "${DIR%/*}" -type d -name '*crashrecovery*' -print0 | sort 
-r -z)
+      done < <(find "${DIR%/*}" -maxdepth 1 -type d -name 
"${DIR##*/}-backup-crashrecovery-*" -print0 | sort -r -z)
 
       if [[ ${#CRASHArr[@]} -gt 0 ]]; then
         echo -e "${BLD}Deleting ${#CRASHArr[@]} crashrecovery dir(s) for 
profile ${BLU}$DIR${NRM}"
@@ -499,48 +443,52 @@
       PREFIXP=$(stat -c %a "$DIR")
       [[ -r "$TMP" ]] || install -dm"$PREFIXP" --owner="$user" 
--group="$group" "$TMP"
 
-      if [[ $OLFS -eq 1 ]]; then
-        if [[ $OLFSVER -eq 23 ]]; then
-          [[ -r "$UPPER" ]] || install -dm"$PREFIXP" --owner="$user" 
--group="$group" "$UPPER"
-          [[ -r "$WORK" ]] || install -dm"$PREFIXP" --owner="$user" 
--group="$group" "$WORK"
-        elif [[ $OLFSVER -eq 22 ]]; then
-          [[ -r "$UPPER" ]] || install -dm"$PREFIXP" --owner="$user" 
--group="$group" "$UPPER"
-        fi
+      if [[ ! -r "$UPPER" ]]; then
+        install -dm"$PREFIXP" --owner="$user" --group="$group" "$UPPER" || 
exit 2
+      fi
+      if [[ ! -r "$WORK" ]]; then
+        install -dm"$PREFIXP" --owner="$user" --group="$group" "$WORK" || exit 
2
       fi
 
       # backup target and link to tmpfs container
       if [[ $(readlink "$DIR") != "$TMP" ]]; then
         mv --no-target-directory "$DIR" "$BACKUP"
-        # refuse to start browser while initial sync
-        ln -s /dev/null "$DIR"
       fi
 
       # sync the tmpfs targets to the disc
       if [[ -e "$DIR"/.flagged ]]; then
         REPORT="resync"
-        if [[ $OLFS -eq 1 ]]; then
-          rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$DIR/" "$BACK_OVFS/"
-        else
-          rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$DIR/" "$BACKUP/"
+        if ! rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$DIR/" "$BACK_OVFS/"; then
+          echo -e "${RED}Error: Failed to resync $DIR to $BACK_OVFS${NRM}" >&2
+          exit 2
         fi
       else
         # initial sync
         REPORT="sync"
-        if [[ $OLFS -eq 1 ]]; then
-          if ! sudo psd-overlay-helper -v "$OLFSVER" -l "$BACKUP" -u "$UPPER" 
-w "$WORK" -d "$TMP" mountup; then
-            echo -e "Error in trying to mount $TMP - this should not happen!"
-            exit 1
+        if ! mountpoint -q "$TMP"; then
+          overlay_opts="lowerdir=$BACKUP,upperdir=$UPPER,workdir=$WORK"
+          if [[ $FIREJAIL -eq 1 ]]; then
+            overlay_opts="allow_root,$overlay_opts"
+          fi
+          fuse-overlayfs -o "$overlay_opts" "$TMP"
+          if ! mountpoint -q "$TMP"; then
+            exit 2
           fi
-        else
-          # keep user from launching browser while rsync is active
-          rsync -aX --inplace --no-whole-file "$BACKUP/" "$TMP"
         fi
 
-        # now browser can start
-        [[ $(readlink "$DIR") = "/dev/null" ]] && unlink "$DIR"
+        [[ -h "$DIR" ]] && unlink "$DIR"
         ln -s "$TMP" "$DIR"
+
         chown -h "$user":"$group" "$DIR"
         touch "$DIR/.flagged"
+
+        # create $BACK_OVFS directory for storing resync data
+        if [[ ! -d "$BACK_OVFS" ]]; then
+          install -dm"$PREFIXP" --owner="$user" --group="$group" "$BACK_OVFS" 
|| {
+            echo -e "${RED}Error: Failed to create $BACK_OVFS${NRM}" >&2
+            exit 2
+          }
+        fi
       fi
       echo -e "${BLD}$browser $REPORT successful${NRM}"
     else
@@ -569,7 +517,6 @@
       echo "# Any edits to the live config: $PSDCONFDIR/psd.conf"
       echo "# will be applied the _next_ time psd is activated."
       echo "#"
-      echo "USE_OVERLAYFS=\"$USE_OVERLAYFS\""
       echo "USE_SUSPSYNC=\"$USE_SUSPSYNC\""
       echo "BROWSERS=\"${BROWSERS[*]}\""
       echo "USE_BACKUPS=\"$USE_BACKUPS\""
@@ -587,10 +534,12 @@
 enforce() {
   local browser
   for browser in "${BROWSERS[@]}"; do
+  load_env_for "$browser"
+  for DIR in "${DIRArr[@]}"; do
     local CRASHArr=()
     while IFS= read -d '' -r backup; do
       CRASHArr=("${CRASHArr[@]}" "$backup")
-    done < <(find "${DIR%/*}" -type d -name '*crashrecovery*' -print0 | sort 
-r -z)
+    done < <(find "${DIR%/*}" -maxdepth 1 -type d -name 
"${DIR##*/}-backup-crashrecovery-*" -print0 | sort -r -z)
 
     if [[ ${#CRASHArr[@]} -gt $BACKUP_LIMIT ]]; then
       for remove in "${CRASHArr[@]:$BACKUP_LIMIT}"; do
@@ -598,6 +547,7 @@
       done
     fi
   done
+  done
 }
 
 do_unsync() {
@@ -620,15 +570,37 @@
       # check if user has browser profile
       if [[ -h "$DIR" ]]; then
         unlink "$DIR"
-        # this assumes that the backup is always updated so
-        # be sure to invoke a sync before an unsync
-        #
-        # restore original dirtree
-        [[ -d "$BACKUP" ]] && mv --no-target-directory "$BACKUP" "$DIR"
-        if [[ $OLFS -eq 1 ]] && mountpoint -q "$TMP"; then
-          rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$BACK_OVFS/" "$DIR/"
-          sudo psd-overlay-helper -d "$TMP" -w "$WORK" mountdown && rm -rf 
"$TMP" "$UPPER"
+
+        # unmount overlayfs FIRST while BACKUP still exists at original 
location
+        # moving BACKUP before unmounting breaks the overlayfs mount (lowerdir 
path disappears)
+        if mountpoint -q "$TMP"; then
+          # sync latest changes from overlayfs to BACK_OVFS, then to BACKUP 
before unmounting
+          # always update BACK_OVFS from live overlayfs first to capture 
latest changes
+          if [[ -d "$BACK_OVFS" ]]; then
+            # Update BACK_OVFS with latest changes from live overlayfs
+            if ! rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$TMP/" "$BACK_OVFS/"; then
+              echo -e "${RED}Error: Failed to sync $TMP to $BACK_OVFS during 
unsync${NRM}" >&2
+              exit 2
+            fi
+            # sync BACK_OVFS to BACKUP
+            if ! rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$BACK_OVFS/" "$BACKUP/"; then
+              echo -e "${RED}Error: Failed to sync $BACK_OVFS to $BACKUP 
during unsync${NRM}" >&2
+              exit 2
+            fi
+          else
+            # BACK_OVFS doesn't exist, sync directly from TMP to BACKUP
+            if ! rsync -aX --delete-after --inplace --no-whole-file --exclude 
.flagged "$TMP/" "$BACKUP/"; then
+              echo -e "${RED}Error: Failed to sync $TMP to $BACKUP during 
unsync${NRM}" >&2
+              exit 2
+            fi
+          fi
+          # unmount (before moving BACKUP)
+          fusermount3 -u "$TMP"
+          rm -rf "$TMP" "$UPPER" "$WORK"
         fi
+
+        # restore BACKUP (which now has the changes merged in)
+        [[ -d "$BACKUP" ]] && mv --no-target-directory "$BACKUP" "$DIR"
         [[ -d "$TMP" ]] && rm -rf "$TMP"
         echo -e "${BLD}$browser unsync successful${NRM}"
       else
@@ -650,13 +622,6 @@
   else
     psss_state="disabled"
   fi
-  if [[ $OLFS -eq 1 ]]; then
-    olfs_color="${GRN}"
-    ofls_state="enabled"
-  else
-    olfs_color="${RED}"
-    ofls_state="disabled"
-  fi
   [[ "$psd_state" = "active" ]] && psd_color="${GRN}" || psd_color="${RED}"
   [[ "$resync_state" = "active" ]] && resync_color="${GRN}" || 
resync_color="${RED}"
   [[ "$psd_suspend_sync_state" != 0 ]] && psss_color="${GRN}" || 
psss_color="${RED}"
@@ -666,8 +631,6 @@
   echo -e "$(tput cr)$(tput cuf 17) 
${resync_color}$resync_state${NRM}${BLD}${NRM}"
   echo -en " ${BLD}sync on sleep:"
   echo -e "$(tput cr)$(tput cuf 17) ${psss_color}$psss_state${NRM}${BLD}${NRM}"
-  echo -en " ${BLD}use overlayfs:"
-  echo -e "$(tput cr)$(tput cuf 17) ${olfs_color}$ofls_state${NRM}${BLD}${NRM}"
   echo
   echo -e "${BLD}Psd will manage the following per 
${BLU}${PSDCONF}${NRM}${BLD}:${NRM}"
   echo
@@ -686,7 +649,7 @@
         local CRASHArr=()
         while IFS= read -d '' -r backup; do
           CRASHArr=("${CRASHArr[@]}" "$backup")
-        done < <(find "${DIR%/*}" -type d -name '*crashrecovery*' -print0 | 
sort -r -z)
+        done < <(find "${DIR%/*}" -maxdepth 1 -type d -name 
"${DIR##*/}-backup-crashrecovery-*" -print0 | sort -r -z)
 
         # get permissions on profile dir and be smart about it since symlinks 
are all 777
         [[ -f $PID_FILE ]] && TRUEP=$(stat -c %a "$BACKUP") || TRUEP=$(stat -c 
%a "$DIR")
@@ -714,7 +677,7 @@
         echo -e "$(tput cr)$(tput cuf 17) 
${GRN}$VOLATILE/$user-$browser$suffix${NRM}"
         echo -en " ${BLD}profile size:"
         echo -e "$(tput cr)$(tput cuf 17) $psize${NRM}"
-        if [[ $OLFS -eq 1 ]]; then
+        if [[ -f $PID_FILE ]]; then
           rwsize=$(du -Dh --max-depth=0 "$UPPER" 2>/dev/null | awk '{ print $1 
}')
           echo -en " ${BLD}overlayfs size:"
           echo -e "$(tput cr)$(tput cuf 17) $rwsize${NRM}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/common/psd-overlay-helper 
new/profile-sync-daemon-7.04/common/psd-overlay-helper
--- old/profile-sync-daemon-6.50/common/psd-overlay-helper      2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/common/psd-overlay-helper      1970-01-01 
01:00:00.000000000 +0100
@@ -1,60 +0,0 @@
-#!/bin/bash
-readonly PATH=/usr/bin:/bin
-readonly IFS=$' \t\n'
-
-while getopts :v:l:u:w:d: OPT; do
-  case $OPT in
-    v)
-      declare -ir OLFSVER=$OPTARG
-      ;;
-    l)
-      readonly BACKUP=$OPTARG
-      ;;
-    u)
-      readonly UPPER=$OPTARG
-      ;;
-    w)
-      readonly WORK=$OPTARG
-      ;;
-    d)
-      readonly TMP=$OPTARG
-      ;;
-    *)
-      exit 1
-      ;;
-  esac
-done
-shift $(( OPTIND - 1 ))
-OPTIND=1
-
-## TODO - pass error codes back to psd so it can break if the mount command 
fails
-case "$1" in
-  mountup)
-    # write access to upper/workdir is required or do not overlay lowerdirs
-    user=$(stat -c %U "$TMP")
-    if ! sudo -u "$user" test -w "$BACKUP"; then
-      echo "User $user has no write permissions for $BACKUP. Aborting..." >&2
-      exit 1
-    fi
-
-    user=$(stat -c %U "$UPPER")
-    if ! sudo -u "$user" test -w "$BACKUP"; then
-      echo "User $user has no write permissions for $BACKUP. Aborting..." >&2
-      exit 1
-    fi
-    if [[ $OLFSVER -eq 23 ]]; then
-      mount -o nosuid,nodev -t overlay overlaid 
-olowerdir="$BACKUP",upperdir="$UPPER",workdir="$WORK" "$TMP"
-    elif [[ $OLFSVER -eq 22 ]]; then
-      mount -o nosuid,nodev -t overlayfs overlaid 
-olowerdir="$BACKUP",upperdir="$UPPER" "$TMP"
-    fi
-    ;;
-  mountdown)
-    umount "$TMP" && rm -rf "$WORK"
-    ;;
-  *)
-    echo "Do not call this script directly; psd will do so for you. Thank you, 
come again."
-    exit 0
-    ;;
-esac
-
-# vim:set ts=2 sw=2 et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/common/psd-suspend-sync 
new/profile-sync-daemon-7.04/common/psd-suspend-sync
--- old/profile-sync-daemon-6.50/common/psd-suspend-sync        2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/common/psd-suspend-sync        2026-07-03 
13:01:30.000000000 +0200
@@ -27,19 +27,18 @@
   done
 }
 
-coproc bus (
+exec {gdbus_fd}< <(gdbus monitor --system --dest "$dbus_interface")
+gdbus_PID=$!
+trap 'exec {gdbus_fd}<&-; kill "$gdbus_PID"' EXIT
+
+{
+  # delay sleep until browser profiles are written to disk
   systemd-inhibit --mode="delay" --what="sleep" \
     --who="profile-sync-daemon" --why="psd resync on suspend" \
-    gdbus monitor --system --dest "$dbus_interface"
-)
-
-# keeps the inhibitor running until the system is about to sleep
-dbus_process_sleep <& "${bus[0]}"
-
-# starts running before the system goes to sleep
-dbus_process_sleep < <(gdbus monitor --system --dest "$dbus_interface") &
+    cat | dbus_process_sleep
 
-# kill the inhibitor so that the system can sleep
-[ -n "$bus_PID" ] && kill "$bus_PID"
+  # detect resume and restart the entire process
+  dbus_process_sleep
+} <&$gdbus_fd
 
 # vim:set ts=2 sw=2 et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/common/psd.conf 
new/profile-sync-daemon-7.04/common/psd.conf
--- old/profile-sync-daemon-6.50/common/psd.conf        2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/common/psd.conf        2026-07-03 
13:01:30.000000000 +0200
@@ -8,12 +8,6 @@
 ## To protect data from corruption, in the event that you do make an edit while
 ## psd is active, any changes made will be applied the next time you start psd.
 
-# Uncomment and set to "yes" to use overlayfs instead of a full copy to reduce
-# the memory costs and to improve sync/unsync operations. Note that your kernel
-# MUST have this module available in order to use this mode.
-#
-#USE_OVERLAYFS="no"
-
 # Uncomment and set to "yes" to resync on suspend to reduce potential data 
loss.
 # Note that your system MUST have gdbus from glib2 installed to use this mode.
 #
@@ -22,6 +16,9 @@
 # List any browsers in the array below to have managed by psd. Useful if you do
 # not wish to have all possible browser profiles managed which is the default 
if
 # this array is left commented.
+# Note: If you want to use firefox-flatpak and firefox-flatpak-cache, you have
+# to add the psd-directory as an override:
+# flatpak override --user org.mozilla.firefox --filesystem=/run/user/$UID/psd
 #
 # Possible values:
 #  chromium
@@ -30,6 +27,8 @@
 #  epiphany
 #  falkon
 #  firefox
+#  firefox-flatpak
+#  firefox-flatpak-cache
 #  firefox-trunk
 #  google-chrome
 #  google-chrome-beta
@@ -68,3 +67,11 @@
 #
 # The default is to save the most recent 5 crash recovery snapshots.
 #BACKUP_LIMIT=5
+
+# IMPORTANT to enable the following option, you must edit /etc/fuse.conf
+# uncommenting: user_allow_other
+# Failure to do that will result in a failure to start psd!
+#
+# Uncomment the following if you are a using Firejail with psd to allow 
compatible
+# use of fuse-overlayfs mount
+#FIREJAIL=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/contrib/firefox-flatpak 
new/profile-sync-daemon-7.04/contrib/firefox-flatpak
--- old/profile-sync-daemon-6.50/contrib/firefox-flatpak        1970-01-01 
01:00:00.000000000 +0100
+++ new/profile-sync-daemon-7.04/contrib/firefox-flatpak        2026-07-03 
13:01:30.000000000 +0200
@@ -0,0 +1,21 @@
+if ! flatpak override --user --show org.mozilla.firefox | grep -q 
"/run/user/$UID/psd"; then
+    flatpak override --user org.mozilla.firefox --filesystem=/run/user/$UID/psd
+fi
+
+if [[ -d "$HOME"/.var/app/org.mozilla.firefox/.mozilla/firefox ]]; then
+    index=0
+    PSNAME="$browser"
+    while read -r profileItem; do
+        if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
+            # path is not relative
+            DIRArr[$index]="$profileItem"
+        else
+            # we need to append the default path to give a
+            # fully qualified path
+            
DIRArr[$index]="$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/$profileItem"
+        fi
+        (( index=index+1 ))
+    done < <(grep '[Pp]'ath= 
"$HOME"/.var/app/org.mozilla.firefox/.mozilla/firefox/profiles.ini | sed 
's/[Pp]ath=//')
+fi
+
+check_suffix=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/profile-sync-daemon-6.50/contrib/firefox-flatpak-cache 
new/profile-sync-daemon-7.04/contrib/firefox-flatpak-cache
--- old/profile-sync-daemon-6.50/contrib/firefox-flatpak-cache  1970-01-01 
01:00:00.000000000 +0100
+++ new/profile-sync-daemon-7.04/contrib/firefox-flatpak-cache  2026-07-03 
13:01:30.000000000 +0200
@@ -0,0 +1,22 @@
+if ! flatpak override --user --show org.mozilla.firefox | grep -q 
"/run/user/$UID/psd"; then
+    flatpak override --user org.mozilla.firefox --filesystem=/run/user/$UID/psd
+fi
+
+if [[ -d "$HOME"/.var/app/org.mozilla.firefox/.mozilla/firefox ]] && [[ -d 
"$HOME"/.var/app/org.mozilla.firefox/cache/mozilla/firefox ]]; then
+    index=0
+    PSNAME="$browser"
+    while read -r profileItem; do
+        if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
+            # path is not relative, so we have to use basename
+            profileName=$(basename "$profileItem")
+            
DIRArr[$index]="$HOME/.var/app/org.mozilla.firefox/cache/mozilla/firefox/$profileName"
+        else
+            # we need to append the default path to give a
+            # fully qualified path
+            
DIRArr[$index]="$HOME/.var/app/org.mozilla.firefox/cache/mozilla/firefox/$profileItem"
+        fi
+        (( index=index+1 ))
+    done < <(grep '[Pp]'ath= 
"$HOME"/.var/app/org.mozilla.firefox/.mozilla/firefox/profiles.ini | sed 
's/[Pp]ath=//')
+fi
+
+check_suffix=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/contrib/floorp 
new/profile-sync-daemon-7.04/contrib/floorp
--- old/profile-sync-daemon-6.50/contrib/floorp 1970-01-01 01:00:00.000000000 
+0100
+++ new/profile-sync-daemon-7.04/contrib/floorp 2026-07-03 13:01:30.000000000 
+0200
@@ -0,0 +1,17 @@
+if [[ -d "$HOME"/.floorp ]]; then
+    index=0
+    PSNAME="$browser"
+    while read -r profileItem; do
+        if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
+            # path is not relative
+            DIRArr[$index]="$profileItem"
+        else
+            # we need to append the default path to give a
+            # fully qualified path
+            DIRArr[$index]="$HOME/.floorp/$profileItem"
+        fi
+        (( index=index+1 ))
+    done < <(grep '[Pp]'ath= "$HOME"/.floorp/profiles.ini | sed 's/[Pp]ath=//')
+fi
+
+check_suffix=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/contrib/helium-browser 
new/profile-sync-daemon-7.04/contrib/helium-browser
--- old/profile-sync-daemon-6.50/contrib/helium-browser 1970-01-01 
01:00:00.000000000 +0100
+++ new/profile-sync-daemon-7.04/contrib/helium-browser 2026-07-03 
13:01:30.000000000 +0200
@@ -0,0 +1,2 @@
+DIRArr[0]="$XDG_CONFIG_HOME/net.imput.helium"
+PSNAME="helium"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/contrib/thorium 
new/profile-sync-daemon-7.04/contrib/thorium
--- old/profile-sync-daemon-6.50/contrib/thorium        1970-01-01 
01:00:00.000000000 +0100
+++ new/profile-sync-daemon-7.04/contrib/thorium        2026-07-03 
13:01:30.000000000 +0200
@@ -0,0 +1,2 @@
+DIRArr[0]="$XDG_CONFIG_HOME/$browser"
+PSNAME="$browser"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/contrib/zen 
new/profile-sync-daemon-7.04/contrib/zen
--- old/profile-sync-daemon-6.50/contrib/zen    1970-01-01 01:00:00.000000000 
+0100
+++ new/profile-sync-daemon-7.04/contrib/zen    2026-07-03 13:01:30.000000000 
+0200
@@ -0,0 +1,17 @@
+if [[ -d "$HOME"/.zen ]]; then
+    index=0
+    PSNAME="$browser"
+    while read -r profileItem; do
+        if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
+            # path is not relative
+            DIRArr[$index]="$profileItem"
+        else
+            # we need to append the default path to give a
+            # fully qualified path
+            DIRArr[$index]="$HOME/.zen/$profileItem"
+        fi
+        (( index=index+1 ))
+    done < <(grep '^[Pp]'ath= "$HOME"/.zen/profiles.ini | sed 's/^[Pp]ath=//')
+fi
+
+check_suffix=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/doc/psd-overlay-helper.1 
new/profile-sync-daemon-7.04/doc/psd-overlay-helper.1
--- old/profile-sync-daemon-6.50/doc/psd-overlay-helper.1       2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/doc/psd-overlay-helper.1       1970-01-01 
01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-.TH psd-overlay-helper 1 "13 June 2016" "" ""
-.SH NAME
-\fBpsd-overlay-helper \fP- Script to use overlay file system for 
profile-sync-daemon.
-\fB
-.SH DESCRIPTION
-Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage browser 
profile/profiles in tmpfs and to periodically sync back to the physical disc 
(HDD/SSD). This is accomplished by an innovative use of rsync to maintain 
synchronization between a tmpfs copy and media-bound backup of the browser 
profile/profiles. Additionally, psd features several crash recovery features.
-
-The psd-overlay-helper script is used internally to enable the usage of the 
overlay file system. It should not be called by the user directly.
-.SH CONTRIBUTE
-Users wishing to contribute to this project should fork it and send a pull 
request. Source is freely available on the project page linked below.
-.SH ONLINE
-.IP \(bu 3
-Project page: https://github.com/graysky2/profile-sync-daemon
-.IP \(bu 3
-Wiki page: https://wiki.archlinux.org/index.php/Profile-sync-daemon
-.SH AUTHOR
-graysky (graysky AT archlinux DOT us)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/doc/psd.1 
new/profile-sync-daemon-7.04/doc/psd.1
--- old/profile-sync-daemon-6.50/doc/psd.1      2023-10-02 09:51:14.000000000 
+0200
+++ new/profile-sync-daemon-7.04/doc/psd.1      2026-07-03 13:01:30.000000000 
+0200
@@ -1,33 +1,29 @@
 .\" Text automatically generated by txt2man
-.TH profile-sync-daemon 1 "02 October 2023" "" ""
+.TH profile-sync-daemon 1 "22 March 2026" "" ""
 .SH NAME
-\fBprofile-sync-daemon \fP- Symlinks and syncs browser profiles to RAM (tmpfs) 
thus reducing HDD/SSD calls and speeding up browsers.
+\fBProfile-sync-daemon \fP- Symlinks and syncs browser profiles to RAM (tmpfs) 
thus reducing HDD/SSD calls and speeding up browsers.
 \fB
 .SH DESCRIPTION
-Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage browser 
profile/profiles in tmpfs and to periodically sync back to the physical disc 
(HDD/SSD). This is accomplished by an innovative use of rsync to maintain 
synchronization between a tmpfs copy and media-bound backup of the browser 
profile/profiles. Additionally, psd features several crash-recovery features.
+Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage browser 
profile/profiles in tmpfs and to periodically sync back to the physical disk 
(HDD/SSD). This is accomplished by an innovative use of rsync to maintain 
synchronization between a tmpfs copy and media-bound backup of the browser 
profile/profiles. Additionally, psd features several crash-recovery features.
 .PP
 Design goals of psd:
 .RS
 .IP \(bu 3
 Completely transparent user experience.
 .IP \(bu 3
-Reduced wear to physical discs (particularly SSDs).
-.IP \(bu 3
 Speed.
 .RE
 .PP
-Since the profile/profiles, browser cache*, etc. are relocated into tmpfs (RAM 
disk), the corresponding I/O associated with using the browser is also 
redirected from the physical disc to the RAM, thus reducing wear to the 
physical disc and improving browser responsiveness.
+Since the profile/profiles, browser cache*, etc. are relocated into tmpfs (RAM 
disk), the corresponding I/O associated with using the browser is also 
redirected from the physical disk to the RAM, thus improving browser 
responsiveness during read/writes to profiles.
 .PP
-*Note that some browsers such as Chrome/Chromium, Firefox (since v21), Midori, 
and Rekonq actually keep their cache directories separate from their browser 
profile directory. It is not within the scope of profile-sync-daemon to modify 
this behavior; users wishing to relocate this directory, may refer to the 
following url for several work-arounds: 
https://wiki.archlinux.org/index.php/Chromium_Tips_and_Tweaks#Cache_in_tmpfs
+*Note that some browsers such as Chrome/Chromium, Firefox, Midori, and Rekonq 
actually keep their cache directories separate from their browser profile 
directory. It is not within the scope of Profile-sync-daemon to modify this 
behavior; users wishing to relocate this directory, may refer to the following 
url for several work-arounds: 
https://wiki.archlinux.org/index.php/Chromium_Tips_and_Tweaks#Cache_in_tmpfs
 .SH SETUP
 $XDG_CONFIG_HOME/psd/psd.conf (referred to hereafter as "the config file") 
contains all user managed settings.
 .PP
 NOTE: edits made to the config file while psd is active will be applied only 
after the service has been restarted.
 .RS
 .IP \(bu 3
-Optionally enable the use of overlayfs to improve sync speed and to use a 
smaller memory footprint. Do this in the USE_OVERLAYFS variable. The user will 
require no password sudo rights to /usr/bin/psd-overlay-helper to use this 
option and the kernel must support overlayfs version 22 or higher. See the FAQ 
below for additional details.
-.IP \(bu 3
-Optionally have psd resync to the filesystem prior to a sleep call. This can 
help in the event that the system does not properly wake up. Do this in the 
USE_SUSPSYNC variable.
+With the release of v7.00 of psd overlayfs mode is the only supported option. 
It improve sync speed and offers a smaller memory footprint.
 .IP \(bu 3
 Optionally define which browsers are to be managed in the BROWSERS array. If 
none are defined, the default is all detected browsers.
 .IP \(bu 3
@@ -41,66 +37,70 @@
 .SS PREVIEW MODE
 The preview option can be called to show users exactly what psd will do/is 
doing based on the entries in the config file. It will also provide useful 
information such as profile size, paths, and if any recovery snapshots have 
been created.
 .PP
+% Profile-sync-daemon v7.00
+.PP
 .nf
 .fam C
- $ psd p
-
- Profile-sync-daemon v6.39
-
  systemd service: active
  resync-timer:    active
- sync on sleep:   enabled
- use overlayfs:   enabled
 
- Psd will manage the following per /home/facade/.config/psd/.psd.conf settings:
+ Psd will manage the following per /home/facade/.config/psd/.psd.conf:
 
-  browser/psname:  chromium/chromium
-  owner/group id:  facade/100
-  sync target:     /home/facade/.config/chromium
-  tmpfs dir:       /run/user/1000/facade-chromium
-  profile size:    93M
-  overlayfs size:  39M
-  recovery dirs:   2 <- delete with the c option
-   dir path/size:  
/home/facade/.config/chromium-backup-crashrecovery-20200423_171359 (92M)
-   dir path/size:  
/home/facade/.config/chromium-backup-crashrecovery-20200424_112204 (93M)
-
-  browser/psname:  firefox/firefox
-  owner/group id:  facade/100
-  sync target:     /home/facade/.mozilla/firefox/f8cv8bfu.default
-  tmpfs dir:       /run/user/1000/facade-firefox-f8cv8bfu.default
-
-  profile size:    145M
-  overlayfs size:  13M
-  recovery dirs:   none
+ browser/psname:  chromium/chromium
+ owner/group id:  facade/100
+ sync target:     /home/facade/.config/chromium
+ tmpfs dir:       /run/user/1000/psd/facade-chromium
+ profile size:    110M
+ overlayfs size:  64M
+ recovery dirs:   none
+
+ browser/psname:  firefox/firefox
+ owner/group id:  facade/100
+ sync target:     /home/facade/.config/mozilla/firefox/z0pauair.default
+ tmpfs dir:       /run/user/1000/psd/facade-firefox-z0pauair.default
+ profile size:    4.0K
+ overlayfs size:  0
+ recovery dirs:   none
+
+ browser/psname:  firefox/firefox
+ owner/group id:  facade/100
+ sync target:     /home/facade/.config/mozilla/firefox/kgtk05jp.default-release
+ tmpfs dir:       /run/user/1000/psd/facade-firefox-kgtk05jp.default-release
+ profile size:    20M
+ overlayfs size:  19M
+ recovery dirs:   none
 
 .fam T
 .fi
 .SS START AND STOP PSD
-Psd ships with a systemd user service to start or stop it (psd.service). 
Additionally, a provided resync-timer will run an hourly resync from tmpfs back 
to the disk. The resync-timer is started automatically with psd.service so 
there is no need to start the timer; only start psd.service.
+Psd ships with a systemd user service to start or stop it (psd.service).
+.PP
+Additionally, a provided resync-timer will run an hourly resync from tmpfs 
back to the disk. The resync-timer is started automatically with psd.service so 
there is no need to start the timer; only start psd.service.
+.PP
+Of course, the frequency of the resync can be adjusted with a systemd drop-in. 
For example, to trigger the resync every 15 minutes:
 .PP
 .nf
 .fam C
- $ systemctl --user [option] psd.service
+ % systemctl --user edit psd-resync.timer
+ [Timer]
+ OnCalendar=*:0/15
+
+ % systemctl --user [option] psd.service
 
 .fam T
 .fi
-Available options:
-start
-stop
-enable
-disable
 .SS CLEAN MODE
 The clean mode will delete ALL recovery snapshots that have accumulated. Only 
run it when sure these are no longer needed.
 .PP
 .nf
 .fam C
- $ psd c
+ % psd c
 
- Profile-sync-daemon v6.39
+ Profile-sync-daemon v7.00
 
  Deleting 2 crashrecovery dirs for profile /home/facade/.config/chromium
-  /home/facade/.config/chromium-backup-crashrecovery-20200423_171359
-  /home/facade/.config/chromium-backup-crashrecovery-20200424_112204
+  /home/facade/.config/chromium-backup-crashrecovery-20260209_171359
+  /home/facade/.config/chromium-backup-crashrecovery-20260209_112204
 
 .fam T
 .fi
@@ -114,7 +114,7 @@
 .IP \(bu 3
 Falkon
 .IP \(bu 3
-Firefox (stable, beta, and aurora)
+Firefox (version 147 and above use freedesktop.org XDG base dir specs others 
use legacy ~/.mozilla)
 .IP \(bu 3
 Firefox-trunk (this is an Ubuntu-only browser: 
http://www.webupd8.org/2011/05/install-firefox-nightly-from-ubuntu-ppa.html)
 .IP \(bu 3
@@ -157,7 +157,7 @@
 .PP
 .nf
 .fam C
- $ ls -l ~/.mozilla/firefox
+ % ls -l ~/.mozilla/firefox
  lrwxrwxrwx 1 facade users  26 Oct  1 17:02 f8cv8bfu.default -> 
/foo/bar/f8cv8bfu.default
 
 .fam T
@@ -166,7 +166,7 @@
 .PP
 .nf
 .fam C
- $ psd p
+ % psd p
 
  Warning!
  /home/facade/.mozilla/firefox/f8cv8bfu.default appears to be a symlink but 
these are not supported.
@@ -189,43 +189,25 @@
 .SH SUPPORTED DISTROS
 Since psd is just a bash script with a systemd service, it should run on any 
flavor of Linux running systemd. Several distros provide an official package or 
user-maintained option to install psd. One can also build psd from source. See 
the official website for available packages, dependencies, and installation 
instructions
 .SH FAQ
-Q1: What is overlayfs mode?
-.PP
-A1: Overlayfs is a simple union filesystem mainlined in the Linux kernel 
version 3.18.0. When used with psd, a reduced memory footprint and faster sync 
operations can be realized. The magic is in how the overlay mount only writes 
out data that has changed rather than the entire profile. The same recovery 
features psd uses in its default mode are also active when running in overlayfs 
mode.
-.PP
-See the example in the PREVIEW MODE section above which shows a system using 
overlayfs to illustrate the typical memory savings. Note the "overlayfs size" 
report compared to the total "profile size" report for each profile. Be aware 
that these numbers will change depending on just how much new data is written 
to the profile, but in common use cases, the overlayfs size will always be less 
than the profile size.
-.PP
-Q2: How do I enable overlayfs mode?
-.PP
-A2: First, be sure psd is not active or else any changes to the config file 
will be ignored until it is restarted. Overlayfs mode is enabled with the 
USE_OVERLAYFS= variable which should be set to "yes" in the config file. Psd 
will automatically detect the overlayfs version available to the kernel if it 
is configured to use one of them. It is recommended to run psd in preview mode 
to verify that the system can in fact use overlayfs.
-.PP
-Users wanting to use overlayfs mode MUST have sudo rights without password 
prompt to /usr/bin/psd-overlay-helper or global sudo rights without password 
prompt. If the user does not have global rights, add the following line to 
/etc/sudoers after any other lines defining sudo access. It is recommended to 
use /usr/bin/visudo as root to set this up:
-.PP
-.nf
-.fam C
- foo ALL=(ALL) NOPASSWD: /usr/bin/psd-overlay-helper
-
-.fam T
-.fi
-Q3: Why do I have another browser profile directory "foo-back-ovfs" when I 
enable overlayfs?
+Q1: Why do I have another browser profile directory "foo-back-ovfs" when I 
enable overlayfs?
 .PP
-A3: The way overlayfs works is to mount a read-only base copy (so-called lower 
dir) of the profile, and manage the new data on top of that. In order to avoid 
resyncing to the read-only filesystem, a copy is used instead. So using 
overlayfs is a trade-off: faster initial sync times and less memory usage vs. 
disk space in the home dir.
+A1: The way overlayfs works is to mount a read-only base copy (so-called lower 
dir) of the profile, and manage the new data on top of that. In order to avoid 
resyncing to the read-only filesystem, a copy is used instead. So using 
overlayfs is a trade-off: faster initial sync times and less memory usage vs. 
disk space in the home dir.
 .PP
-Q4: I need more memory to accommodate my profile/profiles in /run/user/xxxx. 
How can I allocate more?
+Q2: I need more memory to accommodate my profile/profiles in /run/user/xxxx. 
How can I allocate more?
 .PP
-A4: The standard way of controlling the size of /run/user/ is the 
RuntimeDirectorySize directive in logind.conf (see the man page for logind.conf 
for more). By default, 10% of physical memory is used but one can increase it 
safely. Remember that tmpfs only consumes what is actually used; the number 
specified here is just a maximum allowed.
+A2: The standard way of controlling the size of /run/user/ is the 
RuntimeDirectorySize directive in logind.conf (see the man page for logind.conf 
for more). By default, 10% of physical memory is used but one can increase it 
safely. Remember that tmpfs only consumes what is actually used; the number 
specified here is just a maximum allowed.
 .PP
-Q5: My system crashed for some reason and psd didn't sync back. What do I do?
+Q3: My system crashed for some reason and psd didn't sync back. What do I do?
 .PP
-A5: The "last good" backup of the browser profile/profiles should be the 
filesystem. Upon restarting psd (on a reboot for example), a check is performed 
to see if the symlink to the tmpfs copy of the profile is invalid. If it is 
invalid, psd will snapshot the "last good" backup before it rotates it back 
into place. This is more for a sanity check that psd did no harm and that any 
data loss was a function of something else.
+A3: The "last good" backup of the browser profile/profiles should be the 
filesystem. Upon restarting psd (on a reboot for example), a check is performed 
to see if the symlink to the tmpfs copy of the profile is invalid. If it is 
invalid, psd will snapshot the "last good" backup before it rotates it back 
into place. This is more for a sanity check that psd did no harm and that any 
data loss was a function of something else.
 .PP
-Q6: Where can I find this snapshot?
+Q4: Where can I find this snapshot?
 .PP
-A6: It depends on the browser. The snapshot will be located in the same 
directory as the browser profile and it will contain a date-time-stamp that 
corresponds to the time at which the recovery took place. For example, a 
chromium snapshot will be 
~/.config/chromium-backup-crashrecovery-20130912_153310 -- of course, the 
date_time suffix will be different.
+A4: It depends on the browser. The snapshot will be located in the same 
directory as the browser profile and it will contain a date-time-stamp that 
corresponds to the time at which the recovery took place. For example, a 
chromium snapshot will be 
~/.config/chromium-backup-crashrecovery-20130912_153310 -- of course, the 
date_time suffix will be different.
 .PP
-Q7: How can I restore the snapshot?
+Q5: How can I restore the snapshot?
 .PP
-A7: Follow these steps:
+A5: Follow these steps:
 .RS
 .IP 1. 4
 Stop psd.
@@ -245,9 +227,9 @@
 .PP
 At this point, launch chromium which will use the backup snapshot just copied 
into place. If all is well, it is safe to delete ~/.config/chromium-bad and the 
snapshot. Remember, to start psd, no browsers must be open (or psd will refuse 
to start).
 .PP
-Q8: Can psd delete the snapshots automatically?
+Q6: Can psd delete the snapshots automatically?
 .PP
-A8: Yes, run psd with the "clean" switch to delete snapshots.
+A6: Yes, run psd with the "clean" switch to delete snapshots.
 .SH CONTRIBUTE
 Users wishing to contribute to this project, should fork it and send a pull 
request. Source is freely available on github.
 .SH BUGS
@@ -261,4 +243,4 @@
 .IP \(bu 3
 Wiki page: https://wiki.archlinux.org/index.php/Profile-sync-daemon
 .SH AUTHOR
-graysky (graysky AT archlinux DOT us)
+graysky (therealgraysky AT proton DOT me)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/init/psd-resync.service 
new/profile-sync-daemon-7.04/init/psd-resync.service
--- old/profile-sync-daemon-6.50/init/psd-resync.service        2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/init/psd-resync.service        2026-07-03 
13:01:30.000000000 +0200
@@ -1,13 +1,10 @@
 [Unit]
 Description=Timed resync
 After=psd.service
-Wants=psd-resync.timer
 BindsTo=psd.service
 
 [Service]
+Slice=background.slice
 Type=oneshot
 ExecStart=/usr/bin/profile-sync-daemon resync
 Environment=LAUNCHED_BY_SYSTEMD=1
-
-[Install]
-WantedBy=default.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/init/psd-resync.timer 
new/profile-sync-daemon-7.04/init/psd-resync.timer
--- old/profile-sync-daemon-6.50/init/psd-resync.timer  2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/init/psd-resync.timer  2026-07-03 
13:01:30.000000000 +0200
@@ -3,4 +3,4 @@
 BindsTo=psd.service
 
 [Timer]
-OnUnitActiveSec=1h
+OnCalendar=hourly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/profile-sync-daemon-6.50/init/psd.service 
new/profile-sync-daemon-7.04/init/psd.service
--- old/profile-sync-daemon-6.50/init/psd.service       2023-10-02 
09:51:14.000000000 +0200
+++ new/profile-sync-daemon-7.04/init/psd.service       2026-07-03 
13:01:30.000000000 +0200
@@ -2,14 +2,16 @@
 Description=Profile-sync-daemon
 Documentation=man:psd(1) man:profile-sync-daemon(1)
 Documentation=https://wiki.archlinux.org/index.php/Profile-sync-daemon
-Wants=psd-resync.service
+Wants=psd-resync.timer
 RequiresMountsFor=/home/
 After=winbindd.service
 
 [Service]
+Slice=background.slice
 Type=oneshot
 RemainAfterExit=yes
 ExecStart=/usr/bin/profile-sync-daemon startup
+ExecStartPost=/usr/bin/profile-sync-daemon resync
 ExecStop=/usr/bin/profile-sync-daemon unsync
 Environment=LAUNCHED_BY_SYSTEMD=1
 

Reply via email to