Uno de los programas que mas utilizo en la computadora es la terminal. Por lo general siempre es una manera mas rápida de manipular archivos, ejecutar programas, sincronizar carpetas y revisar si no hay archivos ocultos de esos que a MacOS le encanta dejar por todas partes. Además es mas eficiente usar herramientas como find y grep para encontrar archivos o patrones y vim para editar una línea por aquí o por allá en archivos muy grandes que editores como Visual Studio Code tardarían en abrir o se darían por vencidos.
Sin embargo la verdad es que recién instalado MacOS la terminal es algo inútil, o considero necesita un poco de personalidad para trabajar a gusto. No considero esta la guía definitiva de como configurar la terminal de MacOS, sin embargo es una guía de como hacer que funcione igual a como lo hago a la fecha.

Primero que nada, necesito una buena terminal. No hay un solo programa que me sirva solo para esta tarea. Por años he usado iTerm2, es mucho mejor que Terminal.app que viene con MacOS. Permite manejar múltiples páneles con el mouse o teclados, tiene pestañas, puede desplegar imágenes en la terminal al instalar un paquete de utilidades de terminal y una terminal que aparece cuando presionas una tecla elegida arbitrariamente. iTerm2 es un clásico, tiene muchas buenas funciones, pero en 2023 ya se siente viejo. Es útil, pero tiene sus días contados a menos que innove pronto.
La forma mas rápida y sencilla de instalarla es corriendo el siguiente comando desde la app Terminal que viene incluida con MacOS. Supongo que se podría decir que Terminal es el Internet Explorer de las terminales en MacOS. Suficientemente bueno, pero hay mejores pero sirve para descargar la otra terminal.
curl -s ‘https://api.macapps.link/en/iterm’ | sh

Los últimos 2 meses he usado una app llamada Warp. Es esta nueva terminal brillante con que en su página de internet se anuncia con todas las palabras de moda:
- Inteligencia artificial
- Escrito en Rust
- Compartir terminal en línea de manera colaborativa
- Privado y seguro
- Compartir snippets en línea
- Etc.

Si ya tienes instalado Homebrew puedes instalarlo usando el siguiente comando si no lo tienes mas adelante explico como instalar el manejador de paquetes:
brew install –cask warp
A partir de MacOS Catalina, MacOS cambió su intérprete de terminal predeterminado de BASH a ZSH. Un intérprete de terminal es un programa que permite manejar la computadora y ejecutar comandos directamente en la computadora. iTerm y Warp son ventanas para interactuar con este programa. ZSH permite además usar de manera muy sencilla agregar funciones por medio de plugins a comparación de como es con BASH.
Para identificar que la terminal que estás usando es efectivamente ZSH ejecuta el comando echo $0 la respuesta en caso de que sea ZSH deberá ser -zsh.

Cambiar shell de inicio

En caso de que no sea esta la respuesta en MacOS desde el panel de configuraciones de usuario haz clic derecho en tu usuario y selecciona Opciones Avanzadas.
En la opción Shell de inicio selecciona /bin/zsh o la ubicación en la que se instaló ZSH. Es probable que necesitemos más adelante cambiar la versión de ZSH que usa el sistema si no es compatible con algunos de los plugins que usaremos.

GIT
MacOS incluye git, pero es probable que no esté activado o que tenga que ser descargado. Para asegurarnos de que esté instalado escribe en una terminal la palabra git. Si no está instalado te pedirá que instes las utilidades de línea de comando de xcode. Sigue las instrucciones en pantalla.
Una vez se hayan instalado las utilidades de línea de commandos, al escribir git en la terminal deberán desplegarse las opciones del programa. Antes de hacer otra cosa configura GIT dándole tu información de contacto para los commits de la siguiente manera:
git config -f ~/.gitlocal user.email “email@tucorreo.com
git config -f ~/.gitlocal user.name “Nombre y apellido”
OH MY ZSH!
Es un framework de plugins para agregar funciones a zsh y configurar como se ve, y plugins instalados. Para que funcione es necesario tener ZSH v4.3.9 mínimo pero se recomienda tener ZSH v5.0.8 o mas reciente. Para saber que versión está instalada en el sistema escribe el siguiente comando:
echo $ZSH_VERSION
5.8.1
En el extraño caso de que no sea suficiente esta versión se puede instalar una versión más reciente con Homebrew.
brew install zsh
Esto instalará la versión mas reciente. Después será necesario cambiar la ubicación de ZSH como describimos arriba.
Para instalar oh-my-zsh usa el siguiente comando en la terminal:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
Asumiendo que no hay ningún editor de texto para código en la computadora como Visual Studio Code y que Vim no está configurado, la manera mas sencilla de configurar oh-my-zsh usaremos nano para hacer unos ajustes rápidos. Ejecuta los siguientes comandos:
cd
nano .zshrc
Elimina el # y espacio antes de la variable HIST_STAMPS y cambia su valor a "yyyy/mm/dd". Sal de nano presionando ctrl+x y después y para guardar los cambios y finalmente enter.
Homebrew
Por alguna extraña razón Apple no ha diseñado un manejador de paquetes oficial para la Mac. Hasta Windows tiene uno 🧐. Sin embargo la comunidad obviamente ya ha diseñado varios. El que me gusta usar es Homebrew.
Es sencillo de instalar, solo hay que ejecutar el siguiente comando:
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
Sigue las instrucciones en pantalla y listo. Los paquetes que siempre instalo con Homebrew en todas las computadoras son los siguientes:
brew install wget cask htop youtube-dl speedtest-cli tree mas midnight-commander jq tmux cmatrix imagemagick archey4 figlet vim cmake deno ffmpeg webp perl sass/sass/sass
brew tap dart-lang/dart
brew install dart
También aprovecho el viaje para instalar unas apps de escritorio:
brew install –cask sequel-ace
brew install –cask visual-studio-code
brew install –cask veracrypt
brew install –cask kaleidoscope
brew install –cask sourcetree
brew install –cask iterm2
brew install –cask mysqlworkbench
brew install –cask macgdbp
Fuentes parchadas para tu terminal. Estas fuentes tienen además de letras y números símbolos para distintos símbolos en la terminal:
brew tap homebrew/cask-fonts
brew install –cask font-ubuntu-mono-nerd-font font-ubuntu-nerd-font font-roboto-mono-nerd-font font-fira-code font-fira-code-nerd-font font-fira-mono font-fira-mono-for-powerline font-fira-mono-nerd-font font-fira-sans font-fira-sans-condensed font-fira-sans-extra-condensed font-monofur-for-powerline font-monofur-nerd-font font-proggy-clean-tt-nerd-font
Instalar unos cuantos SDKs
¿Si no soy programador por que agrego tantas herramientas de desarrollo y lenguajes de programación? Bueno, nunca dije que nunca toque código. Simplemente me toca editar cosas mínimas en él y probar que funcione. Para eso es necesario tener ciertos SDKs y lenguages de programación en caso de que tenga que usar uno u otro en los proyectos.
NodeJS
A veces es necesario tenerlo instalado para correr otros programas sobre él. Me choca JS pero bueno, es un mal necesario. Puede descargarse del sitio oficial pero en mi experiencia hay problemas de permisos. Lo mas sencillo es instalarlo vía Homebrew.
brew install node npm
Asegúrate de instalar también NPM al correr el instalador.
Un ejemplo de utilidades que corren en Node, Gulp:
npm install –global gulp-cli
npm install –global typescript
Rust
Para compilar todos esos proyectos hipsters que alguien escribe en el nuevo lenguaje de moda:
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
Python/Conda
Quisiera decir que Python es un lenguage bueno para trabajar en mi Mac, pero por lo visto muchas librerías que simplemente no funcionan en Macs con procesadores M1/M2. Sin embargo prefiero usar Conda para manejar versiones de Python en la computadora que usar pyenv que no me deja ejecutar todas las versiones de Python (especialmente las viejitas) y que no tiene soporte completo con pip en MacOS.
Puedes descargar Conda desde aquí: anaconda.com/products/distribution#macos
Asegúrate de seleccionar la versión para tu tipo de procesador y ver las instrucciones de instalación.
Spaceship
Pimp my terminal! Ok no. Pero Spaceship agrega muchas funciones interesantes que te hacen saber el contexto en el que te encuentras en tu terminal. Para instalarlos en oh-my-zsh corre los siguientes comandos:
git clone https://github.com/spaceship-prompt/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1
ln -s “$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme” “$ZSH_CUSTOM/themes/spaceship.zsh-theme”
Para configurar oh-my-zsh para que utilice Spaceship como tema modificamos el archivo .zshrc con nano:
nano $HOME/.zshrc
Edita la variable ZSH_THEME="spaceship". Sería genial si eso fuese todo lo que hay que hacer, sin embargo hay un problema con Warp y spaceship, supongo que debe estar relacionado con la velocidad de la luz (chiste de física). Por el momento no es posible usar el tema spaceship en Warp, pero eso no significa que sea completamente inútil. Se puede agregar una excepción al archivo .zshrc para Warp y que este programa use otro tema en la terminal. Deberá verse algo así:
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="spaceship"
if [[ $TERM_PROGRAM == "WarpTerminal" ]]; then
ZSH_THEME="agnoster"
DEFAULT_USER=$(whoami)
fi
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load Finalmente, cierra nano con CTRL+X, Y y Enter y luego ejecuta el comando source $HOME/.zshrc
Configurar Apps para trabajar con la terminal
Si bien es cierto, es posible hacer mucho trabajo (o casi todo) desde la terminal, eso también requiere cierto grado de mazoquismo. Por eso, ya que hemos instalado todos los SDKs que quería, iTerm y Warp, plugins y temas para ZSH, un manejador de paquetes, fuentes y unas apps de termina y de GUI, ya podemos configurar lo que hemos instalado.
Visual Studio Code
Abre el programa y presiona CMD + Shift + P. Aparecerá un buscador, escribe code, el buscador autocompletará algo similar a Instalar commando o similar. En inglés dice: “Shell Command: Install ‘code’ command in PATH”.
Ahora podemos abrir documentos en Visual Studio Code usando el commando code.
Configurar Spaceship
Ejecuta los siguientes comandos para crear un archivo de configuración para Spaceship y ábrelo con Visual Studio Code:
touch .spaceshiprc.zsh
code .spaceshiprc.zsh
Después copia las siguientes configuraciones al archivo:
# Display time
SPACESHIP_TIME_SHOW=true
# Display folder
SPACESHIP_DIR_PREFIX="in 📂 "
# Display username always
SPACESHIP_USER_SHOW=always
SPACESHIP_USER_PREFIX="with·👤"
SPACESHIP_USER_SUFFIX="🚀 "
# Do not truncate path in repos
SPACESHIP_DIR_TRUNC_REPO=false
# Battery 🔋
SPACESHIP_BATTERY_SHOW=always
SPACESHIP_BATTERY_SYMBOL_CHARGING=🔌
SPACESHIP_BATTERY_SYMBOL_DISCHARGING=🪫
SPACESHIP_BATTERY_SYMBOL_FULL=🔋
# Exit code exit_code
SPACESHIP_EXIT_CODE_SHOW=true
SPACESHIP_EXIT_CODE_SYMBOL=❌
SPACESHIP_EXIT_CODE_PREFIX=' '
SPACESHIP_EXIT_CODE_SUFFIX=' '
# This sets host to be always displayed
SPACESHIP_HOST_SHOW="always"
SPACESHIP_HOST_SHOW_FULL=true
SPACESHIP_HOST_PREFIX="💻 "
# Execution time exec_time ⏰
# This sets threshold to 5 seconds
SPACESHIP_EXEC_TIME_ELAPSED=5
# This sents precision to 2 digits
SPACESHIP_EXEC_TIME_PRECISION=2Guarda y cierra. Si todo salió bien debe de verse así:
En iTerm

En Warp

Kaleidoscope
Se puede usar Kaleidoscope para comparar múltiples archivos de texto, folders e imagenes. Es una app de paga, algo cara que si no fuese porque tengo una licencia desde hace años probablemente prescindiría de ella… creo… tal vez no, es muy útil. Se puede configurar para que sea el DIFF editor de GIT así como hacer que sea posible comparar 2 archivos desde la terminal.
Abre Kaleidoscope y presiona el menú Kaleidoscope > Integration…

Instala ksdiff

Finalmente también habilita la integración con GIT:

SourceTree
Probablemente el mejor GUI para GIT que es gratis (Tower, si me quieres regalar una licencia, adelante). Para configurarlo con la terminal instala las herramientas de línea de comandos.

.zshrcAbre .zshrc con VS Code
code $HOME/.zshrc
Añade la siguiente línea:
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
alias stree="/Applications/SourceTree.app/Contents/Resources/stree"Abre las configuraciones con CMD + , y navega a la pestaña DIFF.

MAMP Pro

Si, ya sé que Docker existe. Sí, ya sé que “PHP está muerto bro”, que podría instalarlo via Homebrew o que hay otras opciones gratuitas. Pero llevo 5 o 6 años con mi licencia así que es algo que siempre instalo. Es práctico, es rápido y además configura los nuevos hosts de manera rápida.
MAMP y MAMP Pro están disponibles en www.mamp.info. Instálalo como cualquier programa normal. Activa la licencia y abre la ventana principal de MAMP Pro.


Primero que nada, navega a Ports & User y pon los puertos predeterminados con el botón “Set Ports to 80, 81, 443, 7443, 3306 & 11211”.
Asegúrate que “Run servers as:” tenga activado tu usuario.
Para abrir las opciones de MAMP Pro presiona CMD + , en el teclado como con cualquier otra app.
Navega a la pestaña Server y cambia el inicio de los servidores a “on System Startup” y desactiva “Stop Servers: when quitting MAMP Pro”. Así no tiene que estar abierta la ventana todo el tiempo y podemos accesar a los programas desde la terminal cuando sea.


Navega a la pestaña PHP y selecciona la versión de PHP que quieres usar, también activa:
- “Activate command line shortcuts for the selected PHP version, pear, pecl, et al”. Esto hará un alias en el archivo
~/.profile. - “Also activate shortcut for Composer.” Esto habilitará composer en la terminal. Probablemente tenga que ser actualizado, pero es mas sencillo actualizarlo así a bajar la versión mas nueva y ponerla en el folder donde recomiendan que se instale.
- Selecciona “OPcache” para precompilar PHP y ejecutarlo de manera más rápida.
- Y selcciona todas las librerías que necesites o quieras habilitar.
Existe la opción de instalar otros intérpretes de lenguages en desde MAMP, pero las versiones de Python que instalamos con Anaconda, la versión de Perl que se instaló con Homebrew y las versiones de Ruby que vienen con el sistema son todas mas nuevas que las disponibles en MAMP.
SSH

En vez de dejar instrucciones aquí sobre como configurar SSH, mejor dejo un enlace a GitHub donde se muestra como crear las llaves.
Copia tu nueva ID RSA al servidor con el que estás trabajando para no necesitar insertar password:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 7822 user@server.com
En mi caso el argumento -p 7822 antes del usuario y servidor es porque SSH no escucha en el predeterminado puerto 22. La primera mitad es la ruta a la llave id_rsa.pub que generamos en el tutorial de GitHub. Es probable que tengas en vez de esa una llave id_ed25519.pub o similar, en cuyo caso solo sustituye la llave en el comando y listo. Pedirá la llave del servidor por última vez y la próxima conexión debería de ser sin requerir contraseña.
Si el servidor pide contraseñas a pesar de que tiene la llave en el ~/.ssh/authorized_keys puede que sea un problema de permisos en el servidor o que el servidor no acepta autenticación via llaves. En caso de ser un problema de permisos solo ejecuta los siguientes comandos en el servidor.
chmod 700 ~/.ssh
chmod 644 ~/.ssh/*.pub
chmod 600 ~/.ssh/id_rsa ## O cualquier otro archivo de identidad.
chmod 755 $HOME
Edita el archivo ~/.zshrc para incluir las siguientes 4 líneas debajo de "You may need to manually set your language environment"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
Esto evitará que haya problemas al conectarse a servidores que no tengan pre-establecido un paquete de idioma.
Mensaje de bienvenida
Esta parte ya no tiene mucho uso práctico real, pero siempre me gusta agregar un mensaje de identificación a la terminal para saber a que computadora me he conectado y algunos datos básicos.
Para colorear un poco utilizo lolcat, un programa distribuido como Ruby Gem.
gem install –user-install lolcat
WARNING: You don’t have /Users/dariosantacruz/.gem/ruby/2.6.0/bin in your PATH,
gem executables will not run.
echo “export PATH=\$HOME/.gem/ruby/2.6.0/bin:\$PATH” >> ~/.oh-my-zsh/custom/paths.zsh
El último comando creará un archivo para llevar control de las ubicaciones de las carpetas nuestras agregadas al $PATH. Una nueva ventana de terminal ya cargará esta configuración.
Crea un archivo llamado generalinfo.sh en la carpeta ~/.oh-my-zsh/custom/
#!/bin/bash
# Obtener la dirección IP pública
PUBLICIP=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com)
PUBLICIP=${PUBLICIP//\"/}
# Mostrar el nombre de host en arte ASCII con color
echo ${HOSTNAME%.local} | figlet -w 80 -f slant | lolcat
# Obtener las direcciones IP de los adaptadores
WI_FI_IP=$(ipconfig getifaddr en0)
ETHERNET_1_IP=$(ipconfig getifaddr en4)
ETHERNET_2_IP=$(ipconfig getifaddr en7)
# Reemplazar con "-" si la dirección IP está vacía
WI_FI_IP=${WI_FI_IP:-"-"}
ETHERNET_1_IP=${ETHERNET_1_IP:-"-"}
ETHERNET_2_IP=${ETHERNET_2_IP:-"-"}
# Mostrar las direcciones IP
echo "Direcciones IP:
📶 Wi-Fi : ${WI_FI_IP}
🔌 Ethernet 1 : ${ETHERNET_1_IP}
🔌 Ethernet 2 : ${ETHERNET_2_IP}
🌎 IP Pública : ${PUBLICIP}" | lolcat
# Salir con código de estado 0
exit 0Finalmente dale permisos de ejecución a el script $ chmod +x ~/.oh-my-zsh/custom/inicio.sh y edita el archivo al final ~/.zshrc para ejecutarlo.
unset __conda_setup
# <<< conda initialize <<<
./.oh-my-zsh/custom/inicio.shEsto puede aumentar un par de segundos el tiempo que tarda en iniciar la terminal. Esto es especialmente por el comando figlet. Puedes sustituirlo por texto o removerlo si quieres. Para mi es útil pues puedo compartir los mismos ajustes en todas mis computadoras y cada una se ajusta a decir su nombre, sin embargo mi laptop tiene 2 adaptadores de Ethernet (uno que viene con el adaptador de USB, HDMI y lector de memorias que no es gigabit pero es práctico y uno Gigabit que es el principal, entonces de todas maneras es necesario cambiar la dirección de los adaptadores, pero es suficiente.


