<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Higor Morais</title>
    <description>The latest articles on DEV Community by Higor Morais (@higorae).</description>
    <link>https://dev.to/higorae</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F369030%2F276e7c7f-c8ba-4cf6-b03e-82d9439e9d7e.jpeg</url>
      <title>DEV Community: Higor Morais</title>
      <link>https://dev.to/higorae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/higorae"/>
    <language>en</language>
    <item>
      <title>Guia de Configuração: Zsh, Oh My Zsh e Atuin</title>
      <dc:creator>Higor Morais</dc:creator>
      <pubDate>Tue, 21 Apr 2026 12:25:38 +0000</pubDate>
      <link>https://dev.to/higorae/guia-de-configuracao-zsh-oh-my-zsh-e-atuin-3eeb</link>
      <guid>https://dev.to/higorae/guia-de-configuracao-zsh-oh-my-zsh-e-atuin-3eeb</guid>
      <description>&lt;p&gt;Aqui está um tutorial completo sobre como instalar o Oh My Zsh (junto com os plugins mais populares) e configurar o Atuin para o histórico do shell.&lt;/p&gt;

&lt;p&gt;No final deste guia, você encontrará um &lt;code&gt;Makefile&lt;/code&gt; que automatiza essas instalações para que você possa replicar facilmente essa configuração em qualquer sistema baseado em Unix (Linux ou macOS).&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Pré-requisitos
&lt;/h2&gt;

&lt;p&gt;Certifique-se de ter o &lt;code&gt;zsh&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt; e &lt;code&gt;git&lt;/code&gt; instalados no seu sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Ubuntu/Debian:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;zsh curl git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;No macOS (via Homebrew):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;zsh curl git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Defina o Zsh como seu shell padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;chsh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;which zsh&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Instalação do Oh My Zsh
&lt;/h2&gt;

&lt;p&gt;Execute o script oficial de instalação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Instalando Plugins do Zsh
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Nota: Como não consegui ler automaticamente seus plugins específicos do &lt;code&gt;.zshrc&lt;/code&gt;, incluí os dois plugins da comunidade mais essenciais e populares. Você pode adicionar outros facilmente à lista!)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. zsh-autosuggestions&lt;/strong&gt; (Sugere comandos enquanto você digita com base no histórico)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. zsh-syntax-highlighting&lt;/strong&gt; (Destaca a sintaxe dos comandos enquanto são digitados)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Configuração:&lt;/strong&gt;&lt;br&gt;
Abra seu arquivo &lt;code&gt;~/.zshrc&lt;/code&gt; e atualize o array &lt;code&gt;plugins&lt;/code&gt; para incluí-los (junto com o &lt;code&gt;git&lt;/code&gt;), assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    git
    zsh-autosuggestions
    zsh-syntax-highlighting
    &lt;span class="c"&gt;# Adicione seus outros plugins aqui!&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, recarregue seu shell: &lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Instalação e Configuração do Atuin
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://github.com/atuinsh/atuin" rel="noopener noreferrer"&gt;Atuin&lt;/a&gt; substitui seu histórico de shell existente por um banco de dados SQLite, permitindo sincronização criptografada e recursos incríveis de pesquisa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalação:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://setup.atuin.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Configuração:&lt;/strong&gt;&lt;br&gt;
O Atuin deve se adicionar automaticamente ao seu &lt;code&gt;~/.zshrc&lt;/code&gt;. Se não o fizer, adicione esta linha no FINAL do seu &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;atuin init zsh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sincronização e Configuração de Conta (Opcional, mas recomendado):&lt;/strong&gt;&lt;br&gt;
Se você quiser fazer backup e sincronizar seu histórico entre computadores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Registre uma conta&lt;/span&gt;
atuin register &lt;span class="nt"&gt;-u&lt;/span&gt; &amp;lt;USUARIO&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;EMAIL&amp;gt;

&lt;span class="c"&gt;# Ou se você já tem uma conta, faça login:&lt;/span&gt;
atuin login &lt;span class="nt"&gt;-u&lt;/span&gt; &amp;lt;USUARIO&amp;gt;

&lt;span class="c"&gt;# Importe seu histórico existente&lt;/span&gt;
atuin import auto

&lt;span class="c"&gt;# Sincronize&lt;/span&gt;
atuin &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Configuração Automatizada via Makefile
&lt;/h2&gt;

&lt;p&gt;Para facilitar as coisas em qualquer sistema baseado em Unix, crie um arquivo chamado &lt;code&gt;Makefile&lt;/code&gt; e cole o conteúdo a seguir.&lt;/p&gt;

&lt;p&gt;Este Makefile verifica as dependências, instala o Oh My Zsh, clona os plugins, instala o Atuin e fornece um comando para atualizar automaticamente o seu &lt;code&gt;.zshrc&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="c"&gt;# Makefile para configuração do Zsh, Oh My Zsh, Plugins e Atuin
&lt;/span&gt;
&lt;span class="nl"&gt;.PHONY&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;all check-deps install-zsh install-oh-my-zsh install-plugins install-atuin configure-zshrc&lt;/span&gt;

&lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;check-deps install-oh-my-zsh install-plugins install-atuin configure-zshrc&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"======================================================="&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Instalação concluída! Por favor, reinicie seu terminal ou execute:"&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"exec zsh"&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"======================================================="&lt;/span&gt;

&lt;span class="nl"&gt;check-deps&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Verificando dependências..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; git &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1 &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"git é necessário, mas não está instalado. Abortando."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; curl &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1 &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"curl é necessário, mas não está instalado. Abortando."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; zsh &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1 &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp;2 &lt;span class="s2"&gt;"zsh é necessário. Por favor, instale o Zsh primeiro."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nl"&gt;install-oh-my-zsh&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Instalando Oh My Zsh..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;HOME/.oh-my-zsh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nv"&gt;RUNZSH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;$$(&lt;/span&gt;&lt;span class="s2"&gt;curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Oh My Zsh já está instalado."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="nl"&gt;install-plugins&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Instalando Plugins do Zsh..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;$${&lt;/span&gt;&lt;span class="s2"&gt;ZSH_CUSTOM:-&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;HOME/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/plugins/zsh-autosuggestions"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;$${&lt;/span&gt;&lt;span class="s2"&gt;ZSH_CUSTOM:-&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;HOME/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/plugins/zsh-autosuggestions"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"zsh-autosuggestions já está instalado."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;$${&lt;/span&gt;&lt;span class="s2"&gt;ZSH_CUSTOM:-&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;HOME/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/plugins/zsh-syntax-highlighting"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;$${&lt;/span&gt;&lt;span class="s2"&gt;ZSH_CUSTOM:-&lt;/span&gt;&lt;span class="nv"&gt;$$&lt;/span&gt;&lt;span class="s2"&gt;HOME/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/plugins/zsh-syntax-highlighting"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"zsh-syntax-highlighting já está instalado."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="nl"&gt;install-atuin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Instalando o Atuin..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; atuin &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://setup.atuin.sh | sh&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Atuin já está instalado."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="nl"&gt;configure-zshrc&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Configurando ~/.zshrc..."&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"plugins=(git)"&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;HOME/.zshrc&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;.bak &lt;span class="s1"&gt;'s/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/'&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;HOME/.zshrc&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Plugins atualizados no ~/.zshrc"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"atuin init zsh"&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;HOME/.zshrc&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "&lt;/span&gt;&lt;span class="p"&gt;$$(&lt;/span&gt;&lt;span class="s1"&gt;atuin init zsh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;HOME/.zshrc&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Inicialização do Atuin adicionada ao ~/.zshrc"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Como usar o Makefile:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Salve o bloco de código acima como &lt;code&gt;Makefile&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Abra o seu terminal no diretório onde você o salvou.&lt;/li&gt;
&lt;li&gt;Execute o comando: &lt;code&gt;make&lt;/code&gt; ou &lt;code&gt;make all&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ele configurará tudo perfeitamente para você!&lt;/p&gt;

</description>
      <category>automation</category>
      <category>cli</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Resgatando a Performance do Meu Macos com Docker Distribuído</title>
      <dc:creator>Higor Morais</dc:creator>
      <pubDate>Mon, 13 Oct 2025 13:40:20 +0000</pubDate>
      <link>https://dev.to/higorae/resgatando-a-performance-do-meu-macos-com-docker-distribuido-3kd4</link>
      <guid>https://dev.to/higorae/resgatando-a-performance-do-meu-macos-com-docker-distribuido-3kd4</guid>
      <description>&lt;p&gt;Trabalhar com Docker é essencial para o desenvolvimento moderno, mas, em máquinas com recursos limitados, a ferramenta pode se tornar um pesadelo. Recentemente, enfrentei o desafio de conciliar a praticidade dos containers com a performance sofrível do meu macbook.&lt;/p&gt;

&lt;p&gt;Com pouco espaço em disco e o alto consumo de recursos gerado pelo docker desktop, o sistema operacional e outras ferramentas essenciais, como o cursor (que também demanda memória), frequentemente sofriam. O resultado era um dia a dia de trabalho marcado por lentidão e travamentos.&lt;/p&gt;

&lt;p&gt;A solução? Mover o processamento. Decidi transformar uma pequena máquina que eu tinha parada em casa em um servidor docker dedicado, aliviando a carga do meu mac e recuperando a performance.&lt;/p&gt;

&lt;p&gt;Adotei uma estratégia para gerenciar meus containers no servidor remoto (&lt;code&gt;homeserver&lt;/code&gt;) com a mesma facilidade de um ambiente local, baseada em recursos nativos do sistema: contextos docker e chaves SSH configuradas.&lt;/p&gt;

&lt;p&gt;Abaixo, detalho os caminhos que tomei para alcançar um acesso remoto rápido, seguro e eficiente, liberando os recursos do meu Mac para o que realmente importa.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 1: A Solução de Performance – Contextos Docker para Alívio de Recursos
&lt;/h3&gt;

&lt;p&gt;O primeiro passo foi abraçar a ferramenta nativa do Docker para alternar entre ambientes: &lt;strong&gt;Contextos Docker&lt;/strong&gt;. Esta foi a escolha ideal, pois me permite gerenciar meus containers no servidor remoto (&lt;code&gt;homeserver&lt;/code&gt;) com os mesmos comandos que uso localmente, mantendo a flexibilidade de voltar para o ambiente &lt;code&gt;default&lt;/code&gt; (minha máquina) quando necessário, como em viagens.&lt;/p&gt;

&lt;p&gt;Ao fazer isso, movi o pesado gerenciamento da virtual machine do docker desktop e o consumo de recursos dos containers para o servidor dedicado, deixando o mac livre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como configurar o Contexto Docker:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gere as Chaves SSH&lt;/strong&gt; (Conforme o Passo 2, abaixo).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crie o Contexto Remoto:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context create homeserver &lt;span class="nt"&gt;--docker&lt;/span&gt; &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssh://user@homeserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para usar o servidor remoto:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context use homeserver
&lt;span class="c"&gt;# Agora, 'docker ps' mostra os containers do servidor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para voltar à sua máquina local (e reverter o consumo de recursos):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker context use default
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Passo 2: O Fim das Senhas – Chaves SSH para Autenticação Rápida
&lt;/h3&gt;

&lt;p&gt;Para garantir que a troca de contexto fosse instantânea — e para permitir que o Contexto Docker funcionasse sem interrupções —, a autenticação por senha precisava ser eliminada. A solução foi o uso de chaves SSH.&lt;/p&gt;

&lt;p&gt;Após gerar meu par de chaves, eu copiei a chave pública para o servidor remoto, permitindo que a conexão fosse estabelecida instantaneamente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gerar o par de chaves (local):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Copiar a chave pública (para o servidor):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id user@homeserver
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;Com as chaves configuradas, o Docker pode se conectar ao daemon remoto sem me pedir a senha, tornando a alternância de contexto imediata e fluida.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Passo 3: Acessando os Serviços Docker como "Localhost" com &lt;code&gt;~/.ssh/config&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Mudar o Docker para o servidor resolve o problema de performance, mas eu ainda precisava acessar os serviços (como um banco de dados ou um Localstack) de forma conveniente.&lt;/p&gt;

&lt;p&gt;Para isso, configurei o arquivo &lt;code&gt;~/.ssh/config&lt;/code&gt; para automatizar a criação de túneis SSH (Port Forwarding), permitindo que eu acesse, por exemplo, o PostgreSQL rodando no servidor simplesmente digitando &lt;code&gt;localhost:5432&lt;/code&gt; no meu cliente local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minha configuração no arquivo &lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Host&lt;/span&gt; homeserver
    &lt;span class="c1"&gt;# O endereço IP ou DNS real do seu servidor (Substitua!)&lt;/span&gt;
    &lt;span class="k"&gt;HostName&lt;/span&gt; [IP-DO-HOMESERVER] 

    &lt;span class="c1"&gt;# Usuário SSH na máquina remota&lt;/span&gt;
    &lt;span class="k"&gt;User&lt;/span&gt; user

    &lt;span class="c1"&gt;# Porta SSH (padrão)&lt;/span&gt;
    &lt;span class="k"&gt;Port&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt; 

    &lt;span class="c1"&gt;# 1. Túnel para a porta 5432 (Ex: PostgreSQL)&lt;/span&gt;
    &lt;span class="c1"&gt;# Porta local 5432 aponta para a porta 5432 no homeserver&lt;/span&gt;
    &lt;span class="k"&gt;LocalForward&lt;/span&gt; &lt;span class="m"&gt;5432&lt;/span&gt; localhost:5432 

    &lt;span class="c1"&gt;# 2. Túnel para a porta 4566 (Ex: Serviço AWS Localstack)&lt;/span&gt;
    &lt;span class="c1"&gt;# Porta local 4566 aponta para a porta 4566 no homeserver&lt;/span&gt;
    &lt;span class="k"&gt;LocalForward&lt;/span&gt; &lt;span class="m"&gt;4566&lt;/span&gt; localhost:4566 

    &lt;span class="c1"&gt;# Garante que a conexão não caia por inatividade&lt;/span&gt;
    &lt;span class="k"&gt;ServerAliveInterval&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;
    &lt;span class="k"&gt;ServerAliveCountMax&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

    &lt;span class="c1"&gt;# Opcional: Não abre um terminal, apenas mantém o túnel ativo&lt;/span&gt;
    &lt;span class="k"&gt;RequestTTY&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;

    &lt;span class="c1"&gt;# Opcional: Configuração para autenticação de host (em caso de IP estático)&lt;/span&gt;
    &lt;span class="k"&gt;StrictHostKeyChecking&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Para ativar o túnel e acessar os serviços:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-N&lt;/span&gt; homeserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Ao combinar a conveniência dos &lt;strong&gt;Contextos Docker&lt;/strong&gt; para o gerenciamento de containers e a segurança dos &lt;strong&gt;Túneis SSH configurados&lt;/strong&gt; para o acesso aos serviços, consegui não apenas um ambiente de desenvolvimento mais saudável, mas também salvei meu tempo de vida evitando irritações desnecessárias com a falta de recursos da minha máquina.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>performance</category>
      <category>productivity</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
