GNU bug report logs

#26137 [PATCH 0/6 v2] Add tlp service.

PackageSource(s)Maintainer(s)
guix-patches PTS Buildd Popcon
Reply or subscribe to this bug. View this bug as an mbox, status mbox, or maintainer mbox

Report forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:33:01 GMT) (full text, mbox, link).


Acknowledgement sent to Mathieu Othacehe <m.othacehe@gmail.com>:
New bug report received and forwarded. Copy sent to guix-patches@gnu.org. (Fri, 17 Mar 2017 10:33:01 GMT) (full text, mbox, link).


Message #5 received at submit@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: guix-patches@gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 0/6 v2] Add tlp service.
Date: Fri, 17 Mar 2017 11:31:38 +0100
Hi Guix,

Here's the v2 of this serie. The v1 was published without debbugs.
This version addresses issues pointed out by Clément.

Thank you,

Mathieu

Mathieu Othacehe (6):
  gnu: tlp: Read configuration from /etc/tlp.
  services: Factorize define-maybe macro.
  services: configuration: Rewrite id procedure.
  gnu: Add tlp service.
  services: openvpn: Fix a typo which was corrected in generated doc.
  doc: Re-generate openvpn service documentation.

 doc/guix.texi                  | 587 ++++++++++++++++++++++++++++++++++++++---
 gnu/local.mk                   |   2 +
 gnu/packages/linux.scm         |   2 +-
 gnu/services/configuration.scm |  29 +-
 gnu/services/messaging.scm     |  23 +-
 gnu/services/pm.scm            | 404 ++++++++++++++++++++++++++++
 gnu/services/vpn.scm           |   3 +-
 7 files changed, 977 insertions(+), 73 deletions(-)
 create mode 100644 gnu/services/pm.scm

-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:35:02 GMT) (full text, mbox, link).


Message #8 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 1/6] gnu: tlp: Read configuration from /etc/tlp.
Date: Fri, 17 Mar 2017 11:34:25 +0100
* gnu/packages/linux.scm (tlp): Set TLP_CONF to "/etc/tlp".
---
 gnu/packages/linux.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 4557194e8..61afc9b00 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -3494,7 +3494,7 @@ Light is the successor of lightscript.")
                (setenv "TLP_BIN" (string-append out "/bin"))
                (setenv "TLP_TLIB" (string-append out "/share/tlp-pm"))
                (setenv "TLP_ULIB" (string-append out "/lib/udev"))
-               (setenv "TLP_CONF" (string-append out "/etc/tlp"))
+               (setenv "TLP_CONF" "/etc/tlp")
                (setenv "TLP_SHCPL"
                        (string-append out "/share/bash-completion/completions"))
                (setenv "TLP_MAN" (string-append out "/share/man")))))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:35:03 GMT) (full text, mbox, link).


Message #11 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 2/6] services: Factorize define-maybe macro.
Date: Fri, 17 Mar 2017 11:34:26 +0100
* gnu/services/configuration.scm (id): New procedure extracted from
  define-configuration.
(define-maybe): New exported procedure, moved from messaging.scm.
* gnu/services/messaging.scm (define-maybe): Remove it.
(id): Move declaration inside define-all-configurations which is now
the only caller procedure.
---
 gnu/services/configuration.scm | 24 +++++++++++++++++++++---
 gnu/services/messaging.scm     | 23 ++++-------------------
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index 2ad3a637a..f59920d5a 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
             configuration-field-default-value-thunk
             configuration-field-documentation
             serialize-configuration
+            define-maybe
             define-configuration
             validate-configuration
             generate-documentation
@@ -85,9 +87,7 @@
                    (configuration-field-name field) val))))
             fields))
 
-(define-syntax define-configuration
-  (lambda (stx)
-    (define (id ctx part . parts)
+(define (id ctx part . parts)
       (let ((part (syntax->datum part)))
         (datum->syntax
          ctx
@@ -95,6 +95,24 @@
            (() part)
            (parts (symbol-append part
                                  (syntax->datum (apply id ctx parts))))))))
+
+(define-syntax define-maybe
+  (lambda (x)
+    (syntax-case x ()
+      ((_ stem)
+       (with-syntax
+           ((stem?                (id #'stem #'stem #'?))
+            (maybe-stem?          (id #'stem #'maybe- #'stem #'?))
+            (serialize-stem       (id #'stem #'serialize- #'stem))
+            (serialize-maybe-stem (id #'stem #'serialize-maybe- #'stem)))
+         #'(begin
+             (define (maybe-stem? val)
+               (or (eq? val 'disabled) (stem? val)))
+             (define (serialize-maybe-stem field-name val)
+               (when (stem? val) (serialize-stem field-name val)))))))))
+
+(define-syntax define-configuration
+  (lambda (stx)
     (syntax-case stx ()
       ((_ stem (field (field-type def) doc) ...)
        (with-syntax (((field-getter ...)
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 34723dc11..715d6181f 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,27 +50,11 @@
 ;;;
 ;;; Code:
 
-(define-syntax-rule (id ctx parts ...)
-  "Assemble PARTS into a raw (unhygienic) identifier."
-  (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
-
-(define-syntax define-maybe
-  (lambda (x)
-    (syntax-case x ()
-      ((_ stem)
-       (with-syntax
-           ((stem?                (id #'stem #'stem #'?))
-            (maybe-stem?          (id #'stem #'maybe- #'stem #'?))
-            (serialize-stem       (id #'stem #'serialize- #'stem))
-            (serialize-maybe-stem (id #'stem #'serialize-maybe- #'stem)))
-         #'(begin
-             (define (maybe-stem? val)
-               (or (eq? val 'disabled) (stem? val)))
-             (define (serialize-maybe-stem field-name val)
-               (when (stem? val) (serialize-stem field-name val)))))))))
-
 (define-syntax define-all-configurations
   (lambda (stx)
+    (define-syntax-rule (id ctx parts ...)
+      "Assemble PARTS into a raw (unhygienic) identifier."
+      (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
     (define (make-pred arg)
       (lambda (field target)
         (and (memq (syntax->datum target) `(common ,arg)) field)))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:35:04 GMT) (full text, mbox, link).


Message #14 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 3/6] services: configuration: Rewrite id procedure.
Date: Fri, 17 Mar 2017 11:34:27 +0100
* gnu/services/configuration.scm (id): Replace it using the more concise
  version found in messaging.scm.
---
 gnu/services/configuration.scm | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index f59920d5a..4ee92e35f 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -87,14 +87,9 @@
                    (configuration-field-name field) val))))
             fields))
 
-(define (id ctx part . parts)
-      (let ((part (syntax->datum part)))
-        (datum->syntax
-         ctx
-         (match parts
-           (() part)
-           (parts (symbol-append part
-                                 (syntax->datum (apply id ctx parts))))))))
+(define-syntax-rule (id ctx parts ...)
+  "Assemble PARTS into a raw (unhygienic) identifier."
+  (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
 
 (define-syntax define-maybe
   (lambda (x)
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:36:02 GMT) (full text, mbox, link).


Message #17 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 5/6] services: openvpn: Fix a typo which was corrected in generated doc.
Date: Fri, 17 Mar 2017 11:34:29 +0100
* gnu/services/vpn.scm (define-split-configuration): Fix typo.
---
 gnu/services/vpn.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index 844a11b3d..e1a04a985 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -279,7 +280,7 @@ by the authority given in @code{ca}.")
 
    (key
     (string "/etc/openvpn/client.key")
-    "The key of the machine the daemon is running on. It must be the whose
+    "The key of the machine the daemon is running on. It must be the key whose
 certificate is @code{cert}.")
 
    (comp-lzo?
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:36:02 GMT) (full text, mbox, link).


Message #20 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 6/6] doc: Re-generate openvpn service documentation.
Date: Fri, 17 Mar 2017 11:34:30 +0100
* doc/guix.texi (VPN Services): Generate documentation with
generate-openvpn-server-documentation and
generate-openvpn-client-documentation helpers and guile 2.1.7.
---
 doc/guix.texi | 88 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 44 insertions(+), 44 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index bed8a6ff4..fd6b9a15b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -13027,19 +13027,19 @@ Both can be run simultaneously.
 
 Available @code{openvpn-client-configuration} fields are:
 
-@deftypevr @code{openvpn-client-configuration} parameter package openvpn
+@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
 The OpenVPN package.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string pid-file
+@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
 The OpenVPN pid file.
 
 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter proto proto
+@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
 The protocol (UDP or TCP) used to open a channel between clients and
 servers.
 
@@ -13047,21 +13047,21 @@ Defaults to @samp{udp}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter dev dev
+@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
 The device type used to represent the VPN connection.
 
 Defaults to @samp{tun}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string ca
+@deftypevr {@code{openvpn-client-configuration} parameter} string ca
 The certificate authority to check connections against.
 
 Defaults to @samp{"/etc/openvpn/ca.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string cert
+@deftypevr {@code{openvpn-client-configuration} parameter} string cert
 The certificate of the machine the daemon is running on.  It should be
 signed by the authority given in @code{ca}.
 
@@ -13069,7 +13069,7 @@ Defaults to @samp{"/etc/openvpn/client.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string key
+@deftypevr {@code{openvpn-client-configuration} parameter} string key
 The key of the machine the daemon is running on.  It must be the key whose
 certificate is @code{cert}.
 
@@ -13077,21 +13077,21 @@ Defaults to @samp{"/etc/openvpn/client.key"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean comp-lzo?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
 Whether to use the lzo compression algorithm.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean persist-key?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
 Don't re-read key files across SIGUSR1 or --ping-restart.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean persist-tun?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
 Don't close and reopen TUN/TAP device or run up/down scripts across
 SIGUSR1 or --ping-restart restarts.
 
@@ -13099,14 +13099,14 @@ Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter number verbosity
+@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
 Verbosity level.
 
 Defaults to @samp{3}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter tls-auth-client tls-auth
+@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
 Add an additional layer of HMAC authentication on top of the TLS control
 channel to protect against DoS attacks.
 
@@ -13114,42 +13114,42 @@ Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter key-usage verify-key-usage?
+@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
 Whether to check the server certificate has server usage extension.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter bind bind?
+@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
 Bind to a specific local port number.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter resolv-retry resolv-retry?
+@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
 Retry resolving server address.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter openvpn-remote-list remote
+@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
 A list of remote servers to connect to.
 
 Defaults to @samp{()}.
 
 Available @code{openvpn-remote-configuration} fields are:
 
-@deftypevr @code{openvpn-remote-configuration} parameter string name
+@deftypevr {@code{openvpn-remote-configuration} parameter} string name
 Server name.
 
 Defaults to @samp{"my-server"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-remote-configuration} parameter number port
+@deftypevr {@code{openvpn-remote-configuration} parameter} number port
 Port number the server listens to.
 
 Defaults to @samp{1194}.
@@ -13163,19 +13163,19 @@ Defaults to @samp{1194}.
 
 Available @code{openvpn-server-configuration} fields are:
 
-@deftypevr @code{openvpn-server-configuration} parameter package openvpn
+@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
 The OpenVPN package.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string pid-file
+@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
 The OpenVPN pid file.
 
 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter proto proto
+@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
 The protocol (UDP or TCP) used to open a channel between clients and
 servers.
 
@@ -13183,21 +13183,21 @@ Defaults to @samp{udp}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter dev dev
+@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
 The device type used to represent the VPN connection.
 
 Defaults to @samp{tun}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string ca
+@deftypevr {@code{openvpn-server-configuration} parameter} string ca
 The certificate authority to check connections against.
 
 Defaults to @samp{"/etc/openvpn/ca.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string cert
+@deftypevr {@code{openvpn-server-configuration} parameter} string cert
 The certificate of the machine the daemon is running on.  It should be
 signed by the authority given in @code{ca}.
 
@@ -13205,7 +13205,7 @@ Defaults to @samp{"/etc/openvpn/client.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string key
+@deftypevr {@code{openvpn-server-configuration} parameter} string key
 The key of the machine the daemon is running on.  It must be the key whose
 certificate is @code{cert}.
 
@@ -13213,21 +13213,21 @@ Defaults to @samp{"/etc/openvpn/client.key"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean comp-lzo?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
 Whether to use the lzo compression algorithm.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean persist-key?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
 Don't re-read key files across SIGUSR1 or --ping-restart.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean persist-tun?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
 Don't close and reopen TUN/TAP device or run up/down scripts across
 SIGUSR1 or --ping-restart restarts.
 
@@ -13235,14 +13235,14 @@ Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number verbosity
+@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
 Verbosity level.
 
 Defaults to @samp{3}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter tls-auth-server tls-auth
+@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
 Add an additional layer of HMAC authentication on top of the TLS control
 channel to protect against DoS attacks.
 
@@ -13250,56 +13250,56 @@ Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number port
+@deftypevr {@code{openvpn-server-configuration} parameter} number port
 Specifies the port number on which the server listens.
 
 Defaults to @samp{1194}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter ip-mask server
+@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
 An ip and mask specifying the subnet inside the virtual network.
 
 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter cidr6 server-ipv6
+@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
 A CIDR notation specifying the IPv6 subnet inside the virtual network.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string dh
+@deftypevr {@code{openvpn-server-configuration} parameter} string dh
 The Diffie-Hellman parameters file.
 
 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string ifconfig-pool-persist
+@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
 The file that records client IPs.
 
 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter gateway redirect-gateway?
+@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
 When true, the server will act as a gateway for its clients.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean client-to-client?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
 When true, clients are alowed to talk to each other inside the VPN.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter keepalive keepalive
+@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
 Causes ping-like messages to be sent back and forth over the link so
 that each side knows when the other side has gone down.  @code{keepalive}
 requires a pair.  The first element is the period of the ping sending,
@@ -13308,14 +13308,14 @@ down.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number max-clients
+@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
 The maximum number of clients.
 
 Defaults to @samp{100}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string status
+@deftypevr {@code{openvpn-server-configuration} parameter} string status
 The status file.  This file shows a small report on current connection.
 It is trunkated and rewritten every minute.
 
@@ -13323,28 +13323,28 @@ Defaults to @samp{"/var/run/openvpn/status"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter openvpn-ccd-list client-config-dir
+@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
 The list of configuration for some clients.
 
 Defaults to @samp{()}.
 
 Available @code{openvpn-ccd-configuration} fields are:
 
-@deftypevr @code{openvpn-ccd-configuration} parameter string name
+@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
 Client name.
 
 Defaults to @samp{"client"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-ccd-configuration} parameter ip-mask iroute
+@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
 Client own network
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-ccd-configuration} parameter ip-mask ifconfig-push
+@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
 Client VPN IP.
 
 Defaults to @samp{#f}.
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 17 Mar 2017 10:36:03 GMT) (full text, mbox, link).


Message #23 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH 4/6] gnu: Add tlp service.
Date: Fri, 17 Mar 2017 11:34:28 +0100
* gnu/services/pm.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add gnu/services/tlp.scm.
* doc/guix.texi (Power management Services): New section.
---
 doc/guix.texi       | 499 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 gnu/local.mk        |   2 +
 gnu/services/pm.scm | 404 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 905 insertions(+)
 create mode 100644 gnu/services/pm.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 93640dfba..bed8a6ff4 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -216,6 +216,7 @@ Services
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
 * Continuous Integration::      The Cuirass service.
+* Power management Services::   The TLP tool.
 * Miscellaneous Services::      Other services.
 
 Defining Services
@@ -8407,6 +8408,7 @@ declaration.
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
 * Continuous Integration::      The Cuirass service.
+* Power management Services::   The TLP tool.
 * Miscellaneous Services::      Other services.
 @end menu
 
@@ -13622,6 +13624,503 @@ The Cuirass package to use.
 @end table
 @end deftp
 
+@node Power management Services
+@subsubsection Power management Services
+
+@cindex power management with TLP
+The @code{(gnu services pm)} module provides a Guix service definition
+for the Linux power management tool TLP.
+
+@deffn {Scheme Variable} tlp-service-type
+The service type for the TLP tool.  Its value should be a valid
+TLP configuration (see below).  For example:
+@example
+(service tlp-service-type (tlp-configuration))
+@end example
+@end deffn
+
+By default TLP does not need much configuration but most TLP parameters
+can be tweaked using @code{tlp-configuration}.
+
+Each parameter definition is preceded by its type; for example,
+@samp{boolean foo} indicates that the @code{foo} parameter
+should be specified as a boolean.  Types starting with
+@code{maybe-} denote parameters that won't show up in TLP config file
+when their value is @code{'disabled}.
+
+@c The following documentation was initially generated by
+@c (generate-tlp-documentation) in (gnu services pm).  Manually maintained
+@c documentation is better, so we shouldn't hesitate to edit below as
+@c needed.  However if the change you want to make to this documentation
+@c can be done in an automated way, it's probably easier to change
+@c (generate-documentation) than to make it below and have to deal with
+@c the churn as TLP updates.
+
+Available @code{tlp-configuration} fields are:
+
+@deftypevr {@code{tlp-configuration} parameter} package tlp
+The TLP package.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
+Set to true if you wish to enable TLP.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
+Default mode when no power supply can be detected.  Alternatives are AC
+and BAT.
+
+Defaults to @samp{"AC"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
+Number of seconds Linux kernel has to wait after the disk goes idle,
+before syncing on AC.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
+Same as @code{disk-idle-ac} but on BAT mode.
+
+Defaults to @samp{2}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
+Dirty pages flushing periodicity, expressed in seconds.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
+Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
+
+Defaults to @samp{60}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
+CPU frequency scaling governor on AC mode.  With intel_pstate driver,
+alternatives are powersave and performance.  With acpi-cpufreq driver,
+alternatives are ondemand, powersave, performance and conservative.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
+Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
+Set the min available frequency for the scaling governor on AC.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
+Set the max available frequency for the scaling governor on AC.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
+Set the min available frequency for the scaling governor on BAT.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
+Set the max available frequency for the scaling governor on BAT.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
+Limit the min P-state to control the power dissipation of the CPU, in AC
+mode.  Values are stated as a percentage of the available performance.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
+Limit the max P-state to control the power dissipation of the CPU, in AC
+mode.  Values are stated as a percentage of the available performance.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
+Same as @code{cpu-min-perf-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
+Same as @code{cpu-max-perf-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
+Enable CPU turbo boost feature on AC mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
+Same as @code{cpu-boost-on-ac?} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
+Allow Linux kernel to minimize the number of CPU cores/hyper-threads
+used under light load conditions.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
+Same as @code{sched-powersave-on-ac?} but on BAT mode.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
+Enable Linux kernel NMI watchdog.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
+For Linux kernels with PHC patch applied, change CPU voltages.  An
+example value would be @samp{"F:V F:V F:V F:V"}.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
+Set CPU performance versus energy saving policy on AC.  Alternatives are
+performance, normal, powersave.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
+Same as @code{energy-perf-policy-ac} but on BAT mode.
+
+Defaults to @samp{"powersave"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
+Hard disk devices.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
+Hard disk advanced power management level.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
+Same as @code{disk-apm-bat} but on BAT mode.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
+Hard disk spin down timeout.  One value has to be specified for each
+declared hard disk.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
+Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
+Select IO scheduler for disk devices.  One value has to be specified for
+each declared hard disk.  Example alternatives are cfq, deadline and
+noop.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
+SATA aggressive link power management (ALPM) level.  Alternatives are
+min_power, medium_power, max_performance.
+
+Defaults to @samp{"max_performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
+Same as @code{sata-linkpwr-ac} but on BAT mode.
+
+Defaults to @samp{"min_power"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
+Exclude specified SATA host devices for link power management.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
+Enable Runtime Power Management for AHCI controller and disks on AC
+mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
+Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
+Seconds of inactivity before disk is suspended.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
+PCI Express Active State Power Management level.  Alternatives are
+default, performance, powersave.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
+Same as @code{pcie-aspm-ac} but on BAT mode.
+
+Defaults to @samp{"powersave"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
+Radeon graphics clock speed level.  Alternatives are low, mid, high,
+auto, default.
+
+Defaults to @samp{"high"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
+Same as @code{radeon-power-ac} but on BAT mode.
+
+Defaults to @samp{"low"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
+Radeon dynamic power management method (DPM).  Alternatives are battery,
+performance.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
+Same as @code{radeon-dpm-state-ac} but on BAT mode.
+
+Defaults to @samp{"battery"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
+Radeon DPM performance level.  Alternatives are auto, low, high.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
+Same as @code{radeon-dpm-perf-ac} but on BAT mode.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
+Wifi power saving mode.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
+Same as @code{wifi-power-ac?} but on BAT mode.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
+Disable wake on LAN.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
+Timeout duration in seconds before activating audio power saving on
+Intel HDA and AC97 devices.  A value of 0 disables power saving.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
+Same as @code{sound-powersave-ac} but on BAT mode.
+
+Defaults to @samp{1}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
+Disable controller in powersaving mode on Intel HDA devices.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
+Enable optical drive in UltraBay/MediaBay on BAT mode.  Drive can be
+powered on again by releasing (and reinserting) the eject lever or by
+pressing the disc eject button on newer models.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string bay-device
+Name of the optical drive device to power off.
+
+Defaults to @samp{"sr0"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
+Runtime Power Management for PCI(e) bus devices.  Alternatives are on
+and auto.
+
+Defaults to @samp{"on"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
+Same as @code{runtime-pm-ac} but on BAT mode.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
+Runtime Power Management for all PCI(e) bus devices, except blacklisted
+ones.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
+Exclude specified PCI(e) devices adresses from Runtime Power Management.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
+Exclude PCI(e) devices assigned to the specified drivers from Runtime
+Power Management.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
+Enable USB autosuspend feature.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
+Exclude specified devices from USB autosuspend.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
+Exclude WWAN devices from USB autosuspend.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
+Include specified devices into USB autosuspend, even if they are already
+excluded by the driver or via @code{usb-blacklist-wwan?}.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
+Enable USB autosuspend before shutdown.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
+Restore radio device state (bluetooth, wifi, wwan) from previous
+shutdown on system startup.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
 @node Miscellaneous Services
 @subsubsection Miscellaneous Services
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 2cc5d546b..fc8367b26 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -10,6 +10,7 @@
 # Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 # Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 # Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+# Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -422,6 +423,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
+  %D%/services/pm.scm				\
   %D%/services/sddm.scm				\
   %D%/services/spice.scm				\
   %D%/services/ssh.scm				\
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
new file mode 100644
index 000000000..ec35e5701
--- /dev/null
+++ b/gnu/services/pm.scm
@@ -0,0 +1,404 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;;
+;;; 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 pm)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix records)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu system shadow)
+  #:export (tlp-service-type
+            tlp-configuration))
+
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split
+                  (string-upcase
+                   (if (string-suffix? "?" str)
+                       (substring str 0 (1- (string-length str)))
+                       str))
+                  #\-)
+                 "_")))
+
+(define (serialize-field field-name val)
+  (format #t "~a=~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-boolean field-name val)
+  (serialize-field field-name (if val "1" "0")))
+(define-maybe boolean)
+
+(define (serialize-string field-name val)
+  (serialize-field field-name val))
+(define-maybe string)
+
+(define (space-separated-string-list? val)
+  (and (list? val)
+       (and-map (lambda (x)
+                  (and (string? x) (not (string-index x #\space))))
+                val)))
+(define (serialize-space-separated-string-list field-name val)
+  (serialize-field field-name
+                   (format #f "~s"
+                           (string-join val " "))))
+(define-maybe space-separated-string-list)
+
+(define (non-negative-integer? val)
+  (and (exact-integer? val) (not (negative? val))))
+(define (serialize-non-negative-integer field-name val)
+  (serialize-field field-name val))
+(define-maybe non-negative-integer)
+
+(define (on-off-boolean? val)
+  (boolean? val))
+(define (serialize-on-off-boolean field-name val)
+  (serialize-field field-name (if val "on" "off")))
+(define-maybe on-off-boolean)
+
+(define (y-n-boolean? val)
+  (boolean? val))
+(define (serialize-y-n-boolean field-name val)
+  (serialize-field field-name (if val "Y" "N")))
+
+(define-configuration tlp-configuration
+  (tlp
+   (package tlp)
+   "The TLP package.")
+
+  (tlp-enable?
+   (boolean #t)
+   "Set to true if you wish to enable TLP.")
+
+  (tlp-default-mode
+   (string "AC")
+   "Default mode when no power supply can be detected.  Alternatives are
+AC and BAT.")
+
+  (disk-idle-secs-on-ac
+   (non-negative-integer 0)
+   "Number of seconds Linux kernel has to wait after the disk goes idle,
+before syncing on AC.")
+
+  (disk-idle-secs-on-bat
+   (non-negative-integer 2)
+   "Same as @code{disk-idle-ac} but on BAT mode.")
+
+  (max-lost-work-secs-on-ac
+   (non-negative-integer 15)
+   "Dirty pages flushing periodicity, expressed in seconds.")
+
+  (max-lost-work-secs-on-bat
+   (non-negative-integer 60)
+   "Same as @code{max-lost-work-secs-on-ac} but on BAT mode.")
+
+  (cpu-scaling-governor-on-ac
+   (maybe-space-separated-string-list 'disabled)
+   "CPU frequency scaling governor on AC mode.  With intel_pstate
+driver, alternatives are powersave and performance.  With acpi-cpufreq driver,
+alternatives are ondemand, powersave, performance and conservative.")
+
+  (cpu-scaling-governor-on-bat
+   (maybe-space-separated-string-list 'disabled)
+   "Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.")
+
+  (cpu-scaling-min-freq-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Set the min available frequency for the scaling governor on AC.")
+
+  (cpu-scaling-max-freq-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Set the max available frequency for the scaling governor on AC.")
+
+  (cpu-scaling-min-freq-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Set the min available frequency for the scaling governor on BAT.")
+
+  (cpu-scaling-max-freq-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Set the max available frequency for the scaling governor on BAT.")
+
+  (cpu-min-perf-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Limit the min P-state to control the power dissipation of the CPU,
+in AC mode.  Values are stated as a percentage of the available performance.")
+
+  (cpu-max-perf-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Limit the max P-state to control the power dissipation of the CPU,
+in AC mode.  Values are stated as a percentage of the available performance.")
+
+  (cpu-min-perf-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Same as @code{cpu-min-perf-on-ac} on BAT mode.")
+
+  (cpu-max-perf-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Same as @code{cpu-max-perf-on-ac} on BAT mode.")
+
+  (cpu-boost-on-ac?
+   (maybe-boolean 'disabled)
+   "Enable CPU turbo boost feature on AC mode.")
+
+  (cpu-boost-on-bat?
+   (maybe-boolean 'disabled)
+   "Same as @code{cpu-boost-on-ac?} on BAT mode.")
+
+  (sched-powersave-on-ac?
+   (boolean #f)
+   "Allow Linux kernel to minimize the number of CPU cores/hyper-threads
+used under light load conditions.")
+
+  (sched-powersave-on-bat?
+   (boolean #t)
+   "Same as @code{sched-powersave-on-ac?} but on BAT mode.")
+
+  (nmi-watchdog?
+   (boolean #f)
+   "Enable Linux kernel NMI watchdog.")
+
+  (phc-controls
+   (maybe-string 'disabled)
+   "For Linux kernels with PHC patch applied, change CPU voltages.
+An example value would be @samp{\"F:V F:V F:V F:V\"}.")
+
+  (energy-perf-policy-on-ac
+   (string "performance")
+   "Set CPU performance versus energy saving policy on AC.  Alternatives are
+performance, normal, powersave.")
+
+  (energy-perf-policy-on-bat
+   (string "powersave")
+   "Same as @code{energy-perf-policy-ac} but on BAT mode.")
+
+  (disks-devices
+   (space-separated-string-list '("sda"))
+   "Hard disk devices.")
+
+  (disk-apm-level-on-ac
+   (space-separated-string-list '("254" "254"))
+   "Hard disk advanced power management level.")
+
+  (disk-apm-level-on-bat
+   (space-separated-string-list '("128" "128"))
+   "Same as @code{disk-apm-bat} but on BAT mode.")
+
+  (disk-spindown-timeout-on-ac
+   (maybe-space-separated-string-list 'disabled)
+   "Hard disk spin down timeout.  One value has to be specified for
+each declared hard disk.")
+
+  (disk-spindown-timeout-on-bat
+   (maybe-space-separated-string-list 'disabled)
+   "Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.")
+
+  (disk-iosched
+   (maybe-space-separated-string-list 'disabled)
+   "Select IO scheduler for disk devices.  One value has to be specified
+for each declared hard disk.  Example alternatives are cfq, deadline and noop.")
+
+  (sata-linkpwr-on-ac
+   (string "max_performance")
+   "SATA aggressive link power management (ALPM) level.  Alternatives are
+min_power, medium_power, max_performance.")
+
+  (sata-linkpwr-on-bat
+   (string "min_power")
+   "Same as @code{sata-linkpwr-ac} but on BAT mode.")
+
+  (sata-linkpwr-blacklist
+   (maybe-string 'disabled)
+   "Exclude specified SATA host devices for link power management.")
+
+  (ahci-runtime-pm-on-ac?
+   (maybe-on-off-boolean 'disabled)
+   "Enable Runtime Power Management for AHCI controller and disks
+on AC mode.")
+
+  (ahci-runtime-pm-on-bat?
+   (maybe-on-off-boolean 'disabled)
+   "Same as @code{ahci-runtime-pm-on-ac} on BAT mode.")
+
+  (ahci-runtime-pm-timeout
+   (non-negative-integer 15)
+   "Seconds of inactivity before disk is suspended.")
+
+  (pcie-aspm-on-ac
+   (string "performance")
+   "PCI Express Active State Power Management level.  Alternatives are
+default, performance, powersave.")
+
+  (pcie-aspm-on-bat
+   (string "powersave")
+   "Same as @code{pcie-aspm-ac} but on BAT mode.")
+
+  (radeon-power-profile-on-ac
+   (string "high")
+   "Radeon graphics clock speed level.  Alternatives are
+low, mid, high, auto, default.")
+
+  (radeon-power-profile-on-bat
+   (string "low")
+   "Same as @code{radeon-power-ac} but on BAT mode.")
+
+  (radeon-dpm-state-on-ac
+   (string "performance")
+   "Radeon dynamic power management method (DPM).  Alternatives are
+battery, performance.")
+
+  (radeon-dpm-state-on-bat
+   (string "battery")
+   "Same as @code{radeon-dpm-state-ac} but on BAT mode.")
+
+  (radeon-dpm-perf-level-on-ac
+   (string "auto")
+   "Radeon DPM performance level.  Alternatives are
+auto, low, high.")
+
+  (radeon-dpm-perf-level-on-bat
+   (string "auto")
+   "Same as @code{radeon-dpm-perf-ac} but on BAT mode.")
+
+  (wifi-pwr-on-ac?
+   (on-off-boolean #f)
+   "Wifi power saving mode.")
+
+  (wifi-pwr-on-bat?
+   (on-off-boolean #t)
+   "Same as @code{wifi-power-ac?} but on BAT mode.")
+
+  (wol-disable?
+   (y-n-boolean #t)
+   "Disable wake on LAN.")
+
+  (sound-power-save-on-ac
+   (non-negative-integer 0)
+   "Timeout duration in seconds before activating audio power saving
+ on Intel HDA and AC97 devices.  A value of 0 disables power saving.")
+
+  (sound-power-save-on-bat
+   (non-negative-integer 1)
+   "Same as @code{sound-powersave-ac} but on BAT mode.")
+
+  (sound-power-save-controller?
+   (y-n-boolean #t)
+   "Disable controller in powersaving mode on Intel HDA devices.")
+
+  (bay-poweroff-on-bat?
+   (boolean #f)
+   "Enable optical drive in UltraBay/MediaBay on BAT mode.
+Drive can be powered on again by releasing (and reinserting) the eject lever
+or by pressing the disc eject button on newer models.")
+
+  (bay-device
+   (string "sr0")
+   "Name of the optical drive device to power off.")
+
+  (runtime-pm-on-ac
+   (string "on")
+   "Runtime Power Management for PCI(e) bus devices.  Alternatives are
+on and auto.")
+
+  (runtime-pm-on-bat
+   (string "auto")
+   "Same as @code{runtime-pm-ac} but on BAT mode.")
+
+  (runtime-pm-all?
+   (boolean #t)
+   "Runtime Power Management for all PCI(e) bus devices, except
+blacklisted ones.")
+
+  (runtime-pm-blacklist
+   (maybe-space-separated-string-list 'disabled)
+   "Exclude specified PCI(e) devices adresses from Runtime Power Management.")
+
+  (runtime-pm-driver-blacklist
+   (space-separated-string-list '("radeon" "nouveau"))
+   "Exclude PCI(e) devices assigned to the specified drivers from
+Runtime Power Management.")
+
+  (usb-autosuspend?
+   (boolean #t)
+   "Enable USB autosuspend feature.")
+
+  (usb-blacklist
+   (maybe-string 'disabled)
+   "Exclude specified devices from USB autosuspend.")
+
+  (usb-blacklist-wwan?
+   (boolean #t)
+   "Exclude WWAN devices from USB autosuspend.")
+
+  (usb-whitelist
+   (maybe-string 'disabled)
+   "Include specified devices into USB autosuspend, even if they are
+already excluded by the driver or via @code{usb-blacklist-wwan?}.")
+
+  (usb-autosuspend-disable-on-shutdown?
+   (maybe-boolean 'disabled)
+   "Enable USB autosuspend before shutdown.")
+
+  (restore-device-state-on-startup?
+   (boolean #f)
+   "Restore radio device state (bluetooth, wifi, wwan) from previous
+shutdown on system startup."))
+
+
+(define (tlp-shepherd-service config)
+  (let* ((tlp-bin (file-append
+                   (tlp-configuration-tlp config) "/bin/tlp"))
+         (tlp-action (lambda args
+                       #~(lambda _
+                           (zero? (system* #$tlp-bin #$@args))))))
+    (list (shepherd-service
+           (documentation "Run TLP script.")
+           (provision '(tlp))
+           (requirement '(user-processes))
+           (start (tlp-action "init" "start"))
+           (stop  (tlp-action "init" "stop"))))))
+
+(define (tlp-activation config)
+  (let* ((config-str (with-output-to-string
+                       (lambda ()
+                         (serialize-configuration
+                          config
+                          tlp-configuration-fields))))
+         (config-file (plain-file "tlp" config-str)))
+    (with-imported-modules '((guix build utils))
+      #~(begin
+          (use-modules (guix build utils))
+          (copy-file #$config-file "/etc/tlp")))))
+
+(define tlp-service-type
+  (service-type
+   (name 'tlp)
+   (extensions
+    (list
+     (service-extension shepherd-root-service-type
+                        tlp-shepherd-service)
+     (service-extension udev-service-type
+                        (compose list tlp-configuration-tlp))
+     (service-extension activation-service-type
+                        tlp-activation)))))
+
+(define (generate-tlp-documentation)
+  (generate-documentation
+   `((tlp-configuration ,tlp-configuration-fields))
+   'tlp-configuration))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:02 GMT) (full text, mbox, link).


Message #26 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 1/6] gnu: tlp: Read configuration from /etc/tlp.
Date: Fri, 24 Mar 2017 11:00:12 +0100
* gnu/packages/linux.scm (tlp): Set TLP_CONF to "/etc/tlp".
---
 gnu/packages/linux.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 86c222f03..bf16ff0eb 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -3491,7 +3491,7 @@ Light is the successor of lightscript.")
                (setenv "TLP_BIN" (string-append out "/bin"))
                (setenv "TLP_TLIB" (string-append out "/share/tlp-pm"))
                (setenv "TLP_ULIB" (string-append out "/lib/udev"))
-               (setenv "TLP_CONF" (string-append out "/etc/tlp"))
+               (setenv "TLP_CONF" "/etc/tlp")
                (setenv "TLP_SHCPL"
                        (string-append out "/share/bash-completion/completions"))
                (setenv "TLP_MAN" (string-append out "/share/man")))))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:02 GMT) (full text, mbox, link).


Message #29 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 2/6] services: Factorize define-maybe macro.
Date: Fri, 24 Mar 2017 11:00:13 +0100
* gnu/services/configuration.scm (id): New procedure extracted from
  define-configuration.
(define-maybe): New exported procedure, moved from messaging.scm.
* gnu/services/messaging.scm (define-maybe): Remove it.
(id): Move declaration inside define-all-configurations which is now
the only caller procedure.
---
 gnu/services/configuration.scm | 24 +++++++++++++++++++++---
 gnu/services/messaging.scm     | 23 ++++-------------------
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index 2ad3a637a..f59920d5a 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
             configuration-field-default-value-thunk
             configuration-field-documentation
             serialize-configuration
+            define-maybe
             define-configuration
             validate-configuration
             generate-documentation
@@ -85,9 +87,7 @@
                    (configuration-field-name field) val))))
             fields))
 
-(define-syntax define-configuration
-  (lambda (stx)
-    (define (id ctx part . parts)
+(define (id ctx part . parts)
       (let ((part (syntax->datum part)))
         (datum->syntax
          ctx
@@ -95,6 +95,24 @@
            (() part)
            (parts (symbol-append part
                                  (syntax->datum (apply id ctx parts))))))))
+
+(define-syntax define-maybe
+  (lambda (x)
+    (syntax-case x ()
+      ((_ stem)
+       (with-syntax
+           ((stem?                (id #'stem #'stem #'?))
+            (maybe-stem?          (id #'stem #'maybe- #'stem #'?))
+            (serialize-stem       (id #'stem #'serialize- #'stem))
+            (serialize-maybe-stem (id #'stem #'serialize-maybe- #'stem)))
+         #'(begin
+             (define (maybe-stem? val)
+               (or (eq? val 'disabled) (stem? val)))
+             (define (serialize-maybe-stem field-name val)
+               (when (stem? val) (serialize-stem field-name val)))))))))
+
+(define-syntax define-configuration
+  (lambda (stx)
     (syntax-case stx ()
       ((_ stem (field (field-type def) doc) ...)
        (with-syntax (((field-getter ...)
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 34723dc11..715d6181f 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,27 +50,11 @@
 ;;;
 ;;; Code:
 
-(define-syntax-rule (id ctx parts ...)
-  "Assemble PARTS into a raw (unhygienic) identifier."
-  (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
-
-(define-syntax define-maybe
-  (lambda (x)
-    (syntax-case x ()
-      ((_ stem)
-       (with-syntax
-           ((stem?                (id #'stem #'stem #'?))
-            (maybe-stem?          (id #'stem #'maybe- #'stem #'?))
-            (serialize-stem       (id #'stem #'serialize- #'stem))
-            (serialize-maybe-stem (id #'stem #'serialize-maybe- #'stem)))
-         #'(begin
-             (define (maybe-stem? val)
-               (or (eq? val 'disabled) (stem? val)))
-             (define (serialize-maybe-stem field-name val)
-               (when (stem? val) (serialize-stem field-name val)))))))))
-
 (define-syntax define-all-configurations
   (lambda (stx)
+    (define-syntax-rule (id ctx parts ...)
+      "Assemble PARTS into a raw (unhygienic) identifier."
+      (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
     (define (make-pred arg)
       (lambda (field target)
         (and (memq (syntax->datum target) `(common ,arg)) field)))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:03 GMT) (full text, mbox, link).


Message #32 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 3/6] services: configuration: Rewrite id procedure.
Date: Fri, 24 Mar 2017 11:00:14 +0100
* gnu/services/configuration.scm (id): Replace it using the more concise
  version found in messaging.scm.
---
 gnu/services/configuration.scm | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index f59920d5a..4ee92e35f 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -87,14 +87,9 @@
                    (configuration-field-name field) val))))
             fields))
 
-(define (id ctx part . parts)
-      (let ((part (syntax->datum part)))
-        (datum->syntax
-         ctx
-         (match parts
-           (() part)
-           (parts (symbol-append part
-                                 (syntax->datum (apply id ctx parts))))))))
+(define-syntax-rule (id ctx parts ...)
+  "Assemble PARTS into a raw (unhygienic) identifier."
+  (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
 
 (define-syntax define-maybe
   (lambda (x)
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:03 GMT) (full text, mbox, link).


Message #35 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 0/6] Add TLP service.
Date: Fri, 24 Mar 2017 11:00:11 +0100
Hi,

Here's the v3 of the patch. It improves tlp documentation
as discussed on IRC.

Thanks,

Mathieu

Mathieu Othacehe (6):
  gnu: tlp: Read configuration from /etc/tlp.
  services: Factorize define-maybe macro.
  services: configuration: Rewrite id procedure.
  gnu: Add tlp service.
  services: openvpn: Fix a typo which was corrected in generated doc.
  doc: Re-generate openvpn service documentation.

 doc/guix.texi                  | 593 ++++++++++++++++++++++++++++++++++++++---
 gnu/local.mk                   |   2 +
 gnu/packages/linux.scm         |   2 +-
 gnu/services/configuration.scm |  29 +-
 gnu/services/messaging.scm     |  23 +-
 gnu/services/pm.scm            | 404 ++++++++++++++++++++++++++++
 gnu/services/vpn.scm           |   3 +-
 7 files changed, 983 insertions(+), 73 deletions(-)
 create mode 100644 gnu/services/pm.scm

-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:04 GMT) (full text, mbox, link).


Message #38 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 5/6] services: openvpn: Fix a typo which was corrected in generated doc.
Date: Fri, 24 Mar 2017 11:00:16 +0100
* gnu/services/vpn.scm (define-split-configuration): Fix typo.
---
 gnu/services/vpn.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index 844a11b3d..e1a04a985 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -279,7 +280,7 @@ by the authority given in @code{ca}.")
 
    (key
     (string "/etc/openvpn/client.key")
-    "The key of the machine the daemon is running on. It must be the whose
+    "The key of the machine the daemon is running on. It must be the key whose
 certificate is @code{cert}.")
 
    (comp-lzo?
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:04 GMT) (full text, mbox, link).


Message #41 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 4/6] gnu: Add tlp service.
Date: Fri, 24 Mar 2017 11:00:15 +0100
* gnu/services/pm.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add gnu/services/tlp.scm.
* doc/guix.texi (Power management Services): New section.
---
 doc/guix.texi       | 505 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 gnu/local.mk        |   2 +
 gnu/services/pm.scm | 404 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 911 insertions(+)
 create mode 100644 gnu/services/pm.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index fb0862096..79d9c9fcb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -216,6 +216,7 @@ Services
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
 * Continuous Integration::      The Cuirass service.
+* Power management Services::   The TLP tool.
 * Miscellaneous Services::      Other services.
 
 Defining Services
@@ -8451,6 +8452,7 @@ declaration.
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
 * Continuous Integration::      The Cuirass service.
+* Power management Services::   The TLP tool.
 * Miscellaneous Services::      Other services.
 @end menu
 
@@ -13708,6 +13710,509 @@ The Cuirass package to use.
 @end table
 @end deftp
 
+@node Power management Services
+@subsubsection Power management Services
+
+@cindex power management with TLP
+The @code{(gnu services pm)} module provides a Guix service definition
+for the Linux power management tool TLP.
+
+TLP enables various powersaving modes in userspace and kernel.
+Contrary to @code{upower-service}, it is not a passive,
+monitoring tool, as it will apply custom settings each time a new power
+source is detected.  More information can be found at
+@uref{http://linrunner.de/en/tlp/tlp.html, TLP home page.}.
+
+@deffn {Scheme Variable} tlp-service-type
+The service type for the TLP tool.  Its value should be a valid
+TLP configuration (see below).  For example:
+@example
+(service tlp-service-type (tlp-configuration))
+@end example
+@end deffn
+
+By default TLP does not need much configuration but most TLP parameters
+can be tweaked using @code{tlp-configuration}.
+
+Each parameter definition is preceded by its type; for example,
+@samp{boolean foo} indicates that the @code{foo} parameter
+should be specified as a boolean.  Types starting with
+@code{maybe-} denote parameters that won't show up in TLP config file
+when their value is @code{'disabled}.
+
+@c The following documentation was initially generated by
+@c (generate-tlp-documentation) in (gnu services pm).  Manually maintained
+@c documentation is better, so we shouldn't hesitate to edit below as
+@c needed.  However if the change you want to make to this documentation
+@c can be done in an automated way, it's probably easier to change
+@c (generate-documentation) than to make it below and have to deal with
+@c the churn as TLP updates.
+
+Available @code{tlp-configuration} fields are:
+
+@deftypevr {@code{tlp-configuration} parameter} package tlp
+The TLP package.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
+Set to true if you wish to enable TLP.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
+Default mode when no power supply can be detected.  Alternatives are AC
+and BAT.
+
+Defaults to @samp{"AC"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
+Number of seconds Linux kernel has to wait after the disk goes idle,
+before syncing on AC.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
+Same as @code{disk-idle-ac} but on BAT mode.
+
+Defaults to @samp{2}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
+Dirty pages flushing periodicity, expressed in seconds.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
+Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
+
+Defaults to @samp{60}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
+CPU frequency scaling governor on AC mode.  With intel_pstate driver,
+alternatives are powersave and performance.  With acpi-cpufreq driver,
+alternatives are ondemand, powersave, performance and conservative.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
+Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
+Set the min available frequency for the scaling governor on AC.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
+Set the max available frequency for the scaling governor on AC.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
+Set the min available frequency for the scaling governor on BAT.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
+Set the max available frequency for the scaling governor on BAT.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
+Limit the min P-state to control the power dissipation of the CPU, in AC
+mode.  Values are stated as a percentage of the available performance.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
+Limit the max P-state to control the power dissipation of the CPU, in AC
+mode.  Values are stated as a percentage of the available performance.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
+Same as @code{cpu-min-perf-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
+Same as @code{cpu-max-perf-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
+Enable CPU turbo boost feature on AC mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
+Same as @code{cpu-boost-on-ac?} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
+Allow Linux kernel to minimize the number of CPU cores/hyper-threads
+used under light load conditions.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
+Same as @code{sched-powersave-on-ac?} but on BAT mode.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
+Enable Linux kernel NMI watchdog.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
+For Linux kernels with PHC patch applied, change CPU voltages.  An
+example value would be @samp{"F:V F:V F:V F:V"}.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
+Set CPU performance versus energy saving policy on AC.  Alternatives are
+performance, normal, powersave.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
+Same as @code{energy-perf-policy-ac} but on BAT mode.
+
+Defaults to @samp{"powersave"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
+Hard disk devices.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
+Hard disk advanced power management level.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
+Same as @code{disk-apm-bat} but on BAT mode.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
+Hard disk spin down timeout.  One value has to be specified for each
+declared hard disk.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
+Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
+Select IO scheduler for disk devices.  One value has to be specified for
+each declared hard disk.  Example alternatives are cfq, deadline and
+noop.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
+SATA aggressive link power management (ALPM) level.  Alternatives are
+min_power, medium_power, max_performance.
+
+Defaults to @samp{"max_performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
+Same as @code{sata-linkpwr-ac} but on BAT mode.
+
+Defaults to @samp{"min_power"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
+Exclude specified SATA host devices for link power management.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
+Enable Runtime Power Management for AHCI controller and disks on AC
+mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
+Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
+Seconds of inactivity before disk is suspended.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
+PCI Express Active State Power Management level.  Alternatives are
+default, performance, powersave.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
+Same as @code{pcie-aspm-ac} but on BAT mode.
+
+Defaults to @samp{"powersave"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
+Radeon graphics clock speed level.  Alternatives are low, mid, high,
+auto, default.
+
+Defaults to @samp{"high"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
+Same as @code{radeon-power-ac} but on BAT mode.
+
+Defaults to @samp{"low"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
+Radeon dynamic power management method (DPM).  Alternatives are battery,
+performance.
+
+Defaults to @samp{"performance"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
+Same as @code{radeon-dpm-state-ac} but on BAT mode.
+
+Defaults to @samp{"battery"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
+Radeon DPM performance level.  Alternatives are auto, low, high.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
+Same as @code{radeon-dpm-perf-ac} but on BAT mode.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
+Wifi power saving mode.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
+Same as @code{wifi-power-ac?} but on BAT mode.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
+Disable wake on LAN.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
+Timeout duration in seconds before activating audio power saving on
+Intel HDA and AC97 devices.  A value of 0 disables power saving.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
+Same as @code{sound-powersave-ac} but on BAT mode.
+
+Defaults to @samp{1}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
+Disable controller in powersaving mode on Intel HDA devices.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
+Enable optical drive in UltraBay/MediaBay on BAT mode.  Drive can be
+powered on again by releasing (and reinserting) the eject lever or by
+pressing the disc eject button on newer models.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string bay-device
+Name of the optical drive device to power off.
+
+Defaults to @samp{"sr0"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
+Runtime Power Management for PCI(e) bus devices.  Alternatives are on
+and auto.
+
+Defaults to @samp{"on"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
+Same as @code{runtime-pm-ac} but on BAT mode.
+
+Defaults to @samp{"auto"}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
+Runtime Power Management for all PCI(e) bus devices, except blacklisted
+ones.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
+Exclude specified PCI(e) devices adresses from Runtime Power Management.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
+Exclude PCI(e) devices assigned to the specified drivers from Runtime
+Power Management.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
+Enable USB autosuspend feature.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
+Exclude specified devices from USB autosuspend.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
+Exclude WWAN devices from USB autosuspend.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
+Include specified devices into USB autosuspend, even if they are already
+excluded by the driver or via @code{usb-blacklist-wwan?}.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
+Enable USB autosuspend before shutdown.
+
+Defaults to @samp{disabled}.
+
+@end deftypevr
+
+@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
+Restore radio device state (bluetooth, wifi, wwan) from previous
+shutdown on system startup.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
 @node Miscellaneous Services
 @subsubsection Miscellaneous Services
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 0eb18f26c..f589cd946 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -10,6 +10,7 @@
 # Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 # Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 # Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+# Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -422,6 +423,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
+  %D%/services/pm.scm				\
   %D%/services/sddm.scm				\
   %D%/services/spice.scm				\
   %D%/services/ssh.scm				\
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
new file mode 100644
index 000000000..ec35e5701
--- /dev/null
+++ b/gnu/services/pm.scm
@@ -0,0 +1,404 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;;
+;;; 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 pm)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix records)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu system shadow)
+  #:export (tlp-service-type
+            tlp-configuration))
+
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split
+                  (string-upcase
+                   (if (string-suffix? "?" str)
+                       (substring str 0 (1- (string-length str)))
+                       str))
+                  #\-)
+                 "_")))
+
+(define (serialize-field field-name val)
+  (format #t "~a=~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-boolean field-name val)
+  (serialize-field field-name (if val "1" "0")))
+(define-maybe boolean)
+
+(define (serialize-string field-name val)
+  (serialize-field field-name val))
+(define-maybe string)
+
+(define (space-separated-string-list? val)
+  (and (list? val)
+       (and-map (lambda (x)
+                  (and (string? x) (not (string-index x #\space))))
+                val)))
+(define (serialize-space-separated-string-list field-name val)
+  (serialize-field field-name
+                   (format #f "~s"
+                           (string-join val " "))))
+(define-maybe space-separated-string-list)
+
+(define (non-negative-integer? val)
+  (and (exact-integer? val) (not (negative? val))))
+(define (serialize-non-negative-integer field-name val)
+  (serialize-field field-name val))
+(define-maybe non-negative-integer)
+
+(define (on-off-boolean? val)
+  (boolean? val))
+(define (serialize-on-off-boolean field-name val)
+  (serialize-field field-name (if val "on" "off")))
+(define-maybe on-off-boolean)
+
+(define (y-n-boolean? val)
+  (boolean? val))
+(define (serialize-y-n-boolean field-name val)
+  (serialize-field field-name (if val "Y" "N")))
+
+(define-configuration tlp-configuration
+  (tlp
+   (package tlp)
+   "The TLP package.")
+
+  (tlp-enable?
+   (boolean #t)
+   "Set to true if you wish to enable TLP.")
+
+  (tlp-default-mode
+   (string "AC")
+   "Default mode when no power supply can be detected.  Alternatives are
+AC and BAT.")
+
+  (disk-idle-secs-on-ac
+   (non-negative-integer 0)
+   "Number of seconds Linux kernel has to wait after the disk goes idle,
+before syncing on AC.")
+
+  (disk-idle-secs-on-bat
+   (non-negative-integer 2)
+   "Same as @code{disk-idle-ac} but on BAT mode.")
+
+  (max-lost-work-secs-on-ac
+   (non-negative-integer 15)
+   "Dirty pages flushing periodicity, expressed in seconds.")
+
+  (max-lost-work-secs-on-bat
+   (non-negative-integer 60)
+   "Same as @code{max-lost-work-secs-on-ac} but on BAT mode.")
+
+  (cpu-scaling-governor-on-ac
+   (maybe-space-separated-string-list 'disabled)
+   "CPU frequency scaling governor on AC mode.  With intel_pstate
+driver, alternatives are powersave and performance.  With acpi-cpufreq driver,
+alternatives are ondemand, powersave, performance and conservative.")
+
+  (cpu-scaling-governor-on-bat
+   (maybe-space-separated-string-list 'disabled)
+   "Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.")
+
+  (cpu-scaling-min-freq-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Set the min available frequency for the scaling governor on AC.")
+
+  (cpu-scaling-max-freq-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Set the max available frequency for the scaling governor on AC.")
+
+  (cpu-scaling-min-freq-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Set the min available frequency for the scaling governor on BAT.")
+
+  (cpu-scaling-max-freq-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Set the max available frequency for the scaling governor on BAT.")
+
+  (cpu-min-perf-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Limit the min P-state to control the power dissipation of the CPU,
+in AC mode.  Values are stated as a percentage of the available performance.")
+
+  (cpu-max-perf-on-ac
+   (maybe-non-negative-integer 'disabled)
+   "Limit the max P-state to control the power dissipation of the CPU,
+in AC mode.  Values are stated as a percentage of the available performance.")
+
+  (cpu-min-perf-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Same as @code{cpu-min-perf-on-ac} on BAT mode.")
+
+  (cpu-max-perf-on-bat
+   (maybe-non-negative-integer 'disabled)
+   "Same as @code{cpu-max-perf-on-ac} on BAT mode.")
+
+  (cpu-boost-on-ac?
+   (maybe-boolean 'disabled)
+   "Enable CPU turbo boost feature on AC mode.")
+
+  (cpu-boost-on-bat?
+   (maybe-boolean 'disabled)
+   "Same as @code{cpu-boost-on-ac?} on BAT mode.")
+
+  (sched-powersave-on-ac?
+   (boolean #f)
+   "Allow Linux kernel to minimize the number of CPU cores/hyper-threads
+used under light load conditions.")
+
+  (sched-powersave-on-bat?
+   (boolean #t)
+   "Same as @code{sched-powersave-on-ac?} but on BAT mode.")
+
+  (nmi-watchdog?
+   (boolean #f)
+   "Enable Linux kernel NMI watchdog.")
+
+  (phc-controls
+   (maybe-string 'disabled)
+   "For Linux kernels with PHC patch applied, change CPU voltages.
+An example value would be @samp{\"F:V F:V F:V F:V\"}.")
+
+  (energy-perf-policy-on-ac
+   (string "performance")
+   "Set CPU performance versus energy saving policy on AC.  Alternatives are
+performance, normal, powersave.")
+
+  (energy-perf-policy-on-bat
+   (string "powersave")
+   "Same as @code{energy-perf-policy-ac} but on BAT mode.")
+
+  (disks-devices
+   (space-separated-string-list '("sda"))
+   "Hard disk devices.")
+
+  (disk-apm-level-on-ac
+   (space-separated-string-list '("254" "254"))
+   "Hard disk advanced power management level.")
+
+  (disk-apm-level-on-bat
+   (space-separated-string-list '("128" "128"))
+   "Same as @code{disk-apm-bat} but on BAT mode.")
+
+  (disk-spindown-timeout-on-ac
+   (maybe-space-separated-string-list 'disabled)
+   "Hard disk spin down timeout.  One value has to be specified for
+each declared hard disk.")
+
+  (disk-spindown-timeout-on-bat
+   (maybe-space-separated-string-list 'disabled)
+   "Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.")
+
+  (disk-iosched
+   (maybe-space-separated-string-list 'disabled)
+   "Select IO scheduler for disk devices.  One value has to be specified
+for each declared hard disk.  Example alternatives are cfq, deadline and noop.")
+
+  (sata-linkpwr-on-ac
+   (string "max_performance")
+   "SATA aggressive link power management (ALPM) level.  Alternatives are
+min_power, medium_power, max_performance.")
+
+  (sata-linkpwr-on-bat
+   (string "min_power")
+   "Same as @code{sata-linkpwr-ac} but on BAT mode.")
+
+  (sata-linkpwr-blacklist
+   (maybe-string 'disabled)
+   "Exclude specified SATA host devices for link power management.")
+
+  (ahci-runtime-pm-on-ac?
+   (maybe-on-off-boolean 'disabled)
+   "Enable Runtime Power Management for AHCI controller and disks
+on AC mode.")
+
+  (ahci-runtime-pm-on-bat?
+   (maybe-on-off-boolean 'disabled)
+   "Same as @code{ahci-runtime-pm-on-ac} on BAT mode.")
+
+  (ahci-runtime-pm-timeout
+   (non-negative-integer 15)
+   "Seconds of inactivity before disk is suspended.")
+
+  (pcie-aspm-on-ac
+   (string "performance")
+   "PCI Express Active State Power Management level.  Alternatives are
+default, performance, powersave.")
+
+  (pcie-aspm-on-bat
+   (string "powersave")
+   "Same as @code{pcie-aspm-ac} but on BAT mode.")
+
+  (radeon-power-profile-on-ac
+   (string "high")
+   "Radeon graphics clock speed level.  Alternatives are
+low, mid, high, auto, default.")
+
+  (radeon-power-profile-on-bat
+   (string "low")
+   "Same as @code{radeon-power-ac} but on BAT mode.")
+
+  (radeon-dpm-state-on-ac
+   (string "performance")
+   "Radeon dynamic power management method (DPM).  Alternatives are
+battery, performance.")
+
+  (radeon-dpm-state-on-bat
+   (string "battery")
+   "Same as @code{radeon-dpm-state-ac} but on BAT mode.")
+
+  (radeon-dpm-perf-level-on-ac
+   (string "auto")
+   "Radeon DPM performance level.  Alternatives are
+auto, low, high.")
+
+  (radeon-dpm-perf-level-on-bat
+   (string "auto")
+   "Same as @code{radeon-dpm-perf-ac} but on BAT mode.")
+
+  (wifi-pwr-on-ac?
+   (on-off-boolean #f)
+   "Wifi power saving mode.")
+
+  (wifi-pwr-on-bat?
+   (on-off-boolean #t)
+   "Same as @code{wifi-power-ac?} but on BAT mode.")
+
+  (wol-disable?
+   (y-n-boolean #t)
+   "Disable wake on LAN.")
+
+  (sound-power-save-on-ac
+   (non-negative-integer 0)
+   "Timeout duration in seconds before activating audio power saving
+ on Intel HDA and AC97 devices.  A value of 0 disables power saving.")
+
+  (sound-power-save-on-bat
+   (non-negative-integer 1)
+   "Same as @code{sound-powersave-ac} but on BAT mode.")
+
+  (sound-power-save-controller?
+   (y-n-boolean #t)
+   "Disable controller in powersaving mode on Intel HDA devices.")
+
+  (bay-poweroff-on-bat?
+   (boolean #f)
+   "Enable optical drive in UltraBay/MediaBay on BAT mode.
+Drive can be powered on again by releasing (and reinserting) the eject lever
+or by pressing the disc eject button on newer models.")
+
+  (bay-device
+   (string "sr0")
+   "Name of the optical drive device to power off.")
+
+  (runtime-pm-on-ac
+   (string "on")
+   "Runtime Power Management for PCI(e) bus devices.  Alternatives are
+on and auto.")
+
+  (runtime-pm-on-bat
+   (string "auto")
+   "Same as @code{runtime-pm-ac} but on BAT mode.")
+
+  (runtime-pm-all?
+   (boolean #t)
+   "Runtime Power Management for all PCI(e) bus devices, except
+blacklisted ones.")
+
+  (runtime-pm-blacklist
+   (maybe-space-separated-string-list 'disabled)
+   "Exclude specified PCI(e) devices adresses from Runtime Power Management.")
+
+  (runtime-pm-driver-blacklist
+   (space-separated-string-list '("radeon" "nouveau"))
+   "Exclude PCI(e) devices assigned to the specified drivers from
+Runtime Power Management.")
+
+  (usb-autosuspend?
+   (boolean #t)
+   "Enable USB autosuspend feature.")
+
+  (usb-blacklist
+   (maybe-string 'disabled)
+   "Exclude specified devices from USB autosuspend.")
+
+  (usb-blacklist-wwan?
+   (boolean #t)
+   "Exclude WWAN devices from USB autosuspend.")
+
+  (usb-whitelist
+   (maybe-string 'disabled)
+   "Include specified devices into USB autosuspend, even if they are
+already excluded by the driver or via @code{usb-blacklist-wwan?}.")
+
+  (usb-autosuspend-disable-on-shutdown?
+   (maybe-boolean 'disabled)
+   "Enable USB autosuspend before shutdown.")
+
+  (restore-device-state-on-startup?
+   (boolean #f)
+   "Restore radio device state (bluetooth, wifi, wwan) from previous
+shutdown on system startup."))
+
+
+(define (tlp-shepherd-service config)
+  (let* ((tlp-bin (file-append
+                   (tlp-configuration-tlp config) "/bin/tlp"))
+         (tlp-action (lambda args
+                       #~(lambda _
+                           (zero? (system* #$tlp-bin #$@args))))))
+    (list (shepherd-service
+           (documentation "Run TLP script.")
+           (provision '(tlp))
+           (requirement '(user-processes))
+           (start (tlp-action "init" "start"))
+           (stop  (tlp-action "init" "stop"))))))
+
+(define (tlp-activation config)
+  (let* ((config-str (with-output-to-string
+                       (lambda ()
+                         (serialize-configuration
+                          config
+                          tlp-configuration-fields))))
+         (config-file (plain-file "tlp" config-str)))
+    (with-imported-modules '((guix build utils))
+      #~(begin
+          (use-modules (guix build utils))
+          (copy-file #$config-file "/etc/tlp")))))
+
+(define tlp-service-type
+  (service-type
+   (name 'tlp)
+   (extensions
+    (list
+     (service-extension shepherd-root-service-type
+                        tlp-shepherd-service)
+     (service-extension udev-service-type
+                        (compose list tlp-configuration-tlp))
+     (service-extension activation-service-type
+                        tlp-activation)))))
+
+(define (generate-tlp-documentation)
+  (generate-documentation
+   `((tlp-configuration ,tlp-configuration-fields))
+   'tlp-configuration))
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 10:01:05 GMT) (full text, mbox, link).


Message #44 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Mathieu Othacehe <m.othacehe@gmail.com>
To: 26137@debbugs.gnu.org
Cc: Mathieu Othacehe <m.othacehe@gmail.com>
Subject: [PATCH v3 6/6] doc: Re-generate openvpn service documentation.
Date: Fri, 24 Mar 2017 11:00:17 +0100
* doc/guix.texi (VPN Services): Generate documentation with
generate-openvpn-server-documentation and
generate-openvpn-client-documentation helpers and guile 2.1.7.
---
 doc/guix.texi | 88 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 44 insertions(+), 44 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 79d9c9fcb..80eb2284e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -13113,19 +13113,19 @@ Both can be run simultaneously.
 
 Available @code{openvpn-client-configuration} fields are:
 
-@deftypevr @code{openvpn-client-configuration} parameter package openvpn
+@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
 The OpenVPN package.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string pid-file
+@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
 The OpenVPN pid file.
 
 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter proto proto
+@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
 The protocol (UDP or TCP) used to open a channel between clients and
 servers.
 
@@ -13133,21 +13133,21 @@ Defaults to @samp{udp}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter dev dev
+@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
 The device type used to represent the VPN connection.
 
 Defaults to @samp{tun}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string ca
+@deftypevr {@code{openvpn-client-configuration} parameter} string ca
 The certificate authority to check connections against.
 
 Defaults to @samp{"/etc/openvpn/ca.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string cert
+@deftypevr {@code{openvpn-client-configuration} parameter} string cert
 The certificate of the machine the daemon is running on.  It should be
 signed by the authority given in @code{ca}.
 
@@ -13155,7 +13155,7 @@ Defaults to @samp{"/etc/openvpn/client.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter string key
+@deftypevr {@code{openvpn-client-configuration} parameter} string key
 The key of the machine the daemon is running on.  It must be the key whose
 certificate is @code{cert}.
 
@@ -13163,21 +13163,21 @@ Defaults to @samp{"/etc/openvpn/client.key"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean comp-lzo?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
 Whether to use the lzo compression algorithm.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean persist-key?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
 Don't re-read key files across SIGUSR1 or --ping-restart.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter boolean persist-tun?
+@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
 Don't close and reopen TUN/TAP device or run up/down scripts across
 SIGUSR1 or --ping-restart restarts.
 
@@ -13185,14 +13185,14 @@ Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter number verbosity
+@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
 Verbosity level.
 
 Defaults to @samp{3}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter tls-auth-client tls-auth
+@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
 Add an additional layer of HMAC authentication on top of the TLS control
 channel to protect against DoS attacks.
 
@@ -13200,42 +13200,42 @@ Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter key-usage verify-key-usage?
+@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
 Whether to check the server certificate has server usage extension.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter bind bind?
+@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
 Bind to a specific local port number.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter resolv-retry resolv-retry?
+@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
 Retry resolving server address.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-client-configuration} parameter openvpn-remote-list remote
+@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
 A list of remote servers to connect to.
 
 Defaults to @samp{()}.
 
 Available @code{openvpn-remote-configuration} fields are:
 
-@deftypevr @code{openvpn-remote-configuration} parameter string name
+@deftypevr {@code{openvpn-remote-configuration} parameter} string name
 Server name.
 
 Defaults to @samp{"my-server"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-remote-configuration} parameter number port
+@deftypevr {@code{openvpn-remote-configuration} parameter} number port
 Port number the server listens to.
 
 Defaults to @samp{1194}.
@@ -13249,19 +13249,19 @@ Defaults to @samp{1194}.
 
 Available @code{openvpn-server-configuration} fields are:
 
-@deftypevr @code{openvpn-server-configuration} parameter package openvpn
+@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
 The OpenVPN package.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string pid-file
+@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
 The OpenVPN pid file.
 
 Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter proto proto
+@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
 The protocol (UDP or TCP) used to open a channel between clients and
 servers.
 
@@ -13269,21 +13269,21 @@ Defaults to @samp{udp}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter dev dev
+@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
 The device type used to represent the VPN connection.
 
 Defaults to @samp{tun}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string ca
+@deftypevr {@code{openvpn-server-configuration} parameter} string ca
 The certificate authority to check connections against.
 
 Defaults to @samp{"/etc/openvpn/ca.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string cert
+@deftypevr {@code{openvpn-server-configuration} parameter} string cert
 The certificate of the machine the daemon is running on.  It should be
 signed by the authority given in @code{ca}.
 
@@ -13291,7 +13291,7 @@ Defaults to @samp{"/etc/openvpn/client.crt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string key
+@deftypevr {@code{openvpn-server-configuration} parameter} string key
 The key of the machine the daemon is running on.  It must be the key whose
 certificate is @code{cert}.
 
@@ -13299,21 +13299,21 @@ Defaults to @samp{"/etc/openvpn/client.key"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean comp-lzo?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
 Whether to use the lzo compression algorithm.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean persist-key?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
 Don't re-read key files across SIGUSR1 or --ping-restart.
 
 Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean persist-tun?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
 Don't close and reopen TUN/TAP device or run up/down scripts across
 SIGUSR1 or --ping-restart restarts.
 
@@ -13321,14 +13321,14 @@ Defaults to @samp{#t}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number verbosity
+@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
 Verbosity level.
 
 Defaults to @samp{3}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter tls-auth-server tls-auth
+@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
 Add an additional layer of HMAC authentication on top of the TLS control
 channel to protect against DoS attacks.
 
@@ -13336,56 +13336,56 @@ Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number port
+@deftypevr {@code{openvpn-server-configuration} parameter} number port
 Specifies the port number on which the server listens.
 
 Defaults to @samp{1194}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter ip-mask server
+@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
 An ip and mask specifying the subnet inside the virtual network.
 
 Defaults to @samp{"10.8.0.0 255.255.255.0"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter cidr6 server-ipv6
+@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
 A CIDR notation specifying the IPv6 subnet inside the virtual network.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string dh
+@deftypevr {@code{openvpn-server-configuration} parameter} string dh
 The Diffie-Hellman parameters file.
 
 Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string ifconfig-pool-persist
+@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
 The file that records client IPs.
 
 Defaults to @samp{"/etc/openvpn/ipp.txt"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter gateway redirect-gateway?
+@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
 When true, the server will act as a gateway for its clients.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter boolean client-to-client?
+@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
 When true, clients are alowed to talk to each other inside the VPN.
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter keepalive keepalive
+@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
 Causes ping-like messages to be sent back and forth over the link so
 that each side knows when the other side has gone down.  @code{keepalive}
 requires a pair.  The first element is the period of the ping sending,
@@ -13394,14 +13394,14 @@ down.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter number max-clients
+@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
 The maximum number of clients.
 
 Defaults to @samp{100}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter string status
+@deftypevr {@code{openvpn-server-configuration} parameter} string status
 The status file.  This file shows a small report on current connection.
 It is trunkated and rewritten every minute.
 
@@ -13409,28 +13409,28 @@ Defaults to @samp{"/var/run/openvpn/status"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-server-configuration} parameter openvpn-ccd-list client-config-dir
+@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
 The list of configuration for some clients.
 
 Defaults to @samp{()}.
 
 Available @code{openvpn-ccd-configuration} fields are:
 
-@deftypevr @code{openvpn-ccd-configuration} parameter string name
+@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
 Client name.
 
 Defaults to @samp{"client"}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-ccd-configuration} parameter ip-mask iroute
+@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
 Client own network
 
 Defaults to @samp{#f}.
 
 @end deftypevr
 
-@deftypevr @code{openvpn-ccd-configuration} parameter ip-mask ifconfig-push
+@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
 Client VPN IP.
 
 Defaults to @samp{#f}.
-- 
2.12.0





Information forwarded to guix-patches@gnu.org:
bug#26137; Package guix-patches. (Fri, 24 Mar 2017 15:21:01 GMT) (full text, mbox, link).


Message #47 received at 26137@debbugs.gnu.org (full text, mbox, reply):

From: Clément Lassieur <clement@lassieur.org>
To: Mathieu Othacehe <m.othacehe@gmail.com>
Cc: 26137@debbugs.gnu.org
Subject: Re: bug#26137: [PATCH v3 0/6] Add TLP service.
Date: Fri, 24 Mar 2017 16:20:34 +0100
Mathieu Othacehe <m.othacehe@gmail.com> writes:

> Hi,
>
> Here's the v3 of the patch. It improves tlp documentation
> as discussed on IRC.
>
> Thanks,

Pushed!  With small indentation changes and an extra dot removed in the
documentation.

I also realized one of my comments (about splitting a commit into two
different ones) was useless, sorry for this.

Thanks!
Clément




Added tag(s) fixed. Request was from clement@lassieur.org (Clément Lassieur) to control@debbugs.gnu.org. (Fri, 24 Mar 2017 15:21:02 GMT) (full text, mbox, link).


bug closed, send any further explanations to 26137@debbugs.gnu.org and Mathieu Othacehe <m.othacehe@gmail.com> Request was from clement@lassieur.org (Clément Lassieur) to control@debbugs.gnu.org. (Fri, 24 Mar 2017 15:21:02 GMT) (full text, mbox, link).


bug archived. Request was from Debbugs Internal Request <help-debbugs@gnu.org> to internal_control@debbugs.gnu.org. (Sat, 22 Apr 2017 11:24:04 GMT) (full text, mbox, link).


Send a report that this bug log contains spam.


debbugs.gnu.org maintainers <help-debbugs@gnu.org>. Last modified: Mon Nov 4 22:17:55 2024; Machine Name: wallace-server

GNU bug tracking system

Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.

Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.