From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id UDLLOa9dUGNdWgEAbAwnHQ (envelope-from ) for ; Wed, 19 Oct 2022 22:27:28 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id cAf0Oa9dUGPjjgAAauVa8A (envelope-from ) for ; Wed, 19 Oct 2022 22:27:27 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 607B52E4C9 for ; Wed, 19 Oct 2022 22:27:27 +0200 (CEST) Received: from localhost ([::1]:40008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1olFew-00070c-Gx for larch@yhetil.org; Wed, 19 Oct 2022 16:27:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1olFdM-0006zk-Fz for guix-devel@gnu.org; Wed, 19 Oct 2022 16:25:48 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]:36746) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1olFdJ-0002Sq-ET for guix-devel@gnu.org; Wed, 19 Oct 2022 16:25:47 -0400 Received: by mail-ej1-x632.google.com with SMTP id 13so42579330ejn.3 for ; Wed, 19 Oct 2022 13:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zDgSpeBwThz/GGMcMfrq8stU/zMLyKvJCLI95qCVqyg=; b=NCtToLWsuSmexJMCGDASsTh/cXeoRf7CrPHUPfOr6JMY1MWdzXUA0aZI+XU080NaFF vzlSjfFhKTtTFkP35n36Yg/FDiPPbQWBsQ/yMQwb7x0vqzgPNxrh0er0/yk1pzbt2jp2 RdTqLo9BCmThFNtbyvHihAKIWEXBZ9vyva5ICZ+uVY5YNqJ0B5qUNN4AajwC7hme85Mu NL7/rr1/NI6ocuMEOmu6o0yWFT+UA8c+RdmuLhcYLeXaY5xZLwVA3CQ2rslBQV5hbTbC aGAxQiXmFYXH+PUxG13T7WBVtb8QCWyE1duSJCaltBMolPjsZGQ5jof+9Y7WgfnkCG3W KLeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zDgSpeBwThz/GGMcMfrq8stU/zMLyKvJCLI95qCVqyg=; b=yqHazLS/nnuqzh+NqUl94szK4rVnvdmyKm7a1FAFl+3BDQK+yqb/XnXZPChMmd+0vp xbV5FAQ3Ts9TAnXoD0FZsg+KvgB0w4e5LiNvhKUoWxRy0o+jz50qvGRZaNpf/reYtoqU QDXCFthaGd4UzH4hndBPiJR+5H0OwunsZxTJPczF4vNOKAjUBijGHndLts89xOU88RhS Op+gJxxnNJeoDFkklzXijtmYqxdjqOuKkjzmQGvUTDIkmxTT+hbSvbZylxamA98Wz4tT cop4CC9cw6Lj4SckVymqMGnbaPgQ9Qc3UO5MKQK83irMZbFp8LXiZS9m5gNRyYK9XbSV Qspw== X-Gm-Message-State: ACrzQf0ahzVa8a0v/jKkZH5nCtqMKg4YwQhXu0q9seBJXuK3t1ogCcan nC8L/k8o+FPVwlOR4Fyqj34LKKodu6CpK4Xp56HsuqikuJw= X-Google-Smtp-Source: AMsMyM7gr4Ck8anLpcGAfQFBzvPybt/b5X7nZDleJT96dFd1HINNOg+P44FycTb0c2MfyBgiL3Rc9H9YrFiVWk8Zqkg= X-Received: by 2002:a17:906:cc57:b0:78e:d09:500a with SMTP id mm23-20020a170906cc5700b0078e0d09500amr8340313ejb.396.1666211142967; Wed, 19 Oct 2022 13:25:42 -0700 (PDT) MIME-Version: 1.0 References: <331c0017d7a4842fd2919b330a3d3894@dismail.de> <8b00165ff49030fdd11708cb1fd4a5b9@dismail.de> <3cf810d64c1ca5697bee6eaf39d8dd7b@dismail.de> In-Reply-To: <3cf810d64c1ca5697bee6eaf39d8dd7b@dismail.de> From: Zain Jabbar Date: Wed, 19 Oct 2022 10:25:31 -1000 Message-ID: Subject: Re: Creating an Emacs Home Configuration Service To: jbranso@dismail.de Cc: guix-devel@gnu.org Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=zaijab2000@gmail.com; helo=mail-ej1-x632.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1666211247; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=zDgSpeBwThz/GGMcMfrq8stU/zMLyKvJCLI95qCVqyg=; b=rYlCH9FWXfyiahMI1kZPmeJHOq6HFwbnLhFC4RE6KDCN/2pWE6vlfq0R9OjdQkTnuRMoEm oLAIIiGwktIcfQ+J+J5yVTqG+EJjSW0Inxh/dixQbUOMzFve3uHcS5Hl6Hf0FcdAzQRhQC zptjAIjhzcJDbzv5Gv+5oZfciGHbuYef4mHiSbp0cCPzY5O+M9wDbxQb1Jut3Y6kuGDXsw QvW89Hr5+HcRT0jGmK3Noyht5i4ioq1mjosSWHWHZcY+Zz37W8MUuPQ0dFWWjyp1kfKl4m TRbnjTSWN6tomZBby28Gtch7APyvt5dyJy6FrrNaXvbC9I+2K3tgLkx+SQpySQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1666211247; a=rsa-sha256; cv=none; b=cjQw7S0r4DMYyRJe+yIA/aqGc5l0JpgnM4yy6t1B61FnQi8CJX1qgesvARR3mr9GuOD8s6 Iz54MQopwgNSW+6V1l0vyvHPgADi8AJ5SDzWmGEcwt1IphnDBoPqKkFDkg9QsOsEdsaDxX 4NNU9oX0DWByH3fueV9+3Y2IF53W3lYHvE+4l2QUXAHkydn67zVO7r5wOlfoLwyKhVAYpw b4VRzVfacmlpf774h76ro/76VfMMPpUcef+oIdkJtX6QGNsUFsAPnFxiM+U1yF2rxKbCOL 3g9MukBmANwYR6BGqgEifPJ2tK9DR34nM9PPG+04EU8G7sODr/7G6KVXb9x17Q== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=NCtToLWs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -2.42 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=NCtToLWs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 607B52E4C9 X-Spam-Score: -2.42 X-Migadu-Scanner: scn0.migadu.com X-TUID: iQIln2ep29oT 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. #+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). 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. On Wed, Oct 19, 2022 at 8:19 AM wrote: > > October 18, 2022 3:42 PM, "Zain Jabbar" wrote: > > > Here is a minimal reproducible(-ish needs change in module name) > > example configuration which installs =emacs-debbugs= (and not much > > else). > > Cool I am CC-ing guix devel. > > > #+BEGIN_SRC scheme > > (define-module (zaijab minimal-working-example) > > #:use-module (srfi srfi-1) > > #:use-module (ice-9 pretty-print) > > #:use-module (gnu home) > > #:use-module (gnu packages) > > #:use-module (gnu services) > > #:use-module (gnu home services) > > #:use-module (gnu services) > > #:use-module (gnu services configuration) > > #:use-module (guix gexp) > > #:use-module (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 debuggs-configuration > > (emacs-configuration > > (emacs-packages (list (specification->package "emacs-debbugs"))))) > > > > (define-public total-emacs-configuration > > (fold (lambda (config-1 config-2) (emacs-configuration > > (init (append (emacs-configuration-init config-1) > > (emacs-configuration-init config-2))) > > (early-init (append (emacs-configuration-early-init config-1) > > (emacs-configuration-early-init config-2))) > > (emacs-packages (append (emacs-configuration-emacs-packages config-1) > > (emacs-configuration-emacs-packages config-2))))) > > (emacs-configuration) > > > > (filter emacs-configuration? > > (map variable-ref > > (filter variable-bound? > > (hash-map->list (lambda (x y) y) (struct-ref (current-module) 0))))))) > > > > (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 > > total-emacs-configuration))))) > > > > minimal-home-environment > > #+END_SRC > > I wonder why you do the define total-emacs-configuration...is it possible > to define an emacs-configuration something like this? > > Forgive the possibly wrong syntax, I don't use guix home > > (services > (service emacs-configuration-service > (emacs-configuration > (packages > (list emacs-debbugs > emacs-evil > emacs-paredit > emacs-anzu)) > (init (text-file "init-file.el" > "(evil-mode 1)\n > ;; other configuration stuff"))))) > > > I tested this using =guix home container -N > > minimal-working-example.scm=. Typing =M-x debbugs-gnu= gives a menu of > > bugs. I made sure the debbugs configuration is necessary by commenting > > it out, re-running =guix home container= and seeing that =M-x debb > > [TAB]= pulls up nothing. I think it works. Woo-hoo! > > When I tested the home container via terminal foot I get a weird error: > > warning: XDG_RUNTIME_DIR doesn't exists, on-first-login script > won't execute anything. You can check if xdg runtime directory exists, > XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the > script by running '$HOME/.guix-home/on-first-login'-bash-5.1$ emacs > emacs: Terminal type foot is not defined. > If that is not the actual type of terminal you have, > use the Bourne shell command 'TERM=...; export TERM' (C-shell: > 'setenv TERM ...') to specify the correct type. It may be necessary > to do 'unset TERMINFO' (C-shell: 'unsetenv TERMINFO') as well. > > That's probably just foot being weird. > > In lxterminal, emacs started fine. However, doing a M-x info RET > > m Debbugs RET > > I get this error in emacs: > > "Creating file with prefx: No such file or directory /tmp/jka-com" > > Anyway, definitely go ahead and send it to guix-patches! > > > Thank you for telling me about the =,build= meta command. It looks > > very useful! I will need to figure out how to use it from =M-x > > geiser-guile=. I have built this code by doing the following: > > - open VTerm > > - guix repl > > - ,use (guix) > > - ,use (MODULE-NAME) ;; in my case this was (zaijab minimal-working-example) > > - ,build minimal-home-environment > > Once you get geiser set up and clone the git repo, and compile everything... > inside the guix-src code...whatever file you are currently working on > C-c C-a opens up that file in the repl. It's super awesome to be able to > throw in some code evaluate it on the fly. > > https://video.hardlimit.com/c/the_gnu_guy/videos > > > I will be learning how to use the Git patching system soon. I will add > > more documentation when I submit the patch. I'll be sure to CC you as > > well. Thank you for your assistance. > > > > On Tue, Oct 18, 2022 at 8:42 AM wrote: > > > >> October 18, 2022 1:55 PM, "Zain Jabbar" wrote: > >> > >> Aloha Guix Development Team, > >> > >> Thank you for your email. I attribute my successes to the fantastic > >> documentation and my failures (as you will see in this email) to my > >> own inability to read the documentation. > >> > >> I meant to mention, have you tried using ",build" in a geiser repl? > >> It lets you build derivations/gexps and shows you the output in > >> the store. I have found that super helpful when building my only > >> guix service (not merged yet). > >> > >> From what I can tell, yes. Emacs does find the packages you install > >> using this mechanism and loading them behaves as though you installed > >> from a manifest. Let me know if you have a package you wish to test. I > >> can email the results. > >> > >> emacs-debbugs. If it works, then that is awesome! Well done! > >> > >> But I would need more guidance to answer this question fully. There > >> are some points of confusion I have relating to profiles and package > >> availability. I will try to give my best answer using the > >> documentation, source code, then a demo. > >> > >> One thing I can say for sure is that the packages are installed using > >> the =home-profile-service-type=. According to the documentation at > >> 13.3.1 Essential Home Services the =home-profile-service-type= can be > >> "extended with a list of packages if you want to install additional > >> packages into your profile". > >> > >> According to the source code in guix/gnu/home/services.scm > >> #+BEGIN_SRC scheme > >> ;; [In the big comment block line 76] > >> ;;; home-profile-service-type is almost the same as > >> profile-service-type, at least > >> ;;; for now. > >> .... ;; [Within the definition for home-profile-service-type (line 161)] > >> (description > >> "This is the @dfn{home profile} and can be found in > >> @file{~/.guix-home/profile}. It contains packages and > >> configuration files that the user has declared in their > >> @code{home-environment} record.")) > >> #+END_SRC > >> > >> It appears that using this configuration it installs it into the > >> =~/.guix-home/profile=. Here is where I get a bit confused, when > >> running =guix package --list-profiles= I get > >> =/home/zjabbar/.config/guix/current= and > >> =/home/zjabbar/.guix-profile=, neither of which are my home profile. > >> > >> Here is a demo. > >> > >> I do not have the =emacs-suneater-theme= package installed using my manifest. > >> > >> =guix package -I suneater= returns nothing when run in the terminal. > >> > >> After saving this configuration in the module: > >> #+BEGIN_SRC scheme > >> (define theme-configuration > >> (emacs-configuration > >> (emacs-packages (list (specification->package "emacs-suneater-theme"))) > >> (init '((load-theme 'suneater t))))) > >> #+END_SRC > >> > >> I find that Guix downloads and builds the package. After restarting > >> Emacs, it comes up with the new theme and =M-x describe-theme= finds > >> it and everything. That being said, =guix package -I suneater= *still* > >> returns nothing when run in the terminal. I suppose it's because the > >> theme was installed without using the =guix install= command > >> specifically. > >> > >> =guix package -A suneater= does show me that suneater is available. > >> However after deleting or commenting out the configuration in that > >> source block, Emacs does not load the theme and Emacs cannot find the > >> theme using =M-x describe-theme=. But =guix package -A suneater= still > >> shows me that suneater is available. So it was removed according to > >> Emacs but not to guix. I am likely not looking at the right =guix > >> package= options. > >> > >> It sounds like you have created the home-emacs service is a way that works. > >> I think your next move would be submit it guix-patches@gnu.org. > >> Feel free to CC me in the email. > >> > >> https://git-send-email.io > >> > >> Thanks, > >> > >> Joshua > > > > -- > > Thank you, > > Zain Jabbar > > > > On Tue, Oct 18, 2022 at 8:42 AM wrote: > > > >> October 18, 2022 1:55 PM, "Zain Jabbar" wrote: > >> > >> Aloha Guix Development Team, > >> > >> Thank you for your email. I attribute my successes to the fantastic > >> documentation and my failures (as you will see in this email) to my > >> own inability to read the documentation. > >> > >> I meant to mention, have you tried using ",build" in a geiser repl? > >> It lets you build derivations/gexps and shows you the output in > >> the store. I have found that super helpful when building my only > >> guix service (not merged yet). > >> > >> From what I can tell, yes. Emacs does find the packages you install > >> using this mechanism and loading them behaves as though you installed > >> from a manifest. Let me know if you have a package you wish to test. I > >> can email the results. > >> > >> emacs-debbugs. If it works, then that is awesome! Well done! > >> > >> But I would need more guidance to answer this question fully. There > >> are some points of confusion I have relating to profiles and package > >> availability. I will try to give my best answer using the > >> documentation, source code, then a demo. > >> > >> One thing I can say for sure is that the packages are installed using > >> the =home-profile-service-type=. According to the documentation at > >> 13.3.1 Essential Home Services the =home-profile-service-type= can be > >> "extended with a list of packages if you want to install additional > >> packages into your profile". > >> > >> According to the source code in guix/gnu/home/services.scm > >> #+BEGIN_SRC scheme > >> ;; [In the big comment block line 76] > >> ;;; home-profile-service-type is almost the same as > >> profile-service-type, at least > >> ;;; for now. > >> .... ;; [Within the definition for home-profile-service-type (line 161)] > >> (description > >> "This is the @dfn{home profile} and can be found in > >> @file{~/.guix-home/profile}. It contains packages and > >> configuration files that the user has declared in their > >> @code{home-environment} record.")) > >> #+END_SRC > >> > >> It appears that using this configuration it installs it into the > >> =~/.guix-home/profile=. Here is where I get a bit confused, when > >> running =guix package --list-profiles= I get > >> =/home/zjabbar/.config/guix/current= and > >> =/home/zjabbar/.guix-profile=, neither of which are my home profile. > >> > >> Here is a demo. > >> > >> I do not have the =emacs-suneater-theme= package installed using my manifest. > >> > >> =guix package -I suneater= returns nothing when run in the terminal. > >> > >> After saving this configuration in the module: > >> #+BEGIN_SRC scheme > >> (define theme-configuration > >> (emacs-configuration > >> (emacs-packages (list (specification->package "emacs-suneater-theme"))) > >> (init '((load-theme 'suneater t))))) > >> #+END_SRC > >> > >> I find that Guix downloads and builds the package. After restarting > >> Emacs, it comes up with the new theme and =M-x describe-theme= finds > >> it and everything. That being said, =guix package -I suneater= *still* > >> returns nothing when run in the terminal. I suppose it's because the > >> theme was installed without using the =guix install= command > >> specifically. > >> > >> =guix package -A suneater= does show me that suneater is available. > >> However after deleting or commenting out the configuration in that > >> source block, Emacs does not load the theme and Emacs cannot find the > >> theme using =M-x describe-theme=. But =guix package -A suneater= still > >> shows me that suneater is available. So it was removed according to > >> Emacs but not to guix. I am likely not looking at the right =guix > >> package= options. > >> > >> It sounds like you have created the home-emacs service is a way that works. > >> I think your next move would be submit it guix-patches@gnu.org. > >> Feel free to CC me in the email. > >> > >> https://git-send-email.io > >> > >> Thanks, > >> > >> Joshua > > > > -- > > Thank you, > > Zain Jabbar -- Thank you, Zain Jabbar