From: Zain Jabbar <zaijab2000@gmail.com>
To: guix-devel@gnu.org
Subject: Creating an Emacs Home Configuration Service
Date: Sun, 16 Oct 2022 16:34:00 -1000 [thread overview]
Message-ID: <CAH+UbWSYtcbmfUutxKXJxmVMyQtuxHxucpBCyYfD1nBL3CTPJw@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 4437 bytes --]
Aloha Guix Development Team,
Running =guix home search emacs= returns nothing. I also could not find an
email using =C-u M-x debbugs-gnu= about an Emacs configuration service.
This is my first email to this mailing address. Please give me pointers on
formatting and further improvements.
I have attempted to make an =emacs-home-service-type= so that it is
possible to configure Emacs using Guix home. This code is extremely
preliminary hence I don't even think it is worth sending as a patch. Also I
have never worked on a multi person Git project before and do not know how
to solve the keyring error I get when using guix pull. I will outline what
my code does and what features I would like to add.
#+BEGIN_SRC scheme
(define* (emacs-configuration-service name #:key (init '()) (early-init
'()) (emacs-packages '()))
(service-type (name (symbol-append 'emacs- name '-configuration))
(extensions
(list (service-extension
home-profile-service-type
(lambda (config) emacs-packages))
(service-extension
home-files-service-type
(lambda (config)
(list
`(,(string-append
".config/emacs/services/" (symbol->string name) ".el")
,(scheme-file (string-append (symbol->string name) ".el")
init #:splice? #t))
`(,(string-append
".config/emacs/early-services/" (symbol->string name) ".el")
,(scheme-file (string-append "early-" (symbol->string name) ".el")
early-init #:splice? #t)))))))
(default-value #f)
(description "Configures Emacs init.el")))
(define-public emacs-init-service-type
(service-type (name 'home-emacs)
(extensions
(list (service-extension
home-profile-service-type
(lambda (config) (list emacs-next)))
(service-extension
home-files-service-type
(lambda (config)
(list
`(".config/emacs/early-init.el"
,(scheme-file
"early-init.el"
'((mapc
'load (file-expand-wildcards
"~/.config/emacs/early-services/*.el")))
#:splice? #t))
`(".config/emacs/init.el"
,(scheme-file
"init.el"
'((mapc
'load (file-expand-wildcards
"~/.config/emacs/services/*.el")))
#:splice? #t)))))))
(default-value #f)
(description "Configures Emacs init.el")))
#+END_SRC
I define a general configuration service generator which takes in four
things:
1. The =name= of the service
2. The configuration to be ran in =init.el=
3. The configuration to be ran in =early-init.el=
4. The packages in Guix to be added to the =home-profile=.
After giving the =name=, =packages=, and =config.el= files we get a new
service type that we can add to our home declaration. This service will
then add a file in
=~/.config/emacs/services/emacs-{NAME}-configuration.el=. I then have
another service that places an =init.el= which loads everything in the
service directory.
If we want to install and configure =evil-mode= using this =home-service=
we may define the following somewhere.
#+BEGIN_SRC scheme
(define-public emacs-evil-service-type
(emacs-configuration-service
'evil #:emacs-packages (list emacs-evil)
#:init '((evil-mode 1))))
#+END_SRC
Within our =home-environment= we may add the service using:
#+BEGIN_SRC scheme
(home-environment
;; ...Things in the home-environment...
(services
(list
;; ...Other Services...
(service emacs-evil-service-type))))
#+END_SRC
There are some missing features I want to add.
1. Have the =home-emacs-*-service-type= service-types add to the =init.el=
directly rather than within a folder to be loaded. I couldn't add two files
with the same name to the store. So I have emacs-evil.el in the store to be
placed separately later rather than appending to the existing init.el file.
2. Have Emacs update whenever the =home-environment= is updated. Meaning,
if I did not add =(service emacs-evil-service-type)= in my
=home-environment= then obviously =M-x evil-mode= should not work. But
after adding the service then I want =M-x evil-mode= to work without having
to restart Emacs. I do not understand the Emacs loading system on Guix well
enough to know why it does not work. Skipping all of the =home-service=
stuff, running =guix install emacs-evil-mode= then
=(guix-emacs-autoload-packages)= does not let emacs know that =evil-mode=
is installed. I would need to close Emacs and start Emacs again for Emacs
to know about =evil-mode= being installed.
3. Use configurations somehow. I have completely neglected this feature in
my system. I do not know what would be useful there.
--
Thank you,
Zain Jabbar
[-- Attachment #2: Type: text/html, Size: 5425 bytes --]
next reply other threads:[~2022-10-17 6:42 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAH+UbWQ1JZCZf0BEOzT1zcTeW5sDekOsxbGYgKn8rjdQ5e0kUw@mail.gmail.com>
2022-10-17 2:34 ` Zain Jabbar [this message]
2022-10-17 22:09 ` Creating an Emacs Home Configuration Service jbranso
2022-10-17 23:12 ` Zain Jabbar
2022-10-18 15:41 ` jbranso
[not found] ` <CAH+UbWR8xWoCK9wouhsizEzTAO3CksNpkebu5we_75yQq++yUg@mail.gmail.com>
[not found] ` <a8142b002799224845f8efdddb28e518@dismail.de>
2022-10-19 18:18 ` jbranso
2022-10-19 20:25 ` Zain Jabbar
2022-10-19 20:56 ` jbranso
2022-10-19 21:09 ` Zain Jabbar
2022-10-19 15:36 ` Ludovic Courtès
2022-10-19 20:53 ` Zain Jabbar
2022-10-20 7:22 ` Andrew Tropin
2022-10-20 13:17 ` Ludovic Courtès
2022-10-20 18:35 ` Liliana Marie Prikler
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAH+UbWSYtcbmfUutxKXJxmVMyQtuxHxucpBCyYfD1nBL3CTPJw@mail.gmail.com \
--to=zaijab2000@gmail.com \
--cc=guix-devel@gnu.org \
/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 public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).