Hello! I'm reposting Janneke's recent answer here so that it can have all its context and participants.
Jan Nieuwenhuizen <[email protected]> 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
