Turbinando o shell
À medida que nos tornamos mais proficientes, o terminal se torna uma ferramenta inevitável. Eventualmente, chegará um momento em que personalizar o terminal se tornará um dos maiores impulsionadores de produtividade. Simplificar o uso do terminal não só facilitará as tarefas diárias, mas também tornará o trabalho mais agradável.
Com a quantidade de linhas de comando que utilizamos diariamente, é essencial transformar nosso ambiente principal em algo prazeroso. Afinal, o terminal é onde passamos uma parte significativa do nosso tempo, e torná-lo mais amigável pode fazer toda a diferença na eficiência e na satisfação do trabalho.
Vamos aos conceitos iniciais. O termo "Terminal" e "Shell" são frequentemente usados em conjunto, mas referem-se a coisas diferentes.
O Shell atua como um tradutor. Ele interpreta os comandos de entrada e executa operações correspondentes no sistema operacional. Funciona como uma camada intermediária entre o usuário e o sistema, permitindo a interação por meio de comandos de texto. Existem diversos tipos de Shell, sendo o Bash (Bourne Again Shell) e o Zsh (Z Shell) exemplos comuns em sistemas baseados em Unix/Linux. O PowerShell é um shell popular em sistemas Windows.
Um terminal é um programa que executa um Shell. Ele fornece a interface (janela) para interagir com o Shell. Exemplos de terminais no Linux incluem o Tilix, Alacritty, Terminator, Konsole, entre outros. No Windows, temos o Windows Terminal e no macOS o iTerm2.
Falando um pouco de Linux, um conjunto que gosto bastante é o Tilix de terminal e o Zsh como Shell.
O Tilix oferece uma interface agradável, permitindo a abertura de diferentes shells em abas separadas ou até mesmo vários shells em uma única aba. Um recurso particularmente útil é a capacidade de enviar um comando para vários shells simultaneamente, o que se torna essencial ao lidar com várias máquinas que requerem comandos idênticos.
Quanto ao Zsh, é o meu shell preferido. Ele possui uma ampla gama de recursos, incluindo plugins que facilitam o auto-complete de muitas ferramentas usadas no dia a dia. Ao instalar o Oh My Zsh e selecionar um bom tema, a experiência se torna praticamente imbatível em comparação com outros shells disponíveis.
Qualquer gerenciador de pacote possui essas duas ferramenta.
sudo apt-get install zsh tilix -y
# Defina o Zsh como o seu shell padrão
chsh -s $(which zsh)
# Verifique a instalação
zsh --version
Reinicie a máquina para que as configurações do novo Shell tenham efeito.
Faça uma tour pelo Tilix e ajuste as configurações com a sua preferência de fonte, tamanho da letra, etc. Uma dica gosto muito é utilizar o Drácula como o tema de cores do Tilix e a fonte Meslo do Nerd Fonts que será instalada posteriormente.
mkdir -p ~/.config/tilix/schemes
cat <<EOF > ~/.config/tilix/schemes/Dracula.json
{
"background-color": "#282936",
"badge-color": "#FFFFFF",
"bold-color": "#FFFFFF",
"comment": "",
"cursor-background-color": "#000000",
"cursor-foreground-color": "#FFFFFF",
"foreground-color": "#F8F8F2",
"highlight-background-color": "#000000",
"highlight-foreground-color": "#FFFFFF",
"name": "Dracula",
"palette": [
"#000000",
"#FF5454",
"#50FA7B",
"#F1FA8C",
"#BD93F9",
"#FF79C6",
"#8BE8FD",
"#BFBFBF",
"#4D4D4D",
"#FF6E67",
"#5AF78D",
"#F4F99D",
"#CAA8FA",
"#FF92D0",
"#9AEDFE",
"#E6E6E6"
],
"use-badge-color": false,
"use-bold-color": false,
"use-cursor-color": false,
"use-highlight-color": false,
"use-theme-colors": false
}
EOF
Para alterar para o modo Dark no Tilix em preferences > Appearance > Theme variante e mude para Dark. Para colocar o Drácula vá em Profiles > Default > Color TAB > Color Scheme e selecione o Dracula. Gosto de ajustar a transparência para 15%.
O Oh My Zsh é um framework que ajuda a gerenciar as configurações do Zsh.
Para instalar:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Toda vez que executarmos o Zsh ele irá fazer a leitura o arquivo .zshrc no home do seu usuário. É nele que configuramos tudo que o Shell precisa para iniciar do nosso jeito.
ls -lha ~/.zsh*
-rw------- 1 david david 36K Mar 27 09:19 /home/david/.zsh_history # Guarda o Histórico
-rw-r--r-- 1 david david 3.8K Mar 26 23:17 /home/david/.zshrc # As configurações do Zsh
-rw-r--r-- 1 david david 33 Dec 30 04:13 /home/david/.zshrc.pre-oh-my-zsh
A pasta do Oh My Zsh também fica no home do seu usuário.
ls -ha ~/.oh-my-zsh
. .editorconfig .github .gitpod.Dockerfile .prettierrc CONTRIBUTING.md README.md cache lib oh-my-zsh.sh templates tools
.. .git .gitignore .gitpod.yml CODE_OF_CONDUCT.md LICENSE.txt SECURITY.md custom log plugins themes
Vamos configurar um tema para o nosso Shell. Esse tema precisa estar dentro da pasta themes no Oh My Zsh. Vejas alguns temas built-in do Oh My Zsh.
Um tema que gosto bastante mas não é built-in é o powerlevel10k. Vamos fazer o download desse tema é colocá-lo dentro pasta themes.
# É necessário o Git instalado. Caso não tenha sudo apt-get install git -y
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Edite o arquivo ~/zshrc e ajuste o valor da variável ZSH_THEME="powerlevel10k/powerlevel10k"
.
Se algum outro tema for escolhido coloque o nome do tema.
Esse tema utiliza algumas firulas que são bem interessantes com as fonte Meslo Instalada. Aproveita e já deixa a fonte FiraCode instalada também para ajustar no Tilix caso queira utilizar.
git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git
cd nerd-fonts
./install.sh Meslo
./install.sh FiraCode
cd ..
rm -rf nerd-fonts/
Agora vamos configura o powerlevel10k. Evite encher o terminal de informações desnecessárias, pois mais atrapalha do que ajuda.
p10k configure
# Siga os passos
Essa configuração irá gerar o arquivo .p10k.zsh que será injetado no seu .zshrc.
Quando chegar em uma configuração de shell ideal, salve esse arquivo para uso futuro para evitar fazer o configure novamente precisando lembrar tudo que foi escolhido.
Vamos ajustar alguns detalhes no arquivo .zshrc.
HITORY_STAMPS="dd.mm.yyyy" # Formato da data
HISTSIZE=10000 #Aumentar o tamanho do histórico
HISTCONTROL=ignoredups # Ignorar duplicados no histórico
Agora vamos adicionar alguns plugins. Tudo dependerá com o que você trabalha. Esses plugins irão gerar o auto complete das ferramentas automaticamente e tubinar o shell.
# Algumas ferramentas não possuem plugins prontos no Zsh para fazer o auto complete e com esse plugin podemos resolver esse problema. Um exemplo é o Terraform que possui o auto complete, mas o opentofu não.
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
# Esse plugin irá colorir os comandos. Precisa ser o último da lista que vamos criar depois.
sudo apt-get install zsh-syntax-highlighting -y
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
echo "source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
# Esse plugin irá sugerir comandos baseado no seu histórico de comandos.
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Agora vamos adicionar os plugins que usaremos no .zshrc. Aqui esta um exemplo dos plugins acima e alguns que uso diariamente. Faça suas escolhas baseadas no seu dia a dia.
plugins=(
zsh-completions
zsh-autosuggestions
zsh-navigation-tools
git
aws
azure
kubectl
helm
kind
kubectx
kube-ps1
terraform
ansible
vagrant
docker
vault
podman
sigstore
websearch
zsh-syntax-highlighting
)
Também é interessante adicionar alguns aliases para ganhar velocidade nos comandos. Adicione os mais utilizados no seu dia a dia.
alias k="kubectl"
alias klog="kubectl logs"
alias kex="kubectl exec -it"
alias d="docker"
alias pod="podman"
alias dc="docker-compose"
alias vg="vagrant"
alias tf="terraform"
alias g="git"
alias update="sudo apt-get update"
alias upgrade="sudo apt-get upgrade -y"
alias install="sudo apt-get install -y"
alias ls="ls -lha"
alias journal="sudo journalctl -xeu"
alias status="sudo systemctl status"
alias restart="sudo systemctl restart"
alias reload="sudo systemctl daemon-reload"
E temos o nosso resultado!