# ~/.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"