code-activator/zsh/helpers.zsh
2021-09-16 20:04:17 -06:00

163 lines
3.7 KiB
Bash

#####################################################################
[ ! $_CA__SETTINGS_LOADED ] && source "${0:a:h}/settings.zsh"
#####################################################################
_CA__RESTORE_ENVIRONMENT() {
deactivate >/dev/null 2>&1
deactivate_node >/dev/null 2>&1
[ $_CA__RESTORE_PATH ] && export PATH="$_CA__RESTORE_PATH"
[ $_CA__RESTORE_ENV ] && for var in $_CA__RESTORE_ENV; do unset $var; done
unset _CA__RESTORE_PATH _CA__RESTORE_ENV
}
_CA__GET_FULL_PATH() {
local PROJECT="$1"
local PROJECT_ROOT_SHORT=$(dirname $PROJECT)
local PROJECT_NAME=$(basename $PROJECT)
local FULL_BASE_DIR=$(\
echo $CODE_ACTIVATOR__DIRS \
| sed 's/\s\+/\n/' \
| grep "^.*/$PROJECT_ROOT_SHORT$" \
)
echo "$FULL_BASE_DIR/$PROJECT_NAME"
}
_CA__TMUX_WINDOW_RENAME() {
local PROJECT="$1"
[[ $TERM =~ ^tmux- ]] \
&& tmux rename-window "$(dirname $PROJECT):$(basename $PROJECT)"
}
_CA__SELECT_BASE_DIR() {
local BASE_NAMES=()
for dir in $CODE_ACTIVATOR__DIRS
do
BASE_NAMES=($BASE_NAMES $(basename $dir))
done
echo $CODE_ACTIVATOR__DIRS | sed 's/\s\+/\n/g' \
| grep $(\
echo $BASE_NAMES \
| sed 's/\s\+/\n/g' \
| $_CA__FZF --prompt 'select base directory : ')
}
_CA__GET_REMOTE_TARGET() {
local REMOTE_TARGET=$(\
echo $CODE_ACTIVATOR__KNOWN_TARGETS \
| sed 's/\s\+/\n/g' \
| $_CA__FZF --print-query --prompt 'set a remote target : ' \
| tail -1 \
)
local FIRST_SELECTION="$REMOTE_TARGET"
echo $CODE_ACTIVATOR__KNOWN_TARGETS | grep -q "$REMOTE_TARGET" && {
REMOTE_TARGET="$REMOTE_TARGET$(echo | $_CA__FZF --print-query --prompt "$REMOTE_TARGET" | tail -1)"
}
[[ $REMOTE_TARGET == $FIRST_SELECTION ]] && return ''
echo $REMOTE_TARGET | grep -q '\.git$' || REMOTE_TARGET="$REMOTE_TARGET.git"
echo $REMOTE_TARGET
}
_CA__GET_PROJECT_NAME() {
local REMOTE_TARGET="$1"
local DEFAULT_NAME=$(basename $REMOTE_TARGET | sed 's/\.git$//')
echo $DEFAULT_NAME | $_CA__FZF --print-query --prompt 'set local project name : ' | tail -1
}
_CA__INTERACTIVE_ENV_SETUP() {
local PROJECT_PATH="$1"
local NO_ENV="$PROJECT_PATH/$_CA__NO_ENV_SENTINEL"
printf 'set up a virtual environment now? [(Y)es / (n)o / n(e)ver] '
_CA__READ_K yn
case $yn in
e ) touch $NO_ENV; return 1 ;;
n ) return 1 ;;
esac
local ENV_VERSION=$(_CA__SELECT_VIRTUAL_ENV)
[ ! $ENV_VERSION ] && return 1
_CA__INIT_VIRTUAL_ENV $PROJECT_PATH $ENV_VERSION
}
_CA__SELECT_VIRTUAL_ENV() {
local VERSION=$(\
echo "$(_CA__GET_PYTHON_IN_PATH)\n$(which node 2>/dev/null)" \
| $_CA__FZF --prompt 'select a virtual environment : ' \
)
[[ $VERSION =~ node$ ]] && {
FIRST_PICK=$VERSION
VERSION=$(\
nodeenv --list 2>&1 \
| sed 's/\s\+/\n/g' \
| $_CA__FZF --prompt 'select a node version : '\
)
[[ $VERSION == $FIRST_PICK ]] && return
}
echo $VERSION
}
_CA__GET_PYTHON_IN_PATH() {
whence -pm '*' | grep python | grep -v -- '-config$\|m$'
}
_CA__INIT_VIRTUAL_ENV() {
local PROJECT_PATH="$1"
local ENV_VERSION="$2"
local ENV_PATH="$PROJECT_PATH/$_CA__VIRTUAL_ENV_NAME"
[[ $ENV_VERSION =~ ^[0-9] ]]\
&& _CA__INIT_NODE_ENV $ENV_PATH $ENV_VERSION \
|| _CA__INIT_VIRTUALENV $ENV_PATH $ENV_VERSION \
;
}
_CA__INIT_NODE_ENV() {
local ENV_PATH="$1"
local ENV_VERSION="$2"
"setting up node env ($ENV_VERSION)"
nodeenv --node=$ENV_VERSION $ENV_PATH
}
_CA__INIT_VIRTUALENV() {
local ENV_PATH="$1"
local ENV_VERSION="$2"
"setting up virtualenv ($ENV_VERSION)"
virtualenv --python=$ENV_VERSION $ENV_PATH
}
_CA__INIT_CUSTOM_ENV() {
local PROJECT_PATH="$1"
local CUSTOM_ENV_TEMPLATE="$_CA__CUSTOM_ENV_TEMPLATE"
local CUSTOM_ENV="$PROJECT_PATH/$_CA__CUSTOM_ENV_NAME"
cp $CUSTOM_ENV_TEMPLATE $CUSTOM_ENV
}
#####################################################################
export _CA__HELPERS_LOADED=1