summary refs log tree commit diff
path: root/gnu/services
diff options
context:
space:
mode:
authorAndreas Enge <andreas@enge.fr>2023-03-20 18:21:47 +0100
committerAndreas Enge <andreas@enge.fr>2023-03-20 18:49:06 +0100
commitccb62d8feb50e2859d7c41429a9e3d9e0fe30bfe (patch)
tree4ab573cee33f277828ad553a22579175b1dda22d /gnu/services
parent098bd280f82350073e8280e37d56a14162eed09c (diff)
parentf80215c7c4ae5ea0c316f4766e6c05ae4218ede3 (diff)
downloadguix-ccb62d8feb50e2859d7c41429a9e3d9e0fe30bfe.tar.gz
Merge remote-tracking branch 'origin/master' into core-updates
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/base.scm116
-rw-r--r--gnu/services/dbus.scm11
-rw-r--r--gnu/services/desktop.scm112
-rw-r--r--gnu/services/dict.scm6
-rw-r--r--gnu/services/dns.scm128
-rw-r--r--gnu/services/lirc.scm18
-rw-r--r--gnu/services/mail.scm9
-rw-r--r--gnu/services/networking.scm139
-rw-r--r--gnu/services/sound.scm16
-rw-r--r--gnu/services/spice.scm7
-rw-r--r--gnu/services/ssh.scm74
-rw-r--r--gnu/services/vpn.scm19
-rw-r--r--gnu/services/xorg.scm47
13 files changed, 422 insertions, 280 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 7ad1e765bd..190bb8fe24 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -99,7 +99,8 @@
             file-system-service-type
             file-system-utilities
             swap-service
-            host-name-service
+            host-name-service  ; deprecated
+            host-name-service-type
             %default-console-font
             console-font-service-type
             console-font-service
@@ -149,7 +150,7 @@
             udev-configuration?
             udev-configuration-rules
             udev-service-type
-            udev-service
+            udev-service  ; deprecated
             udev-rule
             file->udev-rule
             udev-rules-service
@@ -157,11 +158,11 @@
             login-configuration
             login-configuration?
             login-service-type
-            login-service
+            login-service  ; deprecated
 
             agetty-configuration
             agetty-configuration?
-            agetty-service
+            agetty-service  ; deprecated
             agetty-service-type
 
             mingetty-configuration
@@ -172,11 +173,11 @@
             mingetty-configuration-clear-on-logout?
             mingetty-configuration-mingetty
             mingetty-configuration?
-            mingetty-service
+            mingetty-service  ; deprecated
             mingetty-service-type
 
             %nscd-default-caches
-            %nscd-default-configuration
+            %nscd-default-configuration  ; deprecated
 
             nscd-configuration
             nscd-configuration?
@@ -185,11 +186,11 @@
             nscd-cache?
 
             nscd-service-type
-            nscd-service
+            nscd-service  ; deprecated
 
             syslog-configuration
             syslog-configuration?
-            syslog-service
+            syslog-service  ; deprecated
             syslog-service-type
             %default-syslog.conf
 
@@ -238,7 +239,7 @@
             rngd-configuration
             rngd-configuration?
             rngd-service-type
-            rngd-service
+            rngd-service  ; deprecated
 
             kmscon-configuration
             kmscon-configuration?
@@ -661,8 +662,10 @@ down.")))
 (define-record-type* <rngd-configuration>
   rngd-configuration make-rngd-configuration
   rngd-configuration?
-  (rng-tools rngd-configuration-rng-tools)        ;file-like
-  (device    rngd-configuration-device))          ;string
+  (rng-tools rngd-configuration-rng-tools         ;file-like
+             (default rng-tools))
+  (device    rngd-configuration-device            ;string
+             (default "/dev/hwrng")))
 
 (define rngd-service-type
   (shepherd-service-type
@@ -681,12 +684,13 @@ down.")))
         (provision '(trng))
         (start #~(make-forkexec-constructor '#$rngd-command))
         (stop #~(make-kill-destructor))))
+    (rngd-configuration)
     (description "Run the @command{rngd} random number generation daemon to
 supply entropy to the kernel's pool.")))
 
-(define* (rngd-service #:key
-                       (rng-tools rng-tools)
-                       (device "/dev/hwrng"))
+(define-deprecated (rngd-service #:key (rng-tools rng-tools)
+                                 (device "/dev/hwrng"))
+  rngd-service-type
   "Return a service that runs the @command{rngd} program from @var{rng-tools}
 to add @var{device} to the kernel's entropy pool.  The service will fail if
 @var{device} does not exist."
@@ -778,7 +782,8 @@ host names."
       (one-shot? #t)))
    (description "Initialize the machine's host name.")))
 
-(define (host-name-service name)
+(define-deprecated (host-name-service name)
+  host-name-service-type
   "Return a service that sets the host name to @var{name}."
   (service host-name-service-type name))
 
@@ -868,7 +873,7 @@ of console keymaps with @command{loadkeys}.")))
                                         "-C" #$device #$font))
                           ((0 71) #t)
                           (else #f))))
-             (stop #~(const #t))
+             (stop #~(const #f))
              (respawn? #f)))))
        tty+font))
 
@@ -935,7 +940,8 @@ Return a service that sets up Unicode support in @var{tty} and loads
                  "Provide a console log-in service as specified by its
 configuration value, a @code{login-configuration} object.")))
 
-(define* (login-service #:optional (config (login-configuration)))
+(define-deprecated (login-service #:optional (config (login-configuration)))
+  login-service-type
   "Return a service configure login according to @var{config}, which specifies
 the message of the day, among other things."
   (service login-service-type config))
@@ -1207,7 +1213,8 @@ to use as the tty.  This is primarily useful for headless systems."
                  "Provide console login using the @command{agetty}
 program.")))
 
-(define* (agetty-service config)
+(define-deprecated (agetty-service config)
+  agetty-service-type
   "Return a service to run agetty according to @var{config}, which specifies
 the tty to run, among other things."
   (service agetty-service-type config))
@@ -1272,7 +1279,8 @@ the tty to run, among other things."
                  "Provide console login using the @command{mingetty}
 program.")))
 
-(define* (mingetty-service config)
+(define-deprecated (mingetty-service config)
+  mingetty-service-type
   "Return a service to run mingetty according to @var{config}, which specifies
 the tty to run, among other things."
   (service mingetty-service-type config))
@@ -1338,7 +1346,8 @@ the tty to run, among other things."
                     (check-files? #t)             ;check /etc/services changes
                     (persistent? #t))))
 
-(define %nscd-default-configuration
+(define-deprecated %nscd-default-configuration
+  #f
   ;; Default nscd configuration.
   (nscd-configuration))
 
@@ -1492,18 +1501,45 @@ the tty to run, among other things."
                            (name-services (append
                                            (nscd-configuration-name-services config)
                                            name-services)))))
-                (default-value %nscd-default-configuration)
+                (default-value (nscd-configuration))
                 (description
                  "Runs libc's @dfn{name service cache daemon} (nscd) with the
 given configuration---an @code{<nscd-configuration>} object.  @xref{Name
 Service Switch}, for an example.")))
 
-(define* (nscd-service #:optional (config %nscd-default-configuration))
+(define-deprecated (nscd-service #:optional (config (nscd-configuration)))
+  nscd-service-type
   "Return a service that runs libc's name service cache daemon (nscd) with the
 given @var{config}---an @code{<nscd-configuration>} object.  @xref{Name
 Service Switch}, for an example."
   (service nscd-service-type config))
 
+;; Snippet adapted from the GNU inetutils manual.
+(define %default-syslog.conf
+  (plain-file "syslog.conf" "
+     # Log all error messages, authentication messages of
+     # level notice or higher and anything of level err or
+     # higher to the console.
+     # Don't log private authentication messages!
+     *.alert;auth.notice;authpriv.none      -/dev/console
+
+     # Log anything (except mail) of level info or higher.
+     # Don't log private authentication messages!
+     *.info;mail.none;authpriv.none         -/var/log/messages
+
+     # Log \"debug\"-level entries and nothing else.
+     *.=debug                               -/var/log/debug
+
+     # Same, in a different place.
+     *.info;mail.none;authpriv.none         -/dev/tty12
+
+     # The authpriv file has restricted access.
+     # 'fsync' the file after each line (hence the lack of a leading dash).
+     authpriv.*                              /var/log/secure
+
+     # Log all the mail messages in one place.
+     mail.*                                 -/var/log/maillog
+"))
 
 (define-record-type* <syslog-configuration>
   syslog-configuration  make-syslog-configuration
@@ -1533,37 +1569,12 @@ Service Switch}, for an example."
                      (umask mask)
                      pid))))
       (stop #~(make-kill-destructor))))
+   (syslog-configuration)
    (description "Run the syslog daemon, @command{syslogd}, which is
 responsible for logging system messages.")))
 
-;; Snippet adapted from the GNU inetutils manual.
-(define %default-syslog.conf
-  (plain-file "syslog.conf" "
-     # Log all error messages, authentication messages of
-     # level notice or higher and anything of level err or
-     # higher to the console.
-     # Don't log private authentication messages!
-     *.alert;auth.notice;authpriv.none      -/dev/console
-
-     # Log anything (except mail) of level info or higher.
-     # Don't log private authentication messages!
-     *.info;mail.none;authpriv.none         -/var/log/messages
-
-     # Log \"debug\"-level entries and nothing else.
-     *.=debug                               -/var/log/debug
-
-     # Same, in a different place.
-     *.info;mail.none;authpriv.none         -/dev/tty12
-
-     # The authpriv file has restricted access.
-     # 'fsync' the file after each line (hence the lack of a leading dash).
-     authpriv.*                              /var/log/secure
-
-     # Log all the mail messages in one place.
-     mail.*                                 -/var/log/maillog
-"))
-
-(define* (syslog-service #:optional (config (syslog-configuration)))
+(define-deprecated (syslog-service #:optional (config (syslog-configuration)))
+  syslog-service-type
   "Return a service that runs @command{syslogd} and takes
 @var{<syslog-configuration>} as a parameter.
 
@@ -2343,7 +2354,8 @@ item of @var{packages}."
 directory dynamically.  Get extra rules from the packages listed in the
 @code{rules} field of its value, @code{udev-configuration} object.")))
 
-(define* (udev-service #:key (udev eudev) (rules '()))
+(define-deprecated (udev-service #:key (udev eudev) (rules '()))
+  udev-service-type
   "Run @var{udev}, which populates the @file{/dev} directory dynamically.  Get
 extra rules from the packages listed in @var{rules}."
   (service udev-service-type
@@ -3287,7 +3299,7 @@ login manager daemon.")
                         (cons tty %default-console-font))
                       '("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
 
-        (syslog-service)
+        (service syslog-service-type)
         (service agetty-service-type (agetty-configuration
                                        (extra-options '("-L")) ; no carrier detect
                                        (term "vt100")
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index 4b56b8f3eb..5a0c634393 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -28,6 +28,7 @@
   #:use-module ((gnu packages glib) #:select (dbus))
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages admin)
+  #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module ((guix packages) #:select (package-name))
   #:use-module (guix records)
@@ -37,13 +38,13 @@
   #:export (dbus-configuration
             dbus-configuration?
             dbus-root-service-type
-            dbus-service
+            dbus-service  ; deprecated
             wrapped-dbus-service
 
             polkit-configuration
             polkit-configuration?
             polkit-service-type
-            polkit-service))
+            polkit-service))  ; deprecated
 
 ;;;
 ;;; D-Bus.
@@ -244,7 +245,8 @@ includes the @code{etc/dbus-1/system.d} directories of each package listed in
 bus.  It allows programs and daemons to communicate and is also responsible
 for spawning (@dfn{activating}) D-Bus services on demand.")))
 
-(define* (dbus-service #:key (dbus dbus) (services '()) verbose?)
+(define-deprecated (dbus-service #:key (dbus dbus) (services '()) verbose?)
+  dbus-root-service-type
   "Return a service that runs the \"system bus\", using @var{dbus}, with
 support for @var{services}.  When @var{verbose?} is true, it causes the
 @samp{DBUS_VERBOSE} environment variable to be set to @samp{1}; a
@@ -395,7 +397,8 @@ management service}, which allows system administrators to grant access to
 privileged operations in a structured way.  Polkit is a requirement for most
 desktop environments, such as GNOME.")))
 
-(define* (polkit-service #:key (polkit polkit))
+(define-deprecated (polkit-service #:key (polkit polkit))
+  polkit-service-type
   "Return a service that runs the
 @uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
 management service}, which allows system administrators to grant access to
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 4724294433..c0178135b0 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -97,7 +97,7 @@
 
             udisks-configuration
             udisks-configuration?
-            udisks-service
+            udisks-service  ; deprecated
             udisks-service-type
 
             colord-service-type
@@ -106,17 +106,17 @@
             geoclue-configuration
             geoclue-configuration?
             %standard-geoclue-applications
-            geoclue-service
+            geoclue-service  ; deprecated
             geoclue-service-type
 
             bluetooth-service-type
             bluetooth-configuration
             bluetooth-configuration?
-            bluetooth-service
+            bluetooth-service  ; deprecated
 
             elogind-configuration
             elogind-configuration?
-            elogind-service
+            elogind-service  ; deprecated
             elogind-service-type
 
             %gdm-file-system
@@ -126,7 +126,7 @@
             fontconfig-file-system-service
 
             accountsservice-service-type
-            accountsservice-service
+            accountsservice-service  ; deprecated
 
             cups-pk-helper-service-type
             sane-service-type
@@ -318,19 +318,6 @@ used by GNOME.")
 ;;; GeoClue D-Bus service.
 ;;;
 
-;; TODO: Export.
-(define-record-type* <geoclue-configuration>
-  geoclue-configuration make-geoclue-configuration
-  geoclue-configuration?
-  (geoclue geoclue-configuration-geoclue
-           (default geoclue))
-  (whitelist geoclue-configuration-whitelist)
-  (wifi-geolocation-url geoclue-configuration-wifi-geolocation-url)
-  (submit-data? geoclue-configuration-submit-data?)
-  (wifi-submission-url geoclue-configuration-wifi-submission-url)
-  (submission-nick geoclue-configuration-submission-nick)
-  (applications geoclue-configuration-applications))
-
 (define* (geoclue-application name #:key (allowed? #t) system? (users '()))
   "Configure default GeoClue access permissions for an application.  NAME is
 the Desktop ID of the application, without the .desktop part.  If ALLOWED? is
@@ -350,6 +337,28 @@ users are allowed."
         (geoclue-application "epiphany" #:system? #f)
         (geoclue-application "firefox" #:system? #f)))
 
+;; TODO: Use define-configuration and export accessors.
+(define-record-type* <geoclue-configuration>
+  geoclue-configuration make-geoclue-configuration
+  geoclue-configuration?
+  (geoclue geoclue-configuration-geoclue
+           (default geoclue))
+  (whitelist geoclue-configuration-whitelist
+             (default '()))
+  (wifi-geolocation-url
+   geoclue-configuration-wifi-geolocation-url
+   ;; Mozilla geolocation service:
+   (default "https://location.services.mozilla.com/v1/geolocate?key=geoclue"))
+  (submit-data? geoclue-configuration-submit-data?
+                (default #f))
+  (wifi-submission-url
+   geoclue-configuration-wifi-submission-url
+   (default "https://location.services.mozilla.com/v1/submit?key=geoclue"))
+  (submission-nick geoclue-configuration-submission-nick
+                   (default "geoclue"))
+  (applications geoclue-configuration-applications
+                (default %standard-geoclue-applications)))
+
 (define* (geoclue-configuration-file config)
   "Return a geoclue configuration file."
   (plain-file "geoclue.conf"
@@ -395,18 +404,21 @@ users are allowed."
                 (description "Run the @command{geoclue} location service.
 This service provides a D-Bus interface to allow applications to request
 access to a user's physical location, and optionally to add information to
-online location databases.")))
-
-(define* (geoclue-service #:key (geoclue geoclue)
-                          (whitelist '())
-                          (wifi-geolocation-url
-                           ;; Mozilla geolocation service:
-                           "https://location.services.mozilla.com/v1/geolocate?key=geoclue")
-                          (submit-data? #f)
-                          (wifi-submission-url
-                           "https://location.services.mozilla.com/v1/submit?key=geoclue")
-                          (submission-nick "geoclue")
-                          (applications %standard-geoclue-applications))
+online location databases.")
+                (default-value (geoclue-configuration))))
+
+(define-deprecated
+  (geoclue-service #:key (geoclue geoclue)
+                   (whitelist '())
+                   (wifi-geolocation-url
+                    ;; Mozilla geolocation service:
+                    "https://location.services.mozilla.com/v1/geolocate?key=geoclue")
+                   (submit-data? #f)
+                   (wifi-submission-url
+                    "https://location.services.mozilla.com/v1/submit?key=geoclue")
+                   (submission-nick "geoclue")
+                   (applications %standard-geoclue-applications))
+  geoclue-service-type
   "Return a service that runs the @command{geoclue} location service.  This
 service provides a D-Bus interface to allow applications to request access to
 a user's physical location, and optionally to add information to online
@@ -848,7 +860,8 @@ site} for more information."
    (description "Run the @command{bluetoothd} daemon, which manages all the
 Bluetooth devices and provides a number of D-Bus interfaces.")))
 
-(define* (bluetooth-service #:key (bluez bluez) (auto-enable? #f))
+(define-deprecated (bluetooth-service #:key (bluez bluez) (auto-enable? #f))
+  bluetooth-service-type
   "Return a service that runs the @command{bluetoothd} daemon, which manages
 all the Bluetooth devices and provides a number of D-Bus interfaces.  When
 AUTO-ENABLE? is true, the bluetooth controller is powered automatically at
@@ -945,9 +958,11 @@ screens and scanners.")))
                   (description "Run UDisks, a @dfn{disk management} daemon
 that provides user interfaces with notifications and ways to mount/unmount
 disks.  Programs that talk to UDisks include the @command{udisksctl} command,
-part of UDisks, and GNOME Disks."))))
+part of UDisks, and GNOME Disks.")
+                  (default-value (udisks-configuration)))))
 
-(define* (udisks-service #:key (udisks udisks))
+(define-deprecated (udisks-service #:key (udisks udisks))
+  udisks-service-type
   "Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
 UDisks}, a @dfn{disk management} daemon that provides user interfaces with
 notifications and ways to mount/unmount disks.  Programs that talk to UDisks
@@ -978,11 +993,7 @@ include the @command{udisksctl} command, part of UDisks, and GNOME Disks."
   (handle-suspend-key               elogind-handle-suspend-key
                                     (default 'suspend))
   (handle-hibernate-key             elogind-handle-hibernate-key
-                                    ;; (default 'hibernate)
-                                    ;; XXX Ignore it for now, since we don't
-                                    ;; yet handle resume-from-hibernation in
-                                    ;; our initrd.
-                                    (default 'ignore))
+                                    (default 'hibernate))
   (handle-lid-switch                elogind-handle-lid-switch
                                     (default 'suspend))
   (handle-lid-switch-docked         elogind-handle-lid-switch-docked
@@ -1230,7 +1241,8 @@ allow other system components to know the set of logged-in users as well as
 their session types (graphical, console, remote, etc.).  It can also clean up
 after users when they log out.")))
 
-(define* (elogind-service #:key (config (elogind-configuration)))
+(define-deprecated (elogind-service #:key (config (elogind-configuration)))
+  elogind-service-type
   "Return a service that runs the @command{elogind} login and seat management
 service.  The @command{elogind} service integrates with PAM to allow other
 system components to know the set of logged-in users as well as their session
@@ -1298,7 +1310,9 @@ over D-Bus that can list available accounts, change their passwords, and so
 on.  AccountsService integrates with PolicyKit to enable unprivileged users to
 acquire the capability to modify their system configuration.")))
 
-(define* (accountsservice-service #:key (accountsservice accountsservice))
+(define-deprecated
+  (accountsservice-service #:key (accountsservice accountsservice))
+  accountsservice-service-type
   "Return a service that runs AccountsService, a system service that
 can list available accounts, change their passwords, and so on.
 AccountsService integrates with PolicyKit to enable unprivileged users to
@@ -1818,8 +1832,12 @@ applications needing access to be root.")
              (service sddm-service-type))
 
          ;; Screen lockers are a pretty useful thing and these are small.
-         (screen-locker-service slock)
-         (screen-locker-service xlockmore "xlock")
+         (service screen-locker-service-type
+                  (screen-locker-configuration
+                   "slock" (file-append slock "/bin/slock") #f))
+         (service screen-locker-service-type
+                  (screen-locker-configuration
+                   "xlock" (file-append xlockmore "/bin/xlock") #f))
 
          ;; Add udev rules for MTP devices so that non-root users can access
          ;; them.
@@ -1859,15 +1877,15 @@ applications needing access to be root.")
 
          ;; The D-Bus clique.
          (service avahi-service-type)
-         (udisks-service)
+         (service udisks-service-type)
          (service upower-service-type)
-         (accountsservice-service)
+         (service accountsservice-service-type)
          (service cups-pk-helper-service-type)
          (service colord-service-type)
-         (geoclue-service)
+         (service geoclue-service-type)
          (service polkit-service-type)
-         (elogind-service)
-         (dbus-service)
+         (service elogind-service-type)
+         (service dbus-root-service-type)
 
          (service ntp-service-type)
 
diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm
index 35253a0077..5a61085316 100644
--- a/gnu/services/dict.scm
+++ b/gnu/services/dict.scm
@@ -19,6 +19,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu services dict)
+  #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (guix modules)
@@ -34,7 +35,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
-  #:export (dicod-service
+  #:export (dicod-service  ; deprecated
             dicod-service-type
             dicod-configuration
             dicod-handler
@@ -202,7 +203,8 @@ database {
 implements the standard DICT protocol supported by clients such as
 @command{dico} and GNOME Dictionary.")))
 
-(define* (dicod-service #:key (config (dicod-configuration)))
+(define-deprecated (dicod-service #:key (config (dicod-configuration)))
+  dicod-service-type
   "Return a service that runs the @command{dicod} daemon, an implementation
 of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
 
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index 50753b7ab6..2ff9f90cd0 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -114,7 +114,7 @@
   (serial  zone-file-serial
            (default 1))
   (refresh zone-file-refresh
-           (default (* 2 24 3600)))
+           (default (* 12 3600)))
   (retry   zone-file-retry
            (default (* 15 60)))
   (expiry  zone-file-expiry
@@ -754,6 +754,8 @@ cache.size = 100 * MB
                     (default #f))       ;boolean
   (servers          dnsmasq-configuration-servers
                     (default '()))      ;list of string
+  (servers-file     dnsmasq-configuration-servers-file
+                    (default #f))       ;string|file-like
   (addresses        dnsmasq-configuration-addresses
                     (default '()))      ;list of string
   (cache-size       dnsmasq-configuration-cache-size
@@ -761,7 +763,7 @@ cache.size = 100 * MB
   (negative-cache?  dnsmasq-configuration-negative-cache?
                     (default #t))       ;boolean
   (cpe-id           dnsmasq-configuration-cpe-id
-                    (default #t))       ;string
+                    (default #f))       ;string
   (tftp-enable?     dnsmasq-configuration-tftp-enable?
                     (default #f))       ;boolean
   (tftp-no-fail?    dnsmasq-configuration-tftp-no-fail?
@@ -792,7 +794,7 @@ cache.size = 100 * MB
      port local-service? listen-addresses
      resolv-file no-resolv?
      forward-private-reverse-lookup? query-servers-in-order?
-     servers addresses
+     servers addresses servers-file
      cache-size negative-cache?
      cpe-id
      tftp-enable? tftp-no-fail?
@@ -805,76 +807,80 @@ cache.size = 100 * MB
      (requirement '(networking))
      (documentation "Run the dnsmasq DNS server.")
      (start #~(make-forkexec-constructor
-               '(#$(file-append package "/sbin/dnsmasq")
-                 "--keep-in-foreground"
-                 "--pid-file=/run/dnsmasq.pid"
-                 #$@(if no-hosts?
-                        '("--no-hosts")
+               (list
+                #$(file-append package "/sbin/dnsmasq")
+                "--keep-in-foreground"
+                "--pid-file=/run/dnsmasq.pid"
+                #$@(if no-hosts?
+                       '("--no-hosts")
                         '())
-                 #$(format #f "--port=~a" port)
-                 #$@(if local-service?
-                        '("--local-service")
+                #$(format #f "--port=~a" port)
+                #$@(if local-service?
+                       '("--local-service")
                         '())
-                 #$@(map (cut format #f "--listen-address=~a" <>)
-                         listen-addresses)
-                 #$(format #f "--resolv-file=~a" resolv-file)
-                 #$@(if no-resolv?
-                        '("--no-resolv")
+                #$@(map (cut format #f "--listen-address=~a" <>)
+                        listen-addresses)
+                #$(format #f "--resolv-file=~a" resolv-file)
+                #$@(if no-resolv?
+                       '("--no-resolv")
                         '())
-                 #$@(if forward-private-reverse-lookup?
-                        '()
+                #$@(if forward-private-reverse-lookup?
+                       '()
                         '("--bogus-priv"))
-                 #$@(if query-servers-in-order?
-                        '("--strict-order")
+                #$@(if query-servers-in-order?
+                       '("--strict-order")
                         '())
-                 #$@(map (cut format #f "--server=~a" <>)
-                         servers)
-                 #$@(map (cut format #f "--address=~a" <>)
-                         addresses)
-                 #$(format #f "--cache-size=~a" cache-size)
-                 #$@(if negative-cache?
-                        '()
+                #$@(if servers-file
+                       (list #~(string-append "--servers-file=" #$servers-file))
+                       '())
+                #$@(map (cut format #f "--server=~a" <>)
+                        servers)
+                #$@(map (cut format #f "--address=~a" <>)
+                        addresses)
+                #$(format #f "--cache-size=~a" cache-size)
+                #$@(if negative-cache?
+                       '()
                         '("--no-negcache"))
-                 #$@(if cpe-id
-                        (list (format #f "--add-cpe-id=~a" cpe-id))
-                        '())
-                 #$@(if tftp-enable?
-                        '("--enable-tftp")
-                        '())
-                 #$@(if tftp-no-fail?
-                        '("--tftp-no-fail")
-                        '())
-                 #$@(if tftp-single-port?
-                        '("--tftp-single-port")
-                        '())
-                 #$@(if tftp-secure?
-                        '("--tftp-secure?")
-                        '())
-                 #$@(if tftp-max
-                        (list (format #f "--tftp-max=~a" tftp-max))
+                #$@(if cpe-id
+                       (list (format #f "--add-cpe-id=~a" cpe-id))
+                       '())
+                #$@(if tftp-enable?
+                       '("--enable-tftp")
                         '())
-                 #$@(if tftp-mtu
-                        (list (format #f "--tftp-mtu=~a" tftp-mtu))
+                #$@(if tftp-no-fail?
+                       '("--tftp-no-fail")
                         '())
-                 #$@(if tftp-no-blocksize?
-                        '("--tftp-no-blocksize")
+                #$@(if tftp-single-port?
+                       '("--tftp-single-port")
                         '())
-                 #$@(if tftp-lowercase?
-                        '("--tftp-lowercase")
+                #$@(if tftp-secure?
+                       '("--tftp-secure")
                         '())
-                 #$@(if tftp-port-range
-                        (list (format #f "--tftp-port-range=~a"
-                                      tftp-port-range))
+                #$@(if tftp-max
+                       (list (format #f "--tftp-max=~a" tftp-max))
+                       '())
+                #$@(if tftp-mtu
+                       (list (format #f "--tftp-mtu=~a" tftp-mtu))
+                       '())
+                #$@(if tftp-no-blocksize?
+                       '("--tftp-no-blocksize")
                         '())
-                 #$@(if tftp-root
-                        (list (format #f "--tftp-root=~a" tftp-root))
+                #$@(if tftp-lowercase?
+                       '("--tftp-lowercase")
                         '())
-                 #$@(if tftp-unique-root
-                        (list
-                         (if (> (length tftp-unique-root) 0)
-                             (format #f "--tftp-unique-root=~a" tftp-unique-root)
-                             (format #f "--tftp-unique-root")))
-                        '()))
+                #$@(if tftp-port-range
+                       (list (format #f "--tftp-port-range=~a"
+                                     tftp-port-range))
+                       '())
+                #$@(if tftp-root
+                       (list (format #f "--tftp-root=~a" tftp-root))
+                       '())
+                #$@(if tftp-unique-root
+                       (list
+                        (if (> (length tftp-unique-root) 0)
+                            (format #f "--tftp-unique-root=~a" tftp-unique-root)
+                            (format #f "--tftp-unique-root")))
+                       '()))
                #:pid-file "/run/dnsmasq.pid"))
      (stop #~(make-kill-destructor)))))
 
diff --git a/gnu/services/lirc.scm b/gnu/services/lirc.scm
index 492d77defa..92784b65ca 100644
--- a/gnu/services/lirc.scm
+++ b/gnu/services/lirc.scm
@@ -21,12 +21,13 @@
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:use-module (gnu packages lirc)
+  #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (ice-9 match)
   #:export (lirc-configuration
             lirc-configuation?
-            lirc-service
+            lirc-service  ; deprecated
             lirc-service-type))
 
 ;;; Commentary:
@@ -40,9 +41,12 @@
   lirc-configuation?
   (lirc          lirc-configuration-lirc          ;file-like
                  (default lirc))
-  (device        lirc-configuration-device)       ;string
-  (driver        lirc-configuration-driver)       ;string
-  (config-file   lirc-configuration-file)         ;string | file-like object
+  (device        lirc-configuration-device        ;string
+                 (default #f))
+  (driver        lirc-configuration-driver        ;string
+                 (default #f))
+  (config-file   lirc-configuration-file          ;string | file-like object
+                 (default #f))
   (extra-options lirc-configuration-options       ;list of strings
                  (default '())))
 
@@ -81,11 +85,13 @@
                        (service-extension activation-service-type
                                           (const %lirc-activation))))
                 (description "Run LIRC, a daemon that decodes infrared signals
-from remote controls.")))
+from remote controls.")
+                (default-value (lirc-configuration))))
 
-(define* (lirc-service #:key (lirc lirc)
+(define-deprecated (lirc-service #:key (lirc lirc)
                        device driver config-file
                        (extra-options '()))
+  lirc-service-type
   "Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
 decodes infrared signals from remote controls.
 
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index 6f588679b1..bf4948dcfb 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -35,6 +35,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages dav)
   #:use-module (gnu packages tls)
+  #:use-module (guix deprecation)
   #:use-module (guix modules)
   #:use-module (guix records)
   #:use-module (guix packages)
@@ -42,7 +43,7 @@
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
   #:use-module (srfi srfi-1)
-  #:export (dovecot-service
+  #:export (dovecot-service  ; deprecated
             dovecot-service-type
             dovecot-configuration
             opaque-dovecot-configuration
@@ -1601,9 +1602,11 @@ greyed out, instead of only later giving \"not selectable\" popup error.
                        (service-extension activation-service-type
                                           %dovecot-activation)))
                 (description "Run Dovecot, a mail server that can run POP3,
-IMAP, and LMTP.")))
+IMAP, and LMTP.")
+                (default-value (dovecot-configuration))))
 
-(define* (dovecot-service #:key (config (dovecot-configuration)))
+(define-deprecated (dovecot-service #:key (config (dovecot-configuration)))
+  dovecot-service-type
   "Return a service that runs @command{dovecot}, a mail server that can run
 POP3, IMAP, and LMTP.  @var{config} should be a configuration object created
 by @code{dovecot-configuration}.  @var{config} may also be created by
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index dacf64c2d1..4632498357 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -143,12 +143,17 @@
 
             network-manager-configuration
             network-manager-configuration?
+            network-manager-configuration-shepherd-requirement
             network-manager-configuration-dns
             network-manager-configuration-vpn-plugins
             network-manager-service-type
 
             connman-configuration
             connman-configuration?
+            connman-configuration-connman
+            connman-configuration-shepherd-requirement
+            connman-configuration-disable-vpn?
+            connman-configuration-iwd?
             connman-service-type
 
             modem-manager-configuration
@@ -1135,16 +1140,29 @@ project's documentation} for more information."
 ;;; NetworkManager
 ;;;
 
+;; TODO: deprecated field, remove later.
+(define-with-syntax-properties (warn-iwd?-field-deprecation
+                                (value properties))
+  (when value
+    (warning (source-properties->location properties)
+             (G_ "the 'iwd?' field is deprecated, please use \
+'shepherd-requirement' field instead~%")))
+  value)
+
 (define-record-type* <network-manager-configuration>
   network-manager-configuration make-network-manager-configuration
   network-manager-configuration?
   (network-manager network-manager-configuration-network-manager
                    (default network-manager))
+  (shepherd-requirement network-manager-configuration-shepherd-requirement
+                        (default '(wpa-supplicant)))
   (dns network-manager-configuration-dns
        (default "default"))
   (vpn-plugins network-manager-configuration-vpn-plugins ;list of file-like
                (default '()))
-  (iwd? network-manager-configuration-iwd? (default #f)))
+  (iwd? network-manager-configuration-iwd?  ; TODO: deprecated field, remove.
+        (default #f)
+        (sanitize warn-iwd?-field-deprecation)))
 
 (define (network-manager-activation config)
   ;; Activation gexp for NetworkManager
@@ -1200,28 +1218,47 @@ project's documentation} for more information."
 
 (define (network-manager-shepherd-service config)
   (match-record config <network-manager-configuration>
-    (network-manager dns vpn-plugins iwd?)
-    (let ((conf (plain-file "NetworkManager.conf"
-                            (string-append
-                             "[main]\ndns=" dns "\n"
-                             (if iwd? "[device]\nwifi.backend=iwd\n" ""))))
-          (vpn  (vpn-plugin-directory vpn-plugins)))
+    (network-manager shepherd-requirement dns vpn-plugins iwd?)
+    (let* ((iwd? (or iwd?  ; TODO: deprecated field, remove later.
+                     (and shepherd-requirement
+                          (memq 'iwd shepherd-requirement))))
+           (conf (plain-file "NetworkManager.conf"
+                             (string-append
+                              "[main]\ndns=" dns "\n"
+                              (if iwd? "[device]\nwifi.backend=iwd\n" ""))))
+           (vpn  (vpn-plugin-directory vpn-plugins)))
       (list (shepherd-service
              (documentation "Run the NetworkManager.")
-             (provision '(networking))
-             (requirement (append '(user-processes dbus-system loopback)
-                                  (if iwd? '(iwd) '(wpa-supplicant))))
-             (start #~(make-forkexec-constructor
-                       (list (string-append #$network-manager
-                                            "/sbin/NetworkManager")
-                             (string-append "--config=" #$conf)
-                             "--no-daemon")
-                       #:environment-variables
-                       (list (string-append "NM_VPN_PLUGIN_DIR=" #$vpn
-                                            "/lib/NetworkManager/VPN")
-                             ;; Override non-existent default users
-                             "NM_OPENVPN_USER="
-                             "NM_OPENVPN_GROUP=")))
+             (provision '(NetworkManager networking))
+             (requirement `(user-processes dbus-system loopback
+                            ,@shepherd-requirement
+                            ;; TODO: iwd? is deprecated and should be passed
+                            ;; with shepherd-requirement, remove later.
+                            ,@(if iwd? '(iwd) '())))
+             (start
+              #~(lambda _
+                  (let ((pid
+                         (fork+exec-command
+                          (list #$(file-append network-manager
+                                               "/sbin/NetworkManager")
+                                (string-append "--config=" #$conf)
+                                "--no-daemon")
+                          #:environment-variables
+                          (list (string-append "NM_VPN_PLUGIN_DIR=" #$vpn
+                                               "/lib/NetworkManager/VPN")
+                                ;; Override non-existent default users
+                                "NM_OPENVPN_USER="
+                                "NM_OPENVPN_GROUP="))))
+                    ;; XXX: Despite the "online" name, this doesn't guarantee
+                    ;; WAN connectivity, it merely waits for NetworkManager
+                    ;; to finish starting-up. This is required otherwise
+                    ;; services will fail since the network interfaces be
+                    ;; absent until NetworkManager finishes setting them up.
+                    (system* #$(file-append network-manager "/bin/nm-online")
+                             "--wait-for-startup" "--quiet")
+                    ;; XXX: Finally, return the pid from running
+                    ;; fork+exec-command to shepherd.
+                    pid)))
              (stop #~(make-kill-destructor)))))))
 
 (define network-manager-service-type
@@ -1265,10 +1302,13 @@ wireless networking."))))
   connman-configuration?
   (connman      connman-configuration-connman
                 (default connman))
+  (shepherd-requirement connman-configuration-shepherd-requirement
+                        (default '()))
   (disable-vpn? connman-configuration-disable-vpn?
                 (default #f))
   (iwd?         connman-configuration-iwd?
-                (default #f)))
+                (default #f)
+                (sanitize warn-iwd?-field-deprecation)))
 
 (define (connman-activation config)
   (let ((disable-vpn? (connman-configuration-disable-vpn? config)))
@@ -1280,33 +1320,34 @@ wireless networking."))))
             (mkdir-p "/var/lib/connman-vpn/"))))))
 
 (define (connman-shepherd-service config)
-  "Return a shepherd service for Connman"
-  (and
-   (connman-configuration? config)
-   (let ((connman      (connman-configuration-connman config))
-         (disable-vpn? (connman-configuration-disable-vpn? config))
-         (iwd?         (connman-configuration-iwd? config)))
-     (list (shepherd-service
-            (documentation "Run Connman")
-            (provision '(networking))
-            (requirement
-             (append '(user-processes dbus-system loopback)
-                     (if iwd? '(iwd) '())))
-            (start #~(make-forkexec-constructor
-                      (list (string-append #$connman
-                                           "/sbin/connmand")
-                            "--nodaemon"
-                            "--nodnsproxy"
-                            #$@(if disable-vpn? '("--noplugin=vpn") '())
-                            #$@(if iwd? '("--wifi=iwd_agent") '()))
-
-                      ;; As connman(8) notes, when passing '-n', connman
-                      ;; "directs log output to the controlling terminal in
-                      ;; addition to syslog."  Redirect stdout and stderr
-                      ;; to avoid spamming the console (XXX: for some reason
-                      ;; redirecting to /dev/null doesn't work.)
-                      #:log-file "/var/log/connman.log"))
-            (stop #~(make-kill-destructor)))))))
+  (match-record config <connman-configuration> (connman shepherd-requirement
+                                                disable-vpn? iwd?)
+    (let ((iwd? (or iwd?  ; TODO: deprecated field, remove later.
+                    (and shepherd-requirement
+                         (memq 'iwd shepherd-requirement)))))
+      (list (shepherd-service
+             (documentation "Run Connman")
+             (provision '(connman networking))
+             (requirement `(user-processes dbus-system loopback
+                                           ,@shepherd-requirement
+                                           ;; TODO: iwd? is deprecated and should be passed
+                                           ;; with shepherd-requirement, remove later.
+                                           ,@(if iwd? '(iwd) '())))
+             (start #~(make-forkexec-constructor
+                       (list (string-append #$connman
+                                            "/sbin/connmand")
+                             "--nodaemon"
+                             "--nodnsproxy"
+                             #$@(if disable-vpn? '("--noplugin=vpn") '())
+                             #$@(if iwd? '("--wifi=iwd_agent") '()))
+
+                       ;; As connman(8) notes, when passing '-n', connman
+                       ;; "directs log output to the controlling terminal in
+                       ;; addition to syslog."  Redirect stdout and stderr
+                       ;; to avoid spamming the console (XXX: for some reason
+                       ;; redirecting to /dev/null doesn't work.)
+                       #:log-file "/var/log/connman.log"))
+             (stop #~(make-kill-destructor)))))))
 
 (define %connman-log-rotation
   (list (log-rotation
diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm
index 3e778f3cea..8ca7acd737 100644
--- a/gnu/services/sound.scm
+++ b/gnu/services/sound.scm
@@ -38,12 +38,24 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
   #:export (alsa-configuration
+            alsa-configuration?
+            alsa-configuration-alsa-plugins
+            alsa-configuration-pulseaudio?
+            alsa-configuration-extra-options
             alsa-service-type
 
             pulseaudio-configuration
+            pulseaudio-configuration?
+            pulseaudio-configuration-client-conf
+            pulseaudio-configuration-daemon-conf
+            pulseaudio-configuration-script-file
+            pulseaudio-configuration-extra-script-files
+            pulseaudio-configuration-system-script-file
             pulseaudio-service-type
 
             ladspa-configuration
+            ladspa-configuration?
+            ladspa-configuration-plugins
             ladspa-service-type))
 
 ;;; Commentary:
@@ -231,7 +243,7 @@ computed-file object~%") file))))
 (define-record-type* <ladspa-configuration>
   ladspa-configuration make-ladspa-configuration
   ladspa-configuration?
-  (plugins ladspa-plugins (default '())))
+  (plugins ladspa-configuration-plugins (default '())))
 
 (define (ladspa-environment config)
   ;; Define this variable in the global environment such that
@@ -239,7 +251,7 @@ computed-file object~%") file))))
   `(("LADSPA_PATH" .
      (string-join
       ',(map (lambda (package) (file-append package "/lib/ladspa"))
-             (ladspa-plugins config))
+             (ladspa-configuration-plugins config))
       ":"))))
 
 (define ladspa-service-type
diff --git a/gnu/services/spice.scm b/gnu/services/spice.scm
index e5ec46b9b5..b8d2f8486e 100644
--- a/gnu/services/spice.scm
+++ b/gnu/services/spice.scm
@@ -21,12 +21,13 @@
   #:use-module (gnu packages spice)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
+  #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:export (spice-vdagent-configuration
             spice-vdagent-configuration?
             spice-vdagent-service-type
-            spice-vdagent-service))
+            spice-vdagent-service))  ; deprecated
 
 (define-record-type* <spice-vdagent-configuration>
   spice-vdagent-configuration make-spice-vdagent-configuration
@@ -74,8 +75,8 @@
 from the @code{spice-vdagent} package to enable window resizing and clipboard
 sharing for @acronym{VM, virtual machine} guests.")))
 
-(define* (spice-vdagent-service
-          #:optional (config (spice-vdagent-configuration)))
+(define-deprecated (spice-vdagent-service
+                    #:optional (config (spice-vdagent-configuration)))
   "Start the @command{vdagentd} and @command{vdagent} daemons
 from @var{spice-vdagent} to enable guest window resizing and
 clipboard sharing."
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 7b038e6ac6..b76544c1a8 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -42,7 +42,7 @@
   #:use-module (ice-9 vlist)
   #:export (lsh-configuration
             lsh-configuration?
-            lsh-service
+            lsh-service  ; deprecated
             lsh-service-type
 
             openssh-configuration
@@ -52,7 +52,7 @@
             dropbear-configuration
             dropbear-configuration?
             dropbear-service-type
-            dropbear-service
+            dropbear-service  ; deprecated
 
             autossh-configuration
             autossh-configuration?
@@ -74,20 +74,34 @@
   lsh-configuration?
   (lsh lsh-configuration-lsh
        (default lsh))
-  (daemonic? lsh-configuration-daemonic?)
-  (host-key lsh-configuration-host-key)
-  (interfaces lsh-configuration-interfaces)
-  (port-number lsh-configuration-port-number)
-  (allow-empty-passwords? lsh-configuration-allow-empty-passwords?)
-  (root-login? lsh-configuration-root-login?)
-  (syslog-output? lsh-configuration-syslog-output?)
-  (pid-file? lsh-configuration-pid-file?)
-  (pid-file lsh-configuration-pid-file)
-  (x11-forwarding? lsh-configuration-x11-forwarding?)
-  (tcp/ip-forwarding? lsh-configuration-tcp/ip-forwarding?)
-  (password-authentication? lsh-configuration-password-authentication?)
-  (public-key-authentication? lsh-configuration-public-key-authentication?)
-  (initialize? lsh-configuration-initialize?))
+  (daemonic? lsh-configuration-daemonic?
+             (default #t))
+  (host-key lsh-configuration-host-key
+            (default "/etc/lsh/host-key"))
+  (interfaces lsh-configuration-interfaces
+              (default '()))
+  (port-number lsh-configuration-port-number
+               (default 22))
+  (allow-empty-passwords? lsh-configuration-allow-empty-passwords?
+                          (default #f))
+  (root-login? lsh-configuration-root-login?
+               (default #f))
+  (syslog-output? lsh-configuration-syslog-output?
+                  (default #t))
+  (pid-file? lsh-configuration-pid-file?
+             (default #f))
+  (pid-file lsh-configuration-pid-file
+            (default "/var/run/lshd.pid"))
+  (x11-forwarding? lsh-configuration-x11-forwarding?
+                   (default #t))
+  (tcp/ip-forwarding? lsh-configuration-tcp/ip-forwarding?
+                      (default #t))
+  (password-authentication? lsh-configuration-password-authentication?
+                            (default #t))
+  (public-key-authentication? lsh-configuration-public-key-authentication?
+                              (default #t))
+  (initialize? lsh-configuration-initialize?
+               (default #t)))
 
 (define %yarrow-seed
   "/var/spool/lsh/yarrow-seed-file")
@@ -203,19 +217,20 @@
          (lsh-configuration-allow-empty-passwords? config))))
 
 (define lsh-service-type
-  (service-type (name 'lsh)
-                (description
-                 "Run the GNU@tie{}lsh secure shell (SSH) daemon,
+  (service-type
+   (name 'lsh)
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             lsh-shepherd-service)
+          (service-extension pam-root-service-type
+                             lsh-pam-services)
+          (service-extension activation-service-type
+                             lsh-activation)))
+   (description "Run the GNU@tie{}lsh secure shell (SSH) daemon,
 @command{lshd}.")
-                (extensions
-                 (list (service-extension shepherd-root-service-type
-                                          lsh-shepherd-service)
-                       (service-extension pam-root-service-type
-                                          lsh-pam-services)
-                       (service-extension activation-service-type
-                                          lsh-activation)))))
+   (default-value (lsh-configuration))))
 
-(define* (lsh-service #:key
+(define-deprecated (lsh-service #:key
                       (lsh lsh)
                       (daemonic? #t)
                       (host-key "/etc/lsh/host-key")
@@ -231,6 +246,7 @@
                       (password-authentication? #t)
                       (public-key-authentication? #t)
                       (initialize? #t))
+  lsh-service-type
   "Run the @command{lshd} program from @var{lsh} to listen on port @var{port-number}.
 @var{host-key} must designate a file containing the host key, and readable
 only by root.
@@ -701,7 +717,9 @@ of user-name/file-like tuples."
                                           dropbear-activation)))
                 (default-value (dropbear-configuration))))
 
-(define* (dropbear-service #:optional (config (dropbear-configuration)))
+(define-deprecated (dropbear-service #:optional
+                                     (config (dropbear-configuration)))
+  dropbear-service-type
   "Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
 object."
diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index 4103f89ecf..a884d71eb2 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -39,11 +39,12 @@
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (guix i18n)
+  #:use-module (guix deprecation)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
-  #:export (openvpn-client-service
-            openvpn-server-service
+  #:export (openvpn-client-service  ; deprecated
+            openvpn-server-service  ; deprecated
             openvpn-client-service-type
             openvpn-server-service-type
             openvpn-client-configuration
@@ -531,7 +532,8 @@ is truncated and rewritten every minute.")
                        (service-extension activation-service-type
                                           (const %openvpn-activation))))
                 (description "Run the OpenVPN server, which allows you to
-@emph{host} a @acronym{VPN, virtual private network}.")))
+@emph{host} a @acronym{VPN, virtual private network}.")
+                (default-value (openvpn-server-configuration))))
 
 (define openvpn-client-service-type
   (service-type (name 'openvpn-client)
@@ -544,12 +546,17 @@ is truncated and rewritten every minute.")
                                           (const %openvpn-activation))))
                 (description
                  "Run the OpenVPN client service, which allows you to connect
-to an existing @acronym{VPN, virtual private network}.")))
+to an existing @acronym{VPN, virtual private network}.")
+                (default-value (openvpn-client-configuration))))
 
-(define* (openvpn-client-service #:key (config (openvpn-client-configuration)))
+(define-deprecated
+  (openvpn-client-service #:key (config (openvpn-client-configuration)))
+  openvpn-client-service-type
   (service openvpn-client-service-type config))
 
-(define* (openvpn-server-service #:key (config (openvpn-server-configuration)))
+(define-deprecated
+  (openvpn-server-service #:key (config (openvpn-server-configuration)))
+  openvpn-server-service-type
   (service openvpn-server-service-type config))
 
 (define (generate-openvpn-server-documentation)
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 5f073d05d3..c4745cecf5 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -107,10 +107,13 @@
 
             slim-service-type
 
-            screen-locker
-            screen-locker?
+            screen-locker-configuration
+            screen-locker-configuration?
+            screen-locker-configuration-name
+            screen-locker-configuration-program
+            screen-locker-configuration-allow-empty-password?
             screen-locker-service-type
-            screen-locker-service
+            screen-locker-service  ; deprecated
 
             localed-configuration
             localed-configuration?
@@ -683,21 +686,30 @@ reboot_cmd " shepherd "/sbin/reboot\n"
 ;;; Screen lockers & co.
 ;;;
 
-(define-record-type <screen-locker>
-  (screen-locker name program empty?)
+(define-record-type <screen-locker-configuration>
+  (screen-locker-configuration name program allow-empty-password?)
+  screen-locker-configuration?
+  (name    screen-locker-configuration-name)           ;string
+  (program screen-locker-configuration-program)        ;gexp
+  (allow-empty-password?
+   screen-locker-configuration-allow-empty-password?)) ;Boolean
+
+(define-deprecated/public-alias
+  screen-locker
+  screen-locker-configuration)
+
+(define-deprecated/public-alias
   screen-locker?
-  (name    screen-locker-name)                     ;string
-  (program screen-locker-program)                  ;gexp
-  (empty?  screen-locker-allows-empty-passwords?)) ;Boolean
+  screen-locker-configuration?)
 
 (define screen-locker-pam-services
   (match-lambda
-    (($ <screen-locker> name _ empty?)
+    (($ <screen-locker-configuration> name _ empty?)
      (list (unix-pam-service name
                              #:allow-empty-passwords? empty?)))))
 
 (define screen-locker-setuid-programs
-  (compose list file-like->setuid-program screen-locker-program))
+  (compose list file-like->setuid-program screen-locker-configuration-program))
 
 (define screen-locker-service-type
   (service-type (name 'screen-locker)
@@ -711,10 +723,11 @@ reboot_cmd " shepherd "/sbin/reboot\n"
 the graphical server by making it setuid-root, so it can authenticate users,
 and by creating a PAM service for it.")))
 
-(define* (screen-locker-service package
-                                #:optional
-                                (program (package-name package))
-                                #:key allow-empty-passwords?)
+(define-deprecated (screen-locker-service package
+                                          #:optional
+                                          (program (package-name package))
+                                          #:key allow-empty-passwords?)
+  screen-locker-service-type
   "Add @var{package}, a package for a screen locker or screen saver whose
 command is @var{program}, to the set of setuid programs and add a PAM entry
 for it.  For example:
@@ -725,9 +738,9 @@ for it.  For example:
 
 makes the good ol' XlockMore usable."
   (service screen-locker-service-type
-           (screen-locker program
-                          (file-append package "/bin/" program)
-                          allow-empty-passwords?)))
+           (screen-locker-configuration program
+                                        (file-append package "/bin/" program)
+                                        allow-empty-passwords?)))
 
 
 ;;;