diff options
author | Dariqq <dariqq@posteo.net> | 2024-05-02 15:37:56 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-05-15 20:58:03 +0100 |
commit | d0ad4f557fc8b9d105877f2ef4de0ce12c5c9566 (patch) | |
tree | 20612832b13d0f32a97dc130a9020168c0a75a02 | |
parent | 558e2b07ea0229453a8436b6632198ad2ef2126f (diff) | |
download | guix-d0ad4f557fc8b9d105877f2ef4de0ce12c5c9566.tar guix-d0ad4f557fc8b9d105877f2ef4de0ce12c5c9566.tar.gz |
gnu: services: Add power-profiles-daemon-service-type.
* gnu/services/pm.scm
(power-profiles-configuration): New configuration.
(power-profiles-daemon-shepherd-service): New procedure.
(power-profiles-daemon-activation): New variable.
(power-profiles-daemon-service-type): New procedure.
* doc/guix.texi (Power Management Services): Document it.
Change-Id: Ib035d993ed82eec2a43f3ba2b4c92f77e08a0fd7
Signed-off-by: Christopher Baines <mail@cbaines.net>
-rw-r--r-- | doc/guix.texi | 40 | ||||
-rw-r--r-- | gnu/services/pm.scm | 60 |
2 files changed, 99 insertions, 1 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index ddd58e09ce..0c22011161 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -127,6 +127,7 @@ Copyright @copyright{} 2023 Tomas Volf@* Copyright @copyright{} 2024 Herman Rimm@* Copyright @copyright{} 2024 Matthew Trzcinski@* Copyright @copyright{} 2024 Richard Sent@* +Copyright @copyright{} 2024 Dariqq@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -34711,6 +34712,45 @@ Base URL to use for links to laminar itself. @node Power Management Services @subsection Power Management Services +@cindex power-profiles-daemon +@subsubheading Power Profiles Daemon + +The @code{(gnu services pm)} module provides a Guix service definition for +the Linux Power Profiles Daemon, which makes power profiles handling +available over D-Bus. + +The available profiles consist of the default @samp{balanced} mode, a @samp{power-saver} mode +and on supported systems a @samp{performance} mode. + +@quotation Important +The @code{power-profiles-daemon} conflicts with other power management tools +like @code{tlp}. Using both together is not recommended. +@end quotation + +@defvar power-profiles-daemon-service-type +This is the service type for the +@uref{https://gitlab.freedesktop.org/upower/power-profiles-daemon/, Power Profiles Daemon}. +The value for this service is a @code{power-profiles-daemon-configuration}. + +To enable the Power Profiles Daemon with default configuration +add this line to your services: + +@lisp +(service power-profiles-daemon-service-type) +@end lisp +@end defvar + +@deftp {Data Type} power-profiles-daemon-configuration +Data type representing the configuration of @code{power-profiles-daemon-service-type}. + +@table @asis +@item @code{power-profiles-daemon} (default: @code{power-profiles-daemon}) (type: file-like) +Package object of power-profiles-daemon. + +@end table +@end deftp + + @cindex tlp @cindex power management with TLP @subsubheading TLP daemon diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm index 3daf484cc1..47f0bf7812 100644 --- a/gnu/services/pm.scm +++ b/gnu/services/pm.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2024 Dariqq <dariqq@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,18 +22,75 @@ #:use-module (guix packages) #:use-module (guix records) #:use-module (gnu packages admin) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages linux) #:use-module (gnu services) #:use-module (gnu services base) #:use-module (gnu services configuration) + #:use-module (gnu services dbus) #:use-module (gnu services shepherd) #:use-module (gnu system shadow) - #:export (tlp-service-type + #:export (power-profiles-daemon-service-type + power-profiles-daemon-configuration + + tlp-service-type tlp-configuration thermald-configuration thermald-service-type)) +;;; +;;; power-profiles-daemon +;;; + +(define-configuration/no-serialization power-profiles-daemon-configuration + (power-profiles-daemon + (file-like power-profiles-daemon) + "The power-profiles-daemon package.")) + +(define (power-profiles-daemon-shepherd-service config) + (match-record + config <power-profiles-daemon-configuration> + (power-profiles-daemon) + (list (shepherd-service + (provision '(power-profiles-daemon)) + (requirement '(dbus-system)) + (documentation "Run the power-profiles-daemon.") + (start #~(make-forkexec-constructor + (list #$(file-append power-profiles-daemon + "/libexec/power-profiles-daemon")))) + (stop #~(make-kill-destructor)))))) + +(define %power-profiles-daemon-activation + #~(begin + (use-modules (guix build utils)) + (mkdir-p "/var/lib/power-profiles-daemon"))) + +(define power-profiles-daemon-service-type + (let ((config->package + (compose list power-profiles-daemon-configuration-power-profiles-daemon))) + (service-type + (name 'power-profiles-daemon) + (extensions (list + (service-extension shepherd-root-service-type + power-profiles-daemon-shepherd-service) + (service-extension dbus-root-service-type + config->package) + (service-extension polkit-service-type + config->package) + (service-extension profile-service-type + config->package) + (service-extension activation-service-type + (const %power-profiles-daemon-activation)))) + (default-value (power-profiles-daemon-configuration)) + (description "Run the power-profiles-daemon")))) + + + +;;; +;;; tlp +;;; + (define (uglify-field-name field-name) (let ((str (symbol->string field-name))) (string-join (string-split |