Skip to content

Cómo hacer que OMP cargue automáticamente en WSL(Ubuntu) sin tener que hacer source .bashrc cada vez #7345

@touxstone

Description

@touxstone

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 \~/.bashrc manualmente 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:

  1. Asegúrate de que NO existe ~/.bash_profile
    (si existe, Bash lo prioriza y puede ignorar otras cosas)
rm -f /.bash_profile
  1. Edita ~/.profile (si no existe, créalo)

    nano ~/.profile

    Añ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.json por 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/

Nota: Para detalles de cómo llegó el pool de themes a ~/.poshthemes ver este otro post

  1. Limpia cualquier duplicado en ~/.bashrc
    Abre ~/.bashrc y elimina o comenta (con #) cualquier línea que tenga eval "$(oh-my-posh init ...)" para evitar duplicados o confusiones.

  2. Reinicio completo de WSL

    Desde PowerShell o CMD en Windows:

    wsl --shutdown

    Luego 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-posh

Luego 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

Metadata

Metadata

Labels

📖 docsA documentation change/addition

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions