Automatización total de WSL2 con Zsh y Oh My Zsh en Windows

Última actualización: 26 de febrero de 2026
  • WSL2 permite usar un Linux completo dentro de Windows y combinarlo con Zsh para lograr una terminal potente y moderna.
  • Windows Terminal, Nerd Fonts y Oh My Zsh mejoran la experiencia visual y funcional con temas, iconos, plugins y alias personalizados.
  • Scripts de bootstrap, dotfiles y Dev Containers facilitan automatizar y versionar el entorno para todo un equipo de desarrollo.
  • La integración con VS Code y herramientas como NVM, Conda, BAT, LSD o FZF crea un flujo de trabajo sólido y reproducible.

Automatización WSL2 Zsh en Windows

Si desarrollas en Node.js o Python desde Windows y quieres la comodidad de Linux sin abandonar tus juegos, tus herramientas habituales ni tu flujo de trabajo, WSL2 y Zsh son probablemente el combo que estabas buscando. Poder tener una distro de Linux real, con una terminal vitaminada y todo perfectamente automatizado, hace que montar un entorno de desarrollo ya no sea un suplicio de horas copiando comandos.

En esta guía vas a ver, con bastante mimo y detalle, cómo dejar totalmente automatizado un entorno WSL2 con Zsh y Oh My Zsh, cómo integrarlo con Windows Terminal y Visual Studio Code, y cómo empacarlo en scripts y dotfiles para que tú (o cualquiera de tu equipo) podáis replicar el mismo setup en minutos. La idea es que pases menos tiempo peleándote con la configuración y más tiempo picando código a gusto.

Qué es WSL2 y por qué merece la pena usarlo con Zsh

WSL (Windows Subsystem for Linux) es la capa que permite ejecutar Linux dentro de Windows sin máquinas virtuales pesadas ni arranque dual. Con WSL2, Microsoft da un paso más: corre un kernel Linux completo usando Hyper-V, con un consumo de recursos muy contenido y un rendimiento muy cercano a una instalación nativa.

Gracias a esto puedes instalar distribuciones como Ubuntu, Debian, Kali o Alpine directamente desde la Microsoft Store o con comandos en PowerShell, y disfrutar de un sistema de ficheros Linux, paquetes apt, herramientas de desarrollo y, por supuesto, shells avanzadas como Zsh con Oh My Zsh y sus plugins.

Durante muchos años, programar desde Windows era poco atractivo: sin bash, con un sistema de archivos incómodo y menos tooling nativo para desarrolladores, la mayoría terminaba migrando a Linux o macOS. Con WSL2, esto cambia radicalmente: sigues en Windows, pero trabajas como si estuvieras en una distro Linux, con la posibilidad de automatizar casi todo el proceso de configuración.

La gracia de combinar WSL2 con Zsh está en que Zsh ofrece una experiencia de terminal muy superior a la clásica bash: autocompletado avanzado, sugerencias, temas, integración con Git, plugins para NVM, alias, resaltado de sintaxis y un largo etcétera que, una vez pruebas, cuesta dejar atrás.

Entorno WSL2 y Zsh personalizado

Instalar y preparar WSL2 en Windows 10 u 11

Antes de meternos en temas de automatización fina, necesitas WSL2 activo y una distro Linux instalada. El proceso hoy en día es mucho más sencillo que en las primeras versiones, y se puede hacer casi todo con un solo comando.

En Windows 10 reciente (versión 2004 o superior) o Windows 11, basta con abrir PowerShell como administrador (búscalo en el menú Inicio, botón derecho, “Ejecutar como administrador”) y lanzar:

wsl --install

Este comando se encarga de habilitar las características opcionales necesarias, descargar el kernel de Linux, establecer WSL2 como versión por defecto e instalar por defecto Ubuntu como distribución. Al terminar el proceso, el sistema te pedirá que reinicies el equipo para aplicar los cambios.

Si prefieres otra distro, puedes especificarla en el propio comando, por ejemplo para instalar Debian:

wsl --install -d Debian

En cualquier momento puedes consultar el estado de las distribuciones instaladas y sus versiones con:

wsl -l -v

Y si quieres cambiar de distro o limpiar alguna que ya no uses, tienes a mano opciones como listar las distribuciones disponibles online o eliminar una instalación concreta:

wsl -l -o
wsl --unregister Ubuntu-20.04

Cuando lances por primera vez tu distribución, aparecerá un asistente en modo texto pidiéndote que crees un usuario UNIX y su contraseña. Ese será tu usuario principal dentro de WSL, con su HOME típico en /home/tuusuario, y es importante que anotes usuario y clave porque son los que usarás para tareas administrativas con sudo.

Configurar Windows Terminal para trabajar con WSL2

Una vez que tienes WSL2 operativo, el siguiente paso lógico es mejorar la experiencia de línea de comandos en Windows usando Windows Terminal. Esta aplicación soporta pestañas, paneles, temas, transparencias, perfiles por distro, fuentes con iconos y un largo etcétera.

Instala Windows Terminal desde la Microsoft Store y, cuando la abras, verás que por defecto suele mostrar un perfil de PowerShell o CMD. Desde la flecha desplegable de pestañas podrás elegir tu distro de WSL (Ubuntu, Debian, etc.) y abrirla en una pestaña nueva.

Para que Ubuntu o la distro que uses en WSL se abra siempre por defecto, puedes editar la configuración. Windows Terminal guarda sus ajustes en un fichero JSON, accesible desde el menú de configuración. Localiza el campo "defaultProfile" y pon el GUID del perfil de Ubuntu (lo verás en el listado profiles) como valor.

Además de eso, puedes personalizar temas de colores y añadir transparencia acrílica para darle un toque más moderno. Por ejemplo, en la parte de "defaults" de los perfiles puedes definir algo así:

  Cómo mejorar la productividad en Windows 11 con trucos y ajustes clave

"defaults": {
"useAcrylic": true,
"acrylicOpacity": 0.4
}

Si te apetece ir un paso más allá con los colores, puedes añadir un esquema personalizado en la sección "schemes" del JSON, definiendo colores de fondo, primer plano, y la paleta básica de la terminal. Un ejemplo típico sería algo como un tema solarizado, al que luego podrás asociar un perfil de WSL mediante la propiedad "colorScheme" : "wsl" en el perfil correspondiente.

Windows Terminal con WSL2 y Zsh

Instalar y automatizar Zsh + Oh My Zsh en WSL2

Con la base de WSL y Windows Terminal lista, toca meterle chicha a la shell. Zsh es una alternativa mucho más potente a bash, y combinada con Oh My Zsh se convierte en una navaja suiza para trabajar con Git, Node, Python y prácticamente cualquier cosa en terminal.

En tu distro de WSL (por ejemplo Ubuntu), comienza por actualizar los repositorios e instalar los paquetes mínimos necesarios:

sudo apt update
sudo apt install git zsh -y

Después instala Oh My Zsh con el script oficial, aprovechando curl para descargar el instalador y ejecutarlo directamente:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Durante la instalación se te preguntará si quieres establecer Zsh como shell por defecto; dile que sí. Si en alguna ocasión necesitas hacerlo a mano, puedes usar:

chsh -s /bin/zsh

Al terminar, se generará un archivo de configuración en tu HOME llamado ~/.zshrc, donde se controla todo: plugins, tema, alias, entorno, rutas…

Un tema muy popular para Oh My Zsh es agnoster, centrado en mostrar información de Git de forma clara. Para activarlo, edita el archivo ~/.zshrc con tu editor preferido (por ejemplo vi ~/.zshrc o nano ~/.zshrc) y asegúrate de que la línea del tema queda así:

ZSH_THEME="agnoster"

También es recomendable que, tanto en bash como en Zsh, fuerces que la shell se inicie en tu HOME de Linux (no en la carpeta de usuario de Windows), ya que WSL funciona mucho mejor dentro del sistema de archivos nativo de la distro. Basta con añadir al final de ~/.zshrc una línea simple:

cd ~

Fuentes Nerd Fonts y Powerline: iconos y estética en la terminal

Para que los temas de Zsh y Oh My Zsh se vean como está previsto, necesitas una fuente compatible con iconos y símbolos especiales (las llamadas Nerd Fonts o fuentes Powerline). Si no lo haces, verás cuadraditos raros o caracteres rotos en los prompt más avanzados.

Tienes dos opciones populares: instalar un paquete de fuentes Powerline clásico o apostar por alguna Nerd Font concreta como MesloLGS NF o Hack Nerd Font. Un método rápido es clonar el repositorio de fuentes Powerline desde PowerShell en Windows, situándote antes en una carpeta vacía:

git clone https://github.com/powerline/fonts.git
cd fonts
.\install.ps1

El script de instalación añadirá automáticamente un buen puñado de fuentes al sistema. Después, desde los ajustes de Windows Terminal, selecciona una de las fuentes instaladas para el perfil de WSL, por ejemplo:

"fontFace": "DejaVu Sans Mono for Powerline"

Si prefieres algo todavía más moderno, puedes descargar una Nerd Font específica (como MesloLGS NF Regular.ttf) desde la web de Nerd Fonts, instalarla en Windows haciendo doble clic y “Instalar”, y luego elegirla como fuente en el perfil de Windows Terminal.

En el caso de usar temas avanzados como Powerlevel10k, es muy recomendable tirar de Nerd Fonts. Para instalar este tema, dentro de tu usuario de WSL puedes hacer:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc

Tras recargar Zsh (zsh o cerrar y abrir la terminal), se lanzará un asistente guiado (p10k configure) para personalizar el prompt a tu gusto, generando un archivo ~/.p10k.zsh con toda la configuración.

Automatización avanzada de WSL2 y Zsh

Plugins útiles para Zsh: productividad instantánea

Una de las grandes ventajas de Oh My Zsh es que permite añadir plugins de forma muy sencilla para mejorar la experiencia de trabajo. Algunos de los más usados en entornos de desarrollo con WSL2 son los siguientes.

El plugin git viene activado por defecto y se encarga de mostrar en qué rama estás, si tienes cambios pendientes, si hay commits sin subir… todo directamente en el prompt. Es perfecto para no perder la pista del estado de tu repositorio mientras navegas.

Otro clásico es zsh-autosuggestions, que va proponiendo comandos en gris basándose en tu historial, de forma que puedas aceptar la sugerencia con una tecla y evitar escribir una y otra vez las mismas combinaciones largas. Para instalarlo:

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

También es muy recomendable zsh-syntax-highlighting, que colorea los comandos según si están bien escritos, si existen o no los ficheros que apuntas, etc., ayudándote a detectar errores de sintaxis antes de pulsar Enter:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting

Para activar estos plugins, añade al final de tu ~/.zshrc algo como:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Otro extra muy práctico es el plugin de sudo de Oh My Zsh, que te permite, por ejemplo, pulsar una combinación de teclas para añadir rápidamente “sudo” delante del último comando ejecutado. Puedes descargarlo así:

mkdir -p ~/.zsh/sudo-plugin && cd ~/.zsh/sudo-plugin
wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/sudo/sudo.plugin.zsh

Y activarlo añadiendo en tu ~/.zshrc:

source ~/.zsh/sudo-plugin/sudo.plugin.zsh

Herramientas de línea de comandos mejoradas (BAT, LSD, FZF, HTTPie)

Ya que estás tuneando la terminal, merece la pena instalar algunas alternativas modernas a utilidades clásicas como cat o ls, así como herramientas de búsqueda y clientes HTTP amigables.

  Claves Windows OEM: ¿Qué son y en qué se diferencian de Retail?

BAT es una versión “pro” de cat, con resaltado de sintaxis, numeración, integración con Git… Ideal para leer ficheros de código directamente en la terminal. Puedes instalarlo descargando el paquete correspondiente desde GitHub (adaptándolo a tu arquitectura):

wget https://github.com/sharkdp/bat/releases/download/v0.20.0/bat_0.20.0_amd64.deb
sudo dpkg -i bat_0.20.0_amd64.deb

Para integrarlo en tu flujo, puedes crear alias en ~/.zshrc de manera que al escribir cat en realidad llame a BAT, pero conservando accesos directos a la utilidad tradicional:

alias cat='/bin/bat'
alias catn='/bin/cat'
alias catnl='/bin/bat --paging=never'

Por su parte, LSD reemplaza a ls con colores, iconos y una salida mucho más legible. Se instala de forma similar a BAT:

wget https://github.com/Peltoche/lsd/releases/download/0.21.0/lsd_0.21.0_amd64.deb
sudo dpkg -i lsd_0.21.0_amd64.deb

Después, puedes redefinir alias comunes para ordenar directorios, mostrar detalles, ocultos, etc., por ejemplo:

alias ll='lsd -lh --group-dirs=first'
alias la='lsd -a --group-dirs=first'
alias l='lsd --group-dirs=first'
alias lla='lsd -lha --group-dirs=first'
alias ls='lsd --group-dirs=first'

Para búsquedas interactivas dentro de la terminal, FZF es casi imprescindible: lanza un buscador incremental que se integra con el historial, rutas y otros comandos. Se instala clonando su repositorio y ejecutando el script de instalación:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

El instalador añadirá a tu ~/.zshrc el source correspondiente (algo como [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh) para que todo quede listo. Se activa con atajos como CTRL + T.

Por último, si trabajas con APIs, HTTPie ofrece una experiencia mucho más cómoda que curl, con salida coloreada y sintaxis muy legible. Puedes instalarlo añadiendo su repositorio y usando apt:

curl -SsL https://packages.httpie.io/deb/KEY.gpg | apt-key add -
curl -SsL -o /etc/apt/sources.list.d/httpie.list https://packages.httpie.io/deb/httpie.list
apt update
apt install httpie
apt upgrade httpie

Node.js, NVM, Python y otras herramientas en WSL2

Uno de los motivos principales para montar este tinglado es poder tener un entorno sólido para Node.js, Python y otras tecnologías, con una gestión de versiones sencilla y reproducible. Aquí entra en juego NVM para Node y herramientas como Conda para Python.

En el caso de Node, lo ideal es usar NVM (Node Version Manager), que te permite instalar múltiples versiones y cambiar entre ellas con un par de comandos. Desde tu WSL2, puedes instalar NVM con:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh

Después, instala Node (la versión estable actual o una concreta):

nvm install node
nvm install 18.17.0

Si quieres comprobar que todo está en orden, tienes a mano los típicos comandos de verificación de versión, que deben devolver valores válidos:

node --version
npm --version

Con Zsh, a veces NVM no se carga automáticamente al abrir la terminal. Puedes solucionarlo de dos formas: añadiendo manualmente las variables necesarias a ~/.zshrc o usando el plugin zsh-nvm de Oh My Zsh. La variante manual podría ser algo así:

export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

Si optas por el plugin, abre ~/.zshrc, localiza la línea de plugins (por ejemplo plugins=(git)) y añade zsh-nvm a la lista. Al guardar y reiniciar la terminal, NVM debería cargarse sin problema.

Para Python, una opción muy potente es Conda (o Miniconda), que permite crear entornos aislados, gestionar dependencias y manejar versiones de Python sin pelearte con el sistema global. Existen scripts automatizados que, dentro de un repositorio de configuración de WSL, instalan Conda, GPU drivers y otros componentes de forma casi transparente.

Automatizar la configuración con scripts, dotfiles y Dev Containers

Hasta ahora hemos visto cómo configurar todo “a mano”, pero la clave de un buen entorno de trabajo, sobre todo en equipos, está en automatizar el onboarding y versionar la configuración. WSL2 es perfecto para esto porque permite empaquetar desde la instalación hasta la personalización de la shell.

Un enfoque muy habitual es tener un script de bootstrap (por ejemplo install.sh o setup.sh) en un repositorio del equipo que haga, en cadena, tareas como:

  • Comprobar prerequisitos (versión de Windows, WSL2 activo, presencia de Docker Desktop si hace falta, etc.).
  • Instalar o actualizar la distro de WSL, paquetes básicos, Zsh, Oh My Zsh, NVM, Conda, etc.
  • Clonar y aplicar dotfiles (.zshrc, .bashrc, .gitconfig, ficheros de tema, alias compartidos…).
  • Instalar herramientas del stack del proyecto (Node, Python, bases de datos, CLIs específicas).
  • Configurar scripts de validación como make check-env para verificar que todo ha quedado correcto.

Estos scripts deben ser idempotentes, es decir, que se puedan ejecutar varias veces sin romper nada, y conviene documentar todas las variables de entorno en un archivo tipo .env.example para que cada persona pueda personalizar su entorno sin tocar el script principal.

Otra capa muy potente son los Dev Containers de VS Code (.devcontainer). Consisten en descripciones declarativas del entorno (Dockerfile, configuración de VS Code, extensiones, puertos, etc.) que permiten que cada proyecto tenga su contenedor de desarrollo. Combinados con WSL2, gracias a la extensión Remote – WSL, puedes abrir un repositorio en un contenedor Linux dentro de WSL y garantizar que todo el mundo tiene mismas versiones y herramientas.

En paralelo, mantener un repositorio de dotfiles versionados (por ejemplo en GitHub) ayuda a compartir y sincronizar la configuración de la shell, alias, temas y programas entre varios equipos o incluso entre distintas máquinas de un mismo desarrollador. Herramientas como chezmoi o simples scripts de copia simbólica se usan mucho para eso.

  Cómo activar la protección contra ransomware en Windows 11

Integración de WSL2 y Zsh con Visual Studio Code

La experiencia mejora bastante si integras todo este entorno con un editor ligero pero muy capaz como Visual Studio Code. La idea es que VS Code trabaje directamente contra el sistema de archivos de WSL, evitando problemas de rendimiento y permisos.

Primero instala VS Code en Windows desde su web oficial. Luego, desde el propio editor, abre la pestaña de extensiones (atajo Ctrl + Shift + X) y busca e instala la extensión “Remote – WSL”. Esta extensión permite abrir carpetas y proyectos situados en tu distro Linux, con toda la lógica corriendo dentro de WSL.

Una vez instalada, podrás lanzar desde tu terminal de Ubuntu el comando:

code .

Esto abrirá VS Code, conectado al entorno WSL y con acceso completo a las herramientas que tengas instaladas allí. Para rematar la integración visual, puedes configurar la terminal integrada de VS Code para que use la misma fuente Nerd Font que has seleccionado en Windows Terminal, de forma que los iconos también se vean bien:

{
"terminal.integrated.fontFamily": "DejaVu Sans Mono for Powerline"
}

En el archivo settings.json de VS Code también puedes establecer que la terminal integrada por defecto en Windows sea directamente tu Ubuntu en WSL, configurando un perfil como:

"terminal.integrated.profiles.windows": {
"Ubuntu (WSL)": {
"path": "C:\\Windows\\System32\\wsl.exe",
"args": ["-d", "Ubuntu"]
}
},
"terminal.integrated.defaultProfile.windows": "Ubuntu (WSL)"

Y ya que estás, puedes aprovechar para activar formateo automático al guardar, coloreado de parejas de paréntesis y otras pequeñas mejoras que hacen el día a día más agradable en el editor.

Scripts automatizados y repositorios completos de configuración WSL2

Aunque puedes montarte tu propia infraestructura de scripts, también existe la opción de apoyarte en repositorios ya preparados que automatizan gran parte del trabajo. Algunos concentran guías de Linux, scripts para instalar utilidades de terminal (Oh My Zsh, plugins, temas), Conda, controladores de GPU y otros componentes esenciales de un entorno de data science o desarrollo web.

La idea detrás de estos repositorios es clara: con un solo comando se ejecuta un script Bash que actualiza la distro, instala curl y Node.js cuando es necesario, se encarga de NVM, descarga fuentes tipo Nerd Fonts, configura Zsh con un tema y un set de plugins y alias razonables, y deja tu terminal lista para usar.

Durante la ejecución de estos scripts verás que, en varios puntos, se te pedirá tu contraseña de administrador debido al uso de sudo. Es completamente normal, ya que se instalan paquetes, se modifican rutas del sistema y se copian ficheros a ubicaciones protegidas.

En algunos casos, te pedirán que elijas la versión concreta de herramientas como BAT o LSD (por ejemplo bat_0.25.0_amd64.deb o lsd_1.1.5_amd64.deb), que depende tanto de la versión disponible en GitHub como de la arquitectura de tu máquina (lo habitual hoy en día es amd64). Asegúrate de seleccionar la correcta para evitar errores de paquetes incompatibles.

El resultado de este tipo de scripts es un entorno en el que Zsh tiene ya un archivo .zshrc muy completo, con tema, plugins, alias para cat/ls, integración con Gitmoji para commits con iconos cuando vas justo de inspiración, syntax highlight, autocompletado de Oh My Zsh y más chucherías. Vaya, una terminal de esas que dan ganas de tener en pantalla todo el día.

Para rematar la personalización, puedes incluso ajustar los temas para que muestren solo el usuario (y oculten el hostname) modificando directamente archivos de tema concretos, como agnoster.zsh-theme en la ruta ~/.oh-my-zsh/themes, cambiando la línea correspondiente por algo del estilo:

prompt_segment green black "%(!.%{%F{yellow}%}.)%n"

Con todo esto, lo que consigues es que cualquier desarrollador del equipo pueda clonar el repo de configuración, ejecutar un comando y tener en pocos minutos el mismo entorno que el resto: misma shell, mismo tema, mismas versiones de herramientas base y mismo comportamiento de la terminal, sin viajes de “me funciona en mi PC” o “no recuerdo qué instalé aquel día”.

Al final, montar y automatizar un entorno con WSL2 y Zsh consiste en combinar varias piezas: la base de Linux dentro de Windows, una terminal como Windows Terminal bien configurada, una shell vitaminada con Oh My Zsh y sus plugins, herramientas modernas como BAT, LSD o FZF, gestión de versiones con NVM o Conda, integración con VS Code mediante Remote – WSL, y scripts y dotfiles que permitan replicar todo esto de forma fiable. Si dedicas un rato a dejarlo fino, tendrás un ecosistema donde pasar de cero a estar programando cómodamente lleva minutos en lugar de tardes enteras reinstalando cosas a mano.