From: Adrian Vovk <adrianvovk@gmail.com>
Date: Fri, 18 Jul 2025 17:14:28 -0400
Subject: autostart: Add systemd service

GNOME no longer uses .desktop files to autostart session services, so
add a systemd service instead
---
 meson.build                     | 20 +++++++++++++++++++-
 user-dirs-update-gtk.desktop.in |  1 +
 user-dirs-update-gtk.service.in | 10 ++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 user-dirs-update-gtk.service.in

diff --git a/meson.build b/meson.build
index 2907301..ba84ced 100644
--- a/meson.build
+++ b/meson.build
@@ -5,6 +5,7 @@ project(
   meson_version : '>= 1.0.0'
 )
 
+bindir = join_paths (get_option ('prefix'), get_option ('bindir'))
 localedir = join_paths (get_option ('prefix'), get_option ('localedir'))
 sysconfdir = join_paths (get_option ('prefix'), get_option ('sysconfdir'))
 datadir = join_paths (get_option ('prefix'), get_option ('datadir'))
@@ -21,8 +22,25 @@ executable ('xdg-user-dirs-gtk-update',
                       '-DGLIBLOCALEDIR="@0@"'.format (localedir) ],
             install: true )
 
-i18n = import('i18n')
+# Integration with modern session startup
+systemd = dependency('systemd', required: false)
+systemd_user_unit_dir = systemd.get_variable(
+    'systemd_user_unit_dir',
+    pkgconfig_define: ['prefix', get_option('prefix')],
+    default_value: get_option('prefix') / 'lib' / 'systemd' / 'user'
+)
+configure_file(
+    input: 'user-dirs-update-gtk.service.in',
+    output: 'user-dirs-update-gtk.service',
+    configuration: {
+        'bindir': bindir,
+    },
+    install: true,
+    install_dir: systemd_user_unit_dir,
+)
 
+# Integration with legacy session startup
+i18n = import('i18n')
 i18n.merge_file (input: 'user-dirs-update-gtk.desktop.in',
                  output: 'user-dirs-update-gtk.desktop',
                  install: true,
diff --git a/user-dirs-update-gtk.desktop.in b/user-dirs-update-gtk.desktop.in
index d67fb3c..125c3e3 100644
--- a/user-dirs-update-gtk.desktop.in
+++ b/user-dirs-update-gtk.desktop.in
@@ -9,3 +9,4 @@ NoDisplay=true
 Type=Application
 StartupNotify=false
 X-KDE-autostart-after=panel
+X-systemd-skip=true
diff --git a/user-dirs-update-gtk.service.in b/user-dirs-update-gtk.service.in
new file mode 100644
index 0000000..bcc790e
--- /dev/null
+++ b/user-dirs-update-gtk.service.in
@@ -0,0 +1,10 @@
+[Unit]
+Description=User folders update
+PartOf=graphical-session.target
+After=graphical-session.target
+
+Wants=xdg-user-dirs.service
+After=xdg-user-dirs.service
+
+[Service]
+ExecStart=@bindir@/xdg-user-dirs-gtk-update
