# vim: filetype=zsh # Hooks chpwd() { if [[ -n "$VIRTUAL_ENV" && -f "$VIRTUAL_ENV/bin/activate" ]]; then local venv_dir="${VIRTUAL_ENV:h}" if [[ "$PWD" != "$venv_dir"* ]] && (( $+functions[deactivate] )); then deactivate fi fi for v in .venv venv .env; do if [[ -f "$v/bin/activate" ]]; then . "$v/bin/activate" break fi done } # Funktionen source_if_exists() { if [[ -r "$1" ]]; then . "$1" fi } # Optionen setopt AUTO_PARAM_SLASH unsetopt CASE_GLOB setopt HIST_SAVE_NO_DUPS setopt INC_APPEND_HISTORY setopt SHARE_HISTORY setopt HIST_IGNORE_ALL_DUPS setopt HIST_IGNORE_SPACE source_if_exists "$HOME/.opam/opam-init/init.zsh" case "$OSTYPE" in darwin*) source_if_exists "/opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" source_if_exists "/opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh" ;; freebsd*) source_if_exists "/usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" source_if_exists "/usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh" ;; esac if (( ${+ZSH_HIGHLIGHT_STYLES} )); then ZSH_HIGHLIGHT_STYLES[path]='none' ZSH_HIGHLIGHT_STYLES[path_prefix]='none' fi bindkey -v export KEYTIMEOUT=1 # Keybindings zmodload zsh/complist bindkey -M menuselect 'h' vi-backward-char bindkey -M menuselect 'k' vi-up-line-or-history bindkey -M menuselect 'l' vi-forward-char bindkey -M menuselect 'j' vi-down-line-or-history autoload -Uz surround zle -N delete-surround surround zle -N add-surround surround zle -N change-surround surround bindkey -M vicmd cs change-surround bindkey -M vicmd ds delete-surround bindkey -M vicmd ys add-surround bindkey -M visual S add-surround bindkey '^A' vi-beginning-of-line bindkey '^E' vi-end-of-line # Aliase alias mc='mc -u' alias gdb='gdb -q' alias pwgen='pwgen -s 48 1' alias ls='ls -G' # Funktionen pkg-update() { case "$OSTYPE" in darwin*) brew update && brew upgrade ;; freebsd*) doas pkg update && doas pkg upgrade ;; *) print -u2 "pkg-update: kein Paketmanager für $OSTYPE hinterlegt" return 1 ;; esac } npm-update() { npm update -g --loglevel=info } pipx-update() { pipx list > /dev/null || return pipx upgrade-all } nvim-update() { nvim --headless \ -c "lua require[[lazy]].sync({ wait = true })" \ -c "UpdateParsers" \ -c "qa" } pkg-clean() { case "$OSTYPE" in darwin*) brew autoremove ;; freebsd*) doas pkg autoremove ;; *) print -u2 "pkg-clean: kein Paketmanager für $OSTYPE hinterlegt" return 1 ;; esac } system-update() { # pkg-clean laeuft bewusst zuerst: `brew autoremove` kann eine verwaiste # python@3.x-Formel entfernen und damit die pipx-Venvs unbrauchbar machen. # Am Ende der Kette bliebe dieser Schaden bis zum naechsten Lauf unbemerkt, # am Anfang meldet ihn `pipx-update` im selben Durchgang. if [[ "$1" == "--clean" ]]; then pkg-clean || return fi pkg-update || return npm-update || return pipx-update || return nvim-update || return } # Command completion autoload -U compinit compinit _comp_options+=(globdots) # With hidden files # ... Angular CLI if (( $+commands[ng] )); then . <(ng completion script) fi zstyle ':completion:*' completer _extensions _complete _approximate zstyle ':completion:*' menu select zstyle ':completion:*:*:*:*:descriptions' format '%F{green}-- %d --%f' zstyle ':completion:*:*:*:*:corrections' format '%F{yellow}!- %d (errors: %e) -!%f' zstyle ':completion:*:*:*:*:messages' format ' %F{purple} -- %d --%f' zstyle ':completion:*:*:*:*:warnings' format ' %F{red}-- no matches found --%f' zstyle ':completion:*' group-name '' # Prompt autoload -Uz vcs_info precmd_vcs_info() { vcs_info } precmd_functions+=( precmd_vcs_info ) setopt prompt_subst RPROMPT=\$vcs_info_msg_0_ PROMPT=$'[%F{green}%8>..>%n%>>%F{white}@%F{green}%8>..>%m%>>%F{white}] %F{white}%(4~|.../%3~|%~) %B%F{blue}>%f%b ' zstyle ':vcs_info:*' unstagedstr ' *' zstyle ':vcs_info:*' stagedstr ' +' zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:*' actionformats '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%a%u%c%F{3}|%F{1}%a%F{5}]%f' zstyle ':vcs_info:*' formats '%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%u%c%F{5}]%f' zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r' unfunction source_if_exists