DevSecOps

14 jun, 2023

Melhorando o terminal

Publicidade

O terminal é provavelmente a ferramenta que eu mais uso no meu dia a dia. Com o passar dos anos eu criei uma série de atalhos, scripts e hábitos que me fazem ser mais produtivo na execução de várias das minhas tarefas. Neste post vou contar algumas das coisas que eu configurei e venho usando, com o objetivo de talvez inspirar alguém a dedicar um tempo para fazer o mesmo.

O shell

O shell é a interface com a qual interagimos quando abrimos uma sessão de terminal. Por décadas o shell padrão para a grande maioria das distribuições Linux e o macOS foi o bom e velho bash mas nos últimos anos alguns competidores ganharam destaque. Talvez o mais relevante seja o zsh, que hoje é o padrão para o macOS e várias distros Linux. Eu usei o zsh por algum tempo, mas descobri o fish em um tweet do Carlos Becker, testei e não voltei atrás. O fish é mais leve e rápido do que o zsh(fato impírico, é minha impressão pois não fiz ou li benchmarks) e vem com várias funcionalidades úteis embutidas como um auto-complete mais rápido, wildcards para navegar nos diretórios, etc.

Dica: como o padrão do macOS é o zsh eu executei o comando a seguir para instalar o fish:




Salvando as configurações

Nos derivados do Unix (Linux e macOS por exemplo) uma forma de manter a configuração de aplicações é usando-se os dotfiles, que são arquivos que começam com um . no nome. O mais interessante disso é que é fácil fazer alterações e backups das suas configurações. O que eu faço é manter estes arquivos em um serviço de núvem, como o Dropbox, e configurar minha máquina para usar estes arquivos, usando o recurso de links simbólicos.

Estes são alguns dos arquivos de configuração da minha máquina:


Para facilitar a criação destes arquivos eu criei um script que uso sempre que preciso trocar de computador:

Desta forma rapidamente eu tenho as configurações aplicadas aos meus aplicativos principais.

Atalhos

Outro recurso poderoso para se usar no terminal é criar atalhos, ou alias. Como o nome sugere, são atalhos para comandos e que aceleram a sua produtividade. Estes são alguns dos atalhos que tenho no momento em meu fish:

alias
alias cot 'open /Applications/CotEditor.app/'
alias d docker
alias dc 'docker compose'
alias dcdown 'docker compose stop'
alias dcup 'docker-compose up -d'
alias g git
alias icloud cd\\\ /Users/eminetto/Library/Mobile\\\\\\\ Documents/com\\\~apple\\\~CloudDocs/
alias k kubectl
alias kb kubectl
alias ls 'ls -G'
alias open-ports netstat\\\ -anvp\\\ tcp\\\ \\\|\\\ awk\\\ \\\'NR\\\<3\\\ \\\|\\\|\\\ /LISTEN/\\\'
alias py3 python3
alias subl /Applications/Sublime\\\\\\\ Text.app/Contents/SharedSupport/bin/subl

E a configuração vai ser salva no diretório ~/.config/fish. Cada shell tem um comando para isso, recomendo pesquisar como fazer isso no seu.

Outro lugar onde é possível adicionar atalhos é no arquivo ~/.gitconfig. Estes são alguns que eu criei:

[alias]
  cleanup = "!git fetch --all --prune; git branch --merged origin/master | grep -v \"\\*\" | grep -v \"\\  master\" | xargs -n 1 git branch -d"
  s = status
  d = diff
  co = checkout
  br = branch
  c = commit
E eu ganho alguns segundos a cada comando :)

Uma dica relacionada ao git e que eu estou usando é configurar o 1Passwordpara assinar os meus commits. Nesta documentação é possível ver como fazer isso.

Customizando o prompt

Como eu comentei no começo deste post, o shell é a interface com a qual interagimos com o sistema operacional. E interfaces deveriam ser amigáveis e bonitas. Uma forma de se atingir isso é usando uma ferramenta que permita customizações e a dica que quero deixar aqui é o Starship. Trata-se de uma aplicação feita em Rust e que pode ser usada em qualquer shellpara permitir customizações do prompt, que é o input onde digitamos os comandos. A instalação e configuração é muito simples, conforme consta na página inicial do projeto. Após instalado basta configurar o arquivo ~/.config/starship.toml. Por exemplo, a configuração:




Gera o seguinte visual no meu terminal:

Sendo que, na imagem:

  • rancher-desktop é o nome do cluster Kubernetes onde estou conectado
  • votes é o nome do namespace do Kubernetes
  • api-o11y é o nome do diretório onde estou
  • add-metrics é o nome da branch do git
  • [!] indica que houveram alterações na branch atual, o equivalente a um git status
  • 5s é o tempo que demorou a execução do último comando
  • ? SUCCESS indica que o último comando que executei finalizou com sucesso.

Na documentação do Starship é possível ver todas as configurações possíveis.

Espero que estas dicas ajudem e inspirem você a dedicar um tempo para customizar e otimizar o seu terminal. Garanto que vai ser divertido e melhorar sua performance no dia a dia. Aproveite e compartilhe as suas dicas também, eu adoraria adicionar novos truques ao meu workflow 🙂