macOS Big Sur - set env vars for GUI apps?
The following worked for me to get an environment variable to be accessible from a GUI app (SwiftBar).
I created a plist file (eg; com.example.set-env-vars.plist
) in ~/Library/LaunchAgents/
with the following contents:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>setenv.MY_VARS</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl setenv MY_VAR my_value</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Then I rebooted for it to take effect. I suspect logging out and logging back in may be adequate, since stuff in ~/Library/LaunchAgents/
should be applied at login.
If anyone can improve this answer, I'd love to know why this works but running launchctl setenv MY_VAR my_value
from a terminal does not.
Swap out MY_VAR
and my_value
as needed. Note, I'm not sure whether this would allow you to do something like launchctl setenv PATH "/usr/local/bin:$PATH"
, as I'm not sure whether $PATH
would exist or expand properly.