help-guix
[Top][All Lists]
Advanced

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

Re: Guix and Emacs Integration for Polyglot Development


From: Kenny Ballou
Subject: Re: Guix and Emacs Integration for Polyglot Development
Date: Mon, 10 Sep 2018 09:25:24 -0600
User-agent: mu4e 0.9.18; emacs 25.3.1

On 2018-08-31 12:49 GMT, Maxim Cournoyer wrote:
> Hello!
>
> I'm reposting Janneke's recent answer here so that it can have all its
> context and participants.
>
> Jan Nieuwenhuizen <address@hidden> writes:
>
>> Hi!
>>
>> Just subscribed to help-guix because of a request on IRC, so hoping that
>> OP is subscribed here, or someone can notify them.
>>
>> I have an ugly hack to switch emacs to a profile or environment.  It
>> parses the <profile>/etc/profile script...using MANIFEST or
>> `--search-paths' would be much nicer...
>>
>> Anyway, I'm using some named profiles, eg
>>
>>     ~/.config/guix/mes
>>
>> and when starting work on mes i do
>>
>>     M-x guix-switch-profile RET ~/.config/guix/mes RET
>>
>> similar for other projects I work on.
>>
>> A real solution would be nice...
>>
>> HTH, janneke
>>
>> --8<---------------cut here---------------start------------->8---
>>
>> (defun guix-switch-profile (&optional profile)
>>   "reset Emacs' environment by snarfing PROFILE/etc/profile"
>>
>>   (defun matches-in-string (regexp string)
>>     "return a list of matches of REGEXP in STRING."
>>     (let ((matches))
>>       (save-match-data
>>         (string-match "^" "")
>>         (while (string-match regexp string (match-end 0))
>>           (push (or (match-string 1 string) (match-string 0 string)) 
>> matches)))
>>       matches))
>>
>>   (interactive "fprofile: ")
>>   (let* ((output (shell-command-to-string (concat "GUIX_PROFILE= /bin/sh -x 
>> " profile "/etc/profile")))
>>          (exports (matches-in-string "^[+] export \\(.*\\)" output)))
>>     (mapcar (lambda (line) (apply #'setenv (split-string line "="))) exports 
>> )))
>> --8<---------------cut here---------------end--------------->8---
>
> Thank you, Janneke!
>
> An alternative if you'd like to also define some variables (say,
> PYTHONPATH to add a couple of sources libraries while working on a
> Python project) would be to use `direnv'[0] and `emacs-direnv'.
>
> Christopher Baines detailed the solution in this thread:
> https://lists.gnu.org/archive/html/guix-devel/2017-05/msg00475.html.
>
> I hope this helps!
>
> Maxim


Thank you for posting this, I still haven't had a chance to play around
with this yet, but I think this is the kind of solution that is exactly
what I'm looking for.  However, Named profiles was sorta where I was
leaning.

I may not use the `emacs-direnv` part.  But I if I understand correctly,
switching profiles will change the `${HOME}/.guix-profile` symlink, I
can just statically add the current profile to any path variables and go
from there(?).

Again, thank you and apologies for the necrobump because of late
replies...

-Kenny



reply via email to

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