[PATCH] home: services: Add home-unclutter-service-type.

  • Done
  • quality assurance status badge
Details
2 participants
  • conses
  • Ludovic Courtès
Owner
unassigned
Submitted by
conses
Severity
normal

Debbugs page

conses wrote 2 years ago
(address . guix-patches@gnu.org)(address . contact@conses.eu)
86lek41cc6.fsf@conses.eu
* gnu/home/services/xdisorg.scm: New file.
---
gnu/home/services/xdisorg.scm | 72 +++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 gnu/home/services/xdisorg.scm

Toggle diff (86 lines)
diff --git a/gnu/home/services/xdisorg.scm b/gnu/home/services/xdisorg.scm
new file mode 100644
index 0000000000..02c538ff9f
--- /dev/null
+++ b/gnu/home/services/xdisorg.scm
@@ -0,0 +1,72 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 conses <contact@conses.eu>
+;;;
+;;; 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 home services xdisorg)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu services configuration)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:export (home-unclutter-configuration
+ home-unclutter-service-type))
+
+(define-configuration/no-serialization home-unclutter-configuration
+ (unclutter
+ (package unclutter)
+ "The @code{unclutter} package to use.")
+ (seconds
+ (integer 5)
+ "The number of idle seconds to wait to remove the cursor."))
+
+(define (home-unclutter-shepherd-service config)
+ (list
+ (shepherd-service
+ (provision '(unclutter))
+ (requirement '())
+ (one-shot? #t)
+ (start #~(make-forkexec-constructor
+ (list
+ #$(file-append
+ (home-unclutter-configuration-unclutter config)
+ "/bin/unclutter")
+ "-idle"
+ (number->string
+ #$(home-unclutter-configuration-seconds config)))
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/unclutter.log"))))))
+
+(define (home-unclutter-profile-service config)
+ (list (home-unclutter-configuration-unclutter config)))
+
+(define home-unclutter-service-type
+ (service-type
+ (name 'home-unclutter)
+ (extensions
+ (list
+ (service-extension
+ home-profile-service-type
+ home-unclutter-profile-service)
+ (service-extension
+ home-shepherd-service-type
+ home-unclutter-shepherd-service)))
+ (default-value (home-unclutter-configuration))
+ (description "Set up an unclutter daemon.")))
--
2.39.1



--
Best regards,
conses
Ludovic Courtès wrote 2 years ago
(name . conses)(address . contact@conses.eu)(address . 62107@debbugs.gnu.org)
87o7ow21fe.fsf@gnu.org
Hi,

conses <contact@conses.eu> skribis:

Toggle quote (2 lines)
> * gnu/home/services/xdisorg.scm: New file.

Could you (1) add this file to ‘gnu/local.mk’, and (2) document it in
‘doc/guix.texi’ (again: a few introductory lines, an example, and the
reference)?

Toggle quote (2 lines)
> + (description "Set up an unclutter daemon.")))

Could you expand it a bit? For example:

Run the unclutter daemon, which, on systems using the Xorg graphical
display server, automatically hides the cursors after a user-defined
timeout has expired.

TIA,
Ludo’.
conses wrote 2 years ago
(name . Ludovic Courtès)(address . ludo@gnu.org)
86jzzjy0hx.fsf@conses.eu
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (11 lines)
> Hi,
>
> conses <contact@conses.eu> skribis:
>
>> * gnu/home/services/xdisorg.scm: New file.
>
> Could you (1) add this file to ‘gnu/local.mk’, and (2) document it in
> ‘doc/guix.texi’ (again: a few introductory lines, an example, and the
> reference)?
>

I decided to bundle this home service in (gnu home services desktop)
instead as it makes more sense for someone to use it only when running a
graphical display server. I also documented it in the manual.

Toggle quote (9 lines)
>> + (description "Set up an unclutter daemon.")))
>
> Could you expand it a bit? For example:
>
> Run the unclutter daemon, which, on systems using the Xorg graphical
> display server, automatically hides the cursors after a user-defined
> timeout has expired.
>

Amended the service description with the above.

--
Best regards,
conses
conses wrote 2 years ago
[PATCH v2] home: services: Add home-unclutter-service-type.
(address . 62107@debbugs.gnu.org)(address . contact@conses.eu)
86fsa7y0ff.fsf@conses.eu
* gnu/home/services/desktop.scm (home-unclutter-configuration)
(home-unclutter-service-type): New variables;
(home-unclutter-shepherd-service): New procedure;
* doc/guix.texi (Desktop Services): Document it.
---
doc/guix.texi | 30 ++++++++++++++++++++
gnu/home/services/desktop.scm | 53 +++++++++++++++++++++++++++++++++--
2 files changed, 81 insertions(+), 2 deletions(-)

Toggle diff (131 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 6671ba9305..551e5078f6 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -42541,6 +42541,36 @@ Desktop Home Services
@end table
@end deftp
+@defvar home-unclutter-service-type
+This is the service type for Unclutter, a program that runs on the
+background of an X11 session and detects when the X pointer hasn't moved
+for a specified idle timeout, after which it hides the cursor so that
+you can focus on the text underneath. Its associated value must be a
+@code{home-unclutter-configuration} record, as shown below.
+
+A typical configuration, where we manually specify the idle timeout (in
+seconds), might look like this:
+
+@lisp
+(service home-unclutter-service-type
+ (home-unclutter-configuration
+ (idle-timeout 2)))
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-unclutter-configuration
+The configuration record for @code{home-unclutter-service-type}.
+
+@table @asis
+@item @code{unclutter} (default: @code{unclutter}) (type: file-like)
+Unclutter package to use.
+
+@item @code{idle-timeout} (default: @code{5}) (type: integer)
+A timeout in seconds after which to hide cursor.
+@end table
+
+@end deftp
+
@node Guix Home Services
@subsection Guix Home Services
diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
index cb25b03b64..ab2b871539 100644
--- a/gnu/home/services/desktop.scm
+++ b/gnu/home/services/desktop.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 ( <paren@disroot.org>
+;;; Copyright © 2023 conses <contact@conses.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,7 +23,7 @@ (define-module (gnu home services desktop)
#:use-module (gnu home services shepherd)
#:use-module (gnu services configuration)
#:autoload (gnu packages glib) (dbus)
- #:autoload (gnu packages xdisorg) (redshift)
+ #:autoload (gnu packages xdisorg) (redshift unclutter)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
@@ -32,7 +33,10 @@ (define-module (gnu home services desktop)
home-redshift-service-type
home-dbus-configuration
- home-dbus-service-type))
+ home-dbus-service-type
+
+ home-unclutter-configuration
+ home-unclutter-service-type))
;;;
@@ -226,3 +230,48 @@ (define home-dbus-service-type
(default-value (home-dbus-configuration))
(description
"Run the session-specific D-Bus inter-process message bus.")))
+
+
+;;;
+;;; Unclutter.
+;;;
+
+(define-configuration/no-serialization home-unclutter-configuration
+ (unclutter
+ (file-like unclutter)
+ "The @code{unclutter} package to use.")
+ (idle-timeout
+ (integer 5)
+ "Timeout in seconds after which to hide the cursor."))
+
+(define (home-unclutter-shepherd-service config)
+ (list
+ (shepherd-service
+ (provision '(unclutter))
+ (requirement '())
+ (one-shot? #t)
+ (start #~(make-forkexec-constructor
+ (list
+ #$(file-append
+ (home-unclutter-configuration-unclutter config)
+ "/bin/unclutter")
+ "-idle"
+ (number->string
+ #$(home-unclutter-configuration-idle-timeout config)))
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/unclutter.log"))))))
+
+(define home-unclutter-service-type
+ (service-type
+ (name 'home-unclutter)
+ (extensions
+ (list
+ (service-extension home-shepherd-service-type
+ home-unclutter-shepherd-service)))
+ (default-value (home-unclutter-configuration))
+ (description "Run the @code{unclutter} daemon, which, on systems using the
+Xorg graphical display server, automatically hides the cursor after a
+user-defined timeout has expired.")))
--
2.39.1



--
Best regards,
conses
Ludovic Courtès wrote 2 years ago
Re: bug#62107: [PATCH] home: services: Add home-unclutter-service-type.
(name . conses)(address . contact@conses.eu)(address . 62107-done@debbugs.gnu.org)
87pm99geac.fsf_-_@gnu.org
Hi,

conses <contact@conses.eu> skribis:

Toggle quote (5 lines)
> * gnu/home/services/desktop.scm (home-unclutter-configuration)
> (home-unclutter-service-type): New variables;
> (home-unclutter-shepherd-service): New procedure;
> * doc/guix.texi (Desktop Services): Document it.

Perfect. Applied, thanks!

Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 62107@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 62107
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help