[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#58693] [PATCH 1/1] gnu: home: Add home-emacs-service-type.
From: |
Liliana Marie Prikler |
Subject: |
[bug#58693] [PATCH 1/1] gnu: home: Add home-emacs-service-type. |
Date: |
Sat, 22 Oct 2022 11:41:43 +0200 |
User-agent: |
Evolution 3.46.0 |
merge 58693 58652
thanks
Am Freitag, dem 21.10.2022 um 20:24 +0100 schrieb (:
> +(define-configuration/no-serialization home-emacs-configuration
> + (emacs
> + (file-like emacs)
> + "The package providing @file{/bin/emacs}.")
> + (packages
> + (list-of-file-likes '())
> + "Packages to add to the Emacs plugin load path.")
> + (native-compile?
> + (boolean #f)
> + "Whether to compile the @code{packages} using the Emacs package
> +provided as the value of the @code{emacs} field, which will enable
> +native compilation if the @code{emacs} package supports it.")
> + (init-file
> + (file-like (plain-file "init.el" ""))
> + "File-like to use as the initialisation Lisp file.")
> + (early-init-file
> + (file-like (plain-file "early-init.el" ""))
> + "File-like to use as the pre-initialisation Lisp file.")
> + (debug?
> + (boolean #f)
> + "Whether to enable debugging."))
> +
> +(define (home-emacs-profile-packages config)
> + (list (home-emacs-configuration-emacs config)))
> +
> +(define (home-emacs-transformed-packages config)
> + (map (if (home-emacs-configuration-native-compile? config)
> + (package-input-rewriting
> + `((,emacs-minimal
> + . ,(home-emacs-configuration-emacs config))))
> + identity)
> + (let ((packages (home-emacs-configuration-packages config)))
> + (concatenate
> + (cons packages
> + (map (compose (cute map second <>)
> + package-transitive-propagated-inputs)
> + packages))))))
> +
> +(define (home-emacs-shepherd-services config)
> + (list (shepherd-service
> + (provision '(emacs))
> + (documentation "Start the Emacs daemon.")
> + (modules '((ice-9 ftw)
> + (srfi srfi-1)
> + (srfi srfi-26)))
> + (start
> + #~(make-forkexec-constructor
> + (list #$(file-append
> + (home-emacs-configuration-emacs config)
> + "/bin/emacs")
> + "--fg-daemon" "--eval"
You should probably use a systemd-style constructor/destructor pair.
> + (format #f "~s"
> + `(progn
> + (setq custom-file
> + (concat (or (getenv
> "XDG_CONFIG_HOME")
> + (concat (getenv
> "HOME")
> + "/.config"))
> + "/emacs/custom.el"))
> + (load custom-file)))
This one should be customizable by the user using init.el or early-
init.el -- alternatively, you could set up a custom-file parameter and
use that *if given*.
> + #$@(if (home-emacs-configuration-debug? config)
> + (list "--debug-init")
> + '()))
> + #:log-file
> + (format #f "~a/emacs.log"
> + (or (getenv "XDG_LOG_HOME")
> + (format #f "~a/.local/var/log"
> + (getenv "HOME"))))
XDG_LOG_HOME and ~/.local/var are guix home idiosyncrasies that ought
to be removed. The XDG-supported variable/value pair is XDG_STATE_HOME
and ~/.local/state.
> + #:environment-variables
> + (let ((env-var
> + (lambda (name path)
> + (define (regular-directory? directory)
> + (not (member directory (list "." ".."))))
> +
> + (define (package-paths package)
> + (let ((directory (string-append package "/"
> path)))
> + (if (file-exists? directory)
> + (cons directory
> + (map (cute string-append
> directory "/" <>)
> + (scandir directory regular-
> directory?)))
> + '())))
> +
> + (let ((old-value (getenv name)))
> + (string-append
> + name "="
> + (string-join
> + (append-map
> + package-paths
> + (list #$@(home-emacs-transformed-packages
> config)))
> + ":" (if old-value
> + 'suffix
> + 'infix))
> + (or old-value ""))))))
> + (append (default-environment-variables)
> + (list (env-var "EMACSLOADPATH"
> + "share/emacs/site-lisp")
> + (env-var "EMACSNATIVELOADPATH"
> + "lib/emacs/native-site-
> lisp"))))))
You should collect the emacs package plus lisp packages into a profile.
This will make it easier to set emacs-related variables.
Alternatively, you could use (guix search-paths) directly.
> + (stop
> + #~(make-forkexec-constructor
> + (list #$(file-append
> + (home-emacs-configuration-emacs config)
> + "/bin/emacsclient")
> + "--eval" "(kill-emacs)"))))))
> +
> +(define (home-emacs-xdg-configuration-files config)
> + `(("emacs/early-init.el"
> + ,(home-emacs-configuration-early-init-file config))
> + ("emacs/init.el"
> + ,(home-emacs-configuration-init-file config))))
You're missing an escape hatch for additional elisp files like
custom.el
Cheers