Hello there 
I am using the vintage net wifi package on my nerves project.
I don’t want to source my WIFI credentials to git but unfortunately the WIFI is configured at compile time and I need to pass the credentials in my target.exs file.
I was wondering if someone figured out a way to read the wifi credentials from a configuration file at compile time that is not sourced to git.
I’ve tried to read from environment variables but I have problems trying to load those environment variables into my system because of the following:
I’ve thought on having an environment variable WIFI_SSID_LIST=ssid1,ssid2,ssid3
but if the SSID contains &, the export $(cat .env | xargs) command will fail:
export: not valid in this context: &
So then I started thinking on having a separate file and reading it using File.read on the target.exs but I am not sure about it.
Is there someone that has tried something else?
target.exs is a Elixir script, so you can populate that data from anywhere. I sometimes do things like this
ssid = System.get_env("WIFI_SSID")
psk = System.get_env("WIFI_PSK")
config :vintage_net,
regulatory_domain: "US",
config: [
{"wlan0", %{type: VintageNetWiF, networks: [%{ssid: ssid, psk: psk}]}},
]
You can extend this to have a list if you want as well.
unfortunately the WIFI is configured at compile time and I need to pass the credentials in my target.exs file.
you don’t have to set them at compile-time. you can do this:
config :vintage_net,
regulatory_domain: "US",
config: [
{"wlan0", %{type: VintageNetWiFi}},
]
And then configure it at runtime with
iex()> VintageNetWiFi.quick_configure(ssid, psk)
I don’t know what OS you are running on, but have you tried to source the .env file instead of cattting it?
source .env
I am running Mac OS, source .env only works if the .env file declares the variables with the export keyword at the beginning
so I had it like
KEY=VALUE
now I’ve changed it to:
export KEY=VALUE
and now it works
I didn’t want to use the export keyword since most libraries like dotenv don’t require it but I guess its fine
Thanks so much 
Configuring it at runtime looks like a good solution for my use case