jetify-com / devbox

Instant, easy, and predictable development environments
https://www.jetify.com/devbox/
Apache License 2.0
8.82k stars 207 forks source link

How is PATH populated in devbox shell? #2409

Open andbleo opened 1 week ago

andbleo commented 1 week ago

What happened?

I am trying to understand how the PATH env var is set when invoking devbox shell. Specifically, if I update PATH in my .zshrc (like when doing source "$HOME/.cargo/env", which updates the PATH), it isn't reflected in the PATH in my devbox shell. If I instead set PATH in my .profile, it is included in the PATH in my devbox shell. I was initially confused by this because my .zshrc is sourced by devbox shell (I see other env vars exported and a simple echo Testing 1 2 3 in my .zshrc is printed) so I incorrectly assumed it was updating my PATH based on the value sourced from .zshrc.

I'm fine with moving my updates to PATH from .zshrc to .profile to make this work, but it would be great to see the following:

  1. Document somewhere how PATH is set (if it isn't already)
  2. Document if there are any other env vars that get special treatment like PATH (if any)

Steps to reproduce

  1. update the PATH env var in .zshrc
  2. devbox shell
  3. echo $PATH and see that my updates to PATH from .zshrc aren't there

Command

shell

devbox.json

No response

Devbox version

0.13.6

Nix version

2.24.6

What system does this bug occur on?

Linux (x86-64)

Debug logs

No response

DerArkeN commented 6 days ago

hey there, i can't reproduce this. for me everything is working fine using zsh. eg i have this in my .zshrc:

path+=('/usr/local/go/bin')
export PATH

and then in a devbox shell running echo $PATH i see the path at the very.

andbleo commented 3 days ago

I think I have narrowed down where the issue occurs. I have the following line in my .zshrc: eval "$(devbox global shellenv --init-hook)"

If I append to PATH before that command, my changes to PATH show up when I enter a devbox shell, but they don't show up if I append to PATH after that command.

I'm not sure why that command is interfering with the PATH for non-global devbox shells.