diff --git a/.gitignore b/.gitignore
index 0e9e5ec..41ab87b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ build/
Version v*
*.bak
config/user-*
+config/aliases
diff --git a/README.md b/README.md
index 70be296..69a8727 100644
--- a/README.md
+++ b/README.md
@@ -107,7 +107,7 @@ You can write *.cmd|*.bat, *.ps1, and *.sh scripts and just drop them in the %CM
### Aliases
#### Cmder(Cmd.exe) Aliases
-You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
+You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for 'cmd.exe'
@@ -116,7 +116,7 @@ Aliases defined using the `alias.bat` command will automatically be saved in the
#### Bash.exe|Mintty.exe Aliases
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session. To make an alias permanent add it to either your `$CMDER_ROOT/config/user-profile.sh` or your `$HOME/.bashrc`.
-If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
+If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
#### Powershell.exe Aliases
Powershell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in Powershell sessions. Type `get-help [new-alias|set-alias] -full` for help on Powershell aliases.
@@ -127,6 +127,31 @@ To start SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-fo
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
+### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
+
+1. Setup a new task by pressing 'Win +Alt + T'
+1. Click the '+' button to add a task.
+1. Name the new task in the top text box.
+1. Provide task parameters, this is optional.
+1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console:d:%USERPROFILE%``` to the Commands text box.
+
+Recommended Optional Steps:
+
+Copy the 'vendor/cmder_exinit' file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments ```/etc/profile.d/``` folder to use portable settings in the $CMDER_ROOT/config folder.
+
+Note: MinGW could work if the init scripts include profile.d but this has not been tested.
+
+The destination file extension depends on the shell you use in that environment. For example:
+
+* bash - Copy to /etc/profile.d/cmder_exinit.sh
+* zsh - Copy to /etc/profile.d/cmder_exinit.zsh
+
+Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
+
+```
+# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
+```
+
## Todo
1. Check for clink and git before injecting them (Sort of done)
diff --git a/vendor/cmder_exinit b/vendor/cmder_exinit
new file mode 100644
index 0000000..6c29423
--- /dev/null
+++ b/vendor/cmder_exinit
@@ -0,0 +1,86 @@
+# Copy this file to your non integrated *nix-like environment,
+# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
+# folder to integrate the externally installed Unix like environment
+# into Cmder so it has access to settings stored in Cmder/config
+# folder when launched.
+#
+# The destination file extension depends on the shell you use. For example:
+#
+# bash - Copy to /etc/profile.d/cmder_exinit.sh
+# zsh - Copy to /etc/profile.d/cmder_exinit.zsh
+# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh or
+# add whole config scripts to ${CMDER_ROOT}/config/profile.d both will be sourced
+# from mthis file and be appied to the environment at startup.
+#
+# These customizations will follow Cmder if $CMDER_ROOT is copied
+# to another machine.
+#
+# Add system specific users customizations to $HOME/.bashrc, these
+# customizations will not follow Cmder to another machine.
+
+# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
+# # from outside Cmder.
+# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
+
+# Check that we haven't already been sourced.
+[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
+
+# We do this for bash as admin sessions since $CMDER_ROOT is not being set
+if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
+ if [ -d "${ConEmuDir}../../vendor" ] ; then
+ case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
+ else
+ echo "Running in ConEmu without Cmder, skipping Cmder integration."
+ fi
+elif [ "$CMDER_ROOT" != "" ] ; then
+ case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
+fi
+
+if [ ! "$CMDER_ROOT" = "" ] ; then
+ # Remove any trailing '/'
+ CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
+
+ echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
+
+ export CMDER_ROOT
+
+ PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
+
+ export PATH
+
+ # Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
+ # to source them at startup.
+ if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
+ mkdir -p ${CMDER_ROOT}/config/profile.d
+ fi
+
+ if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
+ unset profile_d_scripts
+ pushd ${CMDER_ROOT}/config/profile.d >/dev/null
+ if [ ! "x${ZSH_VERSION}" = "x" ]; then
+ profile_d_scripts=$(ls ${CMDER_ROOT}/config/profile.d/*.zsh) 2>/dev/null
+ elif [ ! "x${BASH_VERSION}" = "x" ]; then
+ profile_d_scripts=$(ls ${CMDER_ROOT}/config/profile.d/*.sh) 2>/dev/null
+ fi
+
+ if [ ! "x${profile_d_scripts}" = "x" ] ; then
+ for x in ${profile_d_scripts} ; do
+ # echo Sourcing "${x}"...
+ . $x
+ done
+ fi
+ popd >/dev/null
+ fi
+
+ if [ -f ${CMDER_ROOT}/config/user-profile.sh ] ; then
+ . ${CMDER_ROOT}/config/user-profile.sh
+ else
+ echo Creating user startup file: "${CMDER_ROOT}/config/user-profile.sh"
+ cat <<-eof >"${CMDER_ROOT}/config/user-profile.sh"
+# use this file to run your own startup commands for msys2 bash'
+
+# To add a new vendor to the path, do something like:
+# export PATH=\${CMDER_ROOT}/vendor/whatever:\${PATH}
+eof
+ fi
+fi