Subject: [PATCH 1/8] services: gdm: Remove etc service.

From: Timothy Sample <[email-masked]>
Date: Wed, 13 Feb 2019 14:22:14 -0500

* gnu/packages/gnome.scm (gdm)[arguments]: Update pre-configure phase to
make GDM get the configuration file path from an environment variable.
* gnu/services/xorg.scm (gdm-etc-service): Remove function.
(gdm-configuration-file): New function.
(gdm-shepherd-service): Set GDM_CUSTOM_CONF before invoking GDM.
(gdm-service-type)[extensions]: Remove etc-service-type extension.
---
 gnu/packages/gnome.scm |  9 ++++--
 gnu/services/xorg.scm  | 67 ++++++++++++++++++++----------------------
 2 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 367d5de16c..b2c7aa60cc 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -32,7 +32,7 @@
 ;;; Copyright © 2018 Jovany Leandro G.C <[email-masked]>
 ;;; Copyright © 2018 Vasile Dumitrascu <[email-masked]>
 ;;; Copyright © 2018 Björn Höfling <[email-masked]>
-;;; Copyright © 2018 Timothy Sample <[email-masked]>
+;;; Copyright © 2018, 2019 Timothy Sample <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -5380,6 +5380,9 @@ libxml2.")
                 ;; processes.
                 "gdm_session_set_environment_variable (self, \"GDM_X_SERVER\",\n"
                 "    g_getenv (\"GDM_X_SERVER\"));\n"
+                ;; Propagate the GDM_CUSTOM_CONF environment variable.
+                "gdm_session_set_environment_variable (self, \"GDM_CUSTOM_CONF\",\n"
+                "    g_getenv (\"GDM_CUSTOM_CONF\"));\n"
                 ;; FIXME: Really glib should be declaring XDG_CONFIG_DIRS as a
                 ;; variable, but it doesn't do that right now.  Anyway
                 ;; /run/current-system/profile/share/gnome-session/sessions/gnome.desktop
@@ -5399,7 +5402,9 @@ libxml2.")
             ;; Look for custom GDM conf in /run/current-system.
             (substitute* '("common/gdm-settings-desktop-backend.c")
               (("GDM_CUSTOM_CONF")
-               "\"/run/current-system/etc/gdm/custom.conf\""))
+               (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
+                              " ? g_getenv(\"GDM_CUSTOM_CONF\")"
+                              " : GDM_CUSTOM_CONF)")))
             ;; Use service-supplied path to X.
             (substitute* '("daemon/gdm-server.c")
               (("\\(X_SERVER X_SERVER_ARG_FORMAT")
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 1efb275794..de5438e3fe 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2017 Andy Wingo <[email-masked]>
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2015 Sou Bunnbu <[email-masked]>
-;;; Copyright © 2018 Timothy Sample <[email-masked]>
+;;; Copyright © 2018, 2019 Timothy Sample <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -633,38 +633,34 @@ makes the good ol' XlockMore usable."
   (x-server gdm-configuration-x-server
             (default (xorg-wrapper))))
 
-(define (gdm-etc-service config)
-  (define gdm-configuration-file
-    (mixed-text-file "gdm-custom.conf"
-                     "[daemon]\n"
-                     "#User=gdm\n"
-                     "#Group=gdm\n"
-                     (if (gdm-configuration-auto-login? config)
-                         (string-append
-                          "AutomaticLoginEnable=true\n"
-                          "AutomaticLogin="
-                          (or (gdm-configuration-default-user config)
-                              (error "missing default user for auto-login"))
-                          "\n")
-                         (string-append
-                          "AutomaticLoginEnable=false\n"
-                          "#AutomaticLogin=\n"))
-                     "#TimedLoginEnable=false\n"
-                     "#TimedLogin=\n"
-                     "#TimedLoginDelay=0\n"
-                     "#InitialSetupEnable=true\n"
-                     ;; Enable me once X is working.
-                     "WaylandEnable=false\n"
-                     "\n"
-                     "[debug]\n"
-                     "#Enable=true\n"
-                     "\n"
-                     "[security]\n"
-                     "#DisallowTCP=true\n"
-                     "#AllowRemoteAutoLogin=false\n"))
-  `(("gdm" ,(file-union
-             "gdm"
-             `(("custom.conf" ,gdm-configuration-file))))))
+(define (gdm-configuration-file config)
+  (mixed-text-file "gdm-custom.conf"
+                   "[daemon]\n"
+                   "#User=gdm\n"
+                   "#Group=gdm\n"
+                   (if (gdm-configuration-auto-login? config)
+                       (string-append
+                        "AutomaticLoginEnable=true\n"
+                        "AutomaticLogin="
+                        (or (gdm-configuration-default-user config)
+                            (error "missing default user for auto-login"))
+                        "\n")
+                       (string-append
+                        "AutomaticLoginEnable=false\n"
+                        "#AutomaticLogin=\n"))
+                   "#TimedLoginEnable=false\n"
+                   "#TimedLogin=\n"
+                   "#TimedLoginDelay=0\n"
+                   "#InitialSetupEnable=true\n"
+                   ;; Enable me once X is working.
+                   "WaylandEnable=false\n"
+                   "\n"
+                   "[debug]\n"
+                   "#Enable=true\n"
+                   "\n"
+                   "[security]\n"
+                   "#DisallowTCP=true\n"
+                   "#AllowRemoteAutoLogin=false\n"))
 
 (define (gdm-pam-service config)
   "Return a PAM service for @command{gdm}."
@@ -698,6 +694,9 @@ makes the good ol' XlockMore usable."
                                           "/bin/gdm"))
                      #:environment-variables
                      (list (string-append
+                            "GDM_CUSTOM_CONF="
+                            #$(gdm-configuration-file config))
+                           (string-append
                             "GDM_X_SERVER="
                             #$(gdm-configuration-x-server config))
                            ;; XXX: GDM requires access to a handful of
@@ -719,8 +718,6 @@ makes the good ol' XlockMore usable."
                                           (const %gdm-accounts))
                        (service-extension pam-root-service-type
                                           gdm-pam-service)
-                       (service-extension etc-service-type
-                                          gdm-etc-service)
                        (service-extension dbus-root-service-type
                                           (compose list
                                                    gdm-configuration-gdm))))
-- 
2.20.1