# .zshrc

# Zsh Configuration
export ZSH="$HOME/.oh-my-zsh"

PROMPT="%B%~%b :: "
RPROMPT="%n@%m"

# Plugins
plugins=(git zsh-syntax-highlighting zsh-autosuggestions sudo rclone rust nvm golang conda pyenv)

source $ZSH/oh-my-zsh.sh

# Programming Languages Root
export PROG_DIR="$HOME/.programming"

# 1. Go and GVM (Black Box)
export GVM_ROOT="$PROG_DIR/go"
# Only source if the custom GVM exists
[[ -s "$GVM_ROOT/scripts/gvm" ]] && source "$GVM_ROOT/scripts/gvm"

# 2. Node and NVM (Lazy Load)
export NVM_DIR="$PROG_DIR/node"

nvm_load() {
    echo "💤 Waking up NVM..."
    unset -f nvm node npm npx
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
    "$@"
}

nvm() { nvm_load "nvm" "$@"; }
node() { nvm_load "node" "$@"; }
npm() { nvm_load "npm" "$@"; }
npx() { nvm_load "npx" "$@"; }

# 3. Rust and Cargo
export RUSTUP_HOME="$PROG_DIR/rust/multirust"
export CARGO_HOME="$PROG_DIR/rust/cargo"

# 4. Python (Pyenv + Miniconda)
export PYENV_ROOT="$PROG_DIR/python/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

if command -v pyenv 1>/dev/null 2>&1; then
    eval "$(pyenv init -)"
fi

if command -v conda >/dev/null 2>&1; then
    CONDA_BASE=$(conda info --base)
    [ -f "$CONDA_BASE/etc/profile.d/conda.sh" ] && source "$CONDA_BASE/etc/profile.d/conda.sh"
fi

# 5. R and Rig
export RIG_HOME="$PROG_DIR/r"
if [ -d "$RIG_HOME/bin" ]; then
    export PATH="$RIG_HOME/bin:$PATH"
fi

# Zoxide
eval "$(zoxide init --cmd cd zsh)"

# 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:$PATH"
export PATH="$GOPATH/bin:$PATH"