1
0
Fork 0
dotfiles/.config/zsh/plugins/virtualenvwrapper.plugin.zsh

44 lines
1.3 KiB
Bash
Raw Normal View History

2024-02-22 13:45:56 +01:00
source "$(which virtualenvwrapper_lazy.sh)"
2024-02-22 12:16:33 +01:00
type workon >/dev/null 2>&1
2024-02-22 13:45:56 +01:00
[ -z "$WORKON_HOME" ] && {
echo "$WORKON_HOME unset!"
return 1
}
2024-02-22 12:16:33 +01:00
workon_cwd() {
local PROJECT_ROOT="${PWD}"
2024-02-22 12:16:33 +01:00
while [ "$PROJECT_ROOT" != "/" ] && [ ! -e "$PROJECT_ROOT/.venv" ] && [ ! -d "$PROJECT_ROOT/.git" ]; do
local PROJECT_ROOT="$(dirname "$PROJECT_ROOT")"
2024-02-22 12:16:33 +01:00
done
2024-02-22 13:45:56 +01:00
if [ -r "$PROJECT_ROOT/.venv" ]; then
local ENV_NAME="$(cat $PROJECT_ROOT/.venv)"
2024-02-22 14:45:53 +01:00
# else
# ENV_NAME="$(basename "$PROJECT_ROOT")"
2024-02-22 13:45:56 +01:00
fi
2024-02-22 12:16:33 +01:00
[ -n "$CD_VIRTUAL_ENV" ] && [ "$ENV_NAME" != "$CD_VIRTUAL_ENV" ] && {
[ -n "$VIRTUAL_ENV" ] && deactivate
unset CD_VIRTUAL_ENV
}
2024-02-22 13:45:56 +01:00
[ -n "$ENV_NAME" ] && [ ! "$(realpath "$VIRTUAL_ENV" 2>/dev/null)" = "$(realpath "$WORKON_HOME/$ENV_NAME")" ] && {
2024-02-22 12:16:33 +01:00
if [ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]; then
workon -n "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
2024-02-22 12:16:33 +01:00
elif [ -e "$ENV_NAME/bin/activate" ]; then
2024-02-22 13:45:56 +01:00
source "$ENV_NAME/bin/activate" && export CD_VIRTUAL_ENV="$ENV_NAME"
2024-02-22 12:16:33 +01:00
else
local ENV_NAME=""
2024-02-22 12:16:33 +01:00
fi
}
2024-02-22 13:45:56 +01:00
[ -z "$ENV_NAME" ] && [ -n "$CD_VIRTUAL_ENV" ] && [ -n "$VIRTUAL_ENV" ] && {
deactivate && unset CD_VIRTUAL_ENV
}
2024-02-22 12:16:33 +01:00
}
autoload -U add-zsh-hook
add-zsh-hook chpwd workon_cwd
[ "$PWD" != ~ ] && workon_cwd