bash has special syntax for setting environment variables, while fish uses a builtin. I would suggest writing your .env file like so:
setenv VAR1 val1
setenv VAR2 val2
and then defining `setenv` appropriately in the respective shells. In bash (e.g. .bashrc):
function setenv() { export "$1=$2"; }
. ~/.env
In fish (e.g. config.fish):
function setenv; set -gx $argv; end
source ~/.env
Note that PATH will require some special handling, since it's an array in fish but a colon delimited string in bash. If you prefer to write `setenv PATH "$HOME/bin:$PATH"` in .env, you could write fish's setenv like so:
function setenv
if [ $argv[1] = PATH ]
# Replace colons with newlines
set -gx PATH (echo $argv[2] | tr : \n)
else
set -gx $argv
end
end