BookinglyTech News
Software

Un único .zshrc para macOS y WSL2 con dos condicionales en vez de dos ficheros

Un desarrollador explica cómo comparte el mismo fichero .zshrc entre macOS y WSL2 dejando las diferencias de sistema en un bloque condicional mínimo.

2 min de lecturaLobsters0 vistas

Mantener un .zshrc distinto para macOS y otro para WSL2 termina mal: tarde o temprano actualizas uno y te olvidas del otro. Un desarrollador que trabaja a diario en un MacBook y en dos equipos Windows con WSL2 ha publicado cómo se apaña con un solo fichero compartido, con las diferencias de sistema encerradas en un único bloque condicional.

Lo reparte con chezmoi, así que el fichero vive en un repositorio de dotfiles y se despliega en todas las máquinas. La regla que sigue es simple: todo compartido por defecto, y condicional solo cuando el sistema operativo importa de verdad.

Saber si estás dentro de WSL

El primer paso es distinguir el entorno antes de ejecutar nada más. En WSL, /proc/version contiene la cadena de Microsoft, así que basta un grep -qi microsoft /proc/version con la salida de error redirigida a /dev/null. En macOS ese fichero no existe, la comprobación falla sin ruido y la variable IS_WSL se queda sin definir. El flag -q evita que el resultado se imprima en cada arranque del shell y el -i hace la comparación insensible a mayúsculas, de modo que no depende de cómo escriba Microsoft su propio nombre.

SSH y el explorador de archivos

El autor usa el agente ssh de 1Password para no tener claves privadas en ~/.ssh. El detalle que rompe la comodidad es que ese agente corre dentro de la aplicación de Windows, no dentro de WSL, así que en la sesión de WSL apunta las órdenes ssh y ssh-add a ssh.exe y ssh-add.exe.

Ahí aparece una trampa que conviene conocer: un alias solo existe en el shell interactivo. Cuando Git invoca ssh por su cuenta no ve ese alias, así que hay que exportar GIT_SSH_COMMAND apuntando al binario de Windows. Lo mismo con scp, que también necesita su alias.

Para abrir la carpeta actual en el explorador hay un caso parecido. En macOS open . abre Finder; en WSL el equivalente es explorer.exe ., pero pasándole la ruta convertida con wslpath -w. Como open ya es un comando del sistema en macOS, la función solo se redefine bajo WSL y el 2>/dev/null se come el aviso que Windows devuelve por stderr.

El resultado es un fichero que se comporta como una configuración nativa en los dos sitios y donde todo lo específico de Windows cabe de un vistazo. Lo que está en juego no es la elegancia del script, sino la deriva entre máquinas: cuanto menos código dedicado a cada sistema, menos ocasiones de que una máquina y otra acaben ejecutando cosas distintas. Queda por ver si el autor mantiene el bloque condicional tan corto cuando empiecen a acumularse excepciones, que es exactamente el momento en que este tipo de ficheros se descontrola.