diff --git a/misc/launchd/README.md b/misc/launchd/README.md
index ab0ed2fc5..cd4d6207e 100644
--- a/misc/launchd/README.md
+++ b/misc/launchd/README.md
@@ -1,9 +1,5 @@
# ipfs launchd agent
-A bare-bones launchd agent file for ipfs. To have launchd automatically run the ipfs daemon for you, do the following:
-
- mkdir -p ~/Library/LaunchAgents
- cp misc/launchctl/io.ipfs.ipfs-daemon.plist ~/Library/LaunchAgents/
- launchctl load ~/Library/LaunchAgents/io.ipfs.ipfs-daemon.plist
+A bare-bones launchd agent file for ipfs. To have launchd automatically run the ipfs daemon for you, run `./misc/launchd/install.sh`
Note that the `ipfs` binary must be on the *system* PATH for this to work. Adding a symlink in /usr/bin works well enough for me.
diff --git a/misc/launchd/install.sh b/misc/launchd/install.sh
new file mode 100755
index 000000000..3d18e8526
--- /dev/null
+++ b/misc/launchd/install.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+src_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+plist=io.ipfs.ipfs-daemon.plist
+dest_dir="$HOME/Library/LaunchAgents"
+IPFS_PATH="${IPFS_PATH:-$HOME/.ipfs}"
+escaped_ipfs_path=$(echo $IPFS_PATH|sed 's/\//\\\//g')
+
+mkdir -p "$dest_dir"
+
+sed 's/{{IPFS_PATH}}/'"$escaped_ipfs_path"'/g' \
+ "$src_dir/$plist" \
+ > "$dest_dir/$plist"
+
+launchctl list | grep ipfs-daemon >/dev/null
+if [ $? ]; then
+ echo Unloading existing ipfs-daemon
+ launchctl unload "$dest_dir/$plist"
+fi
+
+echo Loading ipfs-daemon
+launchctl load "$dest_dir/$plist"
+launchctl list | grep ipfs-daemon
diff --git a/misc/launchd/io.ipfs.ipfs-daemon.plist b/misc/launchd/io.ipfs.ipfs-daemon.plist
index 2012623a6..e7bf9a6e3 100644
--- a/misc/launchd/io.ipfs.ipfs-daemon.plist
+++ b/misc/launchd/io.ipfs.ipfs-daemon.plist
@@ -11,12 +11,17 @@
ipfs
daemon
+ EnvironmentVariables
+
+ IPFS_PATH
+ {{IPFS_PATH}}
+
RunAtLoad
StandardErrorPath
- /usr/local/var/log/ipfs.err
+ {{IPFS_PATH}}/logs/stderr.log
StandardOutPath
- /usr/local/var/log/ipfs.log
+ {{IPFS_PATH}}/logs/stdout.log