help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: set environment variables with guix shell [-m manifest.scm]


From: Kenny Ballou
Subject: Re: set environment variables with guix shell [-m manifest.scm]
Date: Fri, 06 May 2022 16:20:42 -0600
User-agent: mu4e 1.6.10; emacs 28.1.50

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/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]