From b18f3ebc4029c22d437e3424014c8597a8b459a0 Mon Sep 17 00:00:00 2001
From: Robert Helgesson <robert@rycee.net>
Date: Tue, 13 Aug 2024 08:22:36 +0200
Subject: [PATCH] systemd: fully deprecate legacy switcher

This switches `systemd.user.startServices = true` to be the same as
`systemd.user.startServices = "sd-switch"`, previously it would use
the "legacy" method. It also introduces a warning that triggers if the
user explicitly have `systemd.user.startServices = "legacy"`.

See #5452
---
 modules/systemd.nix | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/modules/systemd.nix b/modules/systemd.nix
index 717a5922d..707bb3294 100644
--- a/modules/systemd.nix
+++ b/modules/systemd.nix
@@ -183,7 +183,7 @@ in {
         default = "suggest";
         type = with types;
           either bool (enum [ "suggest" "legacy" "sd-switch" ]);
-        apply = p: if isBool p then if p then "legacy" else "suggest" else p;
+        apply = p: if isBool p then if p then "sd-switch" else "suggest" else p;
         description = ''
           Whether new or changed services that are wanted by active targets
           should be started. Additionally, stop obsolete services from the
@@ -196,17 +196,15 @@ in {
             {command}`systemctl` commands to run. You will have to
             manually run those commands after the switch.
 
-          `legacy` (or `true`)
+          `legacy`
           : Use a Ruby script to, in a more robust fashion, determine the
             necessary changes and automatically run the
-            {command}`systemctl` commands.
+            {command}`systemctl` commands. Note, this alternative will soon
+            be removed.
 
-          `sd-switch`
-          : Use sd-switch, a third party application, to perform the service
-            updates. This tool offers more features while having a small
-            closure size. Note, it requires a fully functional user D-Bus
-            session. Once tested and deemed sufficiently robust, this will
-            become the default.
+          `sd-switch` (or `true`)
+          : Use sd-switch, a tool that determines the necessary changes and
+            automatically apply them.
         '';
       };
 
@@ -299,6 +297,12 @@ in {
       message = "This module is only available on Linux.";
     }];
 
+    warnings = lib.optional (cfg.startServices == "legacy") ''
+      Having 'systemd.user.startServices = "legacy"' is deprecated and will soon be removed.
+
+      Please change to 'systemd.user.startServices = true' to use the new systemd unit switcher (sd-switch).
+    '';
+
     xdg.configFile = mkMerge [
       (lib.listToAttrs ((buildServices "service" cfg.services)
         ++ (buildServices "slice" cfg.slices)