diff --git a/doc/guix.texi b/doc/guix.texi index 58cc3d7aad..ca7689bbc5 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -116,6 +116,7 @@ Copyright @copyright{} 2022 Antero Mejr@* Copyright @copyright{} 2023 Karl Hallsby@* Copyright @copyright{} 2023 Nathaniel Nicandro@* Copyright @copyright{} 2023 Tanguy Le Carrour@* +Copyright @copyright{} 2023 Zheng Junjie@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -23721,6 +23722,23 @@ The GNOME package to use. @end table @end deftp +@defvar plasma-desktop-service-type +This is the type of the service that adds the @uref{https://kde.org/plasma-desktop/, +Plasma} desktop environment. Its value is a @code{plasma-desktop-configuration} +object (see below). + +This service adds the @code{plasma} package to the system profile. +@end defvar + +@deftp {Data Type} plasma-desktop-configuration +Configuration record for the Plasma desktop environment. + +@table @asis +@item @code{plasma} (default: @code{plasma}) +The Plasma package to use. +@end table +@end deftp + @defvar xfce-desktop-service-type This is the type of a service to run the @uref{Xfce, https://xfce.org/} desktop environment. Its value is an @code{xfce-desktop-configuration} object diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 01aec64bee..ae3f90e96d 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2017, 2020, 2022, 2023 Maxim Cournoyer ;;; Copyright © 2017 Nikita +;;; Copyright © 2017, 2019 Hartmut Goebel ;;; Copyright © 2018, 2020, 2022 Efraim Flashner ;;; Copyright © 2018, 2023 Ricardo Wurmus ;;; Copyright © 2017, 2019 Christopher Baines @@ -15,6 +16,7 @@ ;;; Copyright © 2021 Brice Waegeneire ;;; Copyright © 2021, 2022 muradm ;;; Copyright © 2023 Bruno Victal +;;; Copyright © 2023 Zheng Junjie <873216071@qq.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -55,6 +57,9 @@ (define-module (gnu services desktop) #:use-module (gnu packages cups) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gnome) + #:use-module (gnu packages kde) + #:use-module (gnu packages kde-frameworks) + #:use-module (gnu packages kde-plasma) #:use-module (gnu packages xfce) #:use-module (gnu packages avahi) #:use-module (gnu packages xdisorg) @@ -150,6 +155,10 @@ (define-module (gnu services desktop) sugar-desktop-configuration? sugar-desktop-service-type + plasma-desktop-configuration + plasma-desktop-configuration? + plasma-desktop-service-type + xfce-desktop-configuration xfce-desktop-configuration? xfce-desktop-service @@ -1625,6 +1634,50 @@ (define enlightenment-desktop-service-type thumbnails and makes setuid the programs which enlightenment needs to function as expected."))) +;;; +;;; KDE Plasma desktop service. +;;; + +(define-record-type* plasma-desktop-configuration + make-plasma-desktop-configuration + plasma-desktop-configuration? + (plasma-package plasma-package (default plasma))) + +(define (plasma-polkit-settings config) + "Return the list of KDE Plasma dependencies that provide polkit actions and +rules." + (let ((plasma-plasma (plasma-package config))) + (map (lambda (name) + ((package-direct-input-selector name) plasma-plasma)) + '("plasma-desktop" + "plasma-workspace" + "plasma-disks" + "kinfocenter" + "libksysguard" + "ktexteditor" + "powerdevil" + "plasma-firewall")))) + +;; see https://bugs.kde.org/show_bug.cgi?id=456210 +;; if `kde' no exits, fallback to `other', and then unlock lockscreen not work, +;; so add it. +(define (plasma-pam-services config) + (list (unix-pam-service "kde"))) + +(define plasma-desktop-service-type + (service-type + (name 'plasma-desktop) + (description "Run the KDE Plasma desktop environment.") + (default-value (plasma-desktop-configuration)) + (extensions + (list (service-extension polkit-service-type + plasma-polkit-settings) + (service-extension pam-root-service-type + plasma-pam-services) + (service-extension profile-service-type + (compose list + plasma-package)))))) + ;;; ;;; inputattach-service-type