]> git.ekhem.eu.org Git - guix.git/commitdiff
[emacs] Enable emacs daemon and wrap `emacsclient`.
authorJakub Czajka <jakub@ekhem.eu.org>
Thu, 22 Dec 2022 20:42:56 +0000 (21:42 +0100)
committerJakub Czajka <jczajka@google.com>
Sun, 24 Dec 2023 18:53:07 +0000 (19:53 +0100)
Emacs can be run locally as a daemon. `emacsclient` connects to it and
can open multiple windows during the same session.

bash/.config/profile.d/20-env.sh
conf/home/emacs.scm
emacs/.local/bin/emacs_client [new file with mode: 0755]

index 5583c3f0930ed0fcd8f33092da1ff96c902892a6..b1a7828167bbf79edff0fa49da72cc0cd35ff947 100644 (file)
@@ -4,3 +4,4 @@
 # 20-env.sh - generic environment variables.
 
 export EDITOR="emacs"
+export PATH="${HOME}/.local/bin:${PATH}"
index 4615e2cfed127828c0b336a7a8e34d9a55eb55da..aaf22fa59584c7b5fa12524fc17f714ed7b8c04c 100644 (file)
@@ -5,17 +5,34 @@
 
 (define-module (conf home emacs)
   #:use-module (conf home program)
+  #:use-module (gnu home services)
+  #:use-module (gnu home services shepherd)
   #:use-module (gnu packages emacs)
   #:use-module (gnu services)
   #:use-module (guix gexp)
   #:export (emacs-services))
 
+(define emacs-daemon-shepherd-service
+  (shepherd-service
+   (provision '(emacs))
+   (start #~(make-forkexec-constructor
+            (list "emacs" "--fg-daemon")
+            #:directory (getenv "HOME")))
+   (stop #~(make-kill-destructor))
+   (documentation "")))
+
+(define emacs-daemon-service
+  (simple-service 'emacs-daemon-service
+                 home-shepherd-service-type
+                 (list emacs-daemon-shepherd-service)))
 (define emacs-service
   (service home-program-service-type
           (home-program-configuration
            (packages
             (list emacs))
-           (dotfiles '()))))
+           (dotfiles
+            (list "emacs/.local/bin/emacs_client")))))
 
 (define emacs-services
-  (list emacs-service))
+  (list emacs-daemon-service
+        emacs-service))
diff --git a/emacs/.local/bin/emacs_client b/emacs/.local/bin/emacs_client
new file mode 100755 (executable)
index 0000000..07bd391
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+# Copyright (c) 2022 Jakub Czajka <jakub@ekhem.eu.org>
+# License: GPL-3.0 or later.
+
+emacsclient --socket-name=/run/user/$(id -u)/emacs/server --create-frame &