Package: guix-patches;
Reported by: "(" <paren <at> disroot.org>
Date: Fri, 21 Oct 2022 19:24:02 UTC
Severity: normal
Tags: moreinfo, patch
Merged with 58652
Done: "(" <paren <at> disroot.org>
Bug is archived. No further changes may be made.
Message #11 received at 58693 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: "(" <paren <at> disroot.org>, 58693 <at> debbugs.gnu.org Cc: control <at> debbugs.gnu.org Subject: Re: [PATCH 1/1] gnu: home: Add home-emacs-service-type. Date: Sat, 22 Oct 2022 11:41:43 +0200
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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.