DEV Community

Cover image for [PT-BR] Rodando oh-my-zsh no Windows
Diogo Fonseca
Diogo Fonseca

Posted on • Updated on

[PT-BR] Rodando oh-my-zsh no Windows

Disclaimer: This article is outdated.

A lot has changed since I wrote it. Win10 now supports WSL2, Ubuntu had a whole new update with LTS 20 and it's impossible to proceed using cmder to integrate with bash/shell. It crashes A LOT.

I'm testing a new Win10 environment that is similar, but using Hyper terminal. When I'm ready, I'll create a whole new article about it.

Until there, proceed with caution. Or, if you know what you're doing, just switch cmder with Hyper and you'll be just fine.

PS: also there's a lot of fonts that are broken and buggy in Win10 recent updates. That's just sad.


Table Of Contents

0. Prólogo

Uso Windows desde sempre. Como toda a vida joguei, sempre preferi a plataforma do que seus concorrentes. No entanto, foi uma surpresa ao voltar a ser dev em 2018 - quase 10 anos fora da área - qdo descobri que os devs preferem distros Linux e MacOS do que a opção "de sempre". E, mesmo assim, me mantive na plataforma até então.

Porém foi ao formatar um Macbook Pro 13" que possuo desde 2010, que percebi que os usuários de zsh são mais "felizes" do que quem usa cmder. Eles tinham autocomplete, syntax highlight, branch check, temas legais, e... nada disso no Windows.

Foi aí que pesquisei um conteúdo maneiro, e decidi diluir todo o how-to por aqui. Então bora começar:

1. Instalando o Ubuntu no Windows

A build 1903 do Windows veio com tudo, e o WSL foi um dos maiores ganhos da plataforma: poder rodar ubuntu, dentro do windows, sem precisar fazer dual boot.

Parece mágica, até.

  • Primeiro, atualize o seu Windows pra build mais recente, e garanta que ele esteja acima da build 1903.

  • Depois, abra o PowerShell em Administrador, e execute o seguinte comando:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

  • Caso solicite, reinicie o PC.

  • Abra a Microsoft Store. Pesquise por Ubuntu. Selecione a versão padrão e baixe. São 221MB, portanto, vai ser rápido.

  • Quando terminar, um prompt do Ubuntu aparecerá na tela e irá te pedir por um username e password. Entre com as informações. Quando concluir, seu super user terá sido criado e o prompt ficará ativo para receber comandos.

Agora, precisamos atualizar o Ubuntu para sua versão mais recente. Para isso, vamos utilizar dois comandos.

  • Entre com o comando sudo apt-get update para fazer o fetch do que precisa ser atualizado. Leva um tempo.

  • Após finalizado o fetch, entre com o comando sudo apt-get upgrade. Ele irá pedir uma confirmação da ação. Confirme com Y. Vai demorar bastante. No meio da instalação, é capaz que ele pergunte para ter permissão para reiniciar alguns serviços. Basta confirmar com um Yes.

Quando terminar, teremos nosso Ubuntu pronto. Ou quase. Falta atualizar o Git no Ubuntu.

Para atualizar o Git no Ubuntu, devemos adicionar um PPA:

  • sudo add-apt-repository ppa:git-core/ppa. Ele vai pedir para confirmar pressionando o Enter.

Quando finalizar, entre com o comando de update:

  • sudo apt update; sudo apt install git

Obs: pra quem não manja, sudo é uma abreviação para super user do. Um jeito verboso de deixar explícito uma elevação para executar scripts.

2. Instalando o Cmder

Porque o cmder?
Cmder é um emulador de terminais para Windows. Por ser um emulador, podemos rodar diversas instâncias dele, podendo brincar com bash, cmd, powershell e... zsh, claro!

Para instalar, vamos utilizar o Chocolatey:

  • Volte no PowerShell rodando como Administrador, e execute o comando choco install cmder. Ele vai perguntar se você deseja rodar o script. Confirme com o comando A (yes to All).

  • Navegue até o diretório C:\Windows\cmder, e abra o arquivo Cmder.exe. Este é o executável do cmder. Execute-o.

Obs: Chocolatey é o equivalente do Homebrew pro MacOS: um package manager exclusivo pro sistema operacional. Recomendo bastante, por facilitar a instalação de aplicativos e updates gerais (exemplo: dar update no nodejs, utilizando o chocolatey).

Agora que temos "a base" pronta, as coisas começam a ficar interessante.

3. Instalando o oh-my-zsh

  • Volte para o terminal do Ubuntu, e execute o comando sudo apt-get install zsh. Ele vai pedir confirmação. Confirme com o Y.

  • Abra o seu VSCode e instale a extensão do Remote - WSL. Depois de instalado, feche o VSCode.

Agora que instalamos o zsh, precisamos torná-lo como terminal padrão na execução do shell. É muito importante este passo. Se não configurado corretamente, o cmder vai abrir o bash padrão ao invés do zsh.

  • No terminal do Ubuntu, digite o seguinte comando pra abrir o arquivo do bash no VSCode: code ~/.bashrc. Se ele pedir, libere o VSCode no firewall.

  • Dentro do arquivo, adicione na primeira linha o script a seguir:

# if running in terminal...
if test -t 1; then
# ...start zsh
exec zsh
fi
Enter fullscreen mode Exit fullscreen mode

Obs: Tem que ser na primeira linha, mesmo. Se fizer no final do arquivo, pode conflitar com outra condição.

Salve o arquivo, feche-o e feche também o VSCode.

  • No terminal do Ubuntu, execute o seguinte comando para instalar o oh-my-zsh:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Ele vai pedir para confirmar o Zsh como shell padrão. Confirme com um Y e sua senha.

Obs: Ele vai instalar a pasta do oh-my-zsh no caminho /home/<username>/.oh-my-zsh.

4. Configurando o oh-my-zsh no cmder

Abra o cmder. Agora vamos configurar para ele virtualizar o bash com oh-my-zsh conforme a nossa necessidade.

  • No comander, aperte os atalhos Window + Alt + T. Ele vai abrir as taks do cmder. Caso queira, pode abrir pela Barra Superior da Janela do Cmder:

Barra cmder > clique com o botao direito do mouse > Settings > Startup > Task

  • Dentro de Task, Clique no sinal de + que tem debaixo do botão 'Reload'. Ele vai criar uma nova configuração, com o nome de 'GroupN', geralmente Group10.

  • Configure do seguinte jeito: No nome, coloque oh-my-zsh. Marque as opções Default task for new console, Taskbar jump lists e Default shell. Na caixa de Task Parameters, entre com o valor /icon %USERPROFILE%\AppData\Local\lxss\bash.ico para ícone, e na caixa maior debaixo, coloque o valor *cmd /c C:\Windows\System32\bash.exe ~ -new_console:p:%USERPROFILE%.

  • Na caixa com as opções, selecione a {oh-my-zsh}, e mova ela pra primeira opção, utilizando o botão Up, próximo aos botões + e -. Coloque-o na primeira posição da fila. Clique em Save settings em seguida. As settings vão fechar.

  • Reinicie o cmder. Você vai perceber, que ele abre por padrão o cmd do Windows. Abra uma nova aba, com o atalho CTRL + T. Perceba que ele vai vir com o {oh-my-zsh} pré selecionado. Confirme com o Enter. Uma nova aba será aberta com o oh-my-zsh pronto.

Agora: aos plugins!

5. Customizando o oh-my-zsh

Instalando as cores do Dracula no cmder:

  • Abra o site do Dracula e baixe o arquivo .zip do tema para o cmder: https://draculatheme.com/cmder/.

  • Extraia o arquivo Dracula.xml para dentro da pasta do cmder C:\Windows\cmder.

  • Abra as settings do cmder WINDOW + ALT + P, clique no botão Import no rodapé da página e escolha o arquivo Dracula.xml. Clique em Save settings e reinicie o cmder.

Agora, precisamos instalar a fonte Fira Code, para usar os símbolos contidos nela.

  • Vamos usar o chocolatey para isso: Abra o PowerShell como administrador, e execute o comando: choco install firacode. Ele vai pedir a permissão para rodar todos os scripts. Confirme com A para executar todos.

  • De volta no cmder, abra as settings WINDOW + ALT + P. Navegue até General > Fonts, e escolha na lista, a fonte Fira Code. Salve em seguida e reinicie o cmder.

Agora, vamos instalar o tema Spaceship:

  • De volta no cmder, execute o comando git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt"
    .

  • Se tudo ocorreu corretamente, ele clonou o repo do tema e colocou dentro da pasta de temas do zsh $ZSH_CUSTOM/themes/. Para conferir, abra a estrutura de pastas do WSL Ubuntu. Para isso, no explorer do Windows, digite o caminho \\wsl$.

"Fucking magic, right?" - Agora você sabe que o WSL se comporta feito um computador remoto na sua rede, mas dentro do seu próprio Windows. ;)

  • Entre no diretório \\wsl$\Ubuntu\home\<username>. Você consegue "arrastar" o diretório da barra de busca, e deixar como atalho no Acesso Rápido.

Mas pq fazer isso? Desse jeito, você consegue utilizar a estrutura de pastas do WSL, como se fosse a sua estrutura de pastas do Windows. Imagine que, assim como eu, você usa o mesmo computador para lazer - jogos - e trabalho. Desse jeito, você fica com duas estrutura separando o que é pessoal, do que é profissional. =)

  • Abra a pasta \\wsl$\Ubuntu\home\<username>\.oh-my-zsh\custom\themes e veja se a pasta do tema spaceship-prompt foi criada com sucesso. Se foi, vamos prosseguir.

  • No cmder, execute o próximo comando: ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme". Ele vai linkar o tema ao oh-my-zsh.

  • Agora abra o arquivo de configuração do oh-my-zsh, com o seguinte comando: code ~/.zshrc. Ele vai abrir no VSCode. Procure por ZSH_THEME e substituia o valor entre aspas para "spaceship". Salve o arquivo, e reinicie o cmder.

Obs: se você navegar até a pasta ~/.oh-my-zsh, você vai perceber a fonte Fira Code ativa, mostrando o branch do git.

Agora, bora pros 3 plugins "de lei".

  • Primeiro, vamos instalar um plugin, que facilita a instalação de demais plugins. (sério, as vezes ele falha o clone pra pasta correta, e ai você tem que ficar corrigindo na mão. é um saco isso, e acontece até no macOs. Instala o plugin). Para instalar, execute o comando sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zplugin/master/doc/install.sh)"

Lá no arquivo ~/.zshrc que deixamos aberto no VSCode, ele vai adicionar algumas linhas no fim do arquivo.

  • Vá no final do arquivo, e adicione as seguintes linhas:
    zplugin light zdharma/fast-syntax-highlighting
    zplugin light zsh-users/zsh-autosuggestions
    zplugin light zsh-users/zsh-completions

  • Salve em seguida e reinicie o cmder. Ele vai instalar os plugins e pedir confirmação para executar os scripts. Confirme com o Y.

6. Conclusão

Agora você possui o oh-my-zsh rodando em seu cmder, porém não limitado somente a ele: o terminal do Ubuntu e o VSCode também vão utilizar do oh-my-zsh como terminal padrão de uso. Com isso, você pode usufruir do mesmo tema Drácula/Spaceship e funcionalidades de autocompletion, git branches e o que mais você adicionar de plugin.

Ele também traz atalhos de teclado, que são bastante interessante. Quando o autocompletion te trouxer algum valor, basta usar a seta pra direita no teclado, que ele vai completar o código automaticamente, deixando bem dinâmico o processo.

Espero que curtam e que tenham um bom proveito com esse kit poderoso. Gastei algumas horas de um sábado tedioso pra aprender a colocar tudo isso junto funcionando no Windows e como configurar da maneira mais simples possível.

Usei referências da Rocketseat, de um texto do Nuno Caneco, e outras referencias de stackoverflow que encontrei por aí.

Obrigado aos meus amigos principalmente, por revisarem o conteúdo! ♥

E é isso aí, turma. Quem quiser me seguir e trocar ideia sobre dev, só chegar mais, são todos bem vindos

Um abraço!

Latest comments (22)

Collapse
 
douglasstrey profile image
Douglas Strey

Opa, consegue me ajudar com esse erro?

sh -c "$(curl -fsSL raw.githubusercontent.com/robbyrus..."

Ao tentar executar esse código ele me apresentar o seguinte erro:
dev-to-uploads.s3.amazonaws.com/up...

E não sei como resolver...

Collapse
 
jvzaniolo profile image
João Vitor • Edited

Consegui fazer o linux enxergar as variáveis de ambiente do windows usando o WSLENV mas não consigo acessar alguns comandos que ficam dentro da pasta.
Exemplo:
~ echo $ANDROID_HOME // retorna '/mnt/c/Android/sdk'

Dentro do .zshrc eu coloquei
export PATH=$PATH:$ANDROID_HOME/emulator

e aí quando eu tento rodar o comando:
~ emulator // retorna 'zsh: command not found: emulator'

Mas se eu rodo:
~ emulator.exe -list-avds // retorna 'Pixel28'

Ou seja, funciona se eu escrevo emulator.exe

Collapse
 
heymands profile image
Amanda Costa

@zinit-scheduler:72: command not found: sleep

Tem algum jeito de resolver isso?

Collapse
 
nicktecno profile image
nicktecno

Como faz para eliminarmos o erro que dá no final da configuração relacionado ao sleep?

Collapse
 
heymands profile image
Amanda Costa

Consegui resolvendo o erro do sleep descomentando a linha #72 do arquivo do zsh, salvar, atualizar o terminal, e comentar ela novamente. Eu sinceramente não sei motivo do erro. Mas resolveu fazendo isso.

Collapse
 
arthuralveso profile image
Arthur Alves

Parabens mano! Sensacional mesmo.

Direto e simples. Ao invés do cmder eu utilizei o hyper e deu certo tambem :D

Collapse
 
hanges profile image
Rafael Hanges

Obrigado. Funcionou 100% seguindo teu Guia.

Collapse
 
brayanf13 profile image
Brayan Ferreira

No meu terminal aparece esta mensagem ao iniciar:
sleep: cannot read realtime clock: Invalid argument

Como remover?

Collapse
 
nipodemos profile image
Nipodemos

aconteceu comigo também... Não resolvi, a única coisa que eu sei é que dos 3 comandos que colocamos no final do .zshrc, o terceiro comando de instalação tá falhando, aí ele tenta toda vez e dá o mesmo erro

Collapse
 
brayanf13 profile image
Brayan Ferreira

O meu tava dando tela preta quando tentava usar o terminal no vscode, até parei de usar,

Atualmente uso so o terminal bash do git mesmo

Collapse
 
wesleyvicen profile image
Wesley Vicente

Como eu poderia usar o React Native no terminal? tenho tido erros e não consigo rodar...

Collapse
 
devmozao profile image
Diogo Fonseca

essa não vou saber te responder - ainda -, meu caro.

Collapse
 
jrbytes profile image
Jr Bytes

Meu caro, obrigado pelo conteúdo. A parte de acessar as pastas do linux com \\wsl$ foi sensacional, também coloquei em Acesso Rápido.

Collapse
 
bfernandes94 profile image
bfernandes94

Fala!

Não consegui instalar o Fira Code com choco install firacode, mas consegui com:

choco install firacode-ttf

Collapse
 
viniclefer profile image
Vinicius Fernandes

Teria como fazer o terminal do oh-my-zsh inicializar com o caminho do Desktop?

Collapse
 
erickrock profile image
Erick Garcia Godoy

É só instalar o Windows Terminal da Loja do Windows, abrir o arquivo de configurações dele e editar o profile default, ou ir diretamente no perfil Linux do mesmo arquivo, adicionei a seguinte propriedade:

           //Inicia na home do user
           "startingDirectory" : "%USERPROFILE%",


           //Eu uso o seguinte:
            "startingDirectory": "C:\\Users\\erick\\OneDrive\\Área de Trabalho\\Projetos"
Enter fullscreen mode Exit fullscreen mode
Collapse
 
devmozao profile image
Diogo Fonseca

cara, tem sim. Eu vi algum artigo falando disso, e perdi o link. Atualmente voltei a usar WSL com Hyper/zsh/oh-my-zsh, e precisava disso também. Qdo encontrar, atualizo por aqui.

Collapse
 
yzk23 profile image
Isaac Medeiros

Tutorial maravilhoso. Obrigado!

Collapse
 
suknaic profile image
Felipe Suknaic

eu pensei que o tutorial era para rodar o oh-my-zsh no windows não no linux no windows :/

Collapse
 
nipodemos profile image
Nipodemos

fiz o tutorial todo e descobri só no final que eu teoricamente vou ter que migrar todos os meus projetos pro WSL e usar lá só pra ter o oh-my-zsh

triste

Collapse
 
jeffersonshibuya profile image
Jefferson R. Shibuya • Edited

sh -c "$(curl -fsSL raw.githubusercontent.com/zdharma/..."

Esse comando esta retornando um 404. Sabe me dizer se o mesmo foi substituido por algum outro plugin?

Excelente post, como disse, parece magica. Fico feliz em ver esse tipo de integracao com o windows

Collapse
 
kymera28 profile image
Tobias Ponce

O zplugin mudou de nome para zinit, a nova url é raw.githubusercontent.com/zdharma/...

Então roda o comando assim:
sh -c "$(curl -fsSL raw.githubusercontent.com/zdharma/..."