Featured image of post Terminais coloridos com Oh My Posh e Terminal do Windows

Terminais coloridos com Oh My Posh e Terminal do Windows

Configurando terminais personalizáveis e intuitivos com Oh My Posh

Introdução Link to this section

Oh My Posh é uma ferramenta que não apenas aprimora a aparência do seu shell, mas também oferece integrações úteis que tornam o uso mais intuitivo e nos ajudam a ser mais produtivos.

Eu o uso no WSL e no meu servidor doméstico e o personalizei para identificar facilmente em qual shell estou:

Definição rápida Link to this section

Apenas uma definição rápida dos termos Shell e Terminal:

  • Shell: o software que recebe a entrada, processa e retorna uma saída (Exemplos: zsh, bash, PowerShell, cmd);
  • Terminal: o software que recebe a entrada e a passa para o shell e, em seguida, imprime a saída do shell (Terminal do Windows, Terminal do VS Code, cmder).

Instalando o Oh My Posh Link to this section

Para instalar o Oh My Posh, precisamos baixar o script de instalação e executá-lo:

curl -s https://ohmyposh.dev/install.sh | bash -s

E incluir sua configuração no arquivo de comandos de execução do shell que você usa.

No meu caso, eu uso zsh, então incluo a seguinte linha no meu arquivo ~/.zshrc:

eval "$(oh-my-posh init zsh)"

Em seguida, saia do shell e entre novamente para carregar a configuração.

ℹ️ Aqui há uma lista de configurações para os shells suportados, incluindo PowerShell e Cmd.

Instalando uma Nerd Font Link to this section

Para usar tudo o que o Oh My Posh oferece, é essencial instalar uma fonte personalizada que inclua ícones. Oh My Posh recomenda uma das Nerd Fonts.

Para instalar as fontes no Windows:

  1. Baixe a fonte que você gosta (eu uso Caskaydia Cove) da página deles;

  2. Extraia-o em um diretório temporário;

  3. Selecione todos os arquivos .ttf;

  4. Clique com o botão direito e clique em Instalar ou Instalar para todos os usuários.

Configurando o Terminal Link to this section

Em seguida, precisamos configurar o terminal para usar a fonte

⚠️ As fontes são necessárias no sistema onde você usa o terminal. Se você acessar um servidor via SSH, você só precisa das fontes no sistema de onde você o acessa.

Terminal do Windows Link to this section

  1. Entre nas Configurações;
  2. Selecione o perfil para configurar;
  3. Clique em Aparência;
  4. Selecione a fonte em Font face
  5. Clique em Salvar.

Então podemos ver que os ícones são mostrados corretamente:

VS Code Link to this section

  1. Entre nas Configurações (File > Preferences > Settings);
  2. Procure por terminal font;
  3. Digite o nome da fonte em Terminal > Integrated > Font Family. Para Caskaydia Cove pode ser CaskaydiaCove Nerd Font Mono.

Então podemos ver que os ícones são mostrados corretamente:

Temas Link to this section

Oh My Posh é altamente personalizável e tem muitos temas (Lista aqui).

Para usar um tema, basta baixar seu json e usá-lo ao iniciar o Oh My Posh.

No exemplo abaixo, o tema está em ~/.poshthemes/aliens.omp.json:

eval "$(oh-my-posh init zsh --config ~/.poshthemes/aliens.omp.json)"

Em seguida, saia do shell e entre novamente para carregar a configuração.

Personalizando seu tema Link to this section

Oh My Posh tem muitos segmentos que podem ser usados. Alguns que acho interessantes são:

  • Git: Pode mostrar o status do repositório git, arquivos alterados, status de rebase/merge e muito mais;
  • Status Code: Mostra o status do último comando executado, se foi bem-sucedido ou não;
  • Root: Mostra se o usuário logado é root.

Também podemos usar o segmento Command para executar qualquer comando e imprimir a saída.

Assim como algumas configurações, por exemplo:

  • Console title: Personalize o que é mostrado na barra de título do terminal. Eu o uso com um texto fixo no meu servidor doméstico para identificar facilmente quando estou conectado a ele;
  • Transient Prompt: Substitui o modelo para o histórico do shell por um mais simples;
  • Tooltip: Mostra informações à direita quando um comando especificado é digitado. Por exemplo, mostra a branch git quando “git” é digitado.

💡 Oh My Posh é escrito em Go, então podemos usar Go Templates para personalizar muitos de seus recursos com condições, acessar variáveis de ambiente e formatar textos. Você pode ver alguns exemplos no meu tema abaixo.

Aqui há uma folha de dicas Unicode para Nerd Fonts para usar ao personalizar o tema.

Meu tema Link to this section

No meu tema, uso 4 segmentos:

  • Session: Mostra um ícone, o usuário logado e o nome do host;
  • Path: Mostra o diretório atual (uso o estilo Agnoster Short, mas existem outros);
  • Status: Mostra um ícone colorido para o status do último comando do shell (Bem-sucedido/Falhou);
  • Git: Mostra o status do git para o repositório se o diretório for um.

ℹ️ Eu mudo a cor e o ícone do segmento session de acordo com qual shell estou usando (ícone de servidor para servidor doméstico, ícone do Ubuntu para Ubuntu no WSL).

ℹ💡 Eu uso a propriedade console_title_template para um valor diferente (Ubuntu e Server) em cada máquina para que o título do terminal mude e eu conecte/desconecte via SSH.

 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
{
  "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
  "version": 2,
  "final_space": true,
  "console_title_template": "Ubuntu",
  "blocks": [
    {
      "type": "prompt",
      "alignment": "left",
      "segments": [
        {
          "type": "session",
          "style": "diamond",
          "foreground": "#FFFFFF",
          "background": "#dd4a14",          
          "leading_diamond": "\ue0b6",
          "template": "\ue73a {{ .UserName }}@{{ .HostName }} "
        },
        {
          "type": "path",
          "style": "powerline",
          "powerline_symbol": "\ue0b0",
          "foreground": "#ffffff",
          "background": "#207a26",
          "template": " {{ .Path }} ",
          "properties": {
            "folder_icon": "\uf6d7",
            "folder_separator_icon": "<transparent> \ue0bd </>",
            "home_icon": "\uf7db",
            "style": "agnoster_short"
          }
        },
        {
          "type": "status",
          "style": "powerline",
          "powerline_symbol": "\ue0b0",
          "foreground": "#ffffff",
          "background": "#00897b",
          "background_templates": [
            "{{ if .Error }}#890017{{ end }}"
          ],
          "template": " {{ if .Error }}\uea87{{ else }}\uf05d{{ end }} ",
          "properties": {
            "always_enabled": true
          }
        },
        {
          "type": "git",
          "style": "powerline",
          "powerline_symbol": "\ue0b0",
          "foreground": "#193549",
          "background": "#95ffa4",
          "template": " {{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }} "
        }
      ]
    }
  ]
}

Referências Link to this section

💬 Like or have something to add? Leave a comment below.
Ko-fi
GitHub Sponsor
Licensed under CC BY-NC-SA 4.0
Criado com Hugo
Tema Stack desenvolvido por Jimmy