October 19, 2022 4:25 PM, "Zain Jabbar" <zaijab2...@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!