* [PATCH] gnu: Add sddm.
2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
@ 2016-08-27 14:00 ` David Craven
2016-08-27 14:22 ` Marius Bakke
2016-08-27 14:00 ` [PATCH] services: Add sddm service David Craven
2016-08-27 16:57 ` [PATCH] Sddm pam authentication failure David Craven
2 siblings, 1 reply; 6+ messages in thread
From: David Craven @ 2016-08-27 14:00 UTC (permalink / raw)
To: guix-devel
* gnu/packages/hawaii.scm (sddm): New variable.
---
gnu/packages/hawaii.scm | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/gnu/packages/hawaii.scm b/gnu/packages/hawaii.scm
index fbf642b..8c99e5f 100644
--- a/gnu/packages/hawaii.scm
+++ b/gnu/packages/hawaii.scm
@@ -17,6 +17,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages hawaii)
+ #:use-module (gnu packages admin)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gl)
@@ -34,6 +35,7 @@
#:use-module (gnu packages xorg)
#:use-module (guix build-system cmake)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module (guix packages)
#:use-module ((guix licenses) #:prefix license:))
@@ -382,3 +384,66 @@ It contains a Qt platform theme plugin, session manager, QML plugins and a
convergent shell for multiple form factors such as desktops, netbooks, phones
and tablets.")
(license (list license:gpl2+ license:lgpl2.1+))))
+
+(define-public sddm
+ (package
+ (name "sddm")
+ (version "0.13.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/sddm/sddm"
+ "/releases/download/v" version "/"
+ "sddm-" version ".tar.xz"))
+ (sha256
+ (base32
+ "0z9lvlb01np9ygdwhy0v4m3cpbfm8bj7jfwzg6nkwy7prjm8r1nx"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("extra-cmake-modules" ,extra-cmake-modules)
+ ("pkg-config" ,pkg-config)
+ ("qttools" ,qttools)))
+ (inputs
+ `(("glib" ,glib)
+ ("greenisland" ,greenisland)
+ ("libxcb" ,libxcb)
+ ("libxkbcommon" ,libxkbcommon)
+ ("linux-pam" ,linux-pam)
+ ("qtbase" ,qtbase)
+ ("qtdeclarative" ,qtdeclarative)
+ ("shadow" ,shadow)
+ ("wayland" ,wayland)))
+ (arguments
+ `(#:configure-flags
+ (list
+ ;; Currently doesn't do anything
+ ;; Option added by enable wayland greeters PR
+ "-DENABLE_WAYLAND=ON"
+ "-DENABLE_PAM=OFF"
+ "-DCONFIG_FILE=/etc/sddm.conf"
+ ;; Set path to /etc/login.defs
+ ;; Alternatively use -DUID_MIN and -DUID_MAX
+ (string-append "-DLOGIN_DEFS_PATH="
+ (assoc-ref %build-inputs "shadow")
+ "/etc/login.defs")
+ (string-append "-DQT_IMPORTS_DIR="
+ (assoc-ref %outputs "out") "/qml")
+ (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+ (assoc-ref %outputs "out") "/etc"))
+ #:modules ((guix build cmake-build-system)
+ (guix build qt-utils)
+ (guix build utils))
+ #:imported-modules (,@%cmake-build-system-modules
+ (guix build qt-utils))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'wrap-programs
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (wrap-qt-program out "sddm")
+ (wrap-qt-program out "sddm-greeter")
+ #t))))))
+ (synopsis "QML based X11 and Wayland display manager")
+ (description "QML based X11 and Wayland display manager.")
+ (home-page "https://github.com/sddm/sddm")
+ (license license:gpl2)))
--
2.9.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH] services: Add sddm service.
2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
@ 2016-08-27 14:00 ` David Craven
2016-08-27 16:57 ` [PATCH] Sddm pam authentication failure David Craven
2 siblings, 0 replies; 6+ messages in thread
From: David Craven @ 2016-08-27 14:00 UTC (permalink / raw)
To: guix-devel
* gnu/services/sddm.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
gnu/local.mk | 1 +
gnu/services/sddm.scm | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 313 insertions(+)
create mode 100644 gnu/services/sddm.scm
diff --git a/gnu/local.mk b/gnu/local.mk
index 8c2f6b4..89a4783 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -390,6 +390,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/networking.scm \
%D%/services/shepherd.scm \
%D%/services/herd.scm \
+ %D%/services/sddm.scm \
%D%/services/spice.scm \
%D%/services/ssh.scm \
%D%/services/web.scm \
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
new file mode 100644
index 0000000..e6e2828
--- /dev/null
+++ b/gnu/services/sddm.scm
@@ -0,0 +1,312 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 David Craven <david@craven.ch>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services sddm)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages hawaii)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services xorg)
+ #:use-module (gnu system pam)
+ #:use-module (gnu system shadow)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:export (sddm-configuration
+ sddm-confiugration?
+ sddm-service-type
+ sddm-service))
+
+(define-record-type* <sddm-configuration>
+ sddm-configuration make-sddm-configuration
+ sddm-configuration?
+ (sddm sddm-configuration-sddm
+ (default sddm))
+ (allow-empty-passwords? sddm-configuration-allow-empty-passwords?
+ (default #t))
+
+ ;; [General]
+ ;; valid values are x11 and wayland
+ ;; currently doesn't do anything is enabled by wayland greeter PR
+ (display-server sddm-configuration-display-server
+ (default "x11"))
+ ;; valid values are on, off or none
+ (numlock sddm-configuration-numlock
+ (default "on"))
+ (halt-command sddm-configuration-halt-command
+ (default #~(string-append #$shepherd "/sbin/halt")))
+ (reboot-command sddm-configuration-reboot-command
+ (default #~(string-append #$shepherd "/sbin/reboot")))
+
+ ;; [Theme]
+ ;; valid values are elarun or maldives
+ (theme sddm-configuration-theme
+ (default "maldives"))
+ (themes-directory sddm-configuration-themes-directory
+ (default #~(string-append #$sddm "/share/sddm/themes")))
+ (faces-directory sddm-configuration-faces-directory
+ (default #~(string-append #$sddm "/share/sddm/faces")))
+
+ ;; [Users]
+ (default-path sddm-configuration-default-path
+ (default "/run/current-system/profile/bin"))
+ (minimum-uid sddm-configuration-minimum-uid
+ (default 1000))
+ (maximum-uid sddm-configuration-maximum-uid
+ (default 2000))
+ (remember-last-user? sddm-configuration-remember-last-user?
+ (default #t))
+ (remember-last-session? sddm-configuration-remember-last-session?
+ (default #t))
+ (hide-users sddm-configuration-hide-users
+ (default ""))
+ (hide-shells sddm-configuration-hide-shells
+ (default #~(string-append #$shadow "/sbin/nologin")))
+
+ ;; [Wayland]
+ (session-command sddm-configuration-session-command
+ (default #~(string-append #$sddm "/share/sddm/scripts/wayland-session")))
+ (sessions-directory sddm-configuration-sessions-directory
+ (default "/run/current-system/profile/share/wayland-sessions"))
+ ;; [X11]
+ (xorg-server-path sddm-configuration-xorg-server-path
+ (default (xorg-start-command)))
+ (xauth-path sddm-configuration-xauth-path
+ (default #~(string-append #$xauth "/bin/xauth")))
+ (xephyr-path sddm-configuration-xephyr-path
+ (default #~(string-append #$xorg-server "/bin/Xephyr")))
+ (xdisplay-start sddm-configuration-xdisplay-start
+ (default #~(string-append #$sddm "/share/sddm/scripts/Xsetup")))
+ (xdisplay-stop sddm-configuration-xdisplay-stop
+ (default #~(string-append #$sddm "/share/sddm/scripts/Xstop")))
+ (xsession-command sddm-configuration-xsession-command
+ (default (xinitrc)))
+ (xsessions-directory sddm-configuration-xsessions-directory
+ (default "/run/current-system/profile/share/xsessions"))
+ (minimum-vt sddm-configuration-minimum-vt
+ (default 7))
+ (xserver-arguments sddm-configuration-xserver-arguments
+ (default "-nolisten tcp"))
+
+ ;; [Autologin]
+ (auto-login-user sddm-configuration-auto-login-user
+ (default ""))
+ (auto-login-session sddm-configuration-auto-login-session
+ (default ""))
+ (relogin? sddm-configuration-relogin?
+ (default #f)))
+
+(define (sddm-configuration-file config)
+ ;; [XDisplay] -> [X11] in sddm 0.14.0
+ ;; [WaylandDisplay] -> [Wayland] in sddm 0.14.0
+ (mixed-text-file "sddm.conf" "
+[General]
+DisplayServer=" (sddm-configuration-display-server config) "
+Numlock=" (sddm-configuration-numlock config) "
+HaltCommand=" (sddm-configuration-halt-command config) "
+RebootCommand=" (sddm-configuration-reboot-command config) "
+
+[Users]
+DefaultPath=" (sddm-configuration-default-path config) "
+MinimumUid=" (number->string (sddm-configuration-minimum-uid config))"
+MaximumUid=" (number->string (sddm-configuration-maximum-uid config))"
+RememberLastUser=" (if (sddm-configuration-remember-last-user? config)
+ "true" "false") "
+RememberLastSession=" (if (sddm-configuration-remember-last-session? config)
+ "true" "false") "
+HideUsers=" (sddm-configuration-hide-users config) "
+Hideshells=" (sddm-configuration-hide-shells config) "
+
+[Theme]
+Current=" (sddm-configuration-theme config) "
+ThemeDir=" (sddm-configuration-themes-directory config) "
+FacesDir=" (sddm-configuration-faces-directory config) "
+
+[WaylandDisplay]
+SessionCommand=" (sddm-configuration-session-command config) "
+SessionDir=" (sddm-configuration-sessions-directory config) "
+
+[XDisplay]
+ServerPath=" (sddm-configuration-xorg-server-path config) "
+XauthPath=" (sddm-configuration-xauth-path config) "
+XephyrPath=" (sddm-configuration-xephyr-path config) "
+DisplayCommand=" (sddm-configuration-xdisplay-start config) "
+DisplayStopCommand=" (sddm-configuration-xdisplay-stop config) "
+SessionCommand=" (sddm-configuration-xsession-command config) "
+SessionDir=" (sddm-configuration-xsessions-directory config) "
+MinimumVT=" (number->string (sddm-configuration-minimum-vt config)) "
+ServerArguments=" (sddm-configuration-xserver-arguments config) "
+
+[Autologin]
+User=" (sddm-configuration-auto-login-user config) "
+Session=" (sddm-configuration-auto-login-session config) "
+Relogin=" (if (sddm-configuration-relogin? config)
+ "true" "false") "
+"))
+
+(define (sddm-activation config)
+ "Return the activation gexp for CONFIG."
+ #~(begin
+ (open-output-file "/etc/pam_debug")
+ (symlink #$(sddm-configuration-file config) "/etc/sddm.conf")))
+
+(define (sddm-shepherd-service config)
+ "Return a <shepherd-service> for sddm with CONFIG."
+
+ (define sddm-command
+ #~(list (string-append #$(sddm-configuration-sddm config) "/bin/sddm")))
+
+ (list (shepherd-service
+ (documentation "SDDM display manager.")
+ (requirement '(user-processes))
+ (provision '(display-manager))
+ (start #~(make-forkexec-constructor #$sddm-command))
+ (stop #~(make-kill-destructor)))))
+
+(define (sddm-pam-service)
+ "Return a PAM service for @command{sddm}."
+ (pam-service
+ (name "sddm")
+ (auth
+ (list
+ (pam-entry
+ (control "include")
+ (module "other"))))
+ (account
+ (list
+ (pam-entry
+ (control "include")
+ (module "other"))))
+ (password
+ (list
+ (pam-entry
+ (control "include")
+ (module "other"))))
+ (session
+ (list
+ (pam-entry
+ (control "include")
+ (module "other"))))))
+
+(define (sddm-greeter-pam-service)
+ "Return a PAM service for @command{sddm-greeter}."
+ (pam-service
+ (name "sddm-greeter")
+ (auth
+ (list
+ ;; Load environment form /etc/environment and ~/.pam_environment
+ (pam-entry
+ (control "required")
+ (module "pam_env.so"))
+ ;; Always let the greeter start without authentication
+ (pam-entry
+ (control "required")
+ (module "pam_permit.so"))))
+ (account
+ (list
+ ;; No action required for account management
+ (pam-entry
+ (control "required")
+ (module "pam_permit.so"))))
+ (password
+ (list
+ ;; Can't change password
+ (pam-entry
+ (control "required")
+ (module "pam_deny.so"))))
+ (session
+ (list
+ ;; Setup session
+ (pam-entry
+ (control "required")
+ (module "pam_unix.so"))
+ (pam-entry
+ (control "optional")
+ (module #~(string-append #$elogind "/lib/security/pam_elogind.so")))))))
+
+(define (sddm-autologin-pam-service)
+ "Return a PAM service for @command{sddm-autologin}"
+ (pam-service
+ (name "sddm-autologin")
+ (auth
+ (list
+ (pam-entry
+ (control "requisite")
+ (module "pam_nologin.so"))
+ (pam-entry
+ (control "required")
+ (module "pam_succeed_if.so")
+ (arguments (list "uid >= 1000 quiet")))
+ (pam-entry
+ (control "required")
+ (module "pam_permit.so"))))
+ (account
+ (list
+ (pam-entry
+ (control "include")
+ (module "sddm"))))
+ (password
+ (list
+ (pam-entry
+ (control "include")
+ (module "sddm"))))
+ (session
+ (list
+ (pam-entry
+ (control "include")
+ (module "sddm"))))))
+
+(define (startxfce4-pam-service)
+ (unix-pam-service "startxfce4" #:allow-empty-passwords? #t))
+
+(define (weston-pam-service)
+ (unix-pam-service "weston" #:allow-empty-passwords? #t))
+
+(define (sddm-pam-services config)
+ (list (sddm-pam-service)
+ (sddm-greeter-pam-service)
+ (sddm-autologin-pam-service)
+ (startxfce4-pam-service)))
+
+(define %sddm-accounts
+ (list (user-group (name "sddm") (system? #t))
+ (user-account
+ (name "sddm")
+ (group "sddm")
+ (system? #t)
+ (comment "SDDM user")
+ (home-directory "/var/lib/sddm")
+ (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define sddm-service-type
+ (service-type (name 'sddm)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ sddm-shepherd-service)
+ (service-extension activation-service-type
+ sddm-activation)
+ (service-extension pam-root-service-type
+ sddm-pam-services)
+ (service-extension account-service-type
+ (const %sddm-accounts))))))
+
+(define* (sddm-service #:optional (config (sddm-configuration)))
+ "Run the @uref{https://github.com/sddm/sddm,SSDM display manager}
+with the given @var{config}, a @code{<sddm-configuration>} object."
+ (service sddm-service-type config))
--
2.9.0
^ permalink raw reply related [flat|nested] 6+ messages in thread