guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Creating an Emacs Home Configuration Service


From: jbranso
Subject: Re: Creating an Emacs Home Configuration Service
Date: Wed, 19 Oct 2022 20:56:02 +0000

October 19, 2022 4:25 PM, "Zain Jabbar" <zaijab2000@gmail.com> wrote:

> Aloha All,
> 
> Thank you for your insightful messages. Sorry my code did not work as
> smoothly as I would have liked. I have a =home-environment= definition
> that hopefully works for you. You can put everything into one
> configuration as you described. I do that in the following source
> block. For some reason I liked the idea of separate definitions of
> each package, so that Guile and Guix Home kind of acts like a
> =use-package= declaration. Though that was needless abstraction on my
> end.

I do not know if it is a needless abstraction.  I am just bouncing ideas
around with you.  :)

> 
> #+BEGIN_SRC scheme
> (use-modules (srfi srfi-1)
> (ice-9 pretty-print)
> (gnu home)
> (gnu packages)
> (gnu services)
> (gnu home services)
> (gnu services configuration)
> (guix gexp)
> (guix transformations))
> 
> (define file-likes? (list-of file-like?))
> 
> (define-configuration/no-serialization emacs-configuration
> (emacs-packages
> (file-likes (list (specification->package "emacs-next"))) "Files")
> (early-init
> (list '()) "Early-Init")
> (init
> (list '()) "Init"))
> 
> (define-public emacs-configuration-service
> (service-type (name (symbol-append 'emacs-configuration))
> (extensions
> (list (service-extension
> home-profile-service-type
> (lambda (config) (emacs-configuration-emacs-packages config)))
> (service-extension
> home-xdg-configuration-files-service-type
> (lambda (config)
> (list
> `("emacs/init.el" ,(scheme-file "init.el"
> (emacs-configuration-init config)
> #:splice? #:t))
> `("emacs/early-init.el" ,(scheme-file "early-init.el"
> (emacs-configuration-early-init config)
> #:splice? #:t)))))))
> (default-value (emacs-configuration))
> (description "Configures Emacs init.el")))
> 
> (define-public minimal-home-environment
> (home-environment
> (services
> (list
> (service emacs-configuration-service
> (emacs-configuration
> (emacs-packages
> (list
> (specification->package "bash")
> (specification->package "emacs-next")
> (specification->package "emacs-debbugs")
> (specification->package "emacs-evil")
> (specification->package "emacs-paredit")
> (specification->package "emacs-anzu")))
> (init '((evil-mode 1)
> ;; Please add more config here
> ;; Begining of emacs init configuration after evil-mode 1
> 
> ;; End emacs init configuration
> ))
> (early-init '((setq warning-suppress-log-types '((comp) (comp)))
> (setq warning-suppress-types '((comp) (comp))))))))))) ; A
> serious stack of pringles here
> 
> minimal-home-environment
> #+END_SRC
> 
> I saved this file to =minimal-working-example.scm= and ran a container using
> =guix home -N --share=/tmp container ./minimal-working-example.scm=.
> This should spawn a shell in which you can run =emacs= (as terminal).
> Furthermore we can also run the info help command and get to the
> debbugs page.
> 
> The =init= and =early-init= configuration options take in
> S-Expressions not files. Under the hood the service uses =scheme-file=
> which takes in an expression. I am open to suggestions for other file
> mechanisms, like if, for example, G-Expressions are more natural here.
> I found that I did not know how to naturally append G-Expressions
> together and that the S-Expressions can "bleed" into the config using
> backquotes. So I chose just sticking in a list of expressions for
> Emacs. Something Andrew Tropin taught me, if you are working in a
> =*.scm= file and you want to evaluate elisp, use =M-x eval-region= or
> =M-x edit-indirect-region= (with the usual stipulation that if you do
> this very often we can bind it to a key).

I would say when you submit your service to guix-devel others will give
you some options too.  I like the idea of S-expressions though.

 
> If my interpretation of 13.1 Declaring the Home Environment is
> correct, we should expect an error associated with XDG_RUNTIME_DIR as
> the necessary variables will be set via the Operating-System
> declaration. The next error I believe is emacs wanting to make a file
> where the home container does not have read or write permissions. My
> =guix home= declaration with the =share= parameter should hopefully
> help with this error. Oddly enough if we do not specify the
> installation of =bash=, Emacs says it cannot uncompress the info
> manuals because there is no =sh=. That is why I included =bash= into
> the emacs packages list. I do think a lot of these "solutions" will be
> unncessecary if users were to use =guix home reconfigure= rather than
> user the container. Though it's nice to debug them there.

Thanks for the explanation!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]