[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Guix and Emacs Integration for Polyglot Development
From: |
Maxim Cournoyer |
Subject: |
Re: Guix and Emacs Integration for Polyglot Development |
Date: |
Fri, 31 Aug 2018 08:49:03 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
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