#!/usr/bin/env bash
# Alias y funciones de terminal para trabajar en IA.
# Guárdalo en tu carpeta personal y añade esta línea a tu ~/.bashrc o ~/.zshrc:
#   source ~/alias_ia.sh

# --- GPU ---
alias gpu='nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader'
alias gpuver='watch -n1 nvidia-smi'
alias gpumem='nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader'
alias gpuprocesos='nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv'

# --- Entrenamientos ---
# matar_entreno            -> mata todos los procesos "python ... train"
# matar_entreno patron     -> mata los procesos que coincidan con el patrón
matar_entreno() {
    local patron="${1:-python.*train}"
    pkill -f "$patron" && echo "Procesos detenidos: $patron" || echo "No había procesos con: $patron"
}

# --- Entornos virtuales ---
alias ae='source .venv/bin/activate'
alias de='deactivate'
alias nuevoenv='uv venv && source .venv/bin/activate'

# --- Logs ---
alias verloss='tail -f logs/*.log | grep --line-buffered "loss"'
alias vererrores='tail -f logs/*.log | grep --line-buffered -E "ERROR|error|Exception"'
# verlog patron -> sigue los logs mostrando solo las líneas con ese patrón (por defecto "loss")
verlog() {
    tail -f logs/*.log 2>/dev/null | grep --line-buffered "${1:-loss}"
}

# --- Disco (los datos y modelos llenan el disco muy rápido) ---
alias disco='df -h .'
alias grandes='find . -type f -size +100M -exec du -h {} + 2>/dev/null | sort -rh | head -20'
alias modelos='find . \( -name "*.pt" -o -name "*.pth" -o -name "*.safetensors" -o -name "*.ckpt" -o -name "*.bin" \) -exec du -h {} + 2>/dev/null | sort -rh | head -20'

# --- tmux ---
alias tn='tmux new -s'
alias ta='tmux attach -t'
alias tl='tmux ls'

# --- Varios ---
alias puertos='ss -tulpn 2>/dev/null || lsof -i -P -n | grep LISTEN'
alias pycache='find . -type d -name __pycache__ -prune -exec rm -rf {} +'
