---
weight: 4
title: "Configurar el prompt en Zshell"
date: 2025-07-15T16:40:28+0200
draft: false
summary: "Reconfiguramos el prompt de zsh para mostrar la versión de Python en los entornos virtuales"
categories:
  - pildoras
tags:
  - zshell
---

## Configurar el prompt de zsh

Queremos modificar el prompt para que además de mostrar el entorno virtual de python (cuando haya uno activo) muestre también la versión de Python que usa ese `venv`

Para añadir la info de git a mi prompt de zsh ya estoy usando el paquete [zsh git prompt](https://github.com/olivierverdier/zsh-git-prompt)

## Deshabilitar el prompt generado por pyenv

En primer lugar, como tenemos instalado `pyenv` necesitamos inhibir el comportamiento por defecto de `pyenv` que muestra el nombre del entorno virtual en el prompt. Para ello, en el fichero `~/.zshrc` añadimos las siguientes lineas **antes** de la activación de `pyenv`:

```bash
# disable prompt modification by pyenv
# I'm using virtualenv plugin for prompt customization
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
```

## Generamos una función que nos devuelva el venv y la versión de python.

Podemos instalar el plugin de zsh: `virtualenv` que sirve justamente para instalar una función que devuelve el virtualenv para usarlo en el prompt, pero como de todas formas la tenemos que cambiar pongo aquí el texto completo de la función, ya modificada para añadir la versión de Python:

```zsh
function virtualenv_prompt_info(){
  [[ -n ${VIRTUAL_ENV} ]] || return
  echo "${ZSH_THEME_VIRTUALENV_PREFIX=[}${VIRTUAL_ENV:t:gs/%/%%}-${$(python -V)#* }${ZSH_THEME_VIRTUALENV_SUFFIX=]}"
}

# disables prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_PROMPT=1
```

## Editamos el prompt en nuestro tema de zsh favorito

Yo estoy usando el tema `gnzh`, pero viene a ser lo mismo en cualquier tema. En mi fichero del tema el prompt queda configurado con las siguientes lineas:

```bash
local return_code="%(?..%F{red}%? ↵%f)"

local user_host="${PR_USER}%F{cyan}@${PR_HOST}"
local current_dir="%B%F{blue}%~%f%b"
local git_branch='$(git_super_status)'
local venv_prompt='$(virtualenv_prompt_info)'

PROMPT="╭─${user_host} ${current_dir} $(ruby_prompt_info) ${venv_prompt} ${git_branch}
╰─$PR_PROMPT "
RPROMPT="${return_code}"

ZSH_THEME_GIT_PROMPT_PREFIX="‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %f"
ZSH_THEME_RUBY_PROMPT_PREFIX="%F{red}‹"
ZSH_THEME_RUBY_PROMPT_SUFFIX="›%f"
ZSH_THEME_VIRTUALENV_PREFIX="%F{red}("
ZSH_THEME_VIRTUALENV_SUFFIX=")%f "
```
