scripts/misc/venv

56 lines
1.1 KiB
Plaintext
Raw Normal View History

2020-04-02 08:38:36 +00:00
#!/bin/zsh
zparseopts -D -E c=cdhere -cdvenv=cdvenv h=help -help=help n=newvenv -new=newvenv t=tmsu -tmsu=tmsu
if [[ -n $help ]]; then
<<-HELP
Usage: ${0:t} [-c] [DIR]
${0:t} -t
If DIR contains bin/activate, start a shell with that virtualenv.
Otherwise recursively look up virtualenvs in DIR (by looking for dirs ending
in "venv") and select one with fzf.
-c, --cdvenv Change to the venv directory instead of going back to the
current working directory
-t, --tmsu list only venvs in a directory with tmsu tag lang=python
HELP
exit
fi
ORIGDIR=$PWD
venvsh() {
cd $1
. bin/activate
if [[ -z $cdvenv ]]; then
cd $ORIGDIR
fi
$SHELL
}
if [[ -n $tmsu ]]; then
venv=$(
for i in $(tmsu files --directory lang=python); do
[[ -d $i/venv ]] && echo $i/venv
done | fzf)
if [[ -n $venv ]]; then
exec venvsh $venv
else
exit 1
fi
fi
if [[ -n $newvenv ]]; then
python -mvenv ${1:-venv}
exec venvsh ${1:-venv}
fi
if [[ -n $1 && -e $1/bin/activate ]]; then
exec venvsh $1
fi
venv=$(fd -I -t d 'venv$' $1 | fzf)
if [[ -n $venv ]]; then
exec venvsh $venv
fi