Entrada

Personalización de la Terminal en Linux

En este artículo veremos cómo personalizar una terminal en linux, específicamente en aquellas distribuciones basadas en Debian como Parrot Security. y en Arch como Manjaro. Sin tanto preámbulo, empecemos.

Cualquier error que presente, lo puede dejar en la sección de comentarios.

Tipografía como requisito

Descarga

Para poder tener una compatibilidad completa con Powerlevel10K necesitamos un tipo de letra monoespaciado, en este caso usaremos la última versión de Hack Nerd Font.

1
2
3
4
5
6
# Descargamos desde el repositorio oficial
curl -LO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Hack.zip
# Desempaquetamos los .ttf
mkdir hack-nerd-font
unzip Hack.zip -d hack-nerd-font
rm Hack.zip

Instalación

Ahora que tenemos descargada la fuente, procedemos a instalarla. Una forma sencilla es dar doble click sobre cada archivo y luego seleccionar instalar, pero si queremos complicarnos la vida, podemos hacer lo siguiente.

Usamos un directorio en /usr/share/fonts/ que almacene las TrueType Font (TTF), este directorio varía de acuerdo al sistema operativo.

1
2
3
4
# Debian
sudo mv hack-nerd-font/ /usr/share/fonts/truetype/
# Arch
sudo mv hack-nerd-font/ /usr/share/fonts/TTF/

Ahora necesitamos actualizar con fc-cache nuestra caché de fuentes, le damos los argumentos de -f y -v para forzar la actualización y ver más a detalle la ejecución. Finalmente con fc-list nos aseguramos de que se ha instalado correctamente nuestra fuente.

1
2
3
sudo fc-cache -f -v
# Filtramos la lista por "hack"
fc-list | grep "hack"

Zsh como nuestra nueva shell

Instalación

Para poder personalizar al máximo nuestra terminal, dejaremos de usar nuestra bash tradicional para pasarnos a zsh, por consiguiente necesitaremos instalarla si no la tenemos.

1
2
3
4
5
6
7
8
9
# Verificamos si ya la tenemos instalada
zsh --version
# Si no la tenemos, procedemos con la instalación
## Debian
sudo apt update
sudo apt install zsh
## Arch
sudo pacman -Sy
sudo pacman -S zsh

Configuración

Para tener un historial de nuestros comandos ejecutados, crearemos estos archivos de configuración para nuestra nueva shell.

1
2
3
4
# Si ya existe ~/.zshrc, le hacemos una copia
mv ~/.zshrc ~/.zshrc.old
# Creamos los archivos
touch ~/.zshrc ~/.zsh_history

Ahora agregaremos las configuraciones que deseamos al archivo de configuración de la zsh, mediante algún editor de texto como nano o vi.

1
2
3
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.zsh_history

Kitty como nueva terminal

Instalación

La terminal que voy a usar es Kitty, la cual tiene muchas opciones que nos permitirá personalizarla a nuestro gusto. Lastimosamente en Arch, a la fecha de actualización de esta publicación, no funciona correctamente esta terminal, así que tendremos que usar otra que queramos.

1
2
# Debian
sudo apt install kitty

Por el momento no vamos abrir esta nueva terminal.

Configuración

Con la terminal instalada, ahora podemos configurar algunos detalles de la misma, para mayor información se puede revisar la documentación. Lo que primero haremos ahora es crear el archivo de configuración o modificar las preferencias de la terminal que estemos usando en Arch, lo que más interesa es el tipo de fuente que vamos a usar.

1
2
3
4
# Creamos el directorio de configuración de kitty si no existe
mkdir ~/.config/kitty
# Ahora el archivo
touch ~/.config/kitty/kitty.conf

Con el archivo ya creado, lo que tendremos que hacer ahora es editarlo con las configuraciones que deseemos, a continuación dejo un ejemplo detallado.

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
# Deshabilitamos el sonidito de la campana
enable_audio_bell no

# Establecemos la tipografía que vamos a usar
font_family Hack Nerd Font
font_size 14
url_color #61afef

# Personalizamos los atajos del teclado
## Movimientos entre ventanas (ctr + alguna flechita)
map ctrl+left neighboring_window left
map ctrl+right neighboring_window right
map ctrl+up neighboring_window up
map ctrl+down neighboring_window down

## Suspender trabajo
map ctrl+shift+z toggle_layout stack

## Crear una nueva ventana o pestaña con el directorio actual
map ctrl+shift+enter new_window_with_cwd
map ctrl+shift+t new_tab_with_cwd

# Estilo del cursor
cursor_shape beam
cursor_beam_thickness 1.8

# Comportamiento del ratón
mouse_hide_wait 3.0
detect_urls yes

# Entrada por teclado
repaint_delay 10
input_delay 3
sync_to_monitor yes

# Estilo de las pestañas
tab_bar_style powerline
inactive_tab_background #e06c75
active_tab_background #98c379
inactive_tab_foreground #000000

# Estilo de la terminal
background_opacity 0.85
window_padding_width 4

# Nuestra shell por defecto
shell zsh

PowerLevel10K

Instalación

Ahora que tenemos nuestra terminal configurada y la fuente requerida, procedemos a instalar Powerlevel10k.

PowerLevel10K Fuente: github.com/romkatv/powerlevel10k

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.powerlevel10k

La ubicación del repositorio estará en ~/.powerlevel10k

Configuración

Para este caso, ya tengo predefinidas algunas configuraciones estéticas para nuestra nueva shell, para establecerlas necesitaremos descargar un archivo.

1
wget https://raw.githubusercontent.com/meyer-pidiache/dotfiles/main/.p10k.zsh -O ~/.p10k.zsh

Ahora debemos modificar el archivo de configuración de nuestra zsh.

1
2
3
4
5
6
7
8
9
10
11
# Esta parte debe estar en el inicio del archivo
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# [...]

# Enlazamos nuestra Powerlevel10k al final
source ~/.powerlevel10k/powerlevel10k.zsh-theme

[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

Extensiones

Instalación

Para tener más funcionalidades, podemos instalar las siguientes extensiones (plugins) que nos darán un toque especial a nuestra zsh.

  • zsh-syntax-highlighting. Los colores le dan vida a una terminal, y esta extensión hará su trabajo.
    1
    2
    3
    4
    
    # Debian
    sudo apt install zsh-syntax-highlighting
    # Arch
    sudo pacman -S zsh-syntax-highlighting
    
  • zsh-autosuggestions. Si usamos comandos muy largos, podemos ahorrar tiempo con esta extensión.
    1
    2
    3
    4
    
    # Debian
    sudo apt install zsh-autosuggestions
    # Arch
    sudo pacman -S zsh-autosuggestions
    
  • sudo.plugin. Si queremos ejecutar un comando con sudo, solo tendremos que presionar doble vez la tecla de escape.
    1
    2
    3
    4
    
    # La etiqueta -p es para crear el directorio 'plugins' que no existe en Debian
    sudo mkdir -p /usr/share/zsh/plugins/zsh-sudo/
    # Descargamos el plugin
    sudo wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/sudo/sudo.plugin.zsh -P /usr/share/zsh/plugins/zsh-sudo/
    

Configuración

Ahora estas extensiones ya están en nuestro sistema, pero tenemos que enlazarlas con nuestra zsh, para ello necesitamos conocer la ubicación donde están alojadas, en el caso de Debian las reubicaremos para una mejor organización.

1
2
sudo mv /usr/share/zsh-syntax-highlighting /usr/share/zsh/plugins/
sudo mv /usr/share/zsh-autosuggestions /usr/share/zsh/plugins/

En Arch por defecto, ya está organizado.

Con lo anterior hecho, agregaremos las ubicaciones de las extensiones a nuestro arhivo de configuración de la zsh.

1
2
3
4
5
6
7
# [...]

source /usr/share/zsh/plugins/zsh-sudo/sudo.plugin.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# [...]

Herramientas

Si no nos parece suficiente con las extensiones y queremos más, podemos instalar herramientas que nos serán de gran utilidad.

Instalación

  • Batcat Este programa nos permite visualizar archivos de manera más amigable, es un reemplazo mejorado de cat.
    1
    2
    3
    4
    
    # Debian
    sudo apt install bat
    # Arch
    sudo pacman -S bat
    
  • FZF. Nos permite buscar archivos y nuestro historial de una manera más dinámica con CTRL+T y CTRL+R. Para habilitar estos atajos, debemos fijarnos en el archivo de configuración que dejaré más abajo.
    1
    2
    3
    4
    
    # Debian
    sudo apt install fzf
    # Arch
    sudo pacman -S fzf
    
  • LSD. Es la versión mejorada de ls.
    1
    2
    3
    4
    
    # Debian
    sudo apt install lsd
    # Arch
    sudo pacman -S lsd
    
  • NVIM. Es la versión mejorada de vim, y para usarla en conjunto con NvChad, necesitamos la versión 0.9.4 o superior. A continuación descargamos la última versión y la instalamos.
    1
    2
    3
    4
    5
    6
    7
    8
    
    # Debian
    curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
    sudo rm -rf /opt/nvim
    sudo tar -C /opt -xzf nvim-linux64.tar.gz
    export PATH="$PATH:/opt/nvim-linux64/bin"
    rm nvim-linux64.tar.gz
    # Arch
    sudo pacman -S neovim
    
  • NvChad. Nos brinda una configuración para nvim que es alucinante. Para instalarle plugins a NvChad necesitaremos tener npm instalado.
    1
    2
    3
    4
    5
    6
    
    # Debian 
    sudo apt install npm
    # Arch
    sudo pacman -S npm
    # Descarga e instalación de NvChad
    git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 && nvim
    

    Al primer mensaje que nos aparece, seleccionamos “y” para la configuración por defecto, luego esperamos y ya podremos instalar lo que queramos a NvChad. Instalación de NvChad Instalación de NvChad

    Si no hemos presionado la tecla de escape, se nos mostrará un mensaje exitoso, pero si la hemos presionado, podemos esperar un momento a que se instalen los plugins y salir con !q.

Configuración

Ahora que tenemos nuevas herramientas, configurémoslas y creemos algunos alias.

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
62
63
64
65
66
67
68
69
70
71
# [...]

# Descomenta para Debian
## export PATH="$PATH:/opt/nvim-linux64/bin"

# alias cat='batcat' # Descomenta para Debian
# alias cat='bat' # Descomenta para Arch 
alias icat='kitty +kitten icat' # Para mostrar imágenes por consola, se necesita Image Magick
alias vim='nvim'
# lsd
alias l='lsd --group-dirs=first'
alias la='lsd -a --group-dirs=first'
alias ll='lsd -lh --group-dirs=first'
alias lla='lsd -lha --group-dirs=first'
alias ls='lsd --group-dirs=first'

# Esta función nos ayudará a previsualizar archivos. 'search' desde la terminal para usarla.
function search(){
	if [ "$1" = "h" ]; then

		fzf -m --reverse --preview-window down:20 --preview '[[ $(file --mime {}) =~ binary ]] &&

 	                echo {} is a binary file ||

	                 (batcat --style=numbers --color=always {} ||

	                  highlight -O ansi -l {} ||

	                  coderay {} ||

	                  rougify {} ||

	                  cat {}) 2> /dev/null | head -500'

	else

	        fzf -m --preview '[[ $(file --mime {}) =~ binary ]] &&

	                         echo {} is a binary file ||

	                         (batcat --style=numbers --color=always {} ||

	                          highlight -O ansi -l {} ||

	                          coderay {} ||

	                          rougify {} ||

	                          cat {}) 2> /dev/null | head -500'

	fi
}

# Atajos
## Avanzar (alt+right)
bindkey "^[[1;3C" forward-word
## Retroceder (alt+left)
bindkey "^[[1;3D" backward-word
## Eliminar bloque adelante (alt+supr)
bindkey "^[[3;3~" delete-word

# FZF
## Descomenta para Debian
### source /usr/share/doc/fzf/examples/key-bindings.zsh
### source /usr/share/doc/fzf/examples/completion.zsh
## Descomenta para Arch
### source /usr/share/fzf/key-bindings.zsh
### source /usr/share/fzf/completion.zsh


# [...]

Último paso

Finalmente, y cruzando los dedos, cerramos nuestra terminal actual y abrimos nuestra Kitty si estamos en Debian. Si estamos usando otra terminal, tendremos que cambiar la shell por defecto de nuestro usuario y reiniciar el sistema.

1
2
3
4
# Solo en Arch
chsh -s /bin/zsh
# Para gestionar la terminal podemos usar Tmux
sudo pacman -S tmux

Ya en nuestra terminal personalizada, si queremos cambiar el diseño actual solo debemos ejecutar el siguiente comando.

1
p10k configure

Pero si queremos un nivel más avanzado de personalización, podemos editar el siguiente archivo de configuración.

1
vim ~/.p10k.zsh

Eso es todo, ya tenemos una terminal con superpoderes… Pero no con IA.

Pequeño regalo

Si queremos integrar un asistente de código a nuestro nvim, podemos instalar un plugin llamado Codeium. Para su instalación y configuración, tengo en este sitio web un artículo sobre ello.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.