From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxim Cournoyer Subject: Re: Guix and Emacs Integration for Polyglot Development Date: Fri, 31 Aug 2018 08:49:03 -0400 Message-ID: <874lfabt1c.fsf@gmail.com> References: <871sbowlws.fsf@devnulllabs.io> <87bmalchr9.fsf@gmail.com> <871sbcpqsy.fsf@devnulllabs.io> <87pnydkylw.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:45646) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fvirO-0005Ul-L7 for help-guix@gnu.org; Fri, 31 Aug 2018 08:49:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fvirK-00056G-At for help-guix@gnu.org; Fri, 31 Aug 2018 08:49:09 -0400 Received: from mail-it0-x232.google.com ([2607:f8b0:4001:c0b::232]:53315) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fvirK-000563-5G for help-guix@gnu.org; Fri, 31 Aug 2018 08:49:06 -0400 Received: by mail-it0-x232.google.com with SMTP id p79-v6so6950301itp.3 for ; Fri, 31 Aug 2018 05:49:05 -0700 (PDT) In-Reply-To: <87pnydkylw.fsf@gmail.com> (Maxim Cournoyer's message of "Mon, 20 Aug 2018 08:32:11 -0400") List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-guix-bounces+gcggh-help-guix=m.gmane.org@gnu.org Sender: "Help-Guix" To: Kenny Ballou Cc: help-guix@gnu.org Hello! I'm reposting Janneke's recent answer here so that it can have all its context and participants. Jan Nieuwenhuizen 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 /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