DEV Community

Cover image for Enchula Mi Consola
José Muñoz
José Muñoz

Posted on

Enchula Mi Consola

disponible en ingles

Como desarrollador, la consola (o terminal) es una de las herramientas mas se usan a lo largo de tu carrera. Puede que sea intimidante adentrarse al mundo de las herramientas de consola pero es tambien una de las mejores experiencias que uno puede tener. En este articulo quiero mostrarles mi propia configuración para terminal. Esta basada en las 3 tecnologias que me gusta llamarles la "santísima trinidad" de la terminal: TMUX, ZSH, & Neovim.

Pre-requisitos:

  • Linux, MacOS, or WSL

  • Una fuente bonita de NerdFont

  • Un emulador de terminal decente (i.e: iterm2, alacritty, etc.)

  • El equivalente a apt install zsh tmux neovim en tu sistema, yo voy a usar Debian.

TMUX

La primera piedra en la experience de consola tiene que ser el multiplexor de terminal: tmux.
En pocas palabras tmux te permite separar tu terminal en paneles, ventanas, o sesiones. ¿Alguna vez te has conectado a traves de SSH a un servidor para correr un proceso largo y el salva pantallas te mato la sesión? Tmux te mantiene la sesion corriendo aun si la conexion SSH se corta! En cualquier momento podes re-abrir la sesion previa y es como si nada hubiese pasado.

Hay una gran comunidad que hace temas, plugins, y diferentes utilidades basadas en Tmux. Les recomiendo leer tmux cheat sheet para familiarizarse con las funcionalidad y las combinaciones de teclas. Y este es solo la punta del iceberg, hay tantas cosas que probar. Los animo a que investiguen mas por su parte y configuren todo a su gusto ya que la experiencia que viene por defecto no es muy buena.

tmux por defecto

Lo primero es crear un archivo de configuración corriendo nvim ~/.tmux.conf y una de las mejoras que me gusta hacer inmediatamente es cambiar el indice a base 1 ya que hace mas comodo navegar pestañas con el teclado.

# start windows, sessions, and panes with 1
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
Enter fullscreen mode Exit fullscreen mode

Tmux usa una combinación de teclas para llamar las funciones, y por defecto esto siempre empieza con Ctrl + b pero no me parece muy comodo, asi que yo cambio la combinación lider a Ctrl + Space que se me hace mas fácil de hacer de manera constante.

# change prefix
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
Enter fullscreen mode Exit fullscreen mode

Por ultimo, algo que me parece que debería ser así por defecto es que cuando abra un panel nuevo me abra la sesion en donde estaba originalmente y no en la raiz.

 # split in cwd
 bind '"' split-window -v -c "#{pane_current_path}"
 bind '%' split-window -h -c "#{pane_current_path}"
Enter fullscreen mode Exit fullscreen mode

Con esto pueden ir modificando y añadiendole a esta configuración a medida vayan usando tmux para hacer su propia configuración. Pero para poder sacarle bien el jugo a tmux hay que aprovechar los plugins a traves de TPM (Tmux Plugin Manager). Para instalar TPM se necesita clonar el repositorio dentro de la carpeta de plugins de tmux

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Enter fullscreen mode Exit fullscreen mode

ponerlo en la lista de plugins en la configuración

set -g @plugin 'tmux-plugins/tpm'
Enter fullscreen mode Exit fullscreen mode

y luego añadir estas lineas de codigo al final del archivo

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
 run '~/.tmux/plugins/tpm/tpm'
Enter fullscreen mode Exit fullscreen mode

Les puedo recomendar tambien tmux-plugins/tmux-sensible y catppuccin/tmux para tener mejor funcionalidad y estetica. Al final la configuración les debe quedar así:

 # List of plugins
 set -g @plugin 'catppuccin/tmux'
 set -g @plugin 'tmux-plugins/tpm'
 set -g @plugin 'tmux-plugins/tmux-sensible'

 # split in cwd
 bind '"' split-window -v -c "#{pane_current_path}"
 bind '%' split-window -h -c "#{pane_current_path}"

 # start windows, sessions, and panes with 1
 set -g base-index 1
 set -g pane-base-index 1
 set-window-option -g pane-base-index 1
 set-option -g renumber-windows on

 # change prefix
 unbind C-b
 set -g prefix C-Space
 bind C-Space send-prefix

 # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
 run '~/.tmux/plugins/tpm/tpm'
Enter fullscreen mode Exit fullscreen mode

Si no has corrido todavía tmux en la consola, la nueva configuración va a cargar automaticamente. Para actualizar la configuración estando ya dentro de tmux basta con correr tmux source-file ~/.tmux.conf para actualizar la configuración y los plugins se instalan con Shift + I

not too shabby

Dependiendo de la fuente que uses, habra que ajustar el tamaño de la letra, muchas configuraciónes asumen que usas 16 o mas. Si alguno de los plugins no se instala bien, siempre se puede instalar manualmente clonandolo a la carpeta de plugins como lo hicimos para instalar tpm. Hay mas recursos en: Tmux's Awesome list.

Z Shell

zsh (tambien conocido como ZSHell) es una alternativa a bash (tambien conocido como "Bourne-Again SHell"). En funcionlidad básica hacen lo mismo, pero zsh tiene mucha mas funcionalidad sobre lo que se puede hacer con bash, y al igual que TMUX, hay un gran ecosistema con plugins, temas, y mas. Cuando corras zsh por primera vez, no va a hacer cambiado mucho, pero con los plugins adecuados zsh puede convertirse en tu mejor amigo en la terminal. Para empezar vamos a instalar oh-my-zsh, un framework basado en zsh que administra configuraciones, temas, plugins, y mas.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Enter fullscreen mode Exit fullscreen mode

Una vez completado el instalador vamos a tener un nuevo archivo de configuración llamado .zshrc en la carpeta raíz,
si lo editamos con nvim ~/.zshrc podemos ver que ya tiene bastantes secciones con comentarios y varias opciones ya configuradas. Les puedo recomendar el plugin zsh-autosuggestion que hace que la terminal te de autocomplete basado en tu historial. Para instalarlo hay que agregarlo a la lista de plugins:

plugins=( 
    # other plugins...
    zsh-autosuggestions
)
Enter fullscreen mode Exit fullscreen mode

hay que clonar el repositorio a la carpeta de plugins de oh-my-zsh

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Enter fullscreen mode Exit fullscreen mode

y por ultimo hay que cargar la nueva configuración corriendo source ~/.zshrc.

Mi tema preferido para oh-my-zsh es powerlevel10k, asi es, mas de nueve mil!

mas de nueve mil

Viene con un instalador que te ayuda a configurar paso a paso cada opcion del tema, con muchos iconos, información y colores.

powerlevel10k different styles

Para instalarlo hay que clonar el repositorio a la carpeta de temas de oh-my-zsh


git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Enter fullscreen mode Exit fullscreen mode

hay que cambiar el tema en .zshrc y recargar la configuración.

ZSH_THEME="powerlevel10k/powerlevel10k"
Enter fullscreen mode Exit fullscreen mode

Hay mas recursos en: Zsh's Awesome List.

NeoVIM

Neovim fue lanzado en 2014 como un fork de Vim que lo extiende con soporte para Lua. Lua ya es un lenguaje establecido en el ambito del desarrollo de sistemas linux, lo que lo hace un reemplazo ideal para vimscript lo que hace mas facil para la comunidad que hace plugins. Al igual que Vim, no es facil acostumbrarse a usar Neovim, pero el cambio a trabajar principalmente con el teclado es lo mas productivo que se puede ser con un editor de texto. Inclusive, los editores modernos tienen plugins para poder usar configuraciones de teclado estilo VIM, asi que una vez que se aprende este modo de trabajo se puede traducir a otros editores facilmente.

Hay miles de opciones para configurar en este editor y hacerlo tan util como VSCode. Podemos empezar con opciones basicas como tabs o espacios e ir haciendo una configuración personalizada. Es facil paralizarse con tantas opciones que aprender, pero la comunidad tiene varias configuraciones populares para tener una buena funcionalidad e interfaz sin mucho que hacer como AstroNvim y NvChad.



Para instalar una configuración basta con clonar el repositorio a la carpeta de configuración de Neovim

git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim
Enter fullscreen mode Exit fullscreen mode

ó

git clone --depth 1 https://github.com/NvChad/NvChad ~/.config/nvim 
Enter fullscreen mode Exit fullscreen mode

Al cambiar de configuración hay que hacer los siguientes respaldos:

mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak
Enter fullscreen mode Exit fullscreen mode

Cuando abrís nvim la primera vez despues de cambiar la configuración se van a instalar los plugins basicos con Lazy el manejador de paquetes para Neovim que carga los plugins a medida se van necesitando.
Una vez terminada la instalación el editor se ve como un IDE completo.

final setup

Algunas cosirijillas que me hacen la vida mas facil es configurar mi editor global de git que sea nvim:

git config —global core.editor nvim
Enter fullscreen mode Exit fullscreen mode

Muchos programas usan vi como el editor por defecto, asi que una manera de tomar un atajo y cambiarlos todos es hacerle un alias apuntando a nvim

alias vi=“nvim”
Enter fullscreen mode Exit fullscreen mode

A veces hay que editar un archivo con privilegios y al correr sudo nvim te aparece la configuración inicial sin temas ni nada. Esto es porque Neovim carga su configuración con las variables de ambiente del usuario, para pasarlas con sudo se usa la opción -E. Se le puede hacer un alias para hacerte la vida mas facil.

alias sudo=“sudo -E
Enter fullscreen mode Exit fullscreen mode

Hay mas recursos en: Neovim's Awesome List.

Conclusión

Cuando vas a pasar mucho tiempo usando un programa es importante que tenga buena interfaz y funcionalidad. Aventurarse a la consola puede ser intimidante pero con una buena interfaz muchas cosas se vuelven digeribles.
Comenten sus recomendaciones de herramientas de consola, les agradezco de antemano.

Extra

Si queres enchular tu SSH también, te recomiendo los SSH Tips and Tricks en el blog de Carlos Becker

Top comments (0)