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.