228 lines
6.0 KiB
Bash
228 lines
6.0 KiB
Bash
# .zshrc
|
|
|
|
# Zsh Configuration
|
|
export ZSH="$HOME/.oh-my-zsh"
|
|
export ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/oh-my-zsh"
|
|
export ZSH_COMPDUMP="${ZSH_CACHE_DIR}/.zcompdump-${HOST}-${ZSH_VERSION}"
|
|
|
|
mkdir -p "$ZSH_CACHE_DIR"
|
|
|
|
export DOTZSH_GIT_PLUGIN="$ZSH/plugins/git/git.plugin.zsh"
|
|
export DOTZSH_SUDO_PLUGIN="$ZSH/plugins/sudo/sudo.plugin.zsh"
|
|
export DOTZSH_RCLONE_PLUGIN="$ZSH/plugins/rclone/rclone.plugin.zsh"
|
|
export DOTZSH_AUTOSUGGESTIONS_PLUGIN="$ZSH/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
|
|
export DOTZSH_SYNTAX_HIGHLIGHTING_PLUGIN="$ZSH/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh"
|
|
export DOTZSH_HISTORY_SUBSTRING_SEARCH_PLUGIN="$ZSH/plugins/history-substring-search/history-substring-search.plugin.zsh"
|
|
|
|
# Programming Languages Root
|
|
export PROG_DIR="$HOME/.programming"
|
|
|
|
# History
|
|
export HISTFILE="$HOME/.zsh_history"
|
|
export HISTSIZE=10000
|
|
export SAVEHIST=10000
|
|
|
|
setopt APPEND_HISTORY
|
|
setopt SHARE_HISTORY
|
|
setopt EXTENDED_HISTORY
|
|
setopt HIST_EXPIRE_DUPS_FIRST
|
|
setopt HIST_IGNORE_ALL_DUPS
|
|
setopt HIST_IGNORE_SPACE
|
|
setopt HIST_FIND_NO_DUPS
|
|
setopt HIST_REDUCE_BLANKS
|
|
setopt HIST_SAVE_NO_DUPS
|
|
|
|
typeset -gA DOTZSH_MISSING_TOOL_WARNED
|
|
|
|
dotzsh_warn_missing_tool_once() {
|
|
local tool_key="$1"
|
|
local tool_label="$2"
|
|
local setup_hint="$3"
|
|
|
|
if [[ -n "${DOTZSH_MISSING_TOOL_WARNED[$tool_key]:-}" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
DOTZSH_MISSING_TOOL_WARNED[$tool_key]=1
|
|
|
|
print -u2 -- "$tool_label is not installed on this system."
|
|
print -u2 -- "Run: $setup_hint"
|
|
print -u2 -- "Or: just setup all"
|
|
}
|
|
|
|
# Go and GVM (Black Box)
|
|
export GOPATH="$PROG_DIR/go"
|
|
export GVM_ROOT="$GOPATH"
|
|
|
|
gvm_load() {
|
|
local requested_command="$1"
|
|
|
|
unset -f gvm go gofmt
|
|
|
|
if [[ ! -s "$GVM_ROOT/scripts/gvm" ]]; then
|
|
dotzsh_warn_missing_tool_once "go" "Go / GVM" "just lang go"
|
|
return 127
|
|
fi
|
|
|
|
source "$GVM_ROOT/scripts/gvm"
|
|
|
|
if ! command -v "$requested_command" >/dev/null 2>&1; then
|
|
dotzsh_warn_missing_tool_once "go" "Go / GVM" "just lang go"
|
|
return 127
|
|
fi
|
|
|
|
"$@"
|
|
}
|
|
|
|
gvm() { gvm_load gvm "$@"; }
|
|
go() { gvm_load go "$@"; }
|
|
gofmt() { gvm_load gofmt "$@"; }
|
|
|
|
# Node and NVM (Lazy Load)
|
|
export NVM_DIR="$PROG_DIR/node"
|
|
|
|
nvm_load() {
|
|
local requested_command="$1"
|
|
|
|
unset -f nvm node npm npx
|
|
|
|
if [[ ! -s "$NVM_DIR/nvm.sh" ]]; then
|
|
dotzsh_warn_missing_tool_once "node" "Node / NVM" "just lang node"
|
|
return 127
|
|
fi
|
|
|
|
. "$NVM_DIR/nvm.sh"
|
|
|
|
if ! command -v "$requested_command" >/dev/null 2>&1; then
|
|
dotzsh_warn_missing_tool_once "node" "Node / NVM" "just lang node"
|
|
return 127
|
|
fi
|
|
|
|
"$@"
|
|
}
|
|
|
|
nvm() { nvm_load "nvm" "$@"; }
|
|
node() { nvm_load "node" "$@"; }
|
|
npm() { nvm_load "npm" "$@"; }
|
|
npx() { nvm_load "npx" "$@"; }
|
|
|
|
# Rust and Cargo
|
|
export RUSTUP_HOME="$PROG_DIR/rust/multirust"
|
|
export CARGO_HOME="$PROG_DIR/rust/cargo"
|
|
|
|
# Python (Pyenv + Miniconda)
|
|
export PYENV_ROOT="$PROG_DIR/python/pyenv"
|
|
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
|
|
export CONDA_ROOT="$PYENV_ROOT/versions/miniforge3-latest"
|
|
|
|
pyenv_load() {
|
|
unset -f pyenv
|
|
|
|
if ! command -v pyenv >/dev/null 2>&1; then
|
|
dotzsh_warn_missing_tool_once "python" "Pyenv / Python" "just lang python"
|
|
return 127
|
|
fi
|
|
|
|
eval "$(command pyenv init -)"
|
|
|
|
if ! command -v pyenv >/dev/null 2>&1; then
|
|
dotzsh_warn_missing_tool_once "python" "Pyenv / Python" "just lang python"
|
|
return 127
|
|
fi
|
|
|
|
pyenv "$@"
|
|
}
|
|
|
|
pyenv() { pyenv_load "$@"; }
|
|
|
|
conda_load() {
|
|
local requested_command="$1"
|
|
|
|
unset -f conda mamba
|
|
|
|
if [[ ! -f "$CONDA_ROOT/etc/profile.d/conda.sh" ]]; then
|
|
dotzsh_warn_missing_tool_once "python" "Conda / Mamba" "just lang python"
|
|
return 127
|
|
fi
|
|
|
|
source "$CONDA_ROOT/etc/profile.d/conda.sh"
|
|
|
|
if ! command -v "$requested_command" >/dev/null 2>&1; then
|
|
dotzsh_warn_missing_tool_once "python" "Conda / Mamba" "just lang python"
|
|
return 127
|
|
fi
|
|
|
|
"$@"
|
|
}
|
|
|
|
conda() { conda_load conda "$@"; }
|
|
mamba() { conda_load mamba "$@"; }
|
|
|
|
# R and Rig
|
|
export RIG_HOME="$PROG_DIR/r"
|
|
if [ -d "$RIG_HOME/bin" ]; then
|
|
export PATH="$RIG_HOME/bin:$PATH"
|
|
fi
|
|
|
|
if [ -n "${WSL_DISTRO_NAME:-}" ] || [ -n "${WSL_INTEROP:-}" ]; then
|
|
typeset -gr DOTZSH_IS_WSL=1
|
|
elif [ -r /proc/sys/kernel/osrelease ] && grep -qiE '(microsoft|wsl)' /proc/sys/kernel/osrelease 2>/dev/null; then
|
|
typeset -gr DOTZSH_IS_WSL=1
|
|
else
|
|
typeset -gr DOTZSH_IS_WSL=0
|
|
fi
|
|
|
|
# Zoxide
|
|
if command -v zoxide >/dev/null 2>&1; then
|
|
eval "$(zoxide init --cmd cd zsh)"
|
|
fi
|
|
|
|
# Source Aliases & Secrets
|
|
[ -f ~/.zsh_aliases ] && source ~/.zsh_aliases
|
|
[ -f ~/.zsh_secrets ] && source ~/.zsh_secrets
|
|
|
|
# Add to PATH
|
|
export PATH="$HOME/.local/bin:$CARGO_HOME/bin:$GOPATH/bin:$PATH"
|
|
|
|
# opencode
|
|
if [ "$DOTZSH_IS_WSL" -eq 1 ] && command -v openchamber >/dev/null 2>&1 && ! pgrep -f "openchamber.*7891" >/dev/null 2>&1; then
|
|
openchamber --port 7891 >/dev/null 2>&1 &!
|
|
fi
|
|
|
|
# direnv
|
|
if command -v direnv >/dev/null 2>&1; then
|
|
eval "$(direnv hook zsh)"
|
|
fi
|
|
|
|
# Completion Styling
|
|
[ -f ~/.zsh_completion ] && source ~/.zsh_completion
|
|
|
|
# Plugin Scripts (lighter than loading full Oh My Zsh)
|
|
[ -f "$DOTZSH_GIT_PLUGIN" ] && source "$DOTZSH_GIT_PLUGIN"
|
|
[ -f "$DOTZSH_SUDO_PLUGIN" ] && source "$DOTZSH_SUDO_PLUGIN"
|
|
[ -f "$DOTZSH_RCLONE_PLUGIN" ] && source "$DOTZSH_RCLONE_PLUGIN"
|
|
|
|
# Prompt Styling
|
|
[ -f ~/.zsh_prompt ] && source ~/.zsh_prompt
|
|
|
|
# Interactive Enhancements
|
|
[ -f "$DOTZSH_HISTORY_SUBSTRING_SEARCH_PLUGIN" ] && source "$DOTZSH_HISTORY_SUBSTRING_SEARCH_PLUGIN"
|
|
[ -f "$DOTZSH_AUTOSUGGESTIONS_PLUGIN" ] && source "$DOTZSH_AUTOSUGGESTIONS_PLUGIN"
|
|
[ -f "$DOTZSH_SYNTAX_HIGHLIGHTING_PLUGIN" ] && source "$DOTZSH_SYNTAX_HIGHLIGHTING_PLUGIN"
|
|
|
|
export HISTORY_SUBSTRING_SEARCH_PREFIXED=1
|
|
|
|
# History keybindings
|
|
bindkey '^[[A' history-substring-search-up
|
|
bindkey '^[OA' history-substring-search-up
|
|
bindkey '^[[B' history-substring-search-down
|
|
bindkey '^[OB' history-substring-search-down
|
|
|
|
# pnpm
|
|
export PNPM_HOME="$PROG_DIR/node/pnpm"
|
|
case ":$PATH:" in
|
|
*":$PNPM_HOME:"*) ;;
|
|
*) export PATH="$PNPM_HOME:$PATH" ;;
|
|
esac
|
|
# pnpm end
|