From: Nicolas Graves via "Development of GNU Guix and the GNU System distribution." <guix-devel@gnu.org>
To: "Ludovic Courtès" <ludo@gnu.org>,
"Nicolas Graves via Development of GNU Guix and the GNU System
distribution." <guix-devel@gnu.org>
Cc: emacs-devel@gnu.org, Andrew Tropin <andrew@trop.in>,
Stefan Monnier <monnier@iro.umontreal.ca>
Subject: Re: [Nicolas Graves] [PATCH v6 01/10] rde: emacs: Start emacs in --daemon mode, with shepherd and pid-file
Date: Sat, 13 Apr 2024 18:50:18 +0200 [thread overview]
Message-ID: <87cyqtnr5h.fsf@ngraves.fr> (raw)
In-Reply-To: <87jzl22u5w.fsf@gnu.org>
On 2024-04-12 22:38, Ludovic Courtès wrote:
> Hi Nicolas,
>
> Nicolas Graves skribis:
>
>> As promised to Stefan a few months ago, here's a use case of
>> Shepherd/Emacs implementation that we developped in RDE.
>
> Would be nice to have it in Guix Home!
Something like this seems to work:
(define (emacs-shepherd-service config name)
(shepherd-service
(documentation
(format #f "Emacs server. Use ~a to connect to it."
(if (eq? 'server name)
"@code{emacsclient}"
(format #f "@code{emacsclient -s ~a}" name))))
(provision `(,(symbol-append 'emacs- name)))
(requirement '(emacs))
(modules '((shepherd support))) ;for '%user-runtime-dir'
(start #~(make-systemd-constructor
(list #$(file-append
(home-emacs-configuration-emacs config)
"/bin/emacs") #$(format #f "--fg-daemon=~a" name))
(list (endpoint
(make-socket-address
AF_UNIX
(string-append %user-runtime-dir
"/emacs/" #$(symbol->string name)))
#:name '#$(format #f "emacs-~a" name)
#:socket-directory-permissions #o700))
#:log-file (string-append
(getenv "XDG_STATE_HOME") "/log"
"/emacs-" #$(symbol->string name) ".log")))
(stop #~(make-systemd-destructor))))
But I'm not sure it's better regarding user experience. On RDE we
implemented a notifier that parses the result of
herd eval root "(and=> (lookup-service 'emacs-server) service-status)"
thus giving a nice "Emacs is currently starting" notification.
This evaluation doesn't seem to work using make-systemd-constructor,
although it has its advantages (indeed launches a frame when available).
It would be nice if service-status could "sync" with
make-systemd-constructor in this case.
I would be happy to send such a patch for Guix (is there already some
patch series on which to graft this?), WDYT @Ludo?
I can also send this in RDE, it simplifies a lot although I'm still not
sure it yields a better user experience. @Andrew?
>> We're using the --daemon option on the Shepherd side to launch the
>> server in the background, include code in Emacs configuration to make it
>> create a pid-file as soon as the server has started, and redefine
>> kill-emacs to be managed by the Shepherd.
>
> Emacs supports systemd-style socket activation so, instead of using a
> PID file, you could use ‘make-systemd-constructor’.
>
> Now, that code in emacs.c is unfortunately implemented via libsystemd
> and thus disabled in Guix. Using libsystemd in this case is unnecessary
> (and increases the attack surface, as we’ve seen with the xz backdoor):
> it could read the ‘LISTEN_FDS’ and ‘LISTEN_PID’ environment variables
> instead of calling the sd_* functions.
>
> https://www.freedesktop.org/software/systemd/man/latest/sd_listen_fds.html
> https://www.gnu.org/software/shepherd/manual/html_node/Service-De_002d-and-Constructors.html#index-make_002dsystemd_002dconstructor
>
> Thanks,
> Ludo’.
--
Best regards,
Nicolas Graves
next prev parent reply other threads:[~2024-04-13 17:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240410234923.29319-2-ngraves@ngraves.fr>
[not found] ` <875xwotg35.fsf@trop.in>
2024-04-11 11:15 ` [Nicolas Graves] [PATCH v6 01/10] rde: emacs: Start emacs in --daemon mode, with shepherd and pid-file Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-04-12 20:38 ` Ludovic Courtès
2024-04-13 14:20 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-04-13 15:09 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-04-13 15:16 ` Stefan Monnier
2024-04-14 19:11 ` Björn Bidar
2024-04-14 20:52 ` Stefan Monnier
2024-04-19 14:19 ` Ludovic Courtès
2024-04-19 14:36 ` Rudolf Schlatte
2024-04-20 2:31 ` Stefan Monnier
2024-04-19 14:17 ` Ludovic Courtès
2024-05-11 20:15 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-05-11 23:07 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-05-12 6:29 ` Eli Zaretskii
2024-05-12 7:50 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-05-12 7:54 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-05-12 9:36 ` Eli Zaretskii
2024-05-12 11:11 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-05-12 15:01 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-04-13 16:50 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution. [this message]
2024-04-19 14:25 ` Ludovic Courtès
2024-04-14 16:51 ` Felix Lechner via Development of GNU Guix and the GNU System distribution.
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87cyqtnr5h.fsf@ngraves.fr \
--to=guix-devel@gnu.org \
--cc=andrew@trop.in \
--cc=emacs-devel@gnu.org \
--cc=ludo@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=ngraves@ngraves.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.