<?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: Guilherme Yamakawa de Oliveira</title>
    <description>The latest articles on DEV Community by Guilherme Yamakawa de Oliveira (@guilherme44).</description>
    <link>https://dev.to/guilherme44</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F30816%2F90a4981b-417b-4d41-ac2c-4be6e1433b90.jpg</url>
      <title>DEV Community: Guilherme Yamakawa de Oliveira</title>
      <link>https://dev.to/guilherme44</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guilherme44"/>
    <language>en</language>
    <item>
      <title>[PT-BR] O Omarchy passou de 400 plugins. Um deles é meu</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Tue, 18 Aug 2026 14:42:10 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-o-omarchy-passou-de-400-plugins-um-deles-e-meu-432c</link>
      <guid>https://dev.to/guilherme44/pt-br-o-omarchy-passou-de-400-plugins-um-deles-e-meu-432c</guid>
      <description>&lt;p&gt;Um AirPods funcionando de verdade no Linux: bateria de cada fone e do estojo, os modos de escuta, detecção de ouvido. Nada disso existia fora do mundo da Apple, porque nem o Bluetooth do sistema sabe ler esses números. O &lt;a href="https://github.com/thisisgm" rel="noopener noreferrer"&gt;GM&lt;/a&gt; sentou e fez. O &lt;a href="https://github.com/thisisgm/omarchy-pods" rel="noopener noreferrer"&gt;primeiro commit&lt;/a&gt; é de anteontem no fim da tarde, e ontem já estava publicado no diretório: 24 commits, menos de um dia, de graça.&lt;/p&gt;

&lt;p&gt;Isso teria sido piada dois anos atrás. Hoje é só mais um plugin no diretório, entre outros quatrocentos e quinze.&lt;/p&gt;

&lt;p&gt;Explicando pra quem não acompanha: o &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é a distro Linux opinativa do DHH, criador do Rails, e eu uso ela &lt;a href="https://guilherme44.com/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;desde o primeiro dia&lt;/a&gt;. Sexta passada saiu a versão nova, com um sistema de plugins: pedaços de interface que qualquer pessoa escreve e qualquer pessoa instala na barra do sistema com um comando.&lt;/p&gt;

&lt;p&gt;O &lt;a href="https://omarchyplugins.com/" rel="noopener noreferrer"&gt;diretório da comunidade&lt;/a&gt; levou dezessete dias pra chegar a cem plugins. Depois de sexta, entraram mais de trezentos em cinco dias: 35 naquele dia, 82 no sábado, 99 no domingo, 80 hoje. São 416 plugins da comunidade publicados até agora.&lt;/p&gt;

&lt;p&gt;Um deles é meu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49xmoe6sovkvfzxzpndk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49xmoe6sovkvfzxzpndk.png" alt="O widget do mclovin aberto na barra, com as regras de roteamento" width="800" height="590"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O mclovin aberto na barra, com as regras que já existem&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  O que o plugin faz
&lt;/h2&gt;

&lt;p&gt;O problema que ele resolve é bobo e persegue todo mundo que trabalha no computador: você clica num link do Slack e ele abre no navegador errado, ou no perfil errado. O link do trabalho abre no Chrome pessoal, o link pessoal abre no perfil da empresa.&lt;/p&gt;

&lt;p&gt;O McLovin põe um seletor no meio da tela quando você clica num link, com uma linha por perfil de navegador. Você escolhe onde abrir. Marca &lt;em&gt;always&lt;/em&gt; e aquela escolha vira regra, então o próximo link daquele site já vai direto pro lugar certo. O resto está no &lt;a href="https://github.com/guilhermeyo/omarchy-mclovin" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6j71gmd00w7vgoyp5h5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6j71gmd00w7vgoyp5h5a.png" alt="O seletor de navegadores, listando quatro navegadores com seus perfis" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O seletor, uma linha por perfil. Marcando always, a linha vira a regra que vai ser escrita&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ie19m7utk4t00biii38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ie19m7utk4t00biii38.png" alt="O formulário de regra, com o casador, o destino e uma prévia ao vivo" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O formulário de regras&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Tudo roda dentro do &lt;code&gt;omarchy-shell&lt;/code&gt;, em QML: sem daemon, sem binário, sem processo extra.&lt;/p&gt;

&lt;p&gt;E aqui tem uma volta que eu gosto. A primeira versão do McLovin, anos atrás, era um plugin de barra feito só pra mim. Depois eu quis que fosse maior que isso, tirei de dentro do shell e reescrevi &lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;em Rust&lt;/a&gt; como programa independente, com CLI, TUI e GUI, pensando em rodar em qualquer sistema. Agora ele é plugin de novo, sem carregar uma linha daquele Rust.&lt;/p&gt;

&lt;p&gt;O círculo fechou num ponto diferente do que começou: da primeira vez o plugin era só meu, e agora qualquer um instala com um comando. O programa em Rust continua de pé, é o que eu uso nas máquinas sem Omarchy, e o plugin importa as regras dele se você já tiver.&lt;/p&gt;
&lt;h2&gt;
  
  
  Eu já fazia plugin. Só que pra mim
&lt;/h2&gt;

&lt;p&gt;Isso não começou agora. O plugin da VPN, que troca o país com a bandeirinha do lado, nasceu no Omarchy antigo. Quando comecei a testar o Quattro eu refiz ele pro shell novo, escrevi outro pra alternar o modo de polimento do ditado, e mais um painel de tela cheia no monitor secundário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1b6ofs5iqtv059krwd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1b6ofs5iqtv059krwd3.png" alt="O painel da VPN aberto no desktop, com a lista de países e as bandeiras" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O plugin da VPN aberto: filtro em cima, países com bandeira embaixo&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm2lwkis5pr6x3pn405vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm2lwkis5pr6x3pn405vs.png" alt="O painel do voxtype aberto, com a pipeline de polimento do ditado" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O do voxtype, onde eu monto a pipeline que limpa o texto ditado&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Os três moram em &lt;code&gt;~/.config/omarchy/plugins/&lt;/code&gt; e nunca saíram de lá. Não por segredo, e sim porque não existia porta. Eles resolviam um incômodo meu e paravam ali, e eu achava que ia ser sempre assim.&lt;/p&gt;

&lt;p&gt;Aí o HANCORE montou o diretório, o Quattro saiu na sexta, e a distância entre "resolvi o meu incômodo" e "resolvi o incômodo de quem usa o mesmo ambiente que eu" virou um comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omarchy plugin add https://github.com/guilhermeyo/omarchy-mclovin.git &lt;span class="nt"&gt;--enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A diferença não é técnica. O código do plugin de VPN não ficou melhor por existir um diretório. O que mudou foi o destino dele.&lt;/p&gt;

&lt;h2&gt;
  
  
  Um amigo, quatro plugins, uma noite
&lt;/h2&gt;

&lt;p&gt;Um amigo meu instalou o Omarchy ontem. Terminou o setup umas oito e meia da noite. Sete da manhã ele já tinha quatro plugins que achava que faltavam na máquina dele, um deles cem por cento pronto e já submetido pra aprovação no diretório.&lt;/p&gt;

&lt;p&gt;Isso é o que me impressiona, mais do que o meu próprio plugin. O ciclo entre "isso aqui tá me incomodando, podia ser melhor" e "pronto, resolvi, e agora tá lá pra quem quiser" cabe numa noite.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o Mac cobra pela mesma coisa
&lt;/h2&gt;

&lt;p&gt;Tenho um MacBook e preciso dele pro Xcode e pra publicar pra iOS. Voltei a usar ele com mais frequência esses meses, e a diferença de atrito é grande: tudo pede autorização, tudo pede uma permissão em algum painel. Depois de um tempo de Omarchy, onde você simplesmente faz, isso incomoda.&lt;/p&gt;

&lt;p&gt;Como não quero viver dentro dele, montei uma barra pro macOS parecida com a do Omarchy, em Swift e AppKit. São umas 7.500 linhas, com relógio, calendário, bateria, workspaces e abas de janela escritos por mim. Ela continua só minha, e não é por falta de open source no Mac: o &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;, que eu usava pra rotear link lá, é open source e só existe pra macOS.&lt;/p&gt;

&lt;p&gt;A diferença é o tamanho do que você precisa entregar. No Mac, compartilhar quer dizer virar app: empacotar, assinar, notarizar, escrever instalação, sustentar um site. No Omarchy é um repositório com um manifesto, que cai dentro de uma barra que todo mundo já roda. Uma pede um projeto inteiro em volta, a outra pede um &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  E o Windows, que eu nem tento
&lt;/h2&gt;

&lt;p&gt;Não uso Windows há mais de quinze anos, tirando abrir pra jogar um CS no Faceit. Quando pensei em publicar o McLovin lá, era certificado de desenvolvedor, assinatura, e a mesma burocracia de publicar em loja. Pra um programa que roteia link. Desanimei antes de começar, e com o pessoal saindo do Windows 11 essa diferença de atrito vira porta de entrada.&lt;/p&gt;

&lt;p&gt;Tem o outro lado, que pesa igual. Quando a Microsoft anunciou o Recall, ficou no ar que o sistema ia observar tudo que você faz na sua própria máquina. No Mac eu já sentia uma versão mais discreta disso: muita coisa rodando por trás que eu não sei o que é nem pra onde manda. O usuário comum não vê e provavelmente nunca vai ver. Eu sei que tá lá, e me incomoda.&lt;/p&gt;

&lt;p&gt;No Omarchy tudo que vem instalado é open source. A diferença é que dá pra auditar o que sai da sua máquina, e a resposta pra "o que é esse processo aqui" existe em algum lugar que você pode ler. Já escrevi sobre isso quando contei do &lt;a href="https://guilherme44.com/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;daemon que o Chrome instala calado no macOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;São os dois lados da mesma porta: quando o sistema é legível, você consegue mexer nele e consegue ver o que ele faz. Quando é opaco, você só pode aceitar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qualquer um pode fazer melhor que o meu
&lt;/h2&gt;

&lt;p&gt;E vai fazer. Com IA hoje, alguém chega, olha o meu plugin, acha ruim e escreve um melhor até o fim de semana.&lt;/p&gt;

&lt;p&gt;Isso não me incomoda, é literalmente o objetivo. O que importa não é o meu plugin ganhar. É o incômodo ser resolvido, de preferência por quem usa aquilo todo dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quem tá segurando o diretório
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://omarchyplugins.com/" rel="noopener noreferrer"&gt;omarchyplugins.com&lt;/a&gt; é um projeto independente do &lt;a href="https://github.com/HANCORE-linux" rel="noopener noreferrer"&gt;HANCORE&lt;/a&gt;. É ele que está pondo tempo dele pra organizar isso, ler código e aprovar o que entra.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4zag79mj640wh49xqp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4zag79mj640wh49xqp1.png" alt="O card do mclovin no diretório, com o selo de verificado" width="800" height="774"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;O selo de verificado não se dá sozinho: alguém leu o código antes&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Ter alguém revisando plugin de estranho é o que separa um diretório de uma pasta de links. Meu plugin passou por ali antes de aparecer pra você, e isso é trabalho de alguém.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;O plugin está no diretório, o código está aberto sob MIT, e a instalação é um comando.&lt;/p&gt;

&lt;p&gt;Mas não é sobre o meu plugin. Faz quinze anos que eu não uso Windows e mais de um que uso Omarchy, e nunca vi o ciclo entre se incomodar e consertar ser tão curto. Um fone da Apple funcionando de verdade fora da Apple, escrito em menos de um dia. Um amigo com quatro plugins entre o jantar e o café. Trezentos plugins em cinco dias, escritos por gente que só queria que a própria máquina fosse um pouco melhor.&lt;/p&gt;

&lt;p&gt;As coisas estão ficando diferentes, e a parte boa é que dá pra entrar hoje mesmo. Se tem um incômodo pequeno te perseguindo há meses, ele agora cabe numa noite, e o resultado não precisa ficar guardado na sua máquina.&lt;/p&gt;




&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://omarchyplugins.com/plugin.html?id=io.github.guilhermeyo.mclovin" rel="noopener noreferrer"&gt;mclovin no diretório de plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guilhermeyo/omarchy-mclovin" rel="noopener noreferrer"&gt;omarchy-mclovin no GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;McLovin (Rust)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/thisisgm/omarchy-pods" rel="noopener noreferrer"&gt;omarchy-pods, o plugin de AirPods do GM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/omarchy-plugins-mclovin/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>omarchy</category>
      <category>mclovin</category>
      <category>linux</category>
      <category>quickshell</category>
    </item>
    <item>
      <title>Omarchy passed 400 plugins. One of them is mine</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Tue, 18 Aug 2026 14:42:06 +0000</pubDate>
      <link>https://dev.to/guilherme44/omarchy-passed-400-plugins-one-of-them-is-mine-23k8</link>
      <guid>https://dev.to/guilherme44/omarchy-passed-400-plugins-one-of-them-is-mine-23k8</guid>
      <description>&lt;p&gt;AirPods working properly on Linux: battery for each bud and the case, the listening modes, ear detection. None of it existed outside Apple's world, because the system's own Bluetooth stack cannot even read those numbers. &lt;a href="https://github.com/thisisgm" rel="noopener noreferrer"&gt;GM&lt;/a&gt; sat down and did it. The &lt;a href="https://github.com/thisisgm/omarchy-pods" rel="noopener noreferrer"&gt;first commit&lt;/a&gt; landed the evening before last, and by yesterday it was published in the directory: 24 commits, under a day, for free.&lt;/p&gt;

&lt;p&gt;Two years ago that would have been a joke. Today it is just another plugin in the directory, among four hundred and fifteen others.&lt;/p&gt;

&lt;p&gt;For anyone not following along: &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; is DHH's opinionated Linux distribution, and I have been using it &lt;a href="https://guilherme44.com/en/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;since day one&lt;/a&gt;. Last Friday the new version shipped with a plugin system: pieces of interface that anyone can write and anyone can install into the system bar with one command.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://omarchyplugins.com/" rel="noopener noreferrer"&gt;community directory&lt;/a&gt; took seventeen days to reach a hundred plugins. After Friday, more than three hundred arrived in five days: 35 that day, 82 on Saturday, 99 on Sunday, 80 today. That is 416 community plugins published so far.&lt;/p&gt;

&lt;p&gt;One of them is mine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49xmoe6sovkvfzxzpndk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49xmoe6sovkvfzxzpndk.png" alt="The mclovin widget open in the bar, with its routing rules" width="800" height="590"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;mclovin open in the bar, with the rules that already exist&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What the plugin does
&lt;/h2&gt;

&lt;p&gt;The problem it solves is a silly one that follows around anyone who works on a computer: you click a link in Slack and it opens in the wrong browser, or the wrong profile. The work link lands in your personal Chrome, the personal link lands in the company profile.&lt;/p&gt;

&lt;p&gt;McLovin puts a picker in the middle of the screen when you click a link, one row per browser profile. You choose where it opens. Tick &lt;em&gt;always&lt;/em&gt; and that choice becomes a rule, so the next link from that site goes straight to the right place. The rest is in the &lt;a href="https://github.com/guilhermeyo/omarchy-mclovin" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6j71gmd00w7vgoyp5h5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6j71gmd00w7vgoyp5h5a.png" alt="The browser picker, listing four browsers with their profiles" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The picker, one row per profile. Tick always and the line grows into the rule it will write&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ie19m7utk4t00biii38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ie19m7utk4t00biii38.png" alt="The rule form, with matcher, destination and a live preview" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The rule form&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;All of it runs inside &lt;code&gt;omarchy-shell&lt;/code&gt;, in QML: no daemon, no binary, no extra process.&lt;/p&gt;

&lt;p&gt;There is a loop here that I like. McLovin's first version, years ago, was a bar plugin I built only for myself. Then I wanted it to be bigger than that, pulled it out of the shell and rewrote it &lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;in Rust&lt;/a&gt; as a standalone program with a CLI, a TUI and a GUI, meant to run anywhere. Now it is a plugin again, without carrying a single line of that Rust.&lt;/p&gt;

&lt;p&gt;The circle closed at a different point from where it started: the first time the plugin was only mine, and now anyone installs it with one command. The Rust program is still around, it is what I use on machines without Omarchy, and the plugin can import its rules if you already have them.&lt;/p&gt;
&lt;h2&gt;
  
  
  I was already writing plugins. Just for myself
&lt;/h2&gt;

&lt;p&gt;This did not start now. The VPN plugin, the one that switches country with the little flag next to it, was born on the old Omarchy. When I started testing Quattro I rebuilt it for the new shell, wrote another one to change the polish mode of my dictation, and a third that is a full-screen dashboard on the second monitor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1b6ofs5iqtv059krwd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1b6ofs5iqtv059krwd3.png" alt="The VPN panel open on the desktop, listing countries with their flags" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The VPN plugin open: a filter on top, countries with flags below&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm2lwkis5pr6x3pn405vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm2lwkis5pr6x3pn405vs.png" alt="The voxtype panel open, showing the dictation polish pipeline" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The voxtype one, where I build the pipeline that cleans up dictated text&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;All three live in &lt;code&gt;~/.config/omarchy/plugins/&lt;/code&gt; and never left. Not out of secrecy. There was simply no door. They fixed something that annoyed me and stopped there, and I assumed it would always be like that.&lt;/p&gt;

&lt;p&gt;Then HANCORE put the directory together, Quattro shipped on Friday, and the distance between "I fixed my own annoyance" and "I fixed the annoyance of everyone on the same setup" became one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;omarchy plugin add https://github.com/guilhermeyo/omarchy-mclovin.git &lt;span class="nt"&gt;--enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference is not technical. My VPN plugin did not get better because a directory exists. What changed is where the code can go.&lt;/p&gt;

&lt;h2&gt;
  
  
  A friend, four plugins, one night
&lt;/h2&gt;

&lt;p&gt;A friend of mine installed Omarchy yesterday. He finished the setup around half past eight in the evening. By seven the next morning he had four plugins he thought his machine was missing, one of them completely done and already submitted to the directory for approval.&lt;/p&gt;

&lt;p&gt;That impresses me more than my own plugin does. The loop between "this bothers me, it could be better" and "done, and it is out there for anyone who wants it" fits inside one night.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Mac charges for the same thing
&lt;/h2&gt;

&lt;p&gt;I have a MacBook and I need it for Xcode and for publishing to iOS. I have been back on it more often these past months, and the difference in friction is large: everything asks for an authorization, everything wants a permission toggled in some panel. After a while on Omarchy, where you simply do the thing, that gets annoying.&lt;/p&gt;

&lt;p&gt;Since I do not want to live inside it, I built a macOS bar that behaves like the Omarchy one, in Swift and AppKit. Around 7,500 lines, with a clock, calendar, battery, workspaces and window tabs I wrote myself. It is still only mine, and not for lack of open source on the Mac: &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;, which I used to route links there, is open source and macOS only.&lt;/p&gt;

&lt;p&gt;The difference is the size of what you have to ship. On the Mac, sharing means becoming an app: packaging, signing, notarising, writing install instructions, keeping a site alive. On Omarchy it is a repository with a manifest, dropping into a bar everyone already runs. One asks for a whole project around it, the other asks for a &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  And Windows, which I do not even try
&lt;/h2&gt;

&lt;p&gt;I have not used Windows in over fifteen years, other than opening it to play CS on Faceit. When I looked into publishing McLovin there, it was a developer certificate, signing, and the same paperwork as shipping to a store. For a program that routes links. I lost interest before starting, and with people leaving Windows 11, that difference in friction becomes a front door.&lt;/p&gt;

&lt;p&gt;There is the other side, and it weighs the same. When Microsoft announced Recall, the impression it left was that the system would be watching everything you do on your own machine. On the Mac I already felt a quieter version of that: a lot running in the background that I do not know the purpose of, or the destination of. The average user does not see it and probably never will. I know it is there, and it bothers me.&lt;/p&gt;

&lt;p&gt;On Omarchy everything that ships is open source. The difference is that you can audit what leaves your machine, and the answer to "what is this process" exists somewhere you are allowed to read. I wrote about this before, when I found &lt;a href="https://guilherme44.com/en/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;the daemon Chrome quietly installs on macOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They are two sides of the same door: when a system is legible you can change it and you can see what it does. When it is opaque, all you can do is accept it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anyone can build a better one than mine
&lt;/h2&gt;

&lt;p&gt;And somebody will. With AI today, someone can look at my plugin, decide it is bad, and write a better one by the weekend.&lt;/p&gt;

&lt;p&gt;That does not bother me. It is the actual point. What matters is not my plugin winning. It is the annoyance getting fixed, preferably by whoever lives with it every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is holding the directory up
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://omarchyplugins.com/" rel="noopener noreferrer"&gt;omarchyplugins.com&lt;/a&gt; is an independent project by &lt;a href="https://github.com/HANCORE-linux" rel="noopener noreferrer"&gt;HANCORE&lt;/a&gt;. He is the one spending his own time organising it, reading the code, and approving what goes in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4zag79mj640wh49xqp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4zag79mj640wh49xqp1.png" alt="The mclovin card in the directory, with the verified badge" width="800" height="774"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The verified badge does not appear on its own: somebody read the code first&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Having someone review a stranger's plugin is what separates a directory from a folder of links. Mine went through that before it showed up for you, and that is somebody's work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The plugin is in the directory, the code is open under MIT, and installing it is one command.&lt;/p&gt;

&lt;p&gt;But this was never really about my plugin. I have not used Windows in fifteen years and I have been on Omarchy for over one, and I have never seen the loop between being annoyed and having fixed it get this short. Apple headphones finally working outside Apple, written in under a day. A friend with four plugins between dinner and coffee. Three hundred plugins in five days, written by people who only wanted their own machine to be slightly better.&lt;/p&gt;

&lt;p&gt;Things are changing, and the good part is that you can join today. If some small annoyance has been following you around for months, it now fits in one evening, and the result does not have to stay on your machine.&lt;/p&gt;




&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://omarchyplugins.com/plugin.html?id=io.github.guilhermeyo.mclovin" rel="noopener noreferrer"&gt;mclovin in the plugin directory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guilhermeyo/omarchy-mclovin" rel="noopener noreferrer"&gt;omarchy-mclovin on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;McLovin (Rust)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/thisisgm/omarchy-pods" rel="noopener noreferrer"&gt;omarchy-pods, GM's AirPods plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://guilherme44.com/en/blog/omarchy-plugins-mclovin/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>omarchy</category>
      <category>mclovin</category>
      <category>linux</category>
      <category>quickshell</category>
    </item>
    <item>
      <title>[PT-BR] Meu iPhone virou dumbphone, e eu fiz o launcher em React Native</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 14 Aug 2026 02:59:43 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-meu-iphone-virou-dumbphone-e-eu-fiz-o-launcher-em-react-native-5eik</link>
      <guid>https://dev.to/guilherme44/pt-br-meu-iphone-virou-dumbphone-e-eu-fiz-o-launcher-em-react-native-5eik</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/blog/launching-mclovin/" rel="noopener noreferrer"&gt;No post do McLovin&lt;/a&gt; eu escrevi que iOS e Android ficavam pra depois. Chegou a vez deles, só que por outra porta. O que eu fui fazer no celular não foi roteamento de link, foi tirar tela da minha frente.&lt;/p&gt;

&lt;p&gt;O número que me fez parar é brasileiro: segundo a Bain, o brasileiro passa 9 horas e 13 minutos por dia conectado, contra 6 horas e 38 da média mundial. Na mesma pesquisa, tempo de tela é o hábito que ele mais gostaria de mudar, na frente de alimentação e de sedentarismo. Não é que a gente não perceba. A gente percebe, e continua ali.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3059l63ml66u3sx8e7rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3059l63ml66u3sx8e7rf.png" alt="Tela inicial do iPhone com previsão do tempo e uma lista de nomes em texto" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;A minha tela inicial hoje: previsão em cima, os apps como lista de nomes&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é um dumbphone
&lt;/h2&gt;

&lt;p&gt;Pra quem nunca esbarrou no termo: dumbphone é aquele telefone que só faz ligação e manda SMS. Não roda rede social, não roda jogo, não tem navegador. Foi o que todo mundo tinha antes de 2007, e virou movimento justamente porque deixou de ser o padrão. Nos Estados Unidos os feature phones voltaram a vender, 2,8 milhões em 2023, empurrados pelo detox digital da Geração Z.&lt;/p&gt;

&lt;p&gt;E funciona. Um estudo da PNAS Nexus bloqueou a internet móvel de 467 pessoas por duas semanas e atenção, saúde mental e bem-estar melhoraram nos três casos. Mas apenas 25,5% aguentaram o mínimo de 10 dias. O efeito é real e é difícil pra caramba de sustentar. Não estou aqui pra dizer que resolvi isso.&lt;/p&gt;

&lt;h2&gt;
  
  
  De onde veio a ideia
&lt;/h2&gt;

&lt;p&gt;O que me apresentou o assunto foi o &lt;a href="https://apps.apple.com/br/app/dumb-phone-dp/id6504743503" rel="noopener noreferrer"&gt;Dumb Phone (dp)&lt;/a&gt;, do Michael Tigas. Ele troca a tela inicial por uma lista de botões de texto e ainda esconde o resto pelo Tempo de Uso. É bem feito e faz mais coisa que o meu.&lt;/p&gt;

&lt;p&gt;Só que eu sou desenvolvedor e gosto de aprender e evoluir, e mobile é a tela que todo mundo tem na mão o dia inteiro. Dava pra estudar isso lendo changelog e assistindo talk, mas aí não tem skin in the game. Resolvi entrar do jeito que ensina: um app meu, que eu uso todo dia, e nas duas lojas.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu fiz
&lt;/h2&gt;

&lt;p&gt;A tela inicial vira uma lista de nomes em texto. Sem ícone, sem badge, sem grade. Você toca no nome e o app abre.&lt;/p&gt;

&lt;p&gt;A ideia não é virar monge, é tirar a disputa. A tela de fábrica é uma grade de quadradinhos coloridos brigando pela sua atenção, e os apps que eu abro todo dia são cinco. O resto é barulho que eu rolo pra passar. Trocar ícone por texto tira a cor da equação, e sem cor você para de reconhecer o app de longe e passa a ter que ler. Ler é mais devagar. Devagar é o ponto.&lt;/p&gt;

&lt;p&gt;O app é o editor, onde você monta a lista, escolhe a fonte e o alinhamento. O widget é o produto, e é ele que fica na tela.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9huy6mszhcxi6d2ubsc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9huy6mszhcxi6d2ubsc6.png" alt="Tela de edição de apps com preview ao vivo em cima da lista" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Onde você monta a lista, com o preview do widget em cima&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que não só Swift
&lt;/h2&gt;

&lt;p&gt;Esse app já existia em Swift. A primeira versão dele é SwiftUI inteira, mora num repositório meu do lado, e funciona bem. Refazer em React Native foi decisão, não acidente.&lt;/p&gt;

&lt;p&gt;O motivo é Android. Eu quero o mesmo app nos dois lugares e não quero escrever ele duas vezes. Essa versão aqui é a primeira, é iOS, e já está montada em cima da parte que vai junto quando eu atravessar. Se eu tivesse seguido em Swift, o Android um dia começaria do zero.&lt;/p&gt;

&lt;p&gt;E tem o motivo pessoal: fazia tempo, mas não é a primeira vez. Lá no começo do React Native, quando o framework ainda era novidade, eu fiz uma calculadora de investimentos pra uma instituição financeira, e o que eu entregava no fim era o APK. Então a parte Android dessa aposta não é teoria pra mim, é uma coisa que eu já vivi uma vez.&lt;/p&gt;

&lt;p&gt;Fora isso, React nunca saiu do meu caminho: meu dia a dia é Ruby, Rails e React, e &lt;a href="https://guilherme44.com/blog/configuring-reactjs-in-rails-with-webpacker/" rel="noopener noreferrer"&gt;React já apareceu neste blog em 2020&lt;/a&gt;. O React Native é que andou muito de lá pra cá, e eu queria ver no que ele virou, não no que eu lembrava dele. Pra essa pergunta ter resposta honesta, tem que ser app de verdade, com prazo de verdade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onde o JavaScript para
&lt;/h2&gt;

&lt;p&gt;Resposta curta: o React Native cobre a metade de cima, e a plataforma cobra a de baixo.&lt;/p&gt;

&lt;p&gt;No Android você troca o launcher inteiro e pronto, o sistema é seu. No iPhone não existe isso. Ninguém substitui a tela inicial do iOS, e é por isso que todo app desse nicho, o meu e o do Michael, chega pelo mesmo caminho: um widget. O widget é a única superfície que a Apple deixa você desenhar ali.&lt;/p&gt;

&lt;p&gt;E widget no iOS é SwiftUI, sempre. O WidgetKit não tem runtime de JavaScript, não é preferência minha e não existe biblioteca que mude isso. Ou seja, justo a parte que fica na sua tela, a que importa, é Swift. Hoje são 2.840 linhas de Swift pra 7.371 de TypeScript, quase um terço do app.&lt;/p&gt;

&lt;p&gt;Tem mais uma pegadinha, e essa o usuário sente. Um toque no widget não abre outro app direto, o iOS não permite. O toque cai primeiro no app hospedeiro, que aí te encaminha pro destino. Dá pra ver acontecendo, e não tem como esconder.&lt;/p&gt;

&lt;h2&gt;
  
  
  A frase entre os toques
&lt;/h2&gt;

&lt;p&gt;Em vez de pedir desculpa por esse piscar, eu resolvi preencher ele. Cada pulo mostra uma frase, pelo tempo que você escolher, de zero a quatro segundos, e aí você chega onde ia.&lt;/p&gt;

&lt;p&gt;Isso deixou de ser conserto técnico e virou a parte que eu mais gosto. Se a ideia do app é te fazer desacelerar na hora de pegar o telefone, uma pausa obrigatória no meio do caminho não é bug, é exatamente o produto. A limitação da plataforma virou o único momento de silêncio do aparelho.&lt;/p&gt;

&lt;p&gt;São 20 frases por idioma, cada uma com autor, e cada idioma puxado da tradição dele em vez de traduzido do inglês. As suas você escreve, e elas nunca são mexidas quando você troca de idioma.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fue8ri00se0czzp9rsyk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fue8ri00se0czzp9rsyk6.png" alt="Tela de frases com o interruptor, as durações e a lista com autores" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;As frases que aparecem no caminho, com quem escreveu&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A pegadinha que apaga tudo
&lt;/h2&gt;

&lt;p&gt;Essa é a parte que eu não sabia antes de começar, e é a que quase me custou caro.&lt;/p&gt;

&lt;p&gt;O app e o widget são dois processos que nunca conversam direto. O único canal entre eles é um App Group, um &lt;code&gt;UserDefaults&lt;/code&gt; compartilhado, guardando uma string JSON. Parece trivial. Não é.&lt;/p&gt;

&lt;p&gt;Se você entregar um objeto pro lado nativo em vez de uma string, a ponte converte o &lt;code&gt;true&lt;/code&gt; do JavaScript pra &lt;code&gt;1&lt;/code&gt;. O Swift tenta ler aquilo como Bool, levanta erro, o erro escapa, um &lt;code&gt;try?&lt;/code&gt; engole ele, e a configuração inteira volta pro padrão de fábrica. Todos os apps que a pessoa adicionou somem. Sem erro na tela, sem log, sem crash.&lt;/p&gt;

&lt;p&gt;É por isso que o módulo nativo daqui recebe String e nunca objeto. E é por isso que os 257 testes do projeto quase não olham pra tela: eles cercam os quatro pontos onde estar errado é silencioso. A regra que eu adotei foi testar a falha, não o caminho feliz, porque entrada malformada é o que chega ali de verdade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;O código está aberto em &lt;a href="https://github.com/guilhermeyo/tsp" rel="noopener noreferrer"&gt;github.com/guilhermeyo/tsp&lt;/a&gt;, sob MIT. Roda no meu iPhone todo dia, e a lista da primeira foto é a minha de verdade.&lt;/p&gt;

&lt;p&gt;O próximo passo é a App Store. Depois dela, o Android, que é o motivo de tudo isso estar em React Native.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;Eu não fiquei mais produtivo de um dia pro outro, e aquele estudo já avisa que segurar isso é a parte difícil. O que mudou foi menor e mais concreto: eu pego o telefone pra fazer uma coisa e saio dele tendo feito aquela coisa.&lt;/p&gt;

&lt;p&gt;Tem muita gente hoje contando que tem IA trabalhando 24 horas por dia, sete dias por semana, tocando cem produtos ao mesmo tempo. Entregue mesmo eu vejo pouco. Prefiro o contrário: um app só, terminado, que eu uso todo dia e que qualquer pessoa pode pegar e usar.&lt;/p&gt;

&lt;p&gt;E terminar é o que ensina. Eu aprendi React Native lendo sobre React Native, e aprendi mais ainda levando um app até o fim e batendo em cada limite que a plataforma impõe. A base é a mesma que eu venho construindo há anos de carreira, só que aplicada numa tecnologia diferente, e é aí que ela consolida: você descobre o que era conceito de verdade e o que era só costume da ferramenta antiga.&lt;/p&gt;

&lt;p&gt;No post do McLovin eu disse que iOS e Android ficavam pra depois. O depois chegou, e a régua que eu me dou é a mesma de lá: o mesmo app nos dois sistemas, escrito uma vez só. Por enquanto está metade entregue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fontes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/br/app/dumb-phone-dp/id6504743503" rel="noopener noreferrer"&gt;Dumb Phone (dp) na App Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guilhermeyo/tsp" rel="noopener noreferrer"&gt;The Simple Phone no GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bain.com/pt-br/about/media-center/press-releases/south-america/2023/brasileiros-querem-diminuir-tempo-de-tela-mas-passam-mais-de-9-horasdia-conectados/" rel="noopener noreferrer"&gt;Bain Consumer Pulse 2025: brasileiros passam mais de 9 horas por dia conectados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://academic.oup.com/pnasnexus/article/4/2/pgaf017/8016017" rel="noopener noreferrer"&gt;PNAS Nexus: blocking mobile internet improves attention and mental health&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://counterpointresearch.com/en/insights/us-feature-phone-market" rel="noopener noreferrer"&gt;Counterpoint Research: o retorno dos feature phones nos EUA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/widgetkit" rel="noopener noreferrer"&gt;WidgetKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/xcode/configuring-app-groups" rel="noopener noreferrer"&gt;Configurando App Groups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/dumbphone-launcher-in-react-native/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>ios</category>
      <category>dumbphone</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My iPhone became a dumbphone, and I built the launcher in React Native</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 14 Aug 2026 02:59:21 +0000</pubDate>
      <link>https://dev.to/guilherme44/my-iphone-became-a-dumbphone-and-i-built-the-launcher-in-react-native-b10</link>
      <guid>https://dev.to/guilherme44/my-iphone-became-a-dumbphone-and-i-built-the-launcher-in-react-native-b10</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/en/blog/launching-mclovin/" rel="noopener noreferrer"&gt;In the McLovin post&lt;/a&gt; I wrote that iOS and Android were for later. Their turn came, just through a different door. What I went and did on the phone was not link routing, it was getting screen out of my face.&lt;/p&gt;

&lt;p&gt;The number that made me stop is a Brazilian one: according to Bain, someone in Brazil spends 9 hours and 13 minutes a day connected, against a global average of 6 hours and 38. In the same survey, screen time is the habit Brazilians would most like to change, ahead of diet and being sedentary. It is not that we do not notice. We notice, and we stay.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3059l63ml66u3sx8e7rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3059l63ml66u3sx8e7rf.png" alt="iPhone home screen with a weather strip and a list of app names in plain text" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;My home screen today: forecast on top, the apps as a list of names&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a dumbphone is
&lt;/h2&gt;

&lt;p&gt;For anyone who has never run into the term: a dumbphone is the phone that only makes calls and sends SMS. No social apps, no games, no browser. It is what everybody carried before 2007, and it became a movement precisely because it stopped being the default. In the United States feature phones started selling again, 2.8 million units in 2023, pushed by Gen Z digital detox.&lt;/p&gt;

&lt;p&gt;And it works. A study in PNAS Nexus blocked mobile internet for 467 people for two weeks, and attention, mental health and wellbeing all improved. But only 25.5% lasted the minimum 10 days. The effect is real and it is genuinely hard to sustain. I am not here to tell you I solved this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the idea came from
&lt;/h2&gt;

&lt;p&gt;What introduced me to the subject was &lt;a href="https://apps.apple.com/us/app/dumb-phone-dp/id6504743503" rel="noopener noreferrer"&gt;Dumb Phone (dp)&lt;/a&gt;, by Michael Tigas. It swaps the home screen for a list of text buttons and hides the rest through Screen Time. It is well made and it does more than mine.&lt;/p&gt;

&lt;p&gt;Except I am a developer and I like learning and growing, and mobile is the screen everyone has in their hand all day. I could have studied that by reading changelogs and watching talks, but there is no skin in the game in that. So I went in the way that actually teaches: an app of my own, one I use every day, and on both stores.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;The home screen becomes a list of names in plain text. No icons, no badges, no grid. You tap a name and the app opens.&lt;/p&gt;

&lt;p&gt;The idea is not to become a monk, it is to remove the competition. The stock home screen is a grid of coloured squares fighting for your attention, and the apps I open every day are five. The rest is noise I scroll past. Swapping icons for text takes colour out of the equation, and without colour you stop recognising an app from across the screen and have to read instead. Reading is slower. Slower is the point.&lt;/p&gt;

&lt;p&gt;The app is the editor, where you build the list and pick the type and the alignment. The widget is the product, and it is the part that stays on screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9huy6mszhcxi6d2ubsc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9huy6mszhcxi6d2ubsc6.png" alt="Apps screen with a live preview above the editable list" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Where you build the list, with the widget preview on top&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just Swift
&lt;/h2&gt;

&lt;p&gt;This app already existed in Swift. The first version is SwiftUI all the way through, it lives in a repo of mine next door, and it works well. Rebuilding it in React Native was a decision, not an accident.&lt;/p&gt;

&lt;p&gt;The reason is Android. I want the same app in both places and I do not want to write it twice. This version is the first one, it is iOS, and it is already built on top of the part that travels when I cross over. Had I stayed in Swift, Android would start from zero some day.&lt;/p&gt;

&lt;p&gt;And there is the personal reason: it had been a while, but this is not my first time. Back in the early days of React Native, when the framework was still new, I built an investment calculator for a financial institution, and what I shipped at the end of it was the APK. So the Android half of this bet is not theory to me, it is something I have already lived through once.&lt;/p&gt;

&lt;p&gt;Beyond that, React never left my path: my day to day is Ruby, Rails and React, and &lt;a href="https://guilherme44.com/en/blog/configuring-reactjs-in-rails-with-webpacker/" rel="noopener noreferrer"&gt;React showed up on this blog back in 2020&lt;/a&gt;. React Native is the one that moved a long way since, and I wanted to see what it had become rather than what I remembered. For that question to get an honest answer, it has to be a real app with a real deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where JavaScript stops
&lt;/h2&gt;

&lt;p&gt;Short answer: React Native covers the top half, and the platform charges you for the bottom one.&lt;/p&gt;

&lt;p&gt;On Android you replace the whole launcher and that is that, the system is yours. On the iPhone there is no such thing. Nobody replaces the iOS home screen, and that is why every app in this niche, mine and Michael's alike, arrives through the same door: a widget. The widget is the only surface Apple lets you draw on there.&lt;/p&gt;

&lt;p&gt;And a widget on iOS is SwiftUI, always. WidgetKit has no JavaScript runtime, that is not my preference and no library changes it. So the very part that sits on your screen, the one that matters, is Swift. Right now that is 2,840 lines of Swift against 7,371 of TypeScript, close to a third of the app.&lt;/p&gt;

&lt;p&gt;There is one more catch, and this one the user feels. Tapping a widget row does not open another app directly, iOS will not allow it. The tap lands in the host app first, which then forwards you to the destination. You can watch it happen, and there is no hiding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The phrase between the taps
&lt;/h2&gt;

&lt;p&gt;Instead of apologising for that flash, I decided to fill it. Every hop shows a phrase, held for as long as you choose, zero to four seconds, and then you arrive where you were going.&lt;/p&gt;

&lt;p&gt;This stopped being a technical patch and became the part I like most. If the point of the app is to slow you down when you reach for the phone, a forced pause halfway there is not a bug, it is exactly the product. A limitation of the platform became the one quiet moment on the device.&lt;/p&gt;

&lt;p&gt;Twenty phrases ship per language, each attributed, each drawn from that language's own tradition rather than translated from English. Yours are yours to write, and they are never touched when you switch languages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fue8ri00se0czzp9rsyk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fue8ri00se0czzp9rsyk6.png" alt="Phrases screen with the toggle, the durations and the attributed list" width="538" height="1170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;The phrases shown on the way, with who wrote them&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The trap that wipes everything
&lt;/h2&gt;

&lt;p&gt;This is the part I did not know before starting, and the one that nearly cost me dearly.&lt;/p&gt;

&lt;p&gt;The app and the widget are two processes that never talk to each other directly. The only channel between them is an App Group, a shared &lt;code&gt;UserDefaults&lt;/code&gt;, holding one JSON string. Sounds trivial. It is not.&lt;/p&gt;

&lt;p&gt;If you hand the native side an object instead of a string, the bridge turns the JavaScript &lt;code&gt;true&lt;/code&gt; into &lt;code&gt;1&lt;/code&gt;. Swift then tries to read that as a Bool, throws, the throw escapes, a &lt;code&gt;try?&lt;/code&gt; swallows it, and the entire config resets to the factory default. Every app the person added is gone. No error on screen, no log, no crash.&lt;/p&gt;

&lt;p&gt;That is why the native module here takes a String and never an object. And it is why the project's 257 tests barely look at the screen: they fence off the four places where being wrong is silent. The rule I follow is to test the failure, not the happy path, because malformed input is what actually reaches that code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;The code is open at &lt;a href="https://github.com/guilhermeyo/tsp" rel="noopener noreferrer"&gt;github.com/guilhermeyo/tsp&lt;/a&gt;, under MIT. It runs on my iPhone every day, and the list in the first screenshot is my real one.&lt;/p&gt;

&lt;p&gt;Next stop is the App Store. After that, Android, which is the reason all of this is in React Native.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;I did not become more productive overnight, and that study already warns that holding on to this is the hard part. What changed is smaller and more concrete: I pick up the phone to do one thing and I put it down having done that thing.&lt;/p&gt;

&lt;p&gt;There are a lot of people right now telling you they have AI working 24 hours a day, seven days a week, running a hundred products at once. Shipped ones I see very few of. I would rather have the opposite: one app, finished, that I use every day and that anyone can pick up and use.&lt;/p&gt;

&lt;p&gt;And finishing is what teaches. I learned React Native by reading about React Native, and I learned a lot more by taking an app all the way and hitting every limit the platform imposes. The foundation is the same one I have been building for years of my career, only applied through a different technology, and that is where it settles: you find out what was actually a concept and what was just a habit of the old tool.&lt;/p&gt;

&lt;p&gt;In the McLovin post I said iOS and Android were for later. Later arrived, and the bar I set for myself is the same one from back there: the same app on both systems, written once. For now it is half delivered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/dumb-phone-dp/id6504743503" rel="noopener noreferrer"&gt;Dumb Phone (dp) on the App Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guilhermeyo/tsp" rel="noopener noreferrer"&gt;The Simple Phone on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bain.com/pt-br/about/media-center/press-releases/south-america/2023/brasileiros-querem-diminuir-tempo-de-tela-mas-passam-mais-de-9-horasdia-conectados/" rel="noopener noreferrer"&gt;Bain Consumer Pulse 2025 on screen time in Brazil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://academic.oup.com/pnasnexus/article/4/2/pgaf017/8016017" rel="noopener noreferrer"&gt;PNAS Nexus: blocking mobile internet improves attention and mental health&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://counterpointresearch.com/en/insights/us-feature-phone-market" rel="noopener noreferrer"&gt;Counterpoint Research on the US feature phone comeback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/widgetkit" rel="noopener noreferrer"&gt;WidgetKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/xcode/configuring-app-groups" rel="noopener noreferrer"&gt;Configuring App Groups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://guilherme44.com/en/blog/dumbphone-launcher-in-react-native/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>ios</category>
      <category>dumbphone</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[PT-BR] McLovin: o roteador de links multiplataforma</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 15 May 2026 18:37:44 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-mclovin-o-roteador-de-links-multiplataforma-488o</link>
      <guid>https://dev.to/guilherme44/pt-br-mclovin-o-roteador-de-links-multiplataforma-488o</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;Semana passada escrevi&lt;/a&gt; que roteamento de links é a feature que SO e browser fingem não existir, e fechei dizendo que essa era de IA podia trazer um roteador multiplataforma decente, e que eu seria o divulgador número um. O multiplataforma ainda não saiu, mas a parte do Linux saiu. Lanço hoje o &lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;McLovin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Igual no &lt;a href="https://pt.wikipedia.org/wiki/Superbad" rel="noopener noreferrer"&gt;Superbad&lt;/a&gt;, o McLovin se dá bem com o Sistema Operacional (Oficial Slater) e os browsers (Oficial Michaels). Amigo dos dois, ele direciona cada link pro lugar certo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xeanpe7w8u33qdkb1h7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xeanpe7w8u33qdkb1h7.png" alt="Menu principal do McLovin com browsers detectados e badge de update" width="800" height="632"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Menu principal da GUI&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Por que o McLovin existe?
&lt;/h2&gt;

&lt;p&gt;No Mac eu usava o &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;. Migrei pro Linux com o &lt;a href="https://omarchy.org" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; faz quase um ano e fui procurar equivalente. O &lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt; só pergunta a cada link, o &lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt; não tem regras de roteamento. Sobrava o caminho do "monta o teu", e eu montei. Funcionou muito bem, fiz uma TUI que combinava com o Omarchy. Aí pensei: isso aqui deveria existir em todo SO por padrão, igual a regra que cada SO tem pra escolher qual app abre PDF. Então decidi fazer o McLovin do jeito certo: um roteador multiplataforma, configurável por qualquer pessoa, com picker de browser quando precisar e regras pra mandar cada link pro lugar certo.&lt;/p&gt;

&lt;p&gt;No iOS e no Android, esse problema também existe, mas fica pra depois.&lt;/p&gt;
&lt;h2&gt;
  
  
  O que é
&lt;/h2&gt;

&lt;p&gt;O McLovin se registra como o handler default do sistema pra &lt;code&gt;http&lt;/code&gt; e &lt;code&gt;https&lt;/code&gt;. Quando você clica em qualquer link, no Slack, no terminal, ou em qualquer outro app, o SO entrega a URL pro McLovin. Ele lê o &lt;code&gt;rules.toml&lt;/code&gt;, decide pra onde mandar, despacha o app ou browser certo, e some.&lt;/p&gt;

&lt;p&gt;Se nenhuma regra bater, abre um picker no estilo &lt;a href="https://github.com/abenz1267/walker" rel="noopener noreferrer"&gt;Walker&lt;/a&gt; pra você escolher entre os browsers detectados. Dois frontends compartilham o mesmo core em Rust: uma CLI pra automação e keybinds, e uma GUI (&lt;code&gt;mclovin settings&lt;/code&gt;) pra mouse e teclado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4niftjcdj3c3es1l6aw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4niftjcdj3c3es1l6aw.png" alt="Picker do McLovin com browsers detectados" width="800" height="503"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Picker quando nenhuma regra bate&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  As regras
&lt;/h2&gt;

&lt;p&gt;As regras vivem no &lt;code&gt;~/.config/mclovin/rules.toml&lt;/code&gt;. São três tipos: substring, regex com reescrita, e Lua pra regras dinâmicas. Um exemplo curto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;fallback_browser&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"brave"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"github.com/empresa"&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"chrome --profile-directory='Profile 1' {url}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"GitHub do trabalho no Chrome do trabalho"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match_regex&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'^https?://open\.spotify\.com/(\w+)/([^?#/]+)'&lt;/span&gt;
&lt;span class="py"&gt;rewrite&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"spotify --uri=spotify:{1}:{2}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Spotify aberto direto no app desktop"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match_lua&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ctx.url.host:find('work') and ctx.now.hour &amp;lt; 18"&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"chrome --profile-directory='Profile 1' {url}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Links de trabalho dentro do horário comercial"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;fallback_browser&lt;/code&gt; cobre o que não bate em nenhuma regra. O Lua roda num ambiente isolado (sem &lt;code&gt;os.execute&lt;/code&gt;, sem &lt;code&gt;loadfile&lt;/code&gt;) e recebe o contexto da URL, a hora atual, e o app que originou o clique. Receitas prontas pra colar saem com &lt;code&gt;mclovin examples&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsynds2bnkwdkfokjhii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsynds2bnkwdkfokjhii.png" alt="Lista de regras configuradas no McLovin" width="800" height="632"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Lista de regras na GUI&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;A versão alpha pra Linux já está funcionando. macOS e Windows vêm em breve. Pra qualquer problema, abra uma issue no &lt;a href="https://github.com/guilhermeyo/mclovin-release/issues" rel="noopener noreferrer"&gt;GitHub do mclovin-release&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onde ver
&lt;/h2&gt;

&lt;p&gt;O manual de instalação, configuração e exemplos de regras está no site oficial:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;mclovin.org&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;No post passado escrevi "eu, além de usar, seria o divulgador número um" de um roteador multiplataforma decente. Estou divulgando o meu. Falta o multiplataforma, mas no Linux já está entregue.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/launching-mclovin/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mclovin</category>
      <category>linux</category>
      <category>browsers</category>
      <category>productivity</category>
    </item>
    <item>
      <title>McLovin: the cross-platform link router</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 15 May 2026 18:37:40 +0000</pubDate>
      <link>https://dev.to/guilherme44/mclovin-the-cross-platform-link-router-19ho</link>
      <guid>https://dev.to/guilherme44/mclovin-the-cross-platform-link-router-19ho</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/en/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;Last week I wrote&lt;/a&gt; that link routing is the feature OSes and browsers pretend isn't there, and closed by saying this AI era could bring a cross-platform router, and that I'd be the number one promoter. The cross-platform piece didn't ship yet, but the Linux piece did. Today I'm launching &lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;McLovin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Just like in &lt;a href="https://www.imdb.com/title/tt0829482/" rel="noopener noreferrer"&gt;Superbad&lt;/a&gt;, McLovin gets along with the Operating System (Officer Slater) and the browsers (Officer Michaels). Friends with both, he steers each link to the right place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4icmavjuyqq109j043mx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4icmavjuyqq109j043mx.png" alt="McLovin settings main menu with detected browsers and an update badge" width="800" height="632"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Main menu of the GUI&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why does McLovin exist?
&lt;/h2&gt;

&lt;p&gt;On Mac I used &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;. I switched to Linux with &lt;a href="https://omarchy.org" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; almost a year ago and went looking for an equivalent. &lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt; only asks every time, &lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt; doesn't carry routing rules. The remaining path was "build your own", and I did. It worked well, with a TUI that paired nicely with Omarchy. Then I thought: this should be a built-in feature on every OS, the same way each OS has a rule for which app opens PDFs. So I decided to do McLovin the right way: a cross-platform router, configurable by anyone, with a browser picker when nothing matches and rules to send every link to the right place.&lt;/p&gt;

&lt;p&gt;iOS and Android have the same problem, but that's for later.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;McLovin registers as the system's default handler for &lt;code&gt;http&lt;/code&gt; and &lt;code&gt;https&lt;/code&gt;. When you click any link, in Slack, in your terminal, or in any other app, the OS hands the URL to McLovin. It reads &lt;code&gt;rules.toml&lt;/code&gt;, decides where to send it, dispatches the right app or browser, and gets out of the way.&lt;/p&gt;

&lt;p&gt;If no rule matches, a &lt;a href="https://github.com/abenz1267/walker" rel="noopener noreferrer"&gt;Walker&lt;/a&gt;-style picker shows the detected browsers and lets you pick one. Two frontends share one Rust core: a CLI for automation and keybinds, and a GUI (&lt;code&gt;mclovin settings&lt;/code&gt;) for mouse and keyboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuyyvd5l0kpcjwoafpsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuyyvd5l0kpcjwoafpsb.png" alt="McLovin picker listing detected browsers" width="800" height="503"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Picker shown when no rule matches&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The rules
&lt;/h2&gt;

&lt;p&gt;Rules live in &lt;code&gt;~/.config/mclovin/rules.toml&lt;/code&gt;. Three kinds: substring, regex with rewrite, and Lua for dynamic rules. A short example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;fallback_browser&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"brave"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"github.com/work-org"&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"chrome --profile-directory='Profile 1' {url}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Work GitHub in the work Chrome profile"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match_regex&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'^https?://open\.spotify\.com/(\w+)/([^?#/]+)'&lt;/span&gt;
&lt;span class="py"&gt;rewrite&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"spotify --uri=spotify:{1}:{2}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Spotify links opened in the desktop app"&lt;/span&gt;

&lt;span class="nn"&gt;[[handler]]&lt;/span&gt;
&lt;span class="py"&gt;match_lua&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ctx.url.host:find('work') and ctx.now.hour &amp;lt; 18"&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"chrome --profile-directory='Profile 1' {url}"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Work links during business hours"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;fallback_browser&lt;/code&gt; covers anything that doesn't match. Lua runs in a sandboxed environment (no &lt;code&gt;os.execute&lt;/code&gt;, no &lt;code&gt;loadfile&lt;/code&gt;) and receives the URL context, the current time, and the app that triggered the click. Ready-made recipes come from &lt;code&gt;mclovin examples&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg93hiaiikk3mb7g3ekx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg93hiaiikk3mb7g3ekx.png" alt="List of rules configured in McLovin" width="800" height="632"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Rules list in the GUI&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;The Linux alpha is working today. macOS and Windows are coming soon. Run into a problem? Open an issue on the &lt;a href="https://github.com/guilhermeyo/mclovin-release/issues" rel="noopener noreferrer"&gt;mclovin-release GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to look
&lt;/h2&gt;

&lt;p&gt;The full install guide, configuration manual, and rule examples live on the official site:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mclovin.org" rel="noopener noreferrer"&gt;mclovin.org&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;In the previous post I wrote "I'd be the number one promoter" of a decent cross-platform router. I'm promoting mine. The cross-platform part isn't there yet, but Linux is.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://guilherme44.com/en/blog/launching-mclovin/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mclovin</category>
      <category>linux</category>
      <category>browsers</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[PT-BR] Pela terceira vez, o Google enfia coisa no seu PC sem perguntar</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 08 May 2026 18:31:44 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-pela-terceira-vez-o-google-enfia-coisa-no-seu-pc-sem-perguntar-3pdf</link>
      <guid>https://dev.to/guilherme44/pt-br-pela-terceira-vez-o-google-enfia-coisa-no-seu-pc-sem-perguntar-3pdf</guid>
      <description>&lt;p&gt;Se você usa o Chrome, tem 4GB de modelo de IA na sua máquina que você nunca pediu. E não é a primeira vez que o Google faz isso, é a terceira. O pesquisador &lt;a href="https://www.thatprivacyguy.com/" rel="noopener noreferrer"&gt;Alexander Hanff&lt;/a&gt; &lt;a href="https://www.thatprivacyguy.com/blog/chrome-silent-nano-install/" rel="noopener noreferrer"&gt;publicou o relatório&lt;/a&gt; em 4 de maio de 2026. O arquivo se chama &lt;code&gt;weights.bin&lt;/code&gt;, fica em &lt;code&gt;OptGuideOnDeviceModel&lt;/code&gt; dentro do diretório do Chrome, e é o Gemini Nano. Sem aviso, sem checkbox. Se você descobrir e apagar, o Chrome baixa de novo no próximo restart.&lt;/p&gt;

&lt;p&gt;A primeira reação aqui foi de déjà vu, não de surpresa. Em dezembro de 2020 o &lt;a href="https://x.com/lorenb/status/1337832978253230081" rel="noopener noreferrer"&gt;Loren Brichter&lt;/a&gt; (@lorenb no X, o cara do "pull to refresh" e do &lt;a href="https://en.wikipedia.org/wiki/Tweetie" rel="noopener noreferrer"&gt;Tweetie&lt;/a&gt;, cliente que o Twitter comprou em 2010 pra virar o app oficial do iPhone) publicou o &lt;a href="https://chromeisbad.com/" rel="noopener noreferrer"&gt;chromeisbad.com&lt;/a&gt;, um site de uma página explicando como o Keystone, o updater do Google Chrome no Mac, ficava rodando em background deixando o sistema lento mesmo com o Chrome fechado. A reclamação dele veio onze anos depois da &lt;a href="https://www.wired.com/2009/02/why-googles-sof/" rel="noopener noreferrer"&gt;Wired publicar "Google Software Update Tool is evil"&lt;/a&gt; sobre o mesmo Keystone, quando ele apareceu enfiado no Google Earth coletando dados de hardware e baixando coisas em background sem avisar. O remédio que o Brichter indicou foi escrever instruções pra desinstalar Chrome e Keystone na mão, e recomendar Safari, Brave, Vivaldi, Opera no lugar.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o Hanff descobriu
&lt;/h2&gt;

&lt;p&gt;A descoberta dele é mais detalhada que a do Brichter em 2020. O Hanff cruzou logs de filesystem do macOS (&lt;code&gt;.fseventsd&lt;/code&gt;), o &lt;code&gt;Local State&lt;/code&gt; do Chrome, feature flags e logs do GoogleUpdater pra montar uma cadeia de evidências de quatro pontas. No perfil de teste dele, o &lt;code&gt;weights.bin&lt;/code&gt; apareceu em 24 de abril de 2026 às 16:38:54 e levou 14 minutos e 28 segundos pra terminar de baixar. Silenciosamente. Cada perfil de Chrome roda esse processo de novo.&lt;/p&gt;

&lt;p&gt;A versão afetada é a Chrome 147 e seguintes. O modelo serve pra features como "Help me write" (composição de texto), detecção local de scam e APIs que sites podem chamar (&lt;code&gt;Summarizer API&lt;/code&gt;, &lt;code&gt;Translator API&lt;/code&gt;, &lt;code&gt;Prompt API&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  A parte que dá raiva
&lt;/h2&gt;

&lt;p&gt;Aquele botão chamativo de "AI Mode" que apareceu no omnibox do Chrome, que parece ser a feature visível de IA do browser, não usa o modelo local. As consultas digitadas ali vão pra cloud do Google. Ou seja: o usuário paga 4GB de download e 4GB de espaço em disco por um modelo que não roda quando ele clica no botão de IA do browser. O custo fica com o usuário, o uso fica com o Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  Em escala
&lt;/h2&gt;

&lt;p&gt;Hanff fez as contas: 0,24 kWh por dispositivo pra baixar e instalar, 0,06 kg de CO2e por dispositivo. Em 1 bilhão de instalações, são 240 GWh e 60 mil toneladas de CO2e, equivalente à emissão anual de cerca de 13 mil carros europeus. E com a União Europeia em cima do GDPR, da ePrivacy Directive (o Artigo 5(3) proíbe armazenar dados no dispositivo do usuário sem consentimento prévio) e da CSRD (a diretiva europeia de reporte de sustentabilidade), a chance de virar caso jurídico é alta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como tirar isso da sua máquina
&lt;/h2&gt;

&lt;p&gt;O Google adicionou em fevereiro de 2026 a opção pra desabilitar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Settings &amp;gt; System &amp;gt; "Turn On-device AI on or off"&lt;/strong&gt;, se a opção já apareceu pra você.&lt;/li&gt;
&lt;li&gt;Caminho alternativo: digite &lt;code&gt;chrome://flags&lt;/code&gt; na barra de endereço, busque por "optimization guide on device" e marque como "Disabled". Reinicie o Chrome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lembrando que apagar o &lt;code&gt;weights.bin&lt;/code&gt; na unha não basta. Sem desabilitar a flag, o Chrome baixa de novo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que faço no meu dia a dia
&lt;/h2&gt;

&lt;p&gt;Não uso o Chrome como browser principal há tempos. &lt;a href="https://guilherme44.com/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;Escrevi semana passada sobre roteamento de links&lt;/a&gt;, e no setup que descrevo lá os browsers que abrem cada link são Chromium-based ou Firefox-based (Brave, Vivaldi, Edge, Opera, Helium), não o Chrome do Google em si. Os mesmos nomes, que o Brichter recomendou em 2020, continuam servindo bem em 2026.&lt;/p&gt;

&lt;p&gt;A regra que adotei é simples. Não dá pra confiar num programa que decide instalar 4GB de IA, ou um daemon updater em background, sem te perguntar. O que tá em jogo não é só espaço em disco, é o controle sobre o que o seu computador faz quando você não tá olhando.&lt;/p&gt;

&lt;h2&gt;
  
  
  E lá vamos nós pela terceira vez
&lt;/h2&gt;

&lt;p&gt;Em 2009 a Wired publicou que o Keystone era evil quando o Google enfiou ele junto com o Google Earth. Em 2020 o Brichter publicou o chromeisbad porque o mesmo Keystone tava dentro do Chrome. Agora em 2026 o Hanff mostrou que são 4GB de IA, instalados do mesmo jeito. Entre essas datas o Google só ficou maior, e a forma de empurrar coisa no PC dos outros sem perguntar não mudou.&lt;/p&gt;

&lt;p&gt;Eu uso o Brave, e recomendo usar qualquer outro browser, menos o Google Chrome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fontes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.thatprivacyguy.com/blog/chrome-silent-nano-install/" rel="noopener noreferrer"&gt;Alexander Hanff, That Privacy Guy! (4 maio 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chromeisbad.com/" rel="noopener noreferrer"&gt;Loren Brichter, chromeisbad.com (dez 2020)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tomshardware.com/tech-industry/cyber-security/google-chrome-silently-downloads-4gb-ai-model-to-your-device-without-permission-report-claims-researcher-says-practice-may-violate-eu-law-waste-thousands-of-kilowatts-of-energy" rel="noopener noreferrer"&gt;Tom's Hardware: Chrome silently downloads 4GB AI model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.androidauthority.com/google-chrome-weights-bin-ai-model-download-explained-3664043/" rel="noopener noreferrer"&gt;Android Authority: explicação técnica do weights.bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.malwarebytes.com/blog/news/2026/05/google-chromes-silent-4gb-ai-download-problem" rel="noopener noreferrer"&gt;Malwarebytes: Chrome's silent 4GB AI download problem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/chrome-silently-installed-ai/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>chrome</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>For the third time, Google sneaks something onto your PC without asking</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Fri, 08 May 2026 18:31:41 +0000</pubDate>
      <link>https://dev.to/guilherme44/for-the-third-time-google-sneaks-something-onto-your-pc-without-asking-gge</link>
      <guid>https://dev.to/guilherme44/for-the-third-time-google-sneaks-something-onto-your-pc-without-asking-gge</guid>
      <description>&lt;p&gt;If you use Chrome, there are 4GB of an AI model sitting on your machine that you never asked for. And it is not the first time Google does this, it is the third. Privacy researcher &lt;a href="https://www.thatprivacyguy.com/" rel="noopener noreferrer"&gt;Alexander Hanff&lt;/a&gt; &lt;a href="https://www.thatprivacyguy.com/blog/chrome-silent-nano-install/" rel="noopener noreferrer"&gt;published the report&lt;/a&gt; on May 4, 2026. The file is called &lt;code&gt;weights.bin&lt;/code&gt;, lives in &lt;code&gt;OptGuideOnDeviceModel&lt;/code&gt; inside the Chrome user data directory, and it is the Gemini Nano model. No prompt, no checkbox. Find it and delete it, and Chrome re-downloads it on the next restart.&lt;/p&gt;

&lt;p&gt;The first reaction here was déjà vu, not surprise. In December 2020, &lt;a href="https://x.com/lorenb/status/1337832978253230081" rel="noopener noreferrer"&gt;Loren Brichter&lt;/a&gt; (@lorenb on X, the guy behind "pull to refresh" and &lt;a href="https://en.wikipedia.org/wiki/Tweetie" rel="noopener noreferrer"&gt;Tweetie&lt;/a&gt;, the client Twitter bought in 2010 to become its official iPhone app) published &lt;a href="https://chromeisbad.com/" rel="noopener noreferrer"&gt;chromeisbad.com&lt;/a&gt;, a one-page site explaining how Keystone, Google Chrome's updater on Mac, kept running in the background, dragging the system down even when Chrome was closed. His complaint came eleven years after &lt;a href="https://www.wired.com/2009/02/why-googles-sof/" rel="noopener noreferrer"&gt;Wired published "Google Software Update Tool is evil"&lt;/a&gt; about the same Keystone, when it showed up bundled with Google Earth, gathering hardware data and downloading things in the background without warning. Brichter's prescription was a manual uninstall guide for Chrome and Keystone, plus a list of replacements: Safari, Brave, Vivaldi, Opera.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hanff found
&lt;/h2&gt;

&lt;p&gt;His discovery is more detailed than Brichter's was in 2020. Hanff cross-referenced macOS filesystem logs (&lt;code&gt;.fseventsd&lt;/code&gt;), Chrome's &lt;code&gt;Local State&lt;/code&gt;, feature flags, and GoogleUpdater logs to build a four-way evidence chain. On his test profile, &lt;code&gt;weights.bin&lt;/code&gt; appeared on April 24, 2026 at 16:38:54 and took 14 minutes and 28 seconds to finish downloading. Silently. Each Chrome profile runs the process again.&lt;/p&gt;

&lt;p&gt;The affected version is Chrome 147 onward. The model powers features like "Help me write" (text composition), local scam detection, and APIs that sites can call (&lt;code&gt;Summarizer API&lt;/code&gt;, &lt;code&gt;Translator API&lt;/code&gt;, &lt;code&gt;Prompt API&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The frustrating part
&lt;/h2&gt;

&lt;p&gt;That bright "AI Mode" pill that showed up in Chrome's omnibox, the visible AI feature of the browser, does not use the local model. Queries typed there are sent to Google's cloud. So the user pays 4GB of download and 4GB of disk for a model that does not run when they click the most prominent AI button on the browser. The cost lives with the user, the use lives with Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  At scale
&lt;/h2&gt;

&lt;p&gt;Hanff did the math: 0.24 kWh per device for the download and install, 0.06 kg of CO2e per device. At 1 billion installs, that is 240 GWh and 60,000 tonnes of CO2e, equivalent to the annual emissions of about 13,000 European cars. And with the European Union watching closely on GDPR, the ePrivacy Directive (Article 5(3) prohibits storing data on a user's device without prior consent), and the Corporate Sustainability Reporting Directive, the chance of this turning into a legal case is high.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to remove it
&lt;/h2&gt;

&lt;p&gt;Google added an opt-out in February 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Settings &amp;gt; System &amp;gt; "Turn On-device AI on or off"&lt;/strong&gt;, if the option is showing up for you yet.&lt;/li&gt;
&lt;li&gt;Alternative path: type &lt;code&gt;chrome://flags&lt;/code&gt; in the address bar, search for "optimization guide on device", and set it to "Disabled". Restart Chrome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that deleting &lt;code&gt;weights.bin&lt;/code&gt; by hand is not enough. Without disabling the flag, Chrome downloads it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I do in my daily setup
&lt;/h2&gt;

&lt;p&gt;I have not been using Chrome as my main browser for a long time. &lt;a href="https://guilherme44.com/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;I wrote last week about link routing&lt;/a&gt;, and in the setup I describe there the browsers that open each link are Chromium-based or Firefox-based (Brave, Vivaldi, Edge, Opera, Helium), not Google's own Chrome. The same names, recommended by Brichter back in 2020, still serve well in 2026.&lt;/p&gt;

&lt;p&gt;The rule I keep is simple. You cannot trust a program that decides to install 4GB of AI weights, or a background updater daemon, without asking you. What is at stake is not just disk space, it is control over what your computer does when you are not looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  And here we go for the third time
&lt;/h2&gt;

&lt;p&gt;In 2009 Wired called Keystone evil when Google bundled it inside Google Earth. In 2020 Brichter published chromeisbad because the same Keystone was now sitting inside Chrome. Now in 2026 Hanff showed that 4GB of AI weights are being pushed the same way. Between those dates Google only got bigger, and the way it pushes things onto other people's machines without asking has not changed.&lt;/p&gt;

&lt;p&gt;I use Brave, and my recommendation is any browser, just not Google Chrome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.thatprivacyguy.com/blog/chrome-silent-nano-install/" rel="noopener noreferrer"&gt;Alexander Hanff, That Privacy Guy! (May 4, 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chromeisbad.com/" rel="noopener noreferrer"&gt;Loren Brichter, chromeisbad.com (Dec 2020)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tomshardware.com/tech-industry/cyber-security/google-chrome-silently-downloads-4gb-ai-model-to-your-device-without-permission-report-claims-researcher-says-practice-may-violate-eu-law-waste-thousands-of-kilowatts-of-energy" rel="noopener noreferrer"&gt;Tom's Hardware: Chrome silently downloads 4GB AI model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.androidauthority.com/google-chrome-weights-bin-ai-model-download-explained-3664043/" rel="noopener noreferrer"&gt;Android Authority: technical breakdown of weights.bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.malwarebytes.com/blog/news/2026/05/google-chromes-silent-4gb-ai-download-problem" rel="noopener noreferrer"&gt;Malwarebytes: Chrome's silent 4GB AI download problem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://guilherme44.com/en/blog/chrome-silently-installed-ai/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>chrome</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Awesome!!</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Tue, 05 May 2026 02:22:44 +0000</pubDate>
      <link>https://dev.to/guilherme44/awesome-4ehg</link>
      <guid>https://dev.to/guilherme44/awesome-4ehg</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aoligama/a-live-activity-isnt-a-notification-2k9o" class="crayons-story__hidden-navigation-link"&gt;A Live Activity isn't a notification&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/aoligama" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1453761%2F78200e0f-c511-4bb3-bae3-712f13bfa74c.jpeg" alt="aoligama profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/aoligama" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Amanda Gama
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Amanda Gama
                
              
              &lt;div id="story-author-preview-content-3611931" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/aoligama" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1453761%2F78200e0f-c511-4bb3-bae3-712f13bfa74c.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Amanda Gama&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/aoligama/a-live-activity-isnt-a-notification-2k9o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aoligama/a-live-activity-isnt-a-notification-2k9o" id="article-link-3611931"&gt;
          A Live Activity isn't a notification
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ios"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ios&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mobile"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mobile&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aoligama/a-live-activity-isnt-a-notification-2k9o" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aoligama/a-live-activity-isnt-a-notification-2k9o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>[PT-BR] Roteamento de links: a feature que SO e browser fingem não existir</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Sun, 03 May 2026 21:57:23 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-roteamento-de-links-a-feature-que-so-e-browser-fingem-nao-existir-5hn7</link>
      <guid>https://dev.to/guilherme44/pt-br-roteamento-de-links-a-feature-que-so-e-browser-fingem-nao-existir-5hn7</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;Migrei do Mac pro Linux com Omarchy&lt;/a&gt; faz quase um ano. Quase tudo voltou ao lugar. Tem uma coisa que continua incomodando, e percebi que o problema é maior do que parecia. Existe uma funcionalidade simples que Sistema Operacional nenhum entrega e browser nenhum entrega: regra pra decidir qual browser ou app abre cada link clicado.&lt;/p&gt;

&lt;p&gt;No Mac eu usava o &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt; pra isso. Pra quem nunca viu: ele deixa você criar regras que decidem qual browser abre cada link. Você coloca o Finicky como browser padrão do sistema, e ele aplica suas regras a cada link clicado em qualquer app, escolhendo o browser certo. As regras são pequenos scripts em JavaScript, simples ou mais elaborados conforme a necessidade. Dá até pra reescrever a URL antes de abrir, tipo forçar HTTPS, remover parâmetros de rastreamento, ou converter num link interno que abre o app desktop diretamente. Se nenhuma regra bater, ele cai num browser de reserva que você define.&lt;/p&gt;

&lt;p&gt;Na prática, é assim. Link de &lt;code&gt;github.com/empresa&lt;/code&gt; abre no browser do trabalho, &lt;code&gt;github.com/pessoal&lt;/code&gt; no browser pessoal. &lt;code&gt;meet.google.com&lt;/code&gt; cai logado no perfil certo. Vídeo de YouTube volta sempre pro browser principal. Qualquer link que não bater em nenhuma regra cai no de reserva, no meu caso o browser pessoal. Trabalho e vida pessoal separados sem ter que copiar URL e colar na outra janela.&lt;/p&gt;

&lt;p&gt;E tem o caso dos apps que vêm com versão desktop e usam um endereço próprio que abre eles direto. Spotify, WhatsApp, Slack, Discord, Zoom, cada um tem um endereço interno tipo &lt;code&gt;spotify:&lt;/code&gt;, &lt;code&gt;whatsapp:&lt;/code&gt;, &lt;code&gt;slack:&lt;/code&gt;, que o sistema entende como "esse link é desse app, abre aqui". Quando alguém compartilha um link público (&lt;code&gt;open.spotify.com/track/...&lt;/code&gt;, &lt;code&gt;wa.me/&amp;lt;numero&amp;gt;&lt;/code&gt;, &lt;code&gt;chat.whatsapp.com/&amp;lt;convite&amp;gt;&lt;/code&gt;), o ideal é abrir direto no app desktop, não numa aba de browser que vai pedir login e perguntar "abrir no app?" toda vez. No Finicky você escreve uma regra que reconhece o link público e reescreve pro endereço interno do app (&lt;code&gt;open.spotify.com/track/abc&lt;/code&gt; vira &lt;code&gt;spotify:track:abc&lt;/code&gt;, &lt;code&gt;wa.me/5511...&lt;/code&gt; vira &lt;code&gt;whatsapp://send?phone=...&lt;/code&gt;), e o sistema entrega direto pro app. Aba intermediária zero.&lt;/p&gt;

&lt;p&gt;Solução simples, efeito grande. É aí que tá o estranho.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que existe no Linux
&lt;/h2&gt;

&lt;p&gt;Procurei equivalente e o que mais aparece é o &lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt;: bonito, ativo, bem mantido. Mas ele só &lt;em&gt;pergunta&lt;/em&gt; qual browser usar a cada link. Não tem regras, não decide sozinho. Tem pedido aberto na comunidade pra ele lembrar de uma escolha padrão e só perguntar quando você segurar Alt, mas ninguém pegou pra implementar. Junction só pergunta, não roteia.&lt;/p&gt;

&lt;p&gt;O &lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt; é uma alternativa mais decente ao mecanismo padrão do Linux que abre links (&lt;code&gt;xdg-open&lt;/code&gt;), mas também não traz regras de roteamento prontas.&lt;/p&gt;

&lt;p&gt;Fora isso, sobra o caminho velho: criar um atalho próprio na pasta de apps do usuário (&lt;code&gt;~/.local/share/applications/&lt;/code&gt;), marcar esse atalho como o programa que vai abrir os links do sistema, e escrever um pequeno script que faz o roteamento na mão. Funciona, mas é peça caseira que cada um tem que manter por conta própria, sem comunidade no meio.&lt;/p&gt;

&lt;p&gt;O mais perto que tem hoje de Finicky no Linux é "monta o teu".&lt;/p&gt;

&lt;h2&gt;
  
  
  E no Mac?
&lt;/h2&gt;

&lt;p&gt;No Mac a paisagem é viva. Finicky tá em desenvolvimento ativo, lançou v4.2.2 em outubro de 2025 com editor visual de regras. Tem &lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt;, &lt;a href="https://www.choosyosx.com/" rel="noopener noreferrer"&gt;Choosy&lt;/a&gt;, &lt;a href="https://www.defaulttamer.app/" rel="noopener noreferrer"&gt;Default Tamer&lt;/a&gt;, &lt;a href="https://github.com/fluffypony/yojam" rel="noopener noreferrer"&gt;Yojam&lt;/a&gt;. Mercado inteiro de ferramenta de terceiro tapando o mesmo buraco.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7add8stkab85432n1vft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7add8stkab85432n1vft.png" alt="Editor de regras do Finicky" width="800" height="588"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Editor visual de regras do &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;E mesmo no Mac essa cena tem casualty. O &lt;a href="https://github.com/will-stone/browserosaurus" rel="noopener noreferrer"&gt;Browserosaurus&lt;/a&gt;, outro favorito da galera, foi arquivado em 2 de agosto de 2025. Mantenedor cansou, sem sucessor oficial. Comunidade tem fork, ninguém é o canônico.&lt;/p&gt;

&lt;p&gt;É o que costuma acontecer com ferramenta de terceiro que vive pra cobrir o que SO e browser deixam aberto.&lt;/p&gt;

&lt;h2&gt;
  
  
  E no Windows?
&lt;/h2&gt;

&lt;p&gt;No Windows a história é a mesma. Você define um único browser pra abrir todos os links do sistema, ponto. Não tem como dizer "esse site abre aqui, esse outro abre lá".&lt;/p&gt;

&lt;p&gt;A novidade recente é que o Edge ganhou em 2025 uma opção pra quem tem conta corporativa Microsoft (Entra ID, antiga Azure AD): link externo cai automaticamente no profile de trabalho do Edge. É só uma opção global. Você escolhe um profile e acabou. Sem regra por URL, sem distinção de qual app abriu o link.&lt;/p&gt;

&lt;p&gt;Fora do Edge, a cena de terceiro no Windows é até maior do que no Linux. O &lt;a href="https://github.com/U-C-S/Hurl" rel="noopener noreferrer"&gt;Hurl&lt;/a&gt; (ativo) e o &lt;a href="https://github.com/mortenn/BrowserPicker" rel="noopener noreferrer"&gt;BrowserPicker&lt;/a&gt; do mortenn (na Microsoft Store) lideram. O &lt;a href="https://github.com/nref/BrowseRouter" rel="noopener noreferrer"&gt;BrowseRouter&lt;/a&gt; é um fork ativo do &lt;a href="https://github.com/DanTup/BrowserSelector" rel="noopener noreferrer"&gt;BrowserSelector original&lt;/a&gt;, que foi arquivado em 2022. Tem também o &lt;a href="https://switchbar.com/" rel="noopener noreferrer"&gt;Switchbar&lt;/a&gt;, comercial e que roda no Mac e no Windows.&lt;/p&gt;

&lt;p&gt;Mesmo padrão de sempre. Terceiro tampa o que SO e browser não tampam, e quando o terceiro arquiva (oi, BrowserSelector) a comunidade aparece com fork, ninguém vira o canônico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que nenhum Sistema Operacional entrega
&lt;/h2&gt;

&lt;p&gt;O modelo que existe nos SOs hoje é o mesmo em todo lugar. macOS, Windows, Linux. Pra cada tipo de link, você escolhe um único app que vai abrir e pronto. Link de site (&lt;code&gt;https&lt;/code&gt;)? Um browser. Email (&lt;code&gt;mailto&lt;/code&gt;)? Um cliente de email. Música (&lt;code&gt;spotify&lt;/code&gt;)? Um app. Não dá pra dizer "esse link específico vai pra outro app", nem "esse link veio do Slack, então abre em outro lugar". Cada SO chama esse mecanismo de um nome diferente (xdg-mime no Linux, LaunchServices no Mac, registry no Windows), mas a limitação é a mesma.&lt;/p&gt;

&lt;p&gt;Linux teria espaço pra ir além já que esse mecanismo é convenção, não imposição, mas ninguém moveu. macOS e Windows nunca abriram uma forma oficial pra você definir regras de roteamento de link. Trinta anos de SO desktop, e a ideia de "esse link tem que abrir aqui, esse outro tem que abrir lá" continua fora do escopo do sistema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que browser nenhum entrega
&lt;/h2&gt;

&lt;p&gt;Chrome tem um seletor pra escolher qual perfil do &lt;em&gt;próprio Chrome&lt;/em&gt; abre o link. Firefox tem "containers" (uma forma de isolar abas em compartimentos separados), e com extensão (Containerise, Auto Containers) dá pra rotear por padrão de URL, mas tudo isso só funciona dentro do Firefox. Nenhum browser quer mandar tráfego pra outro browser. Cada um quer ser o browser padrão do sistema.&lt;/p&gt;

&lt;p&gt;Faz sentido pelo incentivo. Mandar link pra outro browser primeiro reduz a métrica que importa pra cada empresa, que é link aberto no produto deles. Pelo lado da segurança também tem desculpa: um único browser padrão de confiança é mais simples de auditar do que um esquema que decide pra onde mandar com base em regrinha de URL. Nada disso explica o tamanho do silêncio dos SOs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enquanto isso
&lt;/h2&gt;

&lt;p&gt;Faz mais de dez anos que esse problema é o mesmo. SO e browser fingem que rotear link não é responsabilidade deles, e toda vez que aparece terceiro pra resolver, ele vira projeto solo até o mantenedor cansar. Aí volta todo mundo pra estaca zero (oi, Browserosaurus).&lt;/p&gt;

&lt;p&gt;Separar link clicado por regra é tarefa básica de quem trabalha com mais de um contexto no mesmo computador. Devia estar na base do sistema, no mesmo nível de "qual app abre PDF". Faz dez anos esperando.&lt;/p&gt;

&lt;p&gt;Seria muito bom essa era de IA finalmente trazer um multiplataforma decente para todos. Mac, Windows e Linux na mesma ferramenta. Eu, além de usar, seria o divulgador número um. Mercado pra ele a gente sabe que tem.&lt;/p&gt;




&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/will-stone/browserosaurus" rel="noopener noreferrer"&gt;Browserosaurus (arquivado)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.choosyosx.com/" rel="noopener noreferrer"&gt;Choosy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/U-C-S/Hurl" rel="noopener noreferrer"&gt;Hurl (Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mortenn/BrowserPicker" rel="noopener noreferrer"&gt;BrowserPicker (Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://switchbar.com/" rel="noopener noreferrer"&gt;Switchbar (Mac + Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/XDG_MIME_Applications" rel="noopener noreferrer"&gt;XDG MIME Applications (ArchWiki)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://larsee.com/blog/2023/04/select-browser-dialog-in-linux/" rel="noopener noreferrer"&gt;Selecting the browser when opening links in Linux (larsee.com)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>browsers</category>
      <category>productivity</category>
      <category>macos</category>
    </item>
    <item>
      <title>Link routing: the feature OSes and browsers pretend isn't there</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Sun, 03 May 2026 21:57:19 +0000</pubDate>
      <link>https://dev.to/guilherme44/link-routing-the-feature-oses-and-browsers-pretend-isnt-there-2n4d</link>
      <guid>https://dev.to/guilherme44/link-routing-the-feature-oses-and-browsers-pretend-isnt-there-2n4d</guid>
      <description>&lt;p&gt;&lt;a href="https://guilherme44.com/en/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;I switched from Mac to Linux with Omarchy&lt;/a&gt; almost a year ago. Most things slid back into place. There's one thing still bothering me, and turns out it's not just a Linux problem. There's a simple feature no OS ships and no browser ships: rules for deciding which browser or app opens each link you click.&lt;/p&gt;

&lt;p&gt;On Mac I used &lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt; for this. For anyone who never saw it: it lets you write rules that decide which browser opens each link. You set Finicky as the system's default browser, and it applies your rules to every link clicked in any app, picking the right one. Rules are short scripts in JavaScript, simple or as elaborate as you need. It can even rewrite the URL before opening it: force HTTPS, strip tracking parameters, or convert it into an internal link that opens the desktop app directly. If no rule matches, it falls through to a backup browser you define.&lt;/p&gt;

&lt;p&gt;In practice, it looks like this. A &lt;code&gt;github.com/work-org&lt;/code&gt; link opens in the work browser, &lt;code&gt;github.com/personal&lt;/code&gt; in the personal one. &lt;code&gt;meet.google.com&lt;/code&gt; lands logged into the right profile. YouTube videos always come back to the main browser. Anything that matches no rule falls through to the backup, in my case the personal browser. Work and personal life kept apart without copy-pasting URLs into another window.&lt;/p&gt;

&lt;p&gt;There's also the case of apps that ship a desktop client and use their own private address to open it directly. Spotify, WhatsApp, Slack, Discord, Zoom, each has an internal address like &lt;code&gt;spotify:&lt;/code&gt;, &lt;code&gt;whatsapp:&lt;/code&gt;, &lt;code&gt;slack:&lt;/code&gt;, which the system reads as "this link belongs to that app, open it there". When someone shares a public link (&lt;code&gt;open.spotify.com/track/...&lt;/code&gt;, &lt;code&gt;wa.me/&amp;lt;phone&amp;gt;&lt;/code&gt;, &lt;code&gt;chat.whatsapp.com/&amp;lt;invite&amp;gt;&lt;/code&gt;), the right move is to open it straight in the desktop app, not in a browser tab that asks for login and prompts "open in app?" every single time. With Finicky you write a rule that matches the public link and rewrites it to the app's internal address (&lt;code&gt;open.spotify.com/track/abc&lt;/code&gt; becomes &lt;code&gt;spotify:track:abc&lt;/code&gt;, &lt;code&gt;wa.me/15551234567&lt;/code&gt; becomes &lt;code&gt;whatsapp://send?phone=...&lt;/code&gt;), and the system hands it straight to the app. No intermediate tab.&lt;/p&gt;

&lt;p&gt;Simple solution, big payoff. That's the strange part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exists on Linux
&lt;/h2&gt;

&lt;p&gt;Searched for an equivalent and the most common answer is &lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt;: pretty, active, well maintained. But it only &lt;em&gt;asks&lt;/em&gt; which browser to use on every link. No rules, no auto-routing. There's a community request asking it to remember a default choice and only ask when you hold Alt, but nobody has picked it up. Junction only asks, it doesn't route.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt; is a more decent replacement for the Linux mechanism that opens links (&lt;code&gt;xdg-open&lt;/code&gt;), still without ready-made routing rules.&lt;/p&gt;

&lt;p&gt;What's left is the old path: drop a custom shortcut file in the user's apps folder (&lt;code&gt;~/.local/share/applications/&lt;/code&gt;), mark that shortcut as the program that opens the system's links, and write a small script that does the routing by hand. It works, but it's a homebrew piece each user has to maintain on their own, with no community in the middle.&lt;/p&gt;

&lt;p&gt;The closest thing to Finicky on Linux today is "build your own".&lt;/p&gt;

&lt;h2&gt;
  
  
  And on Mac?
&lt;/h2&gt;

&lt;p&gt;The Mac landscape is alive. Finicky is actively developed, with v4.2.2 out in October 2025 bringing a visual rules editor. There's &lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt;, &lt;a href="https://www.choosyosx.com/" rel="noopener noreferrer"&gt;Choosy&lt;/a&gt;, &lt;a href="https://www.defaulttamer.app/" rel="noopener noreferrer"&gt;Default Tamer&lt;/a&gt;, &lt;a href="https://github.com/fluffypony/yojam" rel="noopener noreferrer"&gt;Yojam&lt;/a&gt;. A whole third-party market plugging the same gap.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7add8stkab85432n1vft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7add8stkab85432n1vft.png" alt="Finicky rules editor" width="800" height="588"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;&lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;'s visual rules editor&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Even there it has casualties. &lt;a href="https://github.com/will-stone/browserosaurus" rel="noopener noreferrer"&gt;Browserosaurus&lt;/a&gt;, another community favorite, was archived on August 2, 2025. Maintainer burned out, no official successor. Community has forks, none is canonical.&lt;/p&gt;

&lt;p&gt;That's what tends to happen to any third-party tool plugging a gap that neither the OS nor the browser wants to plug.&lt;/p&gt;

&lt;h2&gt;
  
  
  And on Windows?
&lt;/h2&gt;

&lt;p&gt;On Windows, same story. You set one browser to handle every link in the system, period. No way to say "this site opens here, that other one opens there".&lt;/p&gt;

&lt;p&gt;The recent twist is that in 2025 Edge added a toggle for users on a Microsoft corporate account (Entra ID, formerly Azure AD): external links automatically land in Edge's work profile. It's just a global toggle. You pick a profile and that's it. No URL rules, no awareness of which app opened the link.&lt;/p&gt;

&lt;p&gt;Outside Edge, the third-party scene on Windows is actually bigger than on Linux. &lt;a href="https://github.com/U-C-S/Hurl" rel="noopener noreferrer"&gt;Hurl&lt;/a&gt; (active) and mortenn's &lt;a href="https://github.com/mortenn/BrowserPicker" rel="noopener noreferrer"&gt;BrowserPicker&lt;/a&gt; (on the Microsoft Store) lead the pack. &lt;a href="https://github.com/nref/BrowseRouter" rel="noopener noreferrer"&gt;BrowseRouter&lt;/a&gt; is an active fork of the &lt;a href="https://github.com/DanTup/BrowserSelector" rel="noopener noreferrer"&gt;original BrowserSelector&lt;/a&gt;, which was archived in 2022. There's also &lt;a href="https://switchbar.com/" rel="noopener noreferrer"&gt;Switchbar&lt;/a&gt;, commercial and running on both Mac and Windows.&lt;/p&gt;

&lt;p&gt;Same old pattern. Third-party plugs what OS and browser won't, and when the third-party gets archived (hi, BrowserSelector) the community spins up forks, none becoming the canonical one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why no OS ships this
&lt;/h2&gt;

&lt;p&gt;The model across operating systems is the same everywhere. macOS, Windows, Linux. For each kind of link, you pick one app that opens it, end of story. A web link (&lt;code&gt;https&lt;/code&gt;)? One browser. Email (&lt;code&gt;mailto&lt;/code&gt;)? One mail client. Music (&lt;code&gt;spotify&lt;/code&gt;)? One app. No way to say "this specific link goes to a different app", or "this link came from Slack so open it somewhere else". Each OS calls this mechanism by a different name (xdg-mime on Linux, LaunchServices on macOS, the registry on Windows), but the limit is the same.&lt;/p&gt;

&lt;p&gt;Linux has room to go further since this mechanism is convention, not enforcement, but nobody has moved. macOS and Windows never opened a public API for routing links by rule. Thirty years of desktop OS, and the idea of "this link belongs here, that other link belongs there" still sits outside the system's scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why no browser ships this
&lt;/h2&gt;

&lt;p&gt;Chrome has a selector for picking which profile of &lt;em&gt;Chrome itself&lt;/em&gt; opens the link. Firefox has "containers" (a way to isolate tabs into separate compartments), and with extensions (Containerise, Auto Containers) you can route by URL pattern, but all of that only works inside Firefox. No browser wants to hand traffic over to another browser. Each one wants to be the system's default browser.&lt;/p&gt;

&lt;p&gt;The incentive math is clear. Sending links to a different browser first reduces the metric that matters for each company, links opened in their own product. The security argument is also there: one trusted default browser is easier to audit than a system that decides where to send things based on URL-matching rules. None of that explains the size of the silence on the OS side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meanwhile
&lt;/h2&gt;

&lt;p&gt;This problem has been the same for over ten years. OSes and browsers act like routing a link isn't their responsibility, and every time a third-party tool steps up to fix it, it ends up a solo project until the maintainer burns out. Then everyone goes back to square one (hi, Browserosaurus).&lt;/p&gt;

&lt;p&gt;Splitting clicked links by rule is a basic task for anyone juggling more than one context on the same machine. It belongs in the base of the system, at the same level as "which app opens PDFs". Been ten years waiting.&lt;/p&gt;

&lt;p&gt;It would be great for this AI era to finally bring a decent cross-platform one for everyone. Mac, Windows and Linux in the same tool. Beyond just using it, I'd be its number-one evangelist. The market is there, we all know that.&lt;/p&gt;




&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/johnste/finicky" rel="noopener noreferrer"&gt;Finicky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sonnyp/Junction" rel="noopener noreferrer"&gt;Junction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BachoSeven/mimi" rel="noopener noreferrer"&gt;mimi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/will-stone/browserosaurus" rel="noopener noreferrer"&gt;Browserosaurus (archived)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.choosyosx.com/" rel="noopener noreferrer"&gt;Choosy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/U-C-S/Hurl" rel="noopener noreferrer"&gt;Hurl (Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mortenn/BrowserPicker" rel="noopener noreferrer"&gt;BrowserPicker (Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://switchbar.com/" rel="noopener noreferrer"&gt;Switchbar (Mac + Windows)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/XDG_MIME_Applications" rel="noopener noreferrer"&gt;XDG MIME Applications (ArchWiki)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://larsee.com/blog/2023/04/select-browser-dialog-in-linux/" rel="noopener noreferrer"&gt;Selecting the browser when opening links in Linux (larsee.com)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally posted at &lt;a href="https://guilherme44.com/en/blog/the-link-routing-gap/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>browsers</category>
      <category>productivity</category>
      <category>macos</category>
    </item>
    <item>
      <title>[PT-BR] Por que troquei meu "Opinionated Linux" autoral (DIY) pelo Omarchy</title>
      <dc:creator>Guilherme Yamakawa de Oliveira</dc:creator>
      <pubDate>Sat, 02 May 2026 12:23:32 +0000</pubDate>
      <link>https://dev.to/guilherme44/pt-br-por-que-troquei-meu-opinionated-linux-autoral-diy-pelo-omarchy-5bab</link>
      <guid>https://dev.to/guilherme44/pt-br-por-que-troquei-meu-opinionated-linux-autoral-diy-pelo-omarchy-5bab</guid>
      <description>&lt;p&gt;Tô usando o &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; como setup principal desde 26 de junho de 2025, dia em que o DHH lançou a primeira versão. Antes tinha meu "Opinionated Linux" autoral (DIY), o &lt;a href="https://github.com/guilhermeyo/mclovin-ARCHived" rel="noopener noreferrer"&gt;mclovin-ARCHived&lt;/a&gt;: um installer Arch + &lt;a href="https://i3wm.org/" rel="noopener noreferrer"&gt;i3wm&lt;/a&gt; com tudo configurado do meu jeito. Era controle total sobre o SO: eu decidindo o que entra, mantendo cada peça (i3wm, &lt;a href="https://github.com/polybar/polybar" rel="noopener noreferrer"&gt;polybar&lt;/a&gt;, &lt;a href="https://github.com/yshui/picom" rel="noopener noreferrer"&gt;picom&lt;/a&gt;, &lt;a href="https://sw.kovidgoyal.net/kitty/" rel="noopener noreferrer"&gt;kitty&lt;/a&gt;, dotfiles) atualizada e fazendo elas conversarem entre si pra o SO inteiro funcionar. Servia bem, mas era custoso de manter atualizado: sempre desbravando algum TUI novo pra resolver um probleminha, e trocar de CPU ou notebook era ver compatibilidade de tudo e ajustar pra cada máquina.&lt;/p&gt;

&lt;p&gt;O &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; resolveu isso entregando o mesmo tipo de setup, só que com uma comunidade inteira por trás, trabalhando e discutindo melhorias toda semana. Aprendo algo novo o tempo todo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwommzbv5sh5f1dsbxqc2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwommzbv5sh5f1dsbxqc2.jpg" alt="Omarchy rodando com o tema Osaka Jade" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Tema: &lt;a href="https://omarchythemes.com/themes/osaka-jade" rel="noopener noreferrer"&gt;Osaka Jade&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que o Omarchy
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é uma distro Arch opinativa criada pelo &lt;a href="https://dhh.dk/" rel="noopener noreferrer"&gt;David Heinemeier Hansson (DHH)&lt;/a&gt;, criador do &lt;a href="https://rubyonrails.org/" rel="noopener noreferrer"&gt;Rails&lt;/a&gt;, do &lt;a href="https://basecamp.com/" rel="noopener noreferrer"&gt;Basecamp&lt;/a&gt; e do &lt;a href="https://www.hey.com/" rel="noopener noreferrer"&gt;Hey&lt;/a&gt;. Por baixo é &lt;a href="https://archlinux.org/" rel="noopener noreferrer"&gt;Arch Linux&lt;/a&gt; + &lt;a href="https://hyprland.org/" rel="noopener noreferrer"&gt;Hyprland&lt;/a&gt;, mas vem com tudo pré-configurado: lock screen, menu bar, bluetooth, temas, atalhos. Nada de instalar pacote por pacote.&lt;/p&gt;

&lt;p&gt;O que me convenceu: Hyprland puro é bonito mas cru. Sozinho ele te deixa configurando coisas básicas por semanas. O &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; escolhe defaults bons e te entrega um sistema pronto pra trabalhar poucos minutos depois do boot.&lt;/p&gt;

&lt;p&gt;É irmão do &lt;a href="https://github.com/basecamp/omakub" rel="noopener noreferrer"&gt;Omakub&lt;/a&gt;, versão Ubuntu da mesma ideia. Quem quer Linux com curva mais suave vai pro Omakub, quem quer Arch sem perder dois dias configurando vai pro &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Temas
&lt;/h2&gt;

&lt;p&gt;Um dos pontos fortes do &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é a comunidade de temas. O &lt;a href="https://omarchythemes.com/" rel="noopener noreferrer"&gt;omarchythemes.com&lt;/a&gt; reúne dezenas de temas prontos pra instalar com um comando, e a paleta inteira muda junta: terminal, editor, status bar, lock screen, wallpaper. E a troca é instantânea. Um atalho, dois segundos, todo o sistema já tá com o novo visual. Impressionante toda vez. A hero shot lá em cima tá com o Osaka Jade. Abaixo, um dia a dia com o Rose of Dune.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndqdnzj5o5a3nth62y6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndqdnzj5o5a3nth62y6i.png" alt="Omarchy num workflow tiled com tema Rose of Dune" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;small&gt;&lt;em&gt;Tema: &lt;a href="https://omarchythemes.com/themes/roseofdune" rel="noopener noreferrer"&gt;Rose of Dune&lt;/a&gt;&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  De onde vim
&lt;/h2&gt;

&lt;p&gt;Voltei pro Linux saindo de um MacBook M1 com 16GB de RAM. Vários fatores pesaram: o Docker estourava a memória e no Mac RAM é soldada, não dá pra subir, precisa comprar um novo (e configurar com mais memória vira coisa burocrática e cara); pra ter um tiling window manager precisava desabilitar parte da proteção do sistema (o SIP) pra forçar o &lt;a href="https://github.com/koekeishiya/yabai" rel="noopener noreferrer"&gt;Yabai&lt;/a&gt; (tiling WM pra Mac), e qualquer update do macOS quebrava algo; e queria saber o que tava rodando na máquina, já que Mac, Windows e até Ubuntu vêm cheios de coisa que você não pediu, mandando telemetria sem transparência. Até o Chrome no macOS instala um daemon silencioso chamado Keystone por trás (vale ler o &lt;a href="https://chromeisbad.com/" rel="noopener noreferrer"&gt;chromeisbad.com&lt;/a&gt;). Trocar pra Arch era o caminho natural.&lt;/p&gt;

&lt;p&gt;Construí o &lt;a href="https://github.com/guilhermeyo/mclovin-ARCHived" rel="noopener noreferrer"&gt;mclovin-ARCHived&lt;/a&gt; pra automatizar a instalação do meu setup Arch + i3wm + polybar + &lt;a href="https://neovim.io/" rel="noopener noreferrer"&gt;neovim&lt;/a&gt; + dotfiles. O nome era referência ao McLovin do filme Superbad, era basicamente meu "script superbad".&lt;/p&gt;

&lt;p&gt;A referência inicial foi o &lt;a href="https://github.com/basecamp/omakub" rel="noopener noreferrer"&gt;Omakub&lt;/a&gt; do DHH, que mostrou o padrão "rodar um script e ter tudo pronto". Não fui pro Omakub direto porque anos atrás já tinha usado muito Ubuntu e não curtia o estilo do &lt;a href="https://www.gnome.org/" rel="noopener noreferrer"&gt;GNOME&lt;/a&gt;, queria algo mais personalizável e tiling. Mas a ideia ficou.&lt;/p&gt;

&lt;p&gt;Outras inspirações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.ml4w.com/" rel="noopener noreferrer"&gt;ML4W&lt;/a&gt;, outro projeto de automação de Arch que cheguei perto de adotar&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@typecraft_dev" rel="noopener noreferrer"&gt;typecraft_dev&lt;/a&gt; no YouTube, com tutoriais de Hyprland, i3wm, Neovim e Arch&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://caffeine.wiki/x220.html" rel="noopener noreferrer"&gt;caffeine.wiki/x220&lt;/a&gt;, onde o Rodrigo Franco (caffo) personalizou o Arch + &lt;a href="https://dwm.suckless.org/" rel="noopener noreferrer"&gt;dwm&lt;/a&gt; num Thinkpad X220 pra ter uma máquina barata, durável e discreta pra trabalhar em qualquer canto (cafezinho de bairro suspeito incluso)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O installer fazia o trabalho. Mas era trabalho de manter sozinho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que migrei
&lt;/h2&gt;

&lt;p&gt;Ter installer próprio é divertido até o dia que você precisa fazer o display manager funcionar com a webcam nova. Ou descobrir que aquele &lt;a href="https://aur.archlinux.org/" rel="noopener noreferrer"&gt;AUR&lt;/a&gt; helper que você escolheu três anos atrás virou abandonware. Ou ver que o tema do polybar quebrou porque a fonte mudou de nome num update.&lt;/p&gt;

&lt;p&gt;Tudo isso é resolvível. Mas resolvível por uma pessoa só não escala bem.&lt;/p&gt;

&lt;p&gt;Como uso Ruby on Rails, sempre acompanhei o trabalho do DHH. O Rails é o que ele chama de &lt;a href="https://dhh.dk/2012/rails-is-omakase.html" rel="noopener noreferrer"&gt;omakase&lt;/a&gt; (em japonês, "deixa comigo, eu escolho"): você usa os defaults bons que vieram com a caixa, sem ficar configurando cada peça. &lt;a href="https://github.com/basecamp/omakub" rel="noopener noreferrer"&gt;Omakub&lt;/a&gt; levou a mesma ideia pro Ubuntu, e em junho de 2025 saiu o &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;, omakase pra Arch + Hyprland. Continuação natural. Entrei no dia 1.&lt;/p&gt;

&lt;p&gt;Acompanhar cada release desde o início faz parte da graça. O sistema fica mais redondo a cada versão, e a vista de perto da evolução compensa uns perrengues no caminho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quando faz sentido pra você
&lt;/h2&gt;

&lt;p&gt;Antes da checklist prática: o &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; faz sentido se você é curioso pra entender como Linux funciona na prática. Vai acompanhar o projeto, atualizar, eventualmente quebrar o SO e ter que formatar pra arrumar. Não é caminho pra qualquer um. Mas é assim que se ganha conhecimento real de como o sistema funciona, em vez de só usar de longe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é ótimo se você:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quer Arch + tiling WM mas não quer gastar dias configurando&lt;/li&gt;
&lt;li&gt;Curte a pegada omakase: defaults opinativos, convenção sobre configuração&lt;/li&gt;
&lt;li&gt;Tá disposto a aprender Hyprland (ele tem suas pegadinhas)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sobre hardware: roda bem até em máquinas antigas. Vários Macs com Intel que estavam parados em gaveta voltaram pra ativa rodando &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;. Alguns hardwares ficam mais difíceis de configurar, mas a comunidade no &lt;a href="https://discord.gg/tXFUdasqhY" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; e no &lt;a href="https://github.com/basecamp/omarchy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; do projeto geralmente já passou pelo problema e ajuda a resolver.&lt;/p&gt;

&lt;p&gt;Não é pra você se quiser configurar cada bit do sistema na mão (nesse caso, Arch puro é o caminho), ou se prefere &lt;a href="https://kde.org/" rel="noopener noreferrer"&gt;KDE&lt;/a&gt;/GNOME (&lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é Hyprland-only por design).&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;Manter um installer próprio de Linux foi uma fase boa, aprendi muito. Mas chegar no &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é poder usar a mesma filosofia sem ser o único responsável por mantê-la.&lt;/p&gt;

&lt;p&gt;Formato o computador e em poucos minutos tenho tudo configurado de novo. Mac não funciona bem assim, Windows muito menos.&lt;/p&gt;

&lt;p&gt;E nem tudo é escrito em pedra. Ainda quero montar um "Opinionated Script" pro macOS com keybindings e tiling window manager parecidos com o do &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;, já que preciso do macOS pra usar Xcode e publicar pra iOS. Faz sentido deixar a máquina configurada na mesma pegada, sem ter que viver dentro dela. Com IA hoje, montar um script desse é tranquilo.&lt;/p&gt;

&lt;p&gt;Pra quem quer Arch produtivo no dia a dia sem virar o mantenedor solo, &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt; é a melhor pedida.&lt;/p&gt;




&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://world.hey.com/dhh/omarchy-is-out-4666dd31" rel="noopener noreferrer"&gt;DHH: Omarchy is out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/basecamp/omakub" rel="noopener noreferrer"&gt;Omakub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ml4w.com/" rel="noopener noreferrer"&gt;ML4W&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guilhermeyo/mclovin-ARCHived" rel="noopener noreferrer"&gt;mclovin-ARCHived&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@typecraft_dev" rel="noopener noreferrer"&gt;typecraft_dev no YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caffeine.wiki/x220.html" rel="noopener noreferrer"&gt;Arch on Thinkpad X220 (caffeine.wiki)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente em &lt;a href="https://guilherme44.com/blog/omarchy-from-day-one/" rel="noopener noreferrer"&gt;guilherme44.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>omarchy</category>
      <category>archlinux</category>
      <category>hyprland</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
