From 1020390285d574241f6e34447da752fb51a47eae Mon Sep 17 00:00:00 2001
From: Denis Garaev <garaevdi@yandex.ru>
Date: Tue, 24 Feb 2026 22:11:07 +0300
Subject: [PATCH 1/3] Remove autostarts

---
 session/meson.build | 131 ++++++++++++++++++++++----------------------
 1 file changed, 66 insertions(+), 65 deletions(-)

diff --git a/session/meson.build b/session/meson.build
index b32e46f..7dc1a99 100644
--- a/session/meson.build
+++ b/session/meson.build
@@ -34,74 +34,75 @@ configure_file(
   install_dir: datadir / 'gnome-session' / 'sessions'
 )
 
-autostartdir = join_paths(get_option('sysconfdir'), 'xdg', 'autostart')
-
-gsd_dir = gsd_dep.get_pkgconfig_variable('prefix')
-desktop_file_install = find_program('desktop-file-install')
-
-foreach component : gsd_components
-  original_filename = component + '.desktop'
+if (gsd_dep.version().version_compare('< 49'))
+  autostartdir = join_paths(get_option('sysconfdir'), 'xdg', 'autostart')
+  gsd_dir = gsd_dep.get_pkgconfig_variable('prefix')
+  desktop_file_install = find_program('desktop-file-install')
+
+  foreach component : gsd_components
+    original_filename = component + '.desktop'
+
+    if get_option('detect-program-prefixes') == true
+      original_autostart_file = join_paths(gsd_dir, 'etc/xdg/autostart', original_filename)
+    else
+      original_autostart_file = join_paths(autostartdir, original_filename)
+    endif
+
+    patched_filename = 'pantheon-' + component + '.desktop'
+
+    custom_target('create-gsd-autostart' + patched_filename,
+      input: original_autostart_file,
+      output: patched_filename,
+      command: [
+        desktop_file_install,
+        '--set-key=OnlyShowIn',
+        '--set-value=Pantheon',
+        '--vendor=pantheon',
+        '--dir=@OUTDIR@',
+        '@INPUT@',
+      ],
+      install: true,
+      install_dir: autostartdir,
+    )
+  endforeach
+
+  gnome_keyring = find_program('gnome-keyring-daemon')
+  orca = find_program('orca')
 
   if get_option('detect-program-prefixes') == true
-    original_autostart_file = join_paths(gsd_dir, 'etc/xdg/autostart', original_filename)
+    # TODO: use fs module in meson 0.53.0
+    gnome_keyring_prefix = gnome_keyring.path().split('/bin')[0]
+    orca_prefix = orca.path().split('/bin')[0]
+
+    autostarts = {
+      'gnome-keyring-pkcs11': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-pkcs11.desktop'),
+      'gnome-keyring-secrets': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-secrets.desktop'),
+      'gnome-keyring-ssh': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-ssh.desktop'),
+      'orca-autostart': join_paths(orca_prefix, 'etc/xdg/autostart', 'orca-autostart.desktop'),
+    }
   else
-    original_autostart_file = join_paths(autostartdir, original_filename)
+    autostarts = {
+      'gnome-keyring-pkcs11': join_paths(autostartdir, 'gnome-keyring-pkcs11.desktop'),
+      'gnome-keyring-secrets': join_paths(autostartdir, 'gnome-keyring-secrets.desktop'),
+      'gnome-keyring-ssh': join_paths(autostartdir, 'gnome-keyring-ssh.desktop'),
+      'orca-autostart': join_paths(autostartdir, 'orca-autostart.desktop'),
+    }
   endif
 
-  patched_filename = 'pantheon-' + component + '.desktop'
-
-  custom_target('create-gsd-autostart' + patched_filename,
-    input: original_autostart_file,
-    output: patched_filename,
-    command: [
-      desktop_file_install,
-      '--set-key=OnlyShowIn',
-      '--set-value=Pantheon',
-      '--vendor=pantheon',
-      '--dir=@OUTDIR@',
-      '@INPUT@',
-    ],
-    install: true,
-    install_dir: autostartdir,
-  )
-endforeach
-
-gnome_keyring = find_program('gnome-keyring-daemon')
-orca = find_program('orca')
-
-if get_option('detect-program-prefixes') == true
-  # TODO: use fs module in meson 0.53.0
-  gnome_keyring_prefix = gnome_keyring.path().split('/bin')[0]
-  orca_prefix = orca.path().split('/bin')[0]
-
-  autostarts = {
-    'gnome-keyring-pkcs11': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-pkcs11.desktop'),
-    'gnome-keyring-secrets': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-secrets.desktop'),
-    'gnome-keyring-ssh': join_paths(gnome_keyring_prefix, 'etc/xdg/autostart', 'gnome-keyring-ssh.desktop'),
-    'orca-autostart': join_paths(orca_prefix, 'etc/xdg/autostart', 'orca-autostart.desktop'),
-  }
-else
-  autostarts = {
-    'gnome-keyring-pkcs11': join_paths(autostartdir, 'gnome-keyring-pkcs11.desktop'),
-    'gnome-keyring-secrets': join_paths(autostartdir, 'gnome-keyring-secrets.desktop'),
-    'gnome-keyring-ssh': join_paths(autostartdir, 'gnome-keyring-ssh.desktop'),
-    'orca-autostart': join_paths(autostartdir, 'orca-autostart.desktop'),
-  }
+  foreach name, autostart : autostarts
+    custom_target('create-autostart-' + name,
+      input: autostart,
+      output: 'pantheon-' + name + '.desktop',
+      command: [
+        desktop_file_install,
+        '--set-key=OnlyShowIn',
+        '--set-value=Pantheon',
+        '--vendor=pantheon',
+        '--dir=@OUTDIR@',
+        '@INPUT@',
+      ],
+      install: true,
+      install_dir: autostartdir,
+    )
+  endforeach
 endif
-
-foreach name, autostart : autostarts
-  custom_target('create-autostart-' + name,
-    input: autostart,
-    output: 'pantheon-' + name + '.desktop',
-    command: [
-      desktop_file_install,
-      '--set-key=OnlyShowIn',
-      '--set-value=Pantheon',
-      '--vendor=pantheon',
-      '--dir=@OUTDIR@',
-      '@INPUT@',
-    ],
-    install: true,
-    install_dir: autostartdir,
-  )
-endforeach

From 076046d5bd25ee87929606fd1519737570c16f6b Mon Sep 17 00:00:00 2001
From: Denis Garaev <garaevdi@yandex.ru>
Date: Tue, 24 Feb 2026 22:15:41 +0300
Subject: [PATCH 2/3] Launch needed services via systemd

---
 meson.build         | 10 ++++++++++
 systemd/meson.build | 24 ++++++++++++++++++------
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/meson.build b/meson.build
index 437a8d0..6690262 100644
--- a/meson.build
+++ b/meson.build
@@ -27,6 +27,16 @@ gsd_components = [
     'org.gnome.SettingsDaemon.XSettings',
 ]
 
+keyring_components = [
+    'gnome-keyring-daemon',
+    'gcr-ssh-agent'
+]
+
+desktop_components = [
+    'orca',
+    'io.elementary.settings-daemon'
+]
+
 subdir('po')
 
 if get_option('mimeapps-list')
diff --git a/systemd/meson.build b/systemd/meson.build
index 53beb67..50d53ec 100644
--- a/systemd/meson.build
+++ b/systemd/meson.build
@@ -4,27 +4,39 @@ if systemd_userunitdir == ''
     systemd_userunitdir = dep_systemd.get_pkgconfig_variable('systemduserunitdir', define_variable: ['prefix', get_option('prefix')])
 endif
 
-desktop_plain = 'pantheon'
+desktop_targets = 'targets'
+desktop_sockets = 'sockets'
+desktop_services = 'services'
 
 shell_component = {
-    desktop_plain: 'io.elementary.gala',
+    desktop_targets: 'io.elementary.gala',
 }
 
 required_components = {
-    desktop_plain: gsd_components,
+    desktop_targets: gsd_components,
+    desktop_sockets: keyring_components,
+    desktop_services: desktop_components
 }
 
 gnome_session_wanted_targets = []
-foreach component: required_components[desktop_plain]
+gnome_session_wanted_sockets = []
+gnome_session_wanted_services = []
+foreach component: required_components[desktop_targets]
     gnome_session_wanted_targets += 'Wants=@0@.target'.format(component)
 endforeach
+foreach component: required_components[desktop_sockets]
+    gnome_session_wanted_sockets += 'Wants=@0@.socket'.format(component)
+endforeach
+foreach component: required_components[desktop_services]
+    gnome_session_wanted_services += 'Wants=@0@.service'.format(component)
+endforeach
 
 session_config = configure_file(
     input: 'gnome.session.conf.in',
     output: 'session.conf',
     configuration: {
-        'requires_component': shell_component[desktop_plain],
-        'wants_required_components': '\n'.join(gnome_session_wanted_targets),
+        'requires_component': shell_component[desktop_targets],
+        'wants_required_components': '\n'.join(gnome_session_wanted_targets, gnome_session_wanted_sockets, gnome_session_wanted_services),
     },
     install_dir: systemd_userunitdir / 'gnome-session@pantheon.target.d',
 )

From 61254fc7a1b643876214eb12beab39a9c880ec58 Mon Sep 17 00:00:00 2001
From: Denis Garaev <garaevdi@yandex.ru>
Date: Fri, 6 Mar 2026 00:19:10 +0300
Subject: [PATCH 3/3] CI: add systemd-dev

---
 .github/workflows/main.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 5a3aa2e..7341246 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -27,7 +27,7 @@ jobs:
     - name: Install Dependencies
       run: |
         apt update
-        apt install -y meson pkg-config gnome-settings-daemon gnome-settings-daemon-dev gnome-keyring orca
+        apt install -y meson pkg-config gnome-settings-daemon gnome-settings-daemon-dev gnome-keyring orca systemd-dev
 
     - name: Build
       run: |
