Janneke Nieuwenhuizen wrote 14 hours ago
(address . guix-patches@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