From: Kenny Ballou <kb@devnulllabs.io>
To: zimoun <zimon.toutoune@gmail.com>, help-guix@gnu.org
Subject: Re: set environment variables with guix shell [-m manifest.scm]
Date: Fri, 06 May 2022 16:20:42 -0600 [thread overview]
Message-ID: <87ilqimgif.fsf@devnulllabs.io> (raw)
In-Reply-To: <86o80c5oyt.fsf@gmail.com>
On 2022-05-05 11:05 +02, zimoun wrote:
> Wed, 04 May 2022 at 18:53, Kenny Ballou <kb@devnulllabs.io> wrote:
>
>> However, one necessary feature of `guix shell` I'm not seeing: ability
>> to set arbitrary environment variables when `guix shell` loads.
>
> Yes, it misses an equivalent to ’nix-shell’ «shellHook» [1], as also
> reported by [2] Well, maybe you could achieve something via ’--file’
> instead of ’--manifest’, I do not know.
I was not aware of [2], thanks for pointing me to it.
I have not tried `--file`. My understanding is that this does not quite
do the same thing.
Unrelated to search paths below, I had an idea that it would be possible
to construct a derivation which sets the environment variables and add
the resulting derivation to the "manifest". However, I suspect I'm
misunderstanding the `#:env-vars` key to the `gexp->derivation`[5]
function.
Along this idea though, how difficult would it be to add an optional
parameter to `*->manifest` functions such that it constructs the profile
with additional environment variables? Is that desirable?
>
> Since you use Direnv [3], maybe you can set the environment variables
> there instead of in the manifest file.
While this would work in general, I'm trying to add things that directly
reference computed store paths. I'm not sure how I can easily achieve
this with `direnv`.
For example, I'm trying to set `LD_LIBRARY_PATH` to point to the `lib`
directory of the `z3` package. Furthermore, I need to set `JAVA_HOME`
to the store path of `openjdk11-jdk`.
> 1: <https://nixos.org/manual/nix/stable/command-ref/nix-shell.html>
> 2: <https://yhetil.org/guix/E92751B5-F3ED-47A0-B7D2-40F9D3F5C5B9@univ-grenoble-alpes.fr>
> 3: <https://github.com/direnv/direnv/wiki/GNU-Guix>
I've had some success setting search paths[4], as here:
```
(define z3-with-java
(package
(inherit z3-4.8.10)
(native-inputs
`(("which" ,which)
("python" ,python-wrapper)
("jdk" ,java:openjdk11 "jdk")))
(arguments
`(#:tests? #f
#:validate-runpath? #f
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'set-JDK_HOME
(lambda* (#:key inputs #:allow-other-keys)
(setenv "JDK_HOME" (assoc-ref inputs "jdk"))
#t))
(replace 'configure
(lambda* (#:key inputs outputs #:allow-other-keys)
(invoke "python" "scripts/mk_make.py"
"--java"
(string-append "--prefix=" (assoc-ref outputs "out")))))
(add-after 'configure 'change-directory
(lambda _
(chdir "build")
#t)))))
(native-search-paths
(list (search-path-specification
(variable "LD_LIBRARY_PATH")
(separator #f)
(files (list "lib/")))
(search-path-specification
(variable "Z3_DIR")
(separator #f)
(files (list "")))))))
```
Unrelated to this whole thing, and likely in need of a new thread, how
do I translate the above package definition which overrides the inputs
to use the new gexp style[6]?
-Kenny
[4]: https://guix.gnu.org/en/manual/devel/en/guix.html#Search-Paths
[5]: https://guix.gnu.org/en/manual/devel/en/guix.html#index-gexp_002d_003ederivation
[6]: https://guix.gnu.org/en/blog/2021/the-big-change/
prev parent reply other threads:[~2022-05-06 22:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-05 0:53 set environment variables with guix shell [-m manifest.scm] Kenny Ballou
2022-05-05 2:29 ` Kenny Ballou
2022-05-05 9:05 ` zimoun
2022-05-06 22:20 ` Kenny Ballou [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ilqimgif.fsf@devnulllabs.io \
--to=kb@devnulllabs.io \
--cc=help-guix@gnu.org \
--cc=zimon.toutoune@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).