diff --git a/common/.config/zsh/configs/1-functions b/common/.config/zsh/configs/1-functions index 7b0b024c..0282e869 100644 --- a/common/.config/zsh/configs/1-functions +++ b/common/.config/zsh/configs/1-functions @@ -74,14 +74,40 @@ function ntfy() { notify-send -u critical "$1 failed! " "exited with code: $?" } -function togglefg () { - zle push-input -w - BUFFER="fg" - zle accept-line -w -} -zle -N togglefg - function whed() { script=$(which "$1") [ -e "$script" ] && $EDITOR $(which "$script") } + +function workon_cwd() { + local PROJECT_ROOT="${PWD}" + + while [ "$PROJECT_ROOT" != "/" ] && [ ! -e "$PROJECT_ROOT/.venv" ] && [ ! -d "$PROJECT_ROOT/.git" ]; do + local PROJECT_ROOT="$(dirname "$PROJECT_ROOT")" + done + + if [ -r "$PROJECT_ROOT/.venv" ]; then + local ENV_NAME="$(cat $PROJECT_ROOT/.venv)" + else + local ENV_NAME="$(basename "$PROJECT_ROOT")" + fi + + [ -n "$CD_VIRTUAL_ENV" ] && [ "$ENV_NAME" != "$CD_VIRTUAL_ENV" ] && { + [ -n "$VIRTUAL_ENV" ] && deactivate + unset CD_VIRTUAL_ENV + } + + [ -n "$ENV_NAME" ] && [ ! "$(realpath "$VIRTUAL_ENV" 2>/dev/null)" = "$(realpath "$WORKON_HOME/$ENV_NAME")" ] && { + if [ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]; then + workon -n "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME" + elif [ -e "$ENV_NAME/bin/activate" ]; then + source "$ENV_NAME/bin/activate" && export CD_VIRTUAL_ENV="$ENV_NAME" + else + local ENV_NAME="" + fi + } + + [ -z "$ENV_NAME" ] && [ -n "$CD_VIRTUAL_ENV" ] && [ -n "$VIRTUAL_ENV" ] && { + deactivate && unset CD_VIRTUAL_ENV + } +} diff --git a/common/.config/zsh/configs/2-setup b/common/.config/zsh/configs/2-setup index 9f37a6c5..d75b4062 100644 --- a/common/.config/zsh/configs/2-setup +++ b/common/.config/zsh/configs/2-setup @@ -2,17 +2,39 @@ export PROMPT='%B%F{blue}%n%F{cyan}@%F{blue}%m %F{magenta}[%F{white}%3~%F{magenta}] %(?.%F{green}.%F{red})ยป%f%b ' export RPROMPT='%(?..%F{red}%?) $(venv_prompt)' +export HISTSIZE=10000000 +export SAVEHIST=10000000 +export HISTFILE="$XDG_DATA_HOME/zsh/history" +export KEYTIMEOUT=1 [ ! -f $XDG_DATA_HOME/zsh/history ] && mkdir -p $XDG_DATA_HOME/zsh && touch $XDG_DATA_HOME/zsh/history fpath=($XDG_CONFIG_HOME/zsh/completions $fpath) -setopt hist_ignore_all_dups hist_reduce_blanks hist_verify bang_hist interactive_comments autocd noflowcontrol longlistjobs nonomatch notify hash_list_all appendhistory sharehistory histignorespace prompt_subst +setopt \ + AUTO_CD \ + BANG_HIST \ + HASH_LIST_ALL \ + HIST_IGNORE_DUPS \ + HIST_IGNORE_ALL_DUPS \ + HIST_FIND_NO_DUPS \ + HIST_SAVE_NO_DUPS \ + HIST_REDUCE_BLANKS \ + HIST_VERIFY \ + HIST_IGNORE_SPACE \ + INTERACTIVE_COMMENTS \ + LONG_LIST_JOBS \ + NO_FLOW_CONTROL \ + NO_NOMATCH \ + NOTIFY \ + PROMPT_SUBST \ + SHARE_HISTORY autoload -Uz colors && colors autoload -Uz edit-command-line && zle -N edit-command-line autoload -Uz add-zsh-hook autoload -Uz compinit +autoload -U add-zsh-hook zstyle ':completion:*:git-checkout:*' sort false zstyle ':completion:*:descriptions' format '[%d]' @@ -33,14 +55,9 @@ zle_highlight+=(paste:none) # Set the titlestring add-zsh-hook precmd write_title_wd add-zsh-hook preexec reset_beam - -export HISTSIZE=10000000 -export SAVEHIST=10000000 -export HISTFILE="$XDG_DATA_HOME/zsh/history" -export KEYTIMEOUT=1 +add-zsh-hook chpwd workon_cwd # Virtualenvwrapper Setup - source "$(which virtualenvwrapper_lazy.sh)" type workon >/dev/null 2>&1 [ -z "$WORKON_HOME" ] && { @@ -48,39 +65,5 @@ type workon >/dev/null 2>&1 return 1 } -workon_cwd() { - local PROJECT_ROOT="${PWD}" - - while [ "$PROJECT_ROOT" != "/" ] && [ ! -e "$PROJECT_ROOT/.venv" ] && [ ! -d "$PROJECT_ROOT/.git" ]; do - local PROJECT_ROOT="$(dirname "$PROJECT_ROOT")" - done - - if [ -r "$PROJECT_ROOT/.venv" ]; then - local ENV_NAME="$(cat $PROJECT_ROOT/.venv)" - else - local ENV_NAME="$(basename "$PROJECT_ROOT")" - fi - - [ -n "$CD_VIRTUAL_ENV" ] && [ "$ENV_NAME" != "$CD_VIRTUAL_ENV" ] && { - [ -n "$VIRTUAL_ENV" ] && deactivate - unset CD_VIRTUAL_ENV - } - - [ -n "$ENV_NAME" ] && [ ! "$(realpath "$VIRTUAL_ENV" 2>/dev/null)" = "$(realpath "$WORKON_HOME/$ENV_NAME")" ] && { - if [ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]; then - workon -n "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME" - elif [ -e "$ENV_NAME/bin/activate" ]; then - source "$ENV_NAME/bin/activate" && export CD_VIRTUAL_ENV="$ENV_NAME" - else - local ENV_NAME="" - fi - } - - [ -z "$ENV_NAME" ] && [ -n "$CD_VIRTUAL_ENV" ] && [ -n "$VIRTUAL_ENV" ] && { - deactivate && unset CD_VIRTUAL_ENV - } -} - -autoload -U add-zsh-hook -add-zsh-hook chpwd workon_cwd +# switch to virtualenv if terminal is started outside of home directory [ "$PWD" != ~ ] && workon_cwd