Personalizar el símbolo del sistema de la línea de comandos con Starship

Escrito por picodotdev el .
gnu-linux planeta-codigo
Enlace permanente Comentarios

El símbolo del sistema o prompt en la línea de comandos de la terminal precede a la introducción del comando a ejecutar. Los intérpretes de comandos o shells ofrecen un símbolo del sistema por defecto que muestran cierta información y con el formato que sus desarrolladores han elegido. Además de que cada intérprete de comandos tenga uno propio estos son bastante limitados en cuanto a personalización además de utilizar una configuración poco intuitiva. Starship es un personalizador del símbolo del sistema independiente del intérprete de comandos, que ofrece una gran cantidad de módulos para personalizar el símbolo del sistema según el directorio de trabajo actual y cuya configuración es muy intuitiva y está bien documentada.

bash.svg

Para los usuarios avanzados la línea de comandos sigue siendo la forma más rápida de hacer ciertas tareas y a veces es la única forma de hacerlo ya que no se dispone de la aplicación equivalente. La línea de comandos no solo no ha desaparecido con las interfaces gráficas sino que se sigue usando mucho. Con algunas aplicaciones gráficas la línea de comandos no es necesaria y hay muchas aplicaciones gráficas para multitud de necesidades pero para algunas cosas especializadas no las hay y la mejor opción es un programa de línea de comandos.

Dada la utilidad de la línea de comandos esta se usa y se seguirá usando. En la línea de comandos un elemento destacado es el símbolo del sistema o prompt que muestra una información básica como el nombre de usuario, directorio y cierta información de estado. Hay varias utilidades para personalizar el símbolo del sistema según las preferencias del usuario.

Formas de personalizar el símbolo del sistema de la línea de comandos

La información y formato del símbolo del sistema por defecto depende del intérprete de comandos usado, bash tiene un formato diferente de zsh. Sin utilidades adicionales tanto bash como zsh permiten personalizar el símbolo del sistema cambiando la información que muestra, el formato y los colores.

En bash el cambiar el formato del símbolo del sistema consiste en cambiar el valor de la variable de entorno PS1 en el archivo ~/.bashrc del usuario. El formato es un tanto críptico tanto para símbolos que permiten incluir los datos como el formato para los colores. Leyendo el contenido de una variable PS1 no es fácil saber como es el aspecto final del símbolo del sistema. zsh también se puede personalizar y dispone de herramientas específicas para la personalización como Oh my zsh.

Por otro lado, Git por ejemplo ofrece una utilidad con la que personalizar el símbolo del sistema para mostrar cierta información según información del sistema, el directorio actual de trabajo contiene un repositorio Git u otro tipo de contenido.

Aún así las personalizaciones que ofrecen tanto bash como zsh son propias de cada uno de esos intérpretes, diferentes entre sí y limitadas en cuanto a elementos de personalización. En la siguiente configuración el prompt está personalizado con la variable PS1 modificando los colores para el nombre del usuario y host además del git prompt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

#
complete -cf sudo

GIT_PS1_SHOWDIRTYSTATE="true"
GIT_PS1_SHOWSTASHSTATE="true"
GIT_PS1_SHOWUNTRACKEDFILES="true"
GIT_PS1_SHOWUPSTREAM="true"
GIT_PS1_SHOWCOLORHINTS="true"
source ~/.git-prompt.sh

PS1='[\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;35m\]\h\[\033[00m\] \W]\$ '
PROMPT_COMMAND='__git_ps1 "[\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;35m\]\h\[\033[00m\] \W" "]\$ "'

export EDITOR=vim

export SDKMAN_DIR="/home/picodotdev/.sdkman"
[[ -s "/home/picodotdev/.sdkman/bin/sdkman-init.sh" ]] && source "/home/picodotdev/.sdkman/bin/sdkman-init.sh"
.bashrc-1

Símbolo del sistema de bash

Símbolo del sistema de bash

El configurador del símbolo del sistema Starship

Starship es una utilidad para configurar el símbolo del sistema fácil de instalar, sencillo de configurar, muchas opciones y elementos de configuración, moderno, tiene numerosos módulos que soportan múltiples tecnologías de las cuales mostrar información y compatible tanto con bash como zsh entre muchos otros intérpretes de comandos.

Está escrito en el lenguaje de programación Rust que se caracteriza por ofrecer un alto rendimiento y ser eficiente, aunque la diferencia para el usuario no va a ser apreciable para el usuario.

Starship permite aplicar misma configuración y tener el mismo símbolo del sistema independientemente del intérprete de comandos que es útil por ejemplo si se usa equipos diferentes, uno con GNU/Linux en las que generalmente utilizan por defecto el intérprete de comandos bash y otro con macOS en el que el intérprete de comandos por defecto es zsh.

Starship

En Arch Linux se instala con el comando del gestor de paquetes.

1
2
$ sudo pacman -S starship

pacman-install-starship.sh

Configuración de Starship

Además de ofrecer un alto grado de personalización la configuración de Starship es muy sencilla con la ayuda de su documentación para cada módulo de configuración. Dado que tiene una buena cantidad de opciones lo más rápido es partir de una configuración ya creada y adaptarla ligeramente a las necesidades o preferencias personales.

En la sección de Presets hay varios ejemplos de configuración. Para el caso de este ejemplo parto de la configuración Pastel Powerline. La configuración de Starship consiste en un archivo de texto en formato toml, cada uno de los ejemplos de preconfiguraciones se puede descargar su archivo.

Editar el archivo es bastante intuitivo tanto por el nombre de las variables como por su contenido, consiste en un conjunto de variables cuyos valores modifican un aspecto de la línea de comandos. La configuración consiste en cambiar los valores de las variables cuya descripción está documentada en la sección de configuración. El archivo de configuración es un archivo dotfile en la carpeta del directorio del usuario ~/.config/starship.toml.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

#
complete -cf sudo

PS1='[\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;35m\]\h\[\033[00m\] \W]\$ '

export EDITOR=vim

export SDKMAN_DIR="/home/picodotdev/.sdkman"
[[ -s "/home/picodotdev/.sdkman/bin/sdkman-init.sh" ]] && source "/home/picodotdev/.sdkman/bin/sdkman-init.sh"

eval "$(starship init bash)"
.bashrc-2

Este es un archivo de configuración de ejemplo en el que algunos símbolos no se muestran correctamente por faltar la fuente que los incluye. La variable format determina el formato e información del símbolo del sistema.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
format = """
[ ](bg:#000000)\
$username\
$hostname\
[ ](bg:#000000 fg:#000000)\
[](bg:#DA627D fg:#000000)\
$directory\
[](fg:#DA627D bg:#FCA17D)\
$git_branch\
$git_status\
[](fg:#FCA17D bg:#86BBD8)\
$java\
[](fg:#86BBD8 bg:#06969A)\
$docker_context\
[](fg:#06969A bg:#000000)\
[ ](fg:white bg:#000000)\
"""

add_newline = false

[username]
show_always = true
style_user = "blue bold"
style_root = "red bold"
format = '[$user]($style)'

[hostname]
ssh_only = false
style="purple bold"
format = '[@](bg:#000000 fg:white)[$hostname]($style)'

[directory]
style = "bg:#DA627D fg:white"
format = "[ $path ]($style)"
truncation_length = 1
truncation_symbol = ""

[directory.substitutions]
"Documentos" = ""
"Descargas" = ""
"Música" = ""
"Imágenes" = ""

[docker_context]
symbol = ""
style = "bg:#06969A fg:white"
format = '[[ $symbol $context ](bg:#06969A)]($style) $path'

[git_branch]
symbol = ""
style = "bg:#FCA17D fg:white"
format = '[[ $symbol $branch ](bg:#FCA17D)]($style)'

[git_status]
style = "bg:#FCA17D fg:white bold"
format = '[[($all_status$ahead_behind )](bg:#FCA17D)]($style)'

[java]
symbol = "J"
style = "bg:#86BBD8 fg:white bold"
format = '[ $symbol ]($style)'
starship.toml

Utilizando colores el símbolo del sistema casi tiene un aspecto gráfico y al estar cada información separada por diferentes colores hace que sea fácilmente identificable.

Símbolo del sistema personalizado con Starship

Las siguientes capturas muestran información en el símbolo del sistema de una carpeta que es un repositorio de Git que incluye información del estado del espacio de trabajo y en otra además en que la carpeta es un proyecto en el lenguaje Java.

Símbolo del sistema personalizado con Starship Símbolo del sistema personalizado con Starship

Símbolo del sistema personalizado con Starship

La variable principal format incluye el contenido y estilos del símbolo del sistema, por ejemplo el nombre del usuario y el directorio actual, hasta aquí es lo mismo que ofrecen bash y zsh por defecto, pero además permite mostrar información de estado según el contenido de del directorio de trabajo actual como Git, múltiples lenguajes de programación y tecnologías.

Si el directorio de trabajo actual es un repositorio de Git se muestra la rama y el estado de cambios, si es una carpeta de un proyecto muestra de que tipo de proyecto es por ejemplo un proyecto de Java y la versión actual de Java soportando muchos otros tipos de proyectos y tecnologías, también puede mostrar información de Docker.

Otra información que puede mostrar es la hora actual que permite registrar a qué hora se ha ejecutado un determinado comando en caso de revisar la sesión de línea de comandos.

Una vez configurado Starship con Chezmoi es posible guardar este dotfile en un repositorio de Git en caso de querer aplicarlo en una nueva instalación o en otro equipo y mantener sincronizado el contenido entre varios equipos.


Comparte el artículo: