1(define-module (nmeum services system)2 #:use-module (nmeum packages desktop)3 #:use-module (guix gexp)4 #:use-module (gnu services)5 #:use-module (gnu services base)6 #:use-module (gnu system pam)78 #:export (login-xdg-runtime-service-type))910;; Hack to extract the login-pam-service from (gnu services base).11(define login-pam-service (@@ (gnu services base) login-pam-service))1213;; Utility method for unioning multiple PAM services.14(define (pam-service-union name lst)15 (define (%pam-service-union s1 s2)16 (pam-service (name name)17 (account (append (pam-service-account s1)18 (pam-service-account s2)))19 (auth (append (pam-service-auth s1)20 (pam-service-auth s2)))21 (password (append (pam-service-password s1)22 (pam-service-password s2)))23 (session (append (pam-service-session s1)24 (pam-service-session s2)))))2526 (apply %pam-service-union lst))2728;; Custom variant of the login-pam-service procedure from the29;; `gnu/services/base.scm` file in the Guix repository.30(define (login-xdg-runtime-pam-service config)31 (define dumb-dir-pam-service32 (let* ((module "/lib/security/pam_dumb_runtime_dir.so")33 (dumb-dir (pam-entry (control "optional")34 (module (file-append dumb-runtime-dir module)))))35 (pam-service (name "dumb-dir")36 (session (list dumb-dir)))))3738 (list39 (pam-service-union40 "login"41 (append42 (login-pam-service config)43 (list dumb-dir-pam-service)))))4445;; Provides a custom variant of the login-service-type from the46;; `gnu/services/base.scm` file. This custom services supports47;; the dumb-runtime-dir PAM module to setup a XDG_RUNTIME_DIR.48;;49;; TODO: Find a better way to extend the login-service-type50;; and propose that upstream.51(define login-xdg-runtime-service-type52 (service-type (name 'login)53 (extensions (list (service-extension pam-root-service-type54 login-xdg-runtime-pam-service)))55 (default-value (login-configuration))56 (description57 "Custom login service integrated with dumb-runtime-dir.")))