diff options
Diffstat (limited to 'gnu/services')
-rw-r--r-- | gnu/services/desktop.scm | 109 | ||||
-rw-r--r-- | gnu/services/xorg.scm | 121 |
2 files changed, 153 insertions, 77 deletions
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index fbeabf1162..ce63969dc8 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is> ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2019 Christopher Baines <mail@cbaines.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -39,6 +40,7 @@ #:use-module (gnu system pam) #:use-module (gnu packages glib) #:use-module (gnu packages admin) + #:use-module (gnu packages cups) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gnome) #:use-module (gnu packages xfce) @@ -49,6 +51,7 @@ #:use-module (gnu packages libusb) #:use-module (gnu packages mate) #:use-module (gnu packages enlightenment) + #:use-module (guix deprecation) #:use-module (guix records) #:use-module (guix packages) #:use-module (guix store) @@ -56,8 +59,22 @@ #:use-module (guix gexp) #:use-module (srfi srfi-1) #:use-module (ice-9 match) - #:export (upower-configuration + #:export (<upower-configuration> + upower-configuration upower-configuration? + upower-configuration-upower + upower-configuration-watts-up-pro? + upower-configuration-poll-batteries? + upower-configuration-ignore-lid? + upower-configuration-use-percentage-for-policy? + upower-configuration-percentage-low + upower-configuration-percentage-critical + upower-configuration-percentage-action + upower-configuration-time-low + upower-configuration-time-critical + upower-configuration-time-action + upower-configuration-critical-power-action + upower-service upower-service-type @@ -173,23 +190,33 @@ is set to @var{value} when the bus daemon launches it." ;;; Upower D-Bus service. ;;; -;; TODO: Export. (define-record-type* <upower-configuration> upower-configuration make-upower-configuration upower-configuration? - (upower upower-configuration-upower - (default upower)) - (watts-up-pro? upower-configuration-watts-up-pro?) - (poll-batteries? upower-configuration-poll-batteries?) - (ignore-lid? upower-configuration-ignore-lid?) - (use-percentage-for-policy? upower-configuration-use-percentage-for-policy?) - (percentage-low upower-configuration-percentage-low) - (percentage-critical upower-configuration-percentage-critical) - (percentage-action upower-configuration-percentage-action) - (time-low upower-configuration-time-low) - (time-critical upower-configuration-time-critical) - (time-action upower-configuration-time-action) - (critical-power-action upower-configuration-critical-power-action)) + (upower upower-configuration-upower + (default upower)) + (watts-up-pro? upower-configuration-watts-up-pro? + (default #f)) + (poll-batteries? upower-configuration-poll-batteries? + (default #t)) + (ignore-lid? upower-configuration-ignore-lid? + (default #f)) + (use-percentage-for-policy? upower-configuration-use-percentage-for-policy? + (default #f)) + (percentage-low upower-configuration-percentage-low + (default 10)) + (percentage-critical upower-configuration-percentage-critical + (default 3)) + (percentage-action upower-configuration-percentage-action + (default 2)) + (time-low upower-configuration-time-low + (default 1200)) + (time-critical upower-configuration-time-critical + (default 300)) + (time-action upower-configuration-time-action + (default 120)) + (critical-power-action upower-configuration-critical-power-action + (default 'hybrid-sleep))) (define* upower-configuration-file ;; Return an upower-daemon configuration file. @@ -247,6 +274,11 @@ is set to @var{value} when the bus daemon launches it." (define upower-service-type (let ((upower-package (compose list upower-configuration-upower))) (service-type (name 'upower) + (description + "Run @command{upowerd}}, a system-wide monitor for power +consumption and battery levels, with the given configuration settings. It +implements the @code{org.freedesktop.UPower} D-Bus interface, and is notably +used by GNOME.") (extensions (list (service-extension dbus-root-service-type upower-dbus-service) @@ -259,20 +291,21 @@ is set to @var{value} when the bus daemon launches it." ;; Make the 'upower' command visible. (service-extension profile-service-type - upower-package)))))) - -(define* (upower-service #:key (upower upower) - (watts-up-pro? #f) - (poll-batteries? #t) - (ignore-lid? #f) - (use-percentage-for-policy? #f) - (percentage-low 10) - (percentage-critical 3) - (percentage-action 2) - (time-low 1200) - (time-critical 300) - (time-action 120) - (critical-power-action 'hybrid-sleep)) + upower-package))) + (default-value (upower-configuration))))) + +(define-deprecated (upower-service #:key (upower upower) + (watts-up-pro? #f) + (poll-batteries? #t) + (ignore-lid? #f) + (use-percentage-for-policy? #f) + (percentage-low 10) + (percentage-critical 3) + (percentage-action 2) + (time-low 1200) + (time-critical 300) + (time-action 120) + (critical-power-action 'hybrid-sleep)) "Return a service that runs @uref{http://upower.freedesktop.org/, @command{upowerd}}, a system-wide monitor for power consumption and battery levels, with the given configuration settings. It implements the @@ -802,6 +835,21 @@ accountsservice web site} for more information." ;;; +;;; cups-pk-helper service. +;;; + +(define cups-pk-helper-service-type + (service-type + (name 'cups-pk-helper) + (description + "PolicyKit helper to configure CUPS with fine-grained privileges.") + (extensions + (list (service-extension dbus-root-service-type list) + (service-extension polkit-service-type list))) + (default-value cups-pk-helper))) + + +;;; ;;; GNOME desktop service. ;;; @@ -988,8 +1036,9 @@ as expected."))) (service wpa-supplicant-service-type) ;needed by NetworkManager (service avahi-service-type) (udisks-service) - (upower-service) + (service upower-service-type) (accountsservice-service) + (service cups-pk-helper-service-type) (colord-service) (geoclue-service) (service polkit-service-type) diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 1efb275794..f2a3c28c90 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -2,7 +2,8 @@ ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com> ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> -;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com> +;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com> +;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,7 +29,9 @@ #:use-module ((gnu packages base) #:select (canonical-package)) #:use-module (gnu packages guile) #:use-module (gnu packages xorg) + #:use-module (gnu packages fonts) #:use-module (gnu packages gl) + #:use-module (gnu packages glib) #:use-module (gnu packages display-managers) #:use-module (gnu packages gnustep) #:use-module (gnu packages gnome) @@ -290,7 +293,8 @@ in place of @code{/usr/bin/X}." (configuration-file (xorg-configuration-file #:modules modules #:fonts fonts)) - (xorg-server xorg-server)) + (xorg-server xorg-server) + (xserver-arguments '("-nolisten" "tcp"))) "Return a @code{startx} script in which @var{modules}, a list of X module packages, and @var{fonts}, a list of X font directories, are available. See @code{xorg-wrapper} for more details on the arguments. The result should be @@ -303,8 +307,8 @@ used in place of @code{startx}." (define exp ;; Write a small wrapper around the X server. #~(apply execl #$X #$X ;; Second #$X is for argv[0]. - "-logverbose" "-verbose" "-nolisten" "tcp" "-terminate" - (cdr (command-line)))) + "-logverbose" "-verbose" "-terminate" #$@xserver-arguments + (cdr (command-line)))) (program-file "startx" exp)) @@ -623,48 +627,59 @@ makes the good ol' XlockMore usable." (home-directory "/var/lib/gdm") (shell (file-append shadow "/sbin/nologin"))))) +(define dbus-daemon-wrapper + (program-file "gdm-dbus-wrapper" + #~(begin + (setenv "XDG_CONFIG_DIRS" + "/run/current-system/profile/etc/xdg") + (setenv "XDG_DATA_DIRS" + "/run/current-system/profile/share") + (apply execl (string-append #$dbus "/bin/dbus-daemon") + (program-arguments))))) + (define-record-type* <gdm-configuration> gdm-configuration make-gdm-configuration gdm-configuration? (gdm gdm-configuration-gdm (default gdm)) (allow-empty-passwords? gdm-configuration-allow-empty-passwords? (default #t)) (auto-login? gdm-configuration-auto-login? (default #f)) + (dbus-daemon gdm-configuration-dbus-daemon (default dbus-daemon-wrapper)) (default-user gdm-configuration-default-user (default #f)) + (gnome-shell-assets gdm-configuration-gnome-shell-assets + (default (list adwaita-icon-theme font-cantarell))) (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)))))) + (default (xorg-wrapper))) + (x-session gdm-configuration-x-session + (default (xinitrc)))) + +(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,15 +713,27 @@ makes the good ol' XlockMore usable." "/bin/gdm")) #:environment-variables (list (string-append + "GDM_CUSTOM_CONF=" + #$(gdm-configuration-file config)) + (string-append + "GDM_DBUS_DAEMON=" + #$(gdm-configuration-dbus-daemon config)) + (string-append "GDM_X_SERVER=" #$(gdm-configuration-x-server config)) - ;; XXX: GDM requires access to a handful of - ;; programs and components from Gnome (gnome-shell, - ;; dbus, and gnome-session among others). The - ;; following variables only work provided Gnome is - ;; installed. - "XDG_DATA_DIRS=/run/current-system/profile/share" - "PATH=/run/current-system/profile/bin")))) + (string-append + "GDM_X_SESSION=" + #$(gdm-configuration-x-session config)) + (string-append + "XDG_DATA_DIRS=" + ((lambda (ls) (string-join ls ":")) + (map (lambda (path) + (string-append path "/share")) + ;; XXX: Remove gnome-shell below when GDM + ;; can depend on GNOME Shell directly. + (cons #$gnome-shell + '#$(gdm-configuration-gnome-shell-assets + config))))))))) (stop #~(make-kill-destructor)) (respawn? #t)))) @@ -719,8 +746,8 @@ 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 profile-service-type + gdm-configuration-gnome-shell-assets) (service-extension dbus-root-service-type (compose list gdm-configuration-gdm)))) |