Subject: Re: [bug#76963] [PATCH] home: Add home-snuik-service.

From: Janneke Nieuwenhuizen <[email-masked]>
Date: Wed, 12 Mar 2025 16:40:56 +0100

Maxim Cournoyer writes:

Hi Maxim,

> Janneke Nieuwenhuizen <[email-masked]> writes:
>
>> * 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 ++++++++++++++++++++++++++++++++-
>
> Wouldn't such a service be a more natural match for a system service?
> It seems like something I'd like running on a headless server.

I suppose you're right.  I've been thinking about that but am not too
thrilled of running snuik v0.2 as root.  I'll make it a system service
and use (for-home ...) to provide a home service.  Using the
least-authority-wrapper should (thanks for mentioning that, I wasn't
aware of this feature!) address my concerns about taking this route.

>>  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@*
>
> Maybe use 2016-2025 :-).

Hmm.  I thought you needed to have a special exception in the README to
be able for that to hold up in court.  I've been postponing to look into
this mess (I used to be too heavily into copyright in my LilyPond years).
However, it seems today is the day :)

>From <https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html>

--8<---------------cut here---------------start------------->8---
You can use a range (‘2008-2010’) instead of listing individual years
(‘2008, 2009, 2010’) if and only if: 1) every year in the range,
inclusive, really is a “copyrightable” year that would be listed
individually; and 2) you make an explicit statement in a README file
about this usage.
--8<---------------cut here---------------end--------------->8---

Sadly, the manual does not seem to give a template to use for this, and
I have learnt to stay away from authoring legal texts.  I just asked
gnu-prog-discuss about this.

I cannot find such a statement in the Guix README?  Ludo'?

>> +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.
>
> nitpick: I've only ever seen 'offline' spelled as a single word.

The numbers

--8<---------------cut here---------------start------------->8---
15:53:37 janneke@glimdal:~/src/guix/core-packages-team 
$ git grep off-line |wc -l
39
15:54:23 janneke@glimdal:~/src/guix/core-packages-team 
$ git grep offline |wc -l
448
--8<---------------cut here---------------end--------------->8---

are overwhelmingly in your favor, so I'll take your suggestion, thanks :)
 
>> +
>> +;;;
>> +;;; 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))
[..]

> I'd use define-configuration/no-serialization from (gnu services configuration), which
> will type-check the field values and produce useful errors in case of a
> mistake, which is more useful than a comment in the source file :-).

Ok.

>> +(define (home-snuik-services config)
[..]
>> +             (start #~(make-forkexec-constructor #$command
>> +                                                 #:log-file #$log-file))
>> +             (stop #~(make-kill-destructor)))))))
>
> Can home services use the least-authority-wrapper to containerize the
> processes?  If yes, that'd be nice to use it.

Looking at dicod-shepherd-service, it has (if home-service?...) and uses
the least-authority-wrapper.  I'm wondering how this works for read
access to the password-file and read/write access to snuik's database
store directory but I'll look into this.

Thanks for your very useful comments, I've got some homework! :)

I intend to send a v2 with system+home service and
least-authority-wrapper...but I need to learn a few things about bothe
these things and then also do some testing.

Greetings,
Janneke

-- 
Janneke Nieuwenhuizen <[email-masked]>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar® https://AvatarAcademy.com