[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