about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorBobby Rong <rjl931189261@126.com>2024-03-29 22:55:39 +0800
committerGitHub <noreply@github.com>2024-03-29 22:55:39 +0800
commite96d5c13d06932e0a6fca5d0ec2224ff5f54b852 (patch)
treebad932e53393435beff5105a3d396fa1d397c425 /nixos
parent58f6e5b63d670c3882e6d7f44e8523bdf9c47c0e (diff)
parentbf2ba6e62972d4f7fc1e788747344530089e5ece (diff)
Merge pull request #140429 from bobby285271/pantheon-systemd
pantheon: manage user session with systemd
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/x11/desktop-managers/pantheon.nix30
-rw-r--r--nixos/modules/services/x11/display-managers/default.nix2
-rw-r--r--nixos/tests/pantheon.nix6
3 files changed, 32 insertions, 6 deletions
diff --git a/nixos/modules/services/x11/desktop-managers/pantheon.nix b/nixos/modules/services/x11/desktop-managers/pantheon.nix
index 59bc142eeb7f9..2cfdc69b86e06 100644
--- a/nixos/modules/services/x11/desktop-managers/pantheon.nix
+++ b/nixos/modules/services/x11/desktop-managers/pantheon.nix
@@ -174,12 +174,38 @@ in
         # https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1443
         pkgs.pantheon.mutter
       ];
-      systemd.packages = [
-        pkgs.pantheon.gnome-settings-daemon
+      systemd.packages = with pkgs; [
+        gnome.gnome-session
+        pantheon.gala
+        pantheon.gnome-settings-daemon
+        pantheon.elementary-session-settings
       ];
       programs.dconf.enable = true;
       networking.networkmanager.enable = mkDefault true;
 
+      systemd.user.targets."gnome-session-x11-services".wants = [
+        "org.gnome.SettingsDaemon.XSettings.service"
+      ];
+      systemd.user.targets."gnome-session-x11-services-ready".wants = [
+        "org.gnome.SettingsDaemon.XSettings.service"
+      ];
+
+      # https://github.com/elementary/gala/issues/1826#issuecomment-1890461298
+      systemd.user.services."io.elementary.gala.daemon@" = {
+        unitConfig = {
+          Description = "Gala Daemon";
+          BindsTo = "io.elementary.gala@.service";
+          After = "io.elementary.gala@.service";
+        };
+
+        serviceConfig = {
+          Type = "dbus";
+          BusName = "org.pantheon.gala.daemon";
+          ExecStart = "${pkgs.pantheon.gala}/bin/gala-daemon";
+          Slice = "session.slice";
+        };
+      };
+
       # Global environment
       environment.systemPackages = (with pkgs.pantheon; [
         elementary-session-settings
diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix
index 3e2d5780a5cb1..c22048c6692e9 100644
--- a/nixos/modules/services/x11/display-managers/default.nix
+++ b/nixos/modules/services/x11/display-managers/default.nix
@@ -40,7 +40,7 @@ let
         IFS=:
         for i in $XDG_CURRENT_DESKTOP; do
           case $i in
-            KDE|GNOME|X-NIXOS-SYSTEMD-AWARE) echo "1"; exit; ;;
+            KDE|GNOME|Pantheon|X-NIXOS-SYSTEMD-AWARE) echo "1"; exit; ;;
             *) ;;
           esac
         done
diff --git a/nixos/tests/pantheon.nix b/nixos/tests/pantheon.nix
index 69a28c397bedc..14f92fa3af4a2 100644
--- a/nixos/tests/pantheon.nix
+++ b/nixos/tests/pantheon.nix
@@ -50,11 +50,11 @@ import ./make-test-python.nix ({ pkgs, lib, ...} :
             machine.wait_until_succeeds(f"pgrep -f {i}")
         for i in ["gala", "io.elementary.wingpanel", "plank"]:
             machine.wait_for_window(i)
-        machine.wait_for_unit("bamfdaemon.service", "${user.name}")
-        machine.wait_for_unit("io.elementary.files.xdg-desktop-portal.service", "${user.name}")
+        for i in ["io.elementary.gala.daemon@x11.service", "bamfdaemon.service", "io.elementary.files.xdg-desktop-portal.service"]:
+            machine.wait_for_unit(i, "${user.name}")
 
     with subtest("Check if various environment variables are set"):
-        cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf /run/current-system/sw/bin/gala)/environ"
+        cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf ${pkgs.pantheon.gala}/bin/gala)/environ"
         machine.succeed(f"{cmd} | grep 'XDG_CURRENT_DESKTOP' | grep 'Pantheon'")
         # Hopefully from the sessionPath option.
         machine.succeed(f"{cmd} | grep 'XDG_DATA_DIRS' | grep 'gsettings-schemas/pantheon-agent-geoclue2'")