164 lines
4.0 KiB
Bash
164 lines
4.0 KiB
Bash
# ~/.zshrc
|
|
|
|
|
|
# =============================================================================
|
|
# HELPER FUNCTIONS
|
|
# =============================================================================
|
|
|
|
# Add a directory to PATH with existence check
|
|
# Usage: add_to_path /path/to/add [prepend|append]
|
|
add_to_path() {
|
|
local dir="$1"
|
|
local position="${2:-prepend}"
|
|
|
|
if [[ -d "$dir" ]]; then
|
|
case "$position" in
|
|
prepend)
|
|
export PATH="$dir:$PATH"
|
|
;;
|
|
append)
|
|
export PATH="$PATH:$dir"
|
|
;;
|
|
*)
|
|
echo "Warning: Unknown position '$position' for path '$dir'" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
# Source a file with existence and readability check (zsh-friendly)
|
|
# Usage: source_file /path/to/file
|
|
source_file() {
|
|
local file="$1"
|
|
|
|
if [[ -f "$file" && -r "$file" ]]; then
|
|
source "$file"
|
|
fi
|
|
}
|
|
|
|
# Eval the output of a command, silently skipping if it fails or produces nothing
|
|
# Usage: eval_expr 'pyenv init -'
|
|
eval_expr() {
|
|
local cmd="$1"
|
|
local output
|
|
|
|
if output="$(eval "$cmd" 2>/dev/null)" && [[ -n "$output" ]]; then
|
|
eval "$output"
|
|
fi
|
|
}
|
|
|
|
|
|
# =============================================================================
|
|
# PATH EXTENSIONS
|
|
# =============================================================================
|
|
|
|
# Define all path extensions in an array for easy management
|
|
path_extensions=(
|
|
"$HOME/bin"
|
|
"$HOME/.local/bin"
|
|
"$HOME/.rbenv/bin"
|
|
"$HOME/.pyenv/bin"
|
|
"$HOME/.cargo/bin"
|
|
"$HOME/go/bin"
|
|
"$HOME/scripts"
|
|
)
|
|
|
|
# Apply add_to_path to each directory (prepend by default)
|
|
for path_dir in "${path_extensions[@]}"; do
|
|
add_to_path "$path_dir" prepend
|
|
done
|
|
|
|
|
|
# =============================================================================
|
|
# CONFIGURATION FILES TO SOURCE
|
|
# =============================================================================
|
|
|
|
# Define files to source in an array for easy management
|
|
source_files=(
|
|
"$HOME/.env"
|
|
"$HOME/.nvm/nvm.sh"
|
|
"$HOME/.cargo/env"
|
|
"${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
|
)
|
|
|
|
# Source zsh-compatible files (skip if missing, no warnings)
|
|
for config_file in "${source_files[@]}"; do
|
|
source_file "$config_file"
|
|
done
|
|
|
|
|
|
# =============================================================================
|
|
# EVAL EXPRESSIONS
|
|
# =============================================================================
|
|
|
|
# Commands whose output should be eval'd (tool initializers, etc.)
|
|
eval_expressions=(
|
|
'pyenv init -'
|
|
)
|
|
|
|
for expr in "${eval_expressions[@]}"; do
|
|
eval_expr "$expr"
|
|
done
|
|
|
|
|
|
# =============================================================================
|
|
# SHELL INITIALIZATION
|
|
# =============================================================================
|
|
|
|
# Oh My Zsh installation
|
|
export ZSH="$HOME/.oh-my-zsh"
|
|
|
|
# Set theme
|
|
ZSH_THEME="powerlevel10k/powerlevel10k"
|
|
|
|
# Enable plugins
|
|
plugins=(
|
|
git gh sudo ssh ruby rust python node rsync nvm rbenv pyenv
|
|
docker docker-compose zsh-autosuggestions zsh-syntax-highlighting
|
|
zsh-interactive-cd zsh-navigation-tools
|
|
)
|
|
|
|
# Add fpath custom completions
|
|
[[ -d "$HOME/.zsh/completions" ]] && fpath=("$HOME/.zsh/completions" $fpath)
|
|
|
|
# Load Oh My Zsh framework
|
|
[[ -f "$ZSH/oh-my-zsh.sh" ]] && source "$ZSH/oh-my-zsh.sh"
|
|
|
|
# Powerlevel10k configuration (must come after theme is set)
|
|
[[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh
|
|
|
|
|
|
# =============================================================================
|
|
# SHELL OPTIONS
|
|
# =============================================================================
|
|
|
|
zsh_options=(
|
|
appendhistory
|
|
incappendhistory
|
|
sharehistory
|
|
histignoreall_dups
|
|
histreduceblanks
|
|
complete_in_word
|
|
always_to_end
|
|
prompt_percent
|
|
prompt_subst
|
|
auto_cd
|
|
)
|
|
|
|
for opt in "${zsh_options[@]}"; do
|
|
setopt "$opt"
|
|
done
|
|
|
|
|
|
# =============================================================================
|
|
# ALIASES AND FUNCTIONS
|
|
# =============================================================================
|
|
|
|
# Please add your custom aliases and functions here or in:
|
|
# - $ZSH_CUSTOM/aliases.zsh
|
|
# - $ZSH_CUSTOM/functions.zsh
|
|
|
|
alias arty="arty.sh"
|
|
alias stacks="stacks.sh"
|