feat(zsh): add dynamic path support

This commit is contained in:
Ade Attwood 2020-12-28 21:11:58 +00:00
parent c80eec632c
commit b7a3aabf49

View file

@ -0,0 +1,51 @@
#!/bin/zsh
#
# Update global path variable when moving around the file system to include
# local project bin directories. When opening the shell in a project with a
# compatible bin directory i.e. `vendor/bin` for PHP composer packages, the
# directory will be added to the `PATH` variable so that the locally installed
# packages can be executed
#
# Compatible directories
# - vendor/bin
# - node_modules/.bin
#
# Author: Ade Attwood <code@adeattwood.co.uk>
# Updated: 2020-12-28
#
#
# Update paths function to be called when `cd` is called
#
update_path() {
if [[ -d ./vendor/bin ]]; then
export PATH=$PATH:./vendor/bin
else
path=( ${path[@]:#*./vendor/bin*} )
fi
if [[ -d ./node_modules/.bin ]]; then
export PATH=$PATH:./node_modules/.bin
else
path=( ${path[@]:#*./node_modules/.bin*} )
fi
}
#
# Call the update path function whenever the current working directory is
# changed
#
autoload -U add-zsh-hook
add-zsh-hook chpwd update_path
#
# Call update path when zsh is loaded. If the shell is initialised in a
# directory when local bin directory the directory will not be added to the path
# because the `chpwd` hook has not been called
#
update_path
#
# Remove duplicate entries from the path variable
#
typeset -U path