-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Description
Code of Conduct
- I agree to follow this project's Code of Conduct
What would you like to see changed/added?
Cómo hacer que OMP cargue automáticamente en WSL(Ubuntu) sin tener que hacer source .bashrc cada vez que inicializas la WSL/Ubuntu terminal
by RS Montalvo
Si alguna vez has instalado Oh My Posh en WSL (Windows Subsystem for Linux) para tener un prompt informativo y moderno en tu terminal de Ubuntu, es muy probable que te hayas encontrado con este problema clásico:
- El prompt se ve perfecto después de ejecutar
source \~/.bashrc - Pero cada vez que abres una terminal nueva → vuelve al prompt básico de Ubuntu (verde o blanco simple)
- Tienes que hacer
source \~/.bashrcmanualmente para que aparezca tu tema de Oh My Posh
Esto le pasa a muchísima gente en WSL. Yo mismo estuve peleando con ello durante horas hasta que entendí qué estaba pasando y encontré la solución más limpia.
¿Por qué ocurre esto en WSL?
Bash distingue entre dos tipos principales de shells al iniciarse:
- Login shell → lee
\~/.bash_profile(si existe) o\~/.profile, pero NO lee automáticamente ~/.bashrc - Non-login interactive shell → lee
\~/.bashrc
En la mayoría de terminales Linux normales, al abrir una nueva pestaña se inicia un non-login interactive shell → carga .bashrc → todo bien.
En WSL (sobre todo con Windows Terminal, PowerShell o VS Code), el shell suele iniciarse como login shell → lee .profile pero ignora .bashrc → tu línea de Oh My Posh (que normalmente está en .bashrc) no se ejecuta.
Solución que realmente funciona (la que a mí me salvó)
Después de probar muchas cosas (incluyendo hacks con exec bash que pueden salir mal), la forma más limpia y estable es:
Mover la inicialización de Oh My Posh a \~/.profile (que sí se carga siempre en login shells de WSL).
Pasos concretos:
- Asegúrate de que NO existe ~/.bash_profile
(si existe, Bash lo prioriza y puede ignorar otras cosas)
rm -f /.bash_profile-
Edita ~/.profile (si no existe, créalo)
nano ~/.profileAñade al final (o confirma que ya exista el bloque del PATH y agrega lo siguiente debajo):
# Añadir ~/.local/bin al PATH si existe (muy común con oh-my-posh instalado por usuario) if [ -d "$HOME/.local/bin" ]; then export PATH="$HOME/.local/bin:$PATH" fi # Oh My Posh - carga automática en shells bash de WSL if command -v oh-my-posh >/dev/null 2>&1; then eval "$(oh-my-posh init bash --config ~/.poshthemes/tu-tema-favorito.omp.json)" fi
- Cambia
tu-tema-favorito.omp.jsonpor el nombre real de tu tema (ejemplos comunes:jandedobbeleer.omp.json,paradox.omp.json,catppuccin_mocha.omp.json, etc.) - Puedes ver tus temas instalados con:
ls ~/.poshthemes/ # o ls ~/.cache/oh-my-posh/themes/
- Cambia
Nota: Para detalles de cómo llegó el pool de themes a ~/.poshthemes ver este otro post
-
Limpia cualquier duplicado en ~/.bashrc
Abre~/.bashrcy elimina o comenta (con #) cualquier línea que tengaeval "$(oh-my-posh init ...)"para evitar duplicados o confusiones. -
Reinicio completo de WSL
Desde PowerShell o CMD en Windows:
wsl --shutdownLuego abre una terminal nueva de Ubuntu.
¡Listo! El prompt debería aparecer con tu tema de Oh My Posh desde el primer momento, sin necesidad de hacer source manual.
Opcional: Instalar Oh My Posh en ubicación global (más robusto)
Si quieres evitar cualquier dependencia del PATH personalizado:
sudo mv ~/.local/bin/oh-my-posh /usr/local/bin/oh-my-posh
sudo chmod +x /usr/local/bin/oh-my-poshLuego puedes dejar el eval en ~/.bashrc (versión más convencional), pero con la solución anterior ya no es estrictamente necesario.
Resumen rápido de comprobaciones
En una terminal recién abierta:
which oh-my-posh # debe mostrar la ruta correcta
oh-my-posh --version # debe funcionar sin error
echo $PS1 | grep -i posh # si ves algo largo → el eval se ejecutóSi todo sale bien, ya no tendrás que volver a pelear con esto.
#WSL #OhMyPosh #Bash #Linux #WindowsTerminal #Productividad