Ferramentas & Produtividade • 6 min de leitura

PowerShell Profile com Nerd Fonts e ANSI — Do Zero ao Terminal que Impressiona

Por que não usar Oh My Posh?

A maioria dos tutoriais sobre personalização de terminal no Windows — incluindo o excelente artigo da TechTarget e os guias da Microsoft Learn — aponta para Oh My Posh como solução padrão. É uma ótima ferramenta, mas tem um custo:

AbordagemDependência externaTempo de carregamentoConfiguração
Oh My PoshSim (binário + JSON)~200–400msArquivo .omp.json
Este guia (ANSI puro)Nenhuma~10–30msSó o profile.ps1

Se você quer um terminal bonito, rápido e que funcione em qualquer máquina onde só você copie um único arquivo — este é o caminho.

Pré-requisitos

1. Instale uma Nerd Font

As Nerd Fonts são fontes de desenvolvimento com milhares de ícones embutidos (Git, pastas, linguagens, etc.). Baixe em:

👉 https://www.nerdfonts.com/font-downloads

Recomendadas: Hack Nerd Font, JetBrainsMono Nerd Font ou CaskaydiaCove Nerd Font.

Instale a fonte no Windows:

Extraia o .zip → Selecione os arquivos .ttf → Clique com botão direito → "Instalar para todos os usuários"

Ou copie para C:\Windows\Fonts\ manualmente.

2. Configure a fonte no Windows Terminal

Abra Configurações (Ctrl+,) → selecione o perfil PowerShellAparênciaTipo de fonte → escolha a Nerd Font instalada.

Ou edite settings.json diretamente (Ctrl+Shift+,):

{
  "profiles": {
    "defaults": {
      "font": {
        "face": "Hack Nerd Font"
      }
    }
  }
}

Onde fica o perfil do PowerShell?

O PowerShell carrega automaticamente um script de perfil ao iniciar — a menos que você use a flag -NoProfile. Para saber onde está o seu:

# Caminho do perfil atual
$PROFILE

# Ver todos os caminhos disponíveis
$Profile | Get-Member -MemberType NoteProperty

Os caminhos mais comuns no Windows:

EscopoCaminho
Usuário atual (PowerShell 7+)$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Usuário atual (Windows PowerShell 5.x)$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Todos os usuários$PSHOME\profile.ps1

Se o arquivo não existir, crie-o:

if (!(Test-Path $PROFILE)) {
    New-Item -Path $PROFILE -ItemType File -Force
}

---

O que este profile faz — e o que outros não fazem

Recursos exclusivos deste setup

Zero dependências — funciona em qualquer máquina com PowerShell 5.1+

Detecção de contexto por projeto — ícone e versão do PHP só aparecem se houver composer.json ou arquivos .php; Node só aparece se houver package.json

Título da janela dinâmico — mostra user@host: pasta na barra do Windows Terminal

Exit code preservado$LASTEXITCODE é salvo e restaurado para não quebrar scripts que verificam o código de saída após o prompt

Prompt em duas linhas — a linha de escrita fica sempre limpa, sem truncar caminhos longos

Aliases práticosserve para PHP dev server, além de outros que desejar

O que artigos comuns cobrem (e este também cobre, mas vai além)

FeatureTechTargetMicrosoft LearnEste guia
Prompt customizado
básico
via Oh My Posh
ANSI nativo
Aliases
Detecção de ambiente (prod/dev)
por hostname
por arquivos do projeto
Ícones Nerd Font
via Oh My Posh
codepoints diretos
Info de linguagem no prompt
PHP + Node + Git
Preservar exit code
Sem dependência externa

Entendendo o script linha a linha

Ícones via codepoints Unicode

$FOLDER = [char]0xf07b    #  pasta
$PHP    = [char]0xe608    #  PHP
$NODE   = [char]0xe718    #  Node.js
$GIT    = [char]0xe702    #  Git branch
$LAMBDA = [char]0x03bb    # λ símbolo prompt

Cada [char]0x???? converte um codepoint Unicode diretamente para o caractere. As Nerd Fonts mapeiam esses codepoints para ícones. Nenhuma biblioteca necessária.

💡 Dica: Para descobrir outros ícones, acesse nerdfonts.com/cheat-sheet e copie o codepoint hex.

Cores ANSI nativas

$ESC     = [char]0x1b
$RED     = "$ESC[31m"
$GREEN   = "$ESC[32m"
$YELLOW  = "$ESC[33m"
$BLUE    = "$ESC[34m"
$MAGENTA = "$ESC[35m"
$CYAN    = "$ESC[36m"
$BOLD    = "$ESC[1m"
$RESET   = "$ESC[0m"

São sequências de escape ANSI — o padrão universal de cores em terminais. Funcionam no Windows Terminal, VS Code, e qualquer emulador moderno. Sem módulos, sem Write-Host colorido, sem gambiarra.

Detecção de contexto por projeto

function Get-PhpInfo {
    $hasPhpFiles = (Test-Path "composer.json") -or
                   (Get-ChildItem "*.php" -ErrorAction SilentlyContinue | Select-Object -First 1)
    if ($hasPhpFiles -and (Get-Command php -ErrorAction SilentlyContinue)) {
        $ver = (& php -v 2>$null | Select-Object -First 1) -replace '^PHP (\S+).*', '$1'
        return " $BLUE$PHP $ver$RESET"
    }
    return ""
}

A lógica é elegante: só exibe a versão do PHP se você estiver numa pasta que parece um projeto PHP. Evita poluição visual quando você está em pastas não relacionadas.

O mesmo padrão se aplica ao Node (detecta package.json) e ao Git (git rev-parse --git-dir).

Preservando o exit code — detalhe que ninguém menciona

function Prompt {
    $lastExit = $LASTEXITCODE
    # ... monta o prompt ...
    $global:LASTEXITCODE = $lastExit
    return $p
}

Esse é um dos detalhes mais ignorados em tutoriais de customização de prompt: a função Prompt em si executa comandos (como git branch) que sobrescrevem $LASTEXITCODE. Se um script externo checa o código de saída após rodar um comando, o valor pode estar corrompido pelo prompt. Este perfil salva e restaura o valor corretamente.

Instalação em uma linha

Copie o arquivo para o caminho correto:

# PowerShell 7+
Copy-Item .\Microsoft.PowerShell_profile.ps1 "$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1"

# Windows PowerShell 5.x
Copy-Item .\Microsoft.PowerShell_profile.ps1 "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"

Depois recarregue o perfil sem fechar o terminal:

. $PROFILE

---

Sincronizando o perfil entre máquinas

Como mencionado no artigo da TechTarget, você pode usar um GitHub Gist para sincronizar o perfil entre máquinas. A vantagem: é público, versionado e pode ser baixado com uma linha:

# Baixar e aplicar diretamente de um Gist
$gist = Invoke-RestMethod https://api.github.com/gists/SEU_GIST_ID
$gist.files."Microsoft.PowerShell_profile.ps1".content | Out-File $PROFILE

⚠️ Atenção: Só use Gists públicos se seu perfil não contiver informações sensíveis (caminhos internos, credenciais, nomes de servidores).

Para criar o Gist via CLI do GitHub:

gh gist create --public --desc "PowerShell Profile com Nerd Fonts, ANSI colors, Git, PHP, Node e Fastfetch" Microsoft.PowerShell_profile.ps1

Download do script

Aqui eu deixo um script bem bacana que usa a fonte citada e mostra icones das pastas e das ferramentas (git, php, node, etc):

👉 Baixar Microsoft.PowerShell_profile.ps1

Resultado final

Ao abrir o terminal com este perfil configurado, você verá algo como:

user@DESKTOP projeto-php main PHP 8.3.4

λ _


- **Verde:** usuário
- **Ciano:** hostname
- **Amarelo:** pasta atual com ícone
- **Magenta:** branch Git com ícone
- **Azul:** versão do PHP com ícone (só em projetos PHP)
- **Verde:** `node v20.11.0` (só em projetos Node)
- **λ:** o cursor, na linha seguinte — sempre limpo

---

## Referências

- [How to find and customize your PowerShell profile — TechTarget](https://www.techtarget.com/searchwindowsserver/tutorial/How-to-find-and-customize-your-PowerShell-profile)
- [Windows Terminal Custom Prompt Setup — Microsoft Learn](https://learn.microsoft.com/en-us/windows/terminal/tutorials/custom-prompt-setup)
- [Nerd Fonts — nerdfonts.com](https://www.nerdfonts.com)
- [ANSI escape codes — Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code)