Package: guix-patches;
Reported by: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Date: Tue, 11 Mar 2025 21:56:01 UTC
Severity: normal
Tags: patch
Done: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Janneke Nieuwenhuizen <janneke <at> gnu.org> To: guix-patches <at> gnu.org Subject: [PATCH] home: Add home-snuik-service. Date: Tue, 11 Mar 2025 22:54:55 +0100
* 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(-) 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 <at> gnu.org> +;;; Copyright © 2023, 2025 Janneke Nieuwenhuizen <janneke <at> 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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.