dotfiles/.zshrc
Alexander Hess dcdb32585a
Set up Python develop environments
- use `pyenv` to manage the various develop environments
  + install several Python binaries
  + each environment receives its own `poetry` install
- add two virtual environments:
  + "interactive" => default environment with no library,
                     which receives accidental `pip install`s
  + "utils" => hosts various globally available tools/apps
               (e.g., `mackup`)
- add installation and update scripts
2022-07-28 16:54:36 +02:00

195 lines
4.6 KiB
Bash

# Executed by zsg when a non-login shell starts
# Ensure zsh is running interactively
[[ $- != *i* ]] && return
# Check if a command can be found on the $PATH
command_exists() {
command -v "$1" 1>/dev/null 2>&1
}
# ==================
# Base Configuration
# ==================
# Enable Powerlevel10k instant prompt
if [ -r "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh" ]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Enable colors and change prompt
autoload -Uz colors
colors
# Enable VI mode
bindkey -v
# If an entered command does not exist per se
# but is the name of a folder instead, go there.
setopt AUTO_CD
# Treat "#", "~", and "^" as part of patterns for filename generation
setopt EXTENDEDGLOB
# Warn if there are no matches
setopt NOMATCH
# Silence the shell
setopt NO_BEEP
# Report status of background jobs immediately
setopt NOTIFY
# Remove all "built-in" aliases
unalias -a
# =======
# History
# =======
# Cannot be set in `~/.profile` due to conflict with `bash` (same env variable)
export HISTFILE="$HOME/.zsh_history"
# =========================
# Shell Utilities & Aliases
# =========================
source "$HOME/.config/shell/utils.sh"
source "$HOME/.config/shell/aliases.sh"
# Defined here as it cannot be in `aliases.sh` due to a dependency with `~/.bashrc`
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# ===============
# zplug & Plugins
# ===============
source "$ZSH/oh-my-zsh.sh"
source "$HOME/.zplug/init.zsh" # config in `~/.zshenv`
# Load all zsh plugins with `zplug`
# Must use double quotes in this section
# Source: https://github.com/zplug/zplug#example
# Make zplug manage itself like a plugin
# Source: https://github.com/zplug/zplug#let-zplug-manage-zplug
zplug "zplug/zplug", hook-build:"zplug --self-manage"
zplug "MichaelAquilina/zsh-you-should-use" # config in `~/.zshenv`
zplug "zsh-users/zsh-autosuggestions" # config in `~/.zshenv`
zplug "zsh-users/zsh-history-substring-search" # config in `~/.zshenv`; there are key bindings below
zplug "zsh-users/zsh-syntax-highlighting"
zplug "plugins/command-not-found", from:oh-my-zsh
zplug "plugins/dotenv", from:oh-my-zsh
zplug "plugins/dirhistory", from:oh-my-zsh
zplug "plugins/git-escape-magic", from:oh-my-zsh
zplug "plugins/invoke", from:oh-my-zsh # completions for `invoke`
zplug "plugins/jsontools", from:oh-my-zsh
zplug "plugins/pip", from:oh-my-zsh # completions for `pip`
zplug "plugins/poetry", from:oh-my-zsh # completions for `poetry`
zplug "plugins/z", from:oh-my-zsh
zplug "romkatv/powerlevel10k", as:theme, depth:1
zplug load
# ===============
# Zsh Completions
# ===============
# Initialize zsh's completions
# NOTE: This is already done with `~/.oh-my-zsh.sh` above
# autoload -Uz compinit
# compinit -u -d "$ZSH_COMPDUMP"
# Enable match highlighting and scrolling through long lists,
# and provide a different style of menu completion
zmodload zsh/complist
# Include hidden files in tab completion
_comp_options+=(GLOB_DOTS)
# Enable arrow-key driven interface
zstyle ':completion:*' menu select
# Make compinit find new executables right away
zstyle ':completion:*' rehash true
# Enable grouping and group headers
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
# Enable completions for various tools
# invoke -> see plugins above
# command_exists invoke && eval "$(invoke --print-completion-script=zsh)"
command_exists nox && eval "$(register-python-argcomplete nox)"
# pip -> see plugins above
# command_exists pip && eval "$(pip completion --zsh)"
command_exists pipx && eval "$(register-python-argcomplete pipx)"
# poetry -> see plugins above
# ============
# Key Bindings
# ============
# zsh-autosuggestions plugin
bindkey "^ " autosuggest-accept
# Enable Ctrl-R
bindkey "^R" history-incremental-search-backward
# Use VI keys to navigate the completions in the menu
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
# history-substring-search plugin
# Source: https://github.com/zsh-users/zsh-history-substring-search#usage
# Normal mode
bindkey "$terminfo[kcuu1]" history-substring-search-up
bindkey "$terminfo[kcud1]" history-substring-search-down
# VI mode
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# =====
# Other
# =====
# Enable Powerlevel10k "full" prompt
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh