[PATCH] home: Add home-snuik-service.

  • Open
  • quality assurance status badge
Details
One participant
  • Janneke Nieuwenhuizen
Owner
unassigned
Submitted by
Janneke Nieuwenhuizen
Severity
normal

Debbugs page

Janneke Nieuwenhuizen wrote 14 hours ago
(address . guix-patches@gnu.org)
7f43764f98a45b92cce1be2e7d352e3c791cebf8.1741729617.git.janneke@gnu.org
* gnu/home/services/messaging.scm (<home-snuik-configuration>): New type.
(home-snuik-services, home-snuik-service-type): New procedures.
* doc/guix.texi (Messaging Home Services): Document it.

Change-Id: I1e278e7d8ed04efcb1a2ce9e12e69cb6a31a9fa4
---
doc/guix.texi | 58 ++++++++++++++++++++++++-
gnu/home/services/messaging.scm | 77 ++++++++++++++++++++++++++++++++-
2 files changed, 132 insertions(+), 3 deletions(-)

Toggle diff (182 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index d109877a32..f35e156376 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -36,7 +36,7 @@
Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Efraim Flashner@*
Copyright @copyright{} 2016 John Darrington@*
Copyright @copyright{} 2016, 2017 Nikita Gillmann@*
-Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Janneke Nieuwenhuizen@*
+Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 Janneke Nieuwenhuizen@*
Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Julien Lepiller@*
Copyright @copyright{} 2016 Alex ter Weele@*
Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines@*
@@ -49714,6 +49714,62 @@ Messaging Home Services
@end table
@end deftp
+@cindex snuik
+The @uref{https://gitlab.com/janneke/snuik, Snuik IRC bot} can be run as
+a daemon to aid talking to users that are currently off-line. With the
+@code{(gnu home services messaging)} service, you can configure Snuik to
+run upon login.
+
+Here is an example of a service and its configuration that you could add
+to the @code{services} field of your @code{home-environment}:
+
+@lisp
+(service home-snuik-service-type
+ (home-snuik-configuration
+ (password-file ".password.snuik")
+ (channels '("#bootstrappable"
+ "#dezyne"
+ "#guix-risc-v"
+ "#lilypond"))))
+@end lisp
+
+@defvar home-snuik-service-type
+This is the type of the Snuik home service, whose value is a
+@code{home-snuik-configuration} object.
+@end defvar
+
+@deftp {Data Type} home-snuik-configuration
+Available @code{home-snuik-configuration} fields are:
+
+@table @asis
+@item @code{snuik} (default: @code{snuik}) (type: file-like)
+The Snuik package to use.
+
+@item @code{server} (default: @code{"irc.libera.chat"})
+The IRC server to connect to.
+
+@item @code{port} (default: @code{6665})
+Port number used by the IRC server.
+
+@item @code{nick} (default: @code{"snuik"})
+The nickname for snuik to use.
+
+@item @code{password} (default: @code{#f})
+The password to use when logging in.
+
+@item @code{password-file} (default: @code{".password.<nick>})
+The file to read the password from to use when logging in.
+
+@item @code{channels} (default: @code{'("##botchat")})
+The channels for snuik to join, a list of strings.
+
+@item @code{extra-options} (default: @code{'()})
+Extra options will be passed to @command{snuik}, please run
+@command{snuik --help } for more information.
+
+@end table
+@end deftp
+
@node Media Home Services
@subsection Media Home Services
diff --git a/gnu/home/services/messaging.scm b/gnu/home/services/messaging.scm
index bd2f1bb23f..be2a3436ba 100644
--- a/gnu/home/services/messaging.scm
+++ b/gnu/home/services/messaging.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2023, 2025 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,12 +20,15 @@ (define-module (gnu home services messaging)
#:use-module (srfi srfi-26)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
+ #:use-module (gnu packages irc)
#:use-module (gnu packages messaging)
#:use-module (gnu services configuration)
#:use-module (gnu services shepherd)
#:use-module (guix records)
#:use-module (guix gexp)
- #:export (home-znc-configuration
+ #:export (home-snuik-configuration
+ home-snuik-service-type
+ home-znc-configuration
home-znc-service-type))
;;;
@@ -64,3 +67,73 @@ (define home-znc-service-type
(description
"Install and configure @command{znc}, an @acronym{IRC, Internet Relay
Chat} bouncer, as a Shepherd service.")))
+
+
+;;;
+;;; Snuik.
+;;;
+(define-record-type* <home-snuik-configuration>
+ home-snuik-configuration make-home-snuik-configuration
+ home-snuik-configuration?
+ (snuik home-snuik-snuik ;file-like
+ (default snuik))
+ (server home-snuik-server ;string
+ (default #f))
+ (port home-snuik-port ;integer
+ (default #f))
+ (nick home-snuik-nick ;string
+ (default #f))
+ (password home-snuik-password ;string
+ (default #f))
+ (password-file home-snuik-password-file ;string
+ (default #f))
+ (channels home-snuik-channels ;list of string
+ (default '()))
+ (extra-options home-snuik-extra-options ;list of string
+ (default '())))
+
+(define (home-snuik-services config)
+ "Return a <shepherd-service> for snuik with CONFIG."
+ (match-record config
+ <home-snuik-configuration>
+ (snuik server port nick password password-file channels extra-options)
+ (let* ((snuik (file-append snuik "/bin/snuik"))
+ (command #~'(#$snuik
+ #$@(if server
+ #~("--server" #$server)
+ #~())
+ #$@(if port
+ #~("--port" (number->string port))
+ #~())
+ #$@(if nick
+ #~("--nick" nick)
+ #~())
+ #$@(if password
+ #~("--password" password)
+ #~())
+ #$@(if password-file
+ #~("--password-file" password-file)
+ #~())
+ #$@(if (pair? channels)
+ #~("--channels" (string-join channels ","))
+ #~())
+ #$@extra-options))
+ (log-file #~(string-append %user-log-dir "/snuik.log")))
+ (list (shepherd-service
+ (documentation "Run the snuik IRC bot.")
+ (provision '(snuik))
+ (modules '((shepherd support))) ;for '%user-log-dir'
+ (start #~(make-forkexec-constructor #$command
+ #:log-file #$log-file))
+ (stop #~(make-kill-destructor)))))))
+
+(define home-snuik-service-type
+ (service-type
+ (name 'home-snuik)
+ (default-value (home-snuik-configuration))
+ (extensions
+ (list (service-extension home-shepherd-service-type
+ home-snuik-services)))
+ (description
+ "Install and configure the Snuik IRC bot so that it runs as a Shepherd
+service.")))

base-commit: d685a45edf0f89e5876ffc9d880068d8610e5f8a
--
2.47.1
?
Your comment

Commenting via the web interface is currently disabled.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 76963
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