139 lines
3.3 KiB
Bash
139 lines
3.3 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
|
|
|
|
|
|
# =============================================================================
|
|
# 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
|
|
|
|
|
|
# =============================================================================
|
|
# 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"
|
|
"$HOME/.oh-my-zsh/oh-my-zsh.sh"
|
|
"$HOME/.p10k.zsh"
|
|
)
|
|
|
|
# Source zsh-compatible files (skip if missing, no warnings)
|
|
for config_file in "${source_files[@]}"; do
|
|
source_file "$config_file"
|
|
done
|
|
|
|
|
|
# =============================================================================
|
|
# 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"
|
|
type bat >/dev/null 2>&1 && alias cat="bat --paging=never"
|