# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# Path to your Oh My Zsh installation.
export ZSH="${ZSH:-$HOME/.oh-my-zsh}"

# Optional Node via nvm (Homebrew or ~/.nvm)
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
if [[ -s "$NVM_DIR/nvm.sh" ]]; then
  source "$NVM_DIR/nvm.sh"
elif command -v brew >/dev/null 2>&1; then
  _nvm_prefix="$(brew --prefix nvm 2>/dev/null)" || true
  [[ -n "$_nvm_prefix" && -s "$_nvm_prefix/nvm.sh" ]] && source "$_nvm_prefix/nvm.sh"
  unset _nvm_prefix
fi

ZSH_THEME="powerlevel10k/powerlevel10k"

plugins=(
  git
  z
  sudo
  extract
  command-not-found
  dirhistory
  web-search
  zsh-autosuggestions
  zsh-syntax-highlighting
  zsh-history-substring-search
)

[[ -f "$ZSH/oh-my-zsh.sh" ]] && source "$ZSH/oh-my-zsh.sh"

# Prompt theme (shipped in this repo as .p10k.zsh)
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

# pnpm
export PNPM_HOME="${PNPM_HOME:-$HOME/Library/pnpm}"
case ":$PATH:" in
  *":$PNPM_HOME:"*) ;;
  *) [[ -d "$PNPM_HOME" ]] && export PATH="$PNPM_HOME:$PATH" ;;
esac

command -v direnv >/dev/null 2>&1 && eval "$(direnv hook zsh)"
[[ -f ~/.fzf.zsh ]] && source ~/.fzf.zsh

# Optional local tools (skip quietly if missing)
[[ -x "/Applications/LibreOffice.app/Contents/MacOS/soffice" ]] && \
  alias libreoffice="/Applications/LibreOffice.app/Contents/MacOS/soffice"
[[ -x "$HOME/Documents/code/free-claude-code/claude-pick" ]] && \
  alias ccode="$HOME/Documents/code/free-claude-code/claude-pick"
[[ -f "$HOME/Documents/code/hermes/scripts/hermes-mac.zsh" ]] && \
  source "$HOME/Documents/code/hermes/scripts/hermes-mac.zsh"

# ── Custom aliases ───────────────────────────────────────────────────────────
alias reload="source ~/.zshrc && echo 'ZSH config reloaded from ~/.zshrc'"
alias editrc="${EDITOR:-nano} ~/.zshrc"
alias c="clear"
alias cls="clear"

if [[ "$OSTYPE" == darwin* ]]; then
  alias ls="ls -G"
else
  alias ls="ls --color=auto"
fi
alias l="ls -lah"
alias ll="ls -lah"
alias la="ls -A"
alias md="mkdir -p"
alias grep="grep --color=auto"

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias cd..="cd .."
alias h="cd ~"
alias cdc="cd ~/Documents/code"

alias df="df -h"
alias du="du -h"

alias ps="ps aux"
alias cpu="lscpu 2>/dev/null || sysctl -a | grep -E 'cpu|machdep'"
alias top="btop 2>/dev/null || top"
alias ports="lsof -nP -iTCP -sTCP:LISTEN 2>/dev/null || ss -tulpn"

if [[ "$OSTYPE" == darwin* ]]; then
  alias free="vm_stat"
  alias mem="vm_stat"
  alias localip="ipconfig getifaddr en0 2>/dev/null || ipconfig getifaddr en1"
else
  alias free="free -h"
  alias mem="free -m"
  alias localip="ip route get 1.2.3.4 | awk '{print \$7}'"
  alias ports="ss -tulpn"
fi

alias myip="curl -s http://ipecho.net/plain; echo"

alias py="python3"
alias pip="pip3"
alias venv="python3 -m venv"
alias activate="source venv/bin/activate"

alias d="docker"
alias dc="docker compose"
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"
alias dps="docker ps"
alias di="docker images"

alias now="date +'%Y-%m-%d %H:%M:%S'"
alias today="date +'%Y-%m-%d'"

if command -v apt >/dev/null 2>&1; then
  alias update="sudo apt update && sudo apt upgrade -y"
  alias install="sudo apt install"
  alias remove="sudo apt remove"
  alias search="apt search"
fi

alias chmox="chmod +x"
alias own="sudo chown -R $USER:$USER"

# Safety nets — prompt before delete/overwrite
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias nfresh="rm -rf node_modules/ package-lock.json && npm install"

# Homelab / ansible shortcuts (no-op helpers if ansible not cloned)
export ANSIBLE_DIR="${ANSIBLE_DIR:-$HOME/Documents/code/ansible}"
export PERSONAL_SCRIPTS_DIR="${PERSONAL_SCRIPTS_DIR:-$HOME/Documents/code/personal-scripts}"
export LEVKIN_DIR="${LEVKIN_DIR:-$HOME/Documents/code/levkin}"

_DOTFILES_DIR="${DOTFILES_DIR:-}"
if [[ -z "$_DOTFILES_DIR" ]]; then
  if [[ -L "$HOME/.zshrc" ]]; then
    _link="$(readlink "$HOME/.zshrc")"
    [[ "$_link" != /* ]] && _link="$HOME/$_link"
    _DOTFILES_DIR="$(cd "$(dirname "$_link")" && pwd)"
    unset _link
  elif [[ -n "${(%):-%x}" ]]; then
    # When sourced from a real file path
    _DOTFILES_DIR="$(cd "$(dirname "${(%):-%x}")" && pwd)"
  fi
fi
# Fallbacks if install put the repo in the usual place
[[ -z "$_DOTFILES_DIR" && -f "$HOME/Documents/code/dotfiles/zsh/homelab.zsh" ]] &&   _DOTFILES_DIR="$HOME/Documents/code/dotfiles"
[[ -n "$_DOTFILES_DIR" && -f "$_DOTFILES_DIR/zsh/homelab.zsh" ]] &&   source "$_DOTFILES_DIR/zsh/homelab.zsh"

# Machine-local overrides (gitignored when living in the repo; usually ~/.zshrc.local)
[[ -f "$HOME/.zshrc.local" ]] && source "$HOME/.zshrc.local"
