From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxim Cournoyer Subject: Re: Guix and Emacs Integration for Polyglot Development Date: Thu, 25 Oct 2018 21:22:22 -0400 Message-ID: <87h8h9v6wh.fsf@gmail.com> References: <87wos9rp5y.fsf@gnu.org> <87wos5cma6.fsf@gnu.org> <87tvn9s14w.fsf@gnu.org> <87k1o5b05d.fsf@gnu.org> <875zz9gm8w.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53192) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gFqpc-0002ME-Se for help-guix@gnu.org; Thu, 25 Oct 2018 21:22:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gFqpY-0003Fa-Ta for help-guix@gnu.org; Thu, 25 Oct 2018 21:22:32 -0400 In-Reply-To: <875zz9gm8w.fsf@gnu.org> (Jan Nieuwenhuizen's message of "Thu, 13 Sep 2018 22:45:19 +0200") 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: Jan Nieuwenhuizen Cc: help-guix@gnu.org Hello! Jan Nieuwenhuizen writes: > Ludovic Court=C3=A8s writes: > >> In all modesty ;-) I think the API is rather good: >> >> scheme@(guile-user)> ,use(guix profiles) >> scheme@(guile-user)> (profile-search-paths "/home/ludo/.guix-profile") >> $11 =3D ((#< variable: "PATH" files: ("bin" >> "sbin") separator: ":" file-type: directory file-pattern: #f> >> . "/home/ludo/.guix-profile/bin:/home/ludo/.guix-profile/sbin") >> (#< variable: "PYTHONPATH" files: >> ("lib/python3.6/site-packages") separator: ":" file-type: directory >> file-pattern: #f> >> . "/home/ludo/.guix-profile/lib/python3.6/site-packages") =E2=80=A6 > > Whoa, that helps! Is it just me who is so dense -- I really think this > REPL'y power of Guix is much under-appreciated and would deserve > more attention. > > So, what about (thanks to Ricardo via #guile irc and wasamasa via #emacs) > > (defun guix-switch-profile (&optional profile) > "Switch Emacs' environment to PROFILE. PROFILE can be a named > profile (like ~/.guix-profile, ~/.config/guix/work) or an > environment (like: echo $GUIX_ENVIRONMENT)." > > (interactive "fprofile: ") > (lexical-let* ((guix-program > `(begin > (use-modules (ice-9 match) > (guix profiles) > (guix search-paths)) > (let ((specs (profile-search-paths ,(expand-file-name= profile)))) > (map > (match-lambda ((spec . dir) > (list (search-path-specification-va= riable spec) > (or (search-path-specificatio= n-separator spec) "") > dir))) > specs)))) > (guix-output (guix-eval (format "%S" guix-program))) > (profile-sexp (car (read-from-string (car guix-output)))= )) > (mapcar* > (lambda (variable separator path) > (lexical-let ((value (cond ((string-empty-p separator) path) > ((getenv variable) (concat path separat= or (getenv variable))) > (t path)))) > (setenv variable value))) > (mapcar #'car profile-sexp) > (mapcar #'cadr profile-sexp) > (mapcar #'caddr profile-sexp)))) > > and where to put this? > > janneke Thanks for sharing this and better -- contributing it to Emacs-Guix! I've already tried it and it seems to work well :) For those who'd like to try it, it's part of Emacs-Guix but not released yet. The command is M-x guix-set-emacs-environment, and it prompts for a profile. You can upgrade your Emacs-Guix a recent commit by using the following package definition (I just added it to my emacs.scm file and ./pre-inst-env guix package -u emacs-guix): --8<---------------cut here---------------start------------->8--- (define-public my-emacs-guix (package (inherit emacs-guix) (name "emacs-guix") (version "0.5.1") (source (origin (method git-fetch) (uri (git-reference (url "https://notabug.org/alezost/emacs-guix.git") (commit "012dbf6959108f3e6d953dc7e3b1941fb11db33d"))) (file-name (string-append name "-" version "-checkout")) (sha256 (base32 "1c44dklskj96krfdm6l4i2h2z80h0xri6bzwzcm9mcd93y1icrm4")))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("texinfo" ,texinfo) ,@(package-native-inputs emacs-guix))))) --8<---------------cut here---------------end--------------->8--- Thanks again! Maxim