Dynamically setting HOME environment variable in a launchd script?
You are right: launchd performs tilde-expansion only for ProgramArguments. But you are free to let a shell do the job:

&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;/bin/sh&lt;/string&gt;
    &lt;string&gt;-c&lt;/string&gt;
    &lt;string&gt;export HOME=~; /usr/local/bin/salt-minion&lt;/string&gt;
&lt;/array&gt;


Note that the ~ in this example is not interpreted by launchd (using EnableGlobbing) but by the shell itself.