loading...
Cover image for [PT-BR] Rodando oh-my-zsh no Windows

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

devmozao profile image Diogo Fonseca Updated on ・8 min read

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

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!

Posted on by:

devmozao profile

Diogo Fonseca

@devmozao

@devMozao | Fullstack JavaScript Developer. Former Software Engineer. Hyped in VueJS, NodeJS and JS in general. He/Him

Discussion

markdown guide
 

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

 

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/..."

 

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

 

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

 

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

 

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

Como remover?

 

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

 

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

 

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

 

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

 

Parabens mano! Sensacional mesmo.

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

 

Obrigado. Funcionou 100% seguindo teu Guia.

 

Tutorial maravilhoso. Obrigado!

 

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.

 

Fala!

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

choco install firacode-ttf

 

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

Tem algum jeito de resolver isso?

 
 

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

 

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.

 

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

 

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.