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