Files
home/.zshrc
T
2026-06-21 18:44:23 +02:00

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"