Personalizando o Windows Terminal
Tags: beginners, tutorial, powershell, windows
Published: 2022-07-17 23:38:19

&nbsp;1. [Programas](#programas)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1. [Windows Terminal](#windows-terminal)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2. [Powershell](#powershell)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.3. [Scoop](#scoop)
&nbsp;2. [Aparência do Powershell](#aparência-do-powershell)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.4. [Oh-my-posh](#ohmyposh)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.5. [Nerd Fonts](#nerd-fonts)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.6. [Terminal Icons](#terminal-icons)
&nbsp;3. [Extensões de autocomplete](#extensões-de-autocomplete)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.7. [Z](#z)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.8. [PSReadLine](#psreadline)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.9. [Posh git](#posh-git)
&nbsp;4. [Conclusão](#conclusão)

---

Recentemente tive mais contato com outros desenvolvedores via *pair programming*, e percebi o quanto o terminal deles era mais agradável de usar.

Com isso, conheci alguns programas e extensões que tornam a experiência de navegação entre as pastas muito mais simples, além de deixá-lo visualmente mais agradável e informativo. Mesmo quando uso o terminal no VS Code, a diferença foi gritante:

![Terminal como usava antes, que era o bash no VS Code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdowdpkf771sjxxzxt2c.png)
 

![Meu terminal depois, usando o Powershell no Windows terminal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c4a7b8zh5r8gl8uuv1ja.png)
 
 
Ainda não parti para o lado Linux ou Mac da força, então fui pesquisar por soluções no ~~bom e tradicional~~ Windows, mesmo.

Se você tem interesse em ter uma experiência melhor no terminal usando Windows, dá uma olhada no que fiz por aqui e veja se tem algo que quer replicar por aí!

## Programas

Inicialmente eu usava só o git bash no próprio VS Code. Quando passei a usar mais de um repositório para rodar uma aplicação, senti a necessidade de ter um terminal onde eu pudesse acompanhar os comandos que eu rodava em cada um, de forma mais centralizada, sem que necessariamente eu tivesse que abrir a IDE. Pra isso, baixei programas que me permitisse usar abas (cada uma acessando um path independente, como o VS Code permite), e um terminal mais atualizado.

### Windows Terminal
Esse programa pode ser baixado na Microsoft Store, que geralmente vem com o Windows. [Segue aqui o link](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=en-us&gl=US) para te dar um atalho.

Pra mim, ele tem sido melhor que o Windows Powershell, porque me permite abrir várias abas do terminal, assim como geralmente fazemos com abas de um navegador. Também é possível deixar a aparência dele mais bonitinha, se você gostar desses "fru-frus", como eu. Sem os outros programas que mencionarei mais pra frente, logo de início, já é possível deixá-lo assim:

![Windows terminal com letras todas cinza claro e fundo com transparência fosca](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3xbrl0vvzye1m6f8tdc5.png)

Para adicionar essa transparência é necessário mexer nas configurações, mas isso já te ensino, porque antes quero apresentar uma versão mais atualizada do terminal que vem com o Windows.

### Powershell

É uma versão mais atualizada do Windows Powershell que vem com o Windows (esse azul abaixo). A Microsoft fala que as duas versões podem ser usados em conjunto, fazendo com que a instalação de um não substitua o outro, mas não sei o porquê desse comportamento. Também é possível instalar o Powershell a partir da versão 7 na loja da Microsoft, [nesse link](https://apps.microsoft.com/store/detail/powershell/9MZ1SNWT0N5D?hl=pt-br&gl=BR).

![Windows Powershell, uma versão mais antiga](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aqup3s8aagnx8wobh9g9.png)
 
Agora sim, vamos ver como deixar o Windows Terminal com uma aparência um pouco mais amigável, além de alterar o terminal padrão para o PowerShell.

No Windows Terminal, selecione as configurações seguindo os caminhos a seguir:

Inicialização > Perfil padrão: Powershell
Aparência > Usar material acrílico [...]: Ativado
Padrões > Aparência: 
  - Esquema de cores: Vintage
  - Transparência > habilitar material acrílico: Ativado
  - Transparência > Opacidade de fundo: 70%

Essas são algumas das configurações do meu terminal, mas é legal ir explorando para entender as suas preferências.

### Scoop

O Scoop é um "instalador" de programas, assim como o Winget (que geralmente já vem com o Windows). Esse é um programa opcional, não vou usá-lo para as extensões que eu mencionar nesse artigo, mas ele pode te ajudar a instalar vários outros programas via linha de comando, de uma forma mais rápida e simples, sem aquelas telinhas de download e instalação (dá até pra usá-lo para instalar o Spotify, por exemplo).

A instalação do Scoop pode ser feita com os dois comandos abaixo: 

```powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
```

Obs.: O primeiro comando é uma configuração importante para que seja possível instalar coisas remotamente na sua máquina. Sem isso, pode ser que seu Windows não permita a instalação nesse formato.

Em seguida, é necessário adicionar o diretório `C:\Users\<USERNAME>\scoop\shims` (lembre de adaptar esse endereço para o seu username na sua máquina) como um novo diretório dentre as variáveis ambiente da máquina dentro de Path: 

- Clique na tecla Windows do teclado e busque por "variáveis ambiente". Deve aparecer a opção "Editar as variáveis ambientes do sistema". Selecione essa opção.
- Clique em "Variáveis ambiente"
- Selecione a opção "Path" dentro de "variáveis do Sistema", e depois clique em "editar"
- Selecione "novo", e digite o diretório informado acima. No meu caso, foi assim:

![Passo a passo para editar as variáveis ambientes no Windows 10](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itkio2q0fvb46ui041d2.png)


## Aparência do Powershell

Por mais que já tenha mencionado algumas configurações que personalizam a aparência do Windows terminal, agora vou especificar alguns programas que também personalizam o conteúdo dele.

### Oh-my-posh

Essa é uma extensão que personaliza a aparência e o conteúdo da linha de comando. Por aqui, incluí o nome do usuário, o caminho da pasta, a branch atual, e a hora, cada uma dessas partes com uma cor que gosto:

![Meu terminal com oh-my-posh, bem colorido](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31ghzxnqpcgrlm0etvlc.png)

Para instalar o oh-my-posh, uma das opções é usar o winget:

```powershell
winget install JanDeDobbeleer.OhMyPosh -s winget
```

[No site da aplicação](https://ohmyposh.dev/docs/installation/windows) tem outras opções de instalação (inclusive com scoop!), caso não queira usar essa, ou encontre algum tipo de problema.

Depois dessa instalação, é necessário que o perfil do seu terminal identifique que ele precisa usar o oh-my-posh. Pra isso, vamos abrir o perfil do Powershell no VS Code com o comando abaixo [^1]:

```powershell
code $PROFILE
```

[^1]: Também é possível usar o bloco de notas, trocando a palavra "code" por "note".

> **ATENÇÃO**: É importante usar esse comando dentro do terminal Powershell, uma vez que é dele que estamos falando. Se abrir dentro do Windows Powershell, por exemplo, já será outro perfil.

O Powershell lê e executa os comandos desse arquivo a cada vez que é aberto. Nele, copie e cole o seguinte comando:

```ps1
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json"
```

Salvando esse arquivo e abrindo uma nova aba no terminal, você já verá algo como a imagem abaixo. Pode ser que os ícones ainda não estejam aparecendo, mas isso está relacionado à fonte, que falarei na próxima aplicação:

![Terminal com o tema Jandedobbeleer](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3dnvi8cwq4k268mf78i.png)

Caso queira utilizar um dos temas incluídos na instalação do oh-my-posh, você pode explorar [nessa página](https://ohmyposh.dev/docs/themes). Basta substituir o nome do tema no comando do perfil do Powershell que você copiou acima. Se quiser usar o "M365Princess", por exemplo, é só trocar o comando no arquivo por:

```ps1
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\M365Princess.omp.json"
```

No meu caso, eu fiz um tema personalizado. Se quiser fazer o mesmo, você pode criar um arquivo JSON e informar o caminho até ele nesse comando para o oh-my-posh do perfil do Powershell. O Oh-my-posh ensina a fazer isso na seção de configuração de sua documentação. Se quiser usar o meu, [ele está aqui](https://github.com/danicaus/dotfiles/blob/main/powershell/danicaus.omp.json), lembrando eu posso tê-lo modificado dependendo do momento do futuro em que você estiver lendo isso.

### Nerd Fonts

Para que os ícones do seu terminal apareçam, o oh-my-posh precisa que você use uma fonte compatível com eles, e uma das recomendações da própria aplicação é instalar uma fonte dentre as "Nerd Fonts".

Você pode baixar diretamente do [repositório deles](https://github.com/ryanoasis/nerd-fonts), ou usando um comando do oh-my-posh:

```powershell
oh-my-posh font install
```

Essa última forma é bem intuitiva, basta selecionar uma das fontes e ele fará a instalação. Depois disso você precisará selecionar a fonte baixada nas configurações do Windows Terminal:

![Seleção de fonte no terminal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j35po5decro8r53rjeo1.png)

Caso tenha baixado a fonte de outra forma, você também deve encontrá-la nas configurações.

### Terminal Icons

Essa é mais uma extensão para melhorar a aparência do terminal, acrescentando ícones do tipo de arquivo ou pasta que está na lista:

![Comando "ls" com o Terminal Icons instalado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/33hg32dqvfugd75rs3y2.png)

Para instalar, basta rodar os seguintes comandos no seu terminal:

```powershell
Install-Module -Name Terminal-Icons -Repository PSGallery -Force
Import-Module Terminal-Icons
```

A cada vez que você abrir seu terminal, para ver o terminal Icons em funcionamento, você precisaria rodar novamente o comando `Import-Module Terminal-Icons`. Para que isso não seja necessário, basta acrescentar esse comando no arquivo de perfil do Powershell. (Lembra como faz isso? -> `code $PROFILE`).

## Extensões de autocomplete

Ok, já falei bastante de extensões que deixam o terminal mais bonito. A partir daqui, vou mostrar algumas que são mega úteis para facilitar o dia a dia, especialmente na navegação entre as pastas.

### Z

Essa extensão é um _intellisense_  que consegue aprender com a navegação que você faz entre as pastas, possibilitando que não seja mais necessário digitar o caminho completo quando estiver navegando entre uma e outra.

![Gif do Z em ação no Windows Terminal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvaa2kwlw3fa6qxekqfu.gif)

Como se trata de um _intellisense_, ele precisa que você faça algumas navegações entre as pastas para "aprender" os que mais acessa. Com isso, é natural que ele não aja conforme o gif acima das primeiras vezes, mas ele aprende bem rápido.

Para instalá-lo, basta digitar o comando:

```powershell
Install-Module -Name Z -Force
```

### PSReadLine

O PSReadLine é um módulo do Powershell que permite o autocomplete de uma forma inteligente, também. Algumas configurações interessantes podem ser usadas para visualizar e navegar pelo histórico de comandos similares ao que você está digitando:

![Histórico de comandos com PSReadline configurado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/me30tqgjq4ukz3kiuwxv.png)

Para instalar, o comando é:

```powershell
Install-Module -Name PSReadLine -AllowPrerelease -Force -SkipPublisherCheck
```

Agora, para que as opções apareçam conforme a imagem acima, vamos colocar mais alguns comandos no perfil do Powershell (aquele `code $PROFILE` maroto).

```powershell
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
```

Você pode aprender mais sobre esses comandos na [documentação do PSReadLine](https://docs.microsoft.com/en-us/powershell/module/psreadline/?view=powershell-7.2)

### Posh git

O PSReadLine e o Z conseguem dar conta de facilitar o uso de vários comandos, no entanto o posh-git ajuda particularmente no autocomplete dos comandos do git. Um simples "tab" após digitar `git checkout`, por exemplo, faz com que apareçam todas as opções de branches existentes no projeto.

![Autocomplete com Posh Git](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ylrhwyiu2ynjntoxna7u.png)

Não só isso, mas existem outros [vários benefícios](https://github.com/dahlbyk/posh-git) que essa extensão pode trazer. 

Para usar, basta rodar o comando:

```powershell
Install-Module posh-git -Scope CurrentUser -Force
```

## Conclusão

Com essas configurações, a linha de comando fica mais apresentável e fácil de navegar. Ela pode até mesmo se tornar mais informativa, caso sejam incluídos alguns segmentos específicos do oh-my-posh.

Para as configurações de aparência, acrescentamos basicamente algumas cores e ícones, mas também adicionamos blocos de conteúdo baseados no diretório em que você se encontra na navegação de pastas e arquivos.

Já as extensões de autocomplete permitem que ferramentas inteligentes usem o seu histórico de comandos para diminuir o tanto que você digita no terminal.

Além das configurações que ensinei por aqui, também é possível dar até mesmo um "apelido" para alguns comandos, como por exemplo para o `git`, usando: 

```powershell
Set-Alias g git
```

Usando esse `Set-Alias` no seu perfil do Powershell, você pode escrever `g` no lugar de `git`, e economizar umas letrinhas.

Por fim, compartilho com você o meu arquivo de perfil do Powershell:

```powershell
# Prompt
# Import-Module oh-my-posh
Import-Module posh-git
Import-Module -Name Terminal-Icons

# Carrega configurações do prompt
oh-my-posh init pwsh --config ~\Documents\PowerShell\danicaus.omp.json | Invoke-Expression

# Navegação com autocomplete
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView

# Adaptando comandos do teclado
Set-Alias vim nvim
Set-Alias g git
``` 

Espero que essas informações tenham sido uteis pra você! 

Caso tenha alguma dúvida ou sugestão de mais extensões para deixar o Powershell ainda melhor, comente aí embaixo! 💻