<?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: Euber Alexandre Barbosa</title>
    <description>The latest articles on DEV Community by Euber Alexandre Barbosa (@easbarba).</description>
    <link>https://dev.to/easbarba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F772350%2Fd0d4c87b-d079-4c93-8746-cfcdc4db1925.jpeg</url>
      <title>DEV Community: Euber Alexandre Barbosa</title>
      <link>https://dev.to/easbarba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/easbarba"/>
    <language>en</language>
    <item>
      <title>Debian netinst: Conectar na Wi-Fi pela TTY</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Sun, 23 Feb 2025 01:14:59 +0000</pubDate>
      <link>https://dev.to/easbarba/debian-netinst-conectar-ao-wi-fi-pelo-tty-pp0</link>
      <guid>https://dev.to/easbarba/debian-netinst-conectar-ao-wi-fi-pelo-tty-pp0</guid>
      <description>&lt;p&gt;Então você baixou a ISO da Debian na página inicial, para depois descobrir que o sistema não está conectado? Calma não priemos canico!&lt;/p&gt;

&lt;p&gt;Uma vez terminada a instalação com ISO mínima da Debian e o sistema subir vai apenas aparecer uma tela preta, TTY, pedindo usuário e senha.&lt;/p&gt;

&lt;p&gt;Uma vez entrado com seu usuário, você vai perceber que não está conectado a Wi-Fi, inesperado, né?!&lt;/p&gt;

&lt;p&gt;Como você proveu o instalador da Debian com a senha do Wi-Fi, este salva uma configuração, simples, que vai estar presente no &lt;code&gt;/etc/network/interfaces&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Então você apenas precisa achar qual interface do Wi-Fi foi usada, usualmente &lt;code&gt;wlan0&lt;/code&gt; ou &lt;code&gt;wlp2s0&lt;/code&gt; e conectar com a &lt;code&gt;ifup&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ip link&lt;/code&gt; me disse que a minha interface Wi-Fi é, sim, &lt;code&gt;wlan0&lt;/code&gt;, - culpa da Gentoo.&lt;/p&gt;

&lt;p&gt;Então conecto com: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;ifup wlan0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prontinho, confirme com &lt;code&gt;ping&lt;/code&gt; e continua a instalação do sistema:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ping globo.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Consulte a documentação da Debian para mais informação sobre ferramentas de Wi-Fi: &lt;a href="https://wiki.debian.org/WiFi/HowToUse" rel="noopener noreferrer"&gt;https://wiki.debian.org/WiFi/HowToUse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu prefiro um combo de &lt;code&gt;iwd&lt;/code&gt; + &lt;code&gt;nmcli&lt;/code&gt;, do que &lt;code&gt;wpa_supplicant&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Boa diversão.&lt;/p&gt;

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

</description>
      <category>debian</category>
      <category>wifi</category>
      <category>linux</category>
    </item>
    <item>
      <title>Meson: Usando um projeto git sem meson.build como dependência</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Jan 2025 23:39:00 +0000</pubDate>
      <link>https://dev.to/easbarba/meson-usando-um-projeto-git-sem-mesonbuild-como-dependencia-1o1m</link>
      <guid>https://dev.to/easbarba/meson-usando-um-projeto-git-sem-mesonbuild-como-dependencia-1o1m</guid>
      <description>&lt;p&gt;Eventualmente você vai achar um projeto bacana que não usa &lt;a href="https://mesonbuild.com" rel="noopener noreferrer"&gt;meson.build&lt;/a&gt; e o mantenedor demora anos para aceitar PR, se algum dia for.&lt;/p&gt;

&lt;p&gt;Ou mesmo seu projeto está em contrato para sempre adicionar a &lt;code&gt;LICENSE&lt;/code&gt; em todas as builds e o mantenedor se recusa.&lt;/p&gt;

&lt;p&gt;Para resolver esse pepino você pode adicionar aos seus &lt;code&gt;subprojects/*.wrap&lt;/code&gt; &lt;a href="https://git-scm.com" rel="noopener noreferrer"&gt;git&lt;/a&gt; patches.&lt;/p&gt;

&lt;p&gt;Por exemplo, no meu projeto - &lt;a href="https://gitlab.com/easbarba/onur-c" rel="noopener noreferrer"&gt;onur&lt;/a&gt; - por ser uma pequena ferramenta CLI prefiro usar o &lt;a href="https://github.com/benhoyt/ht" rel="noopener noreferrer"&gt;ht&lt;/a&gt; do grande Hoyt ao invés do enorme &lt;a href="https://docs.gtk.org/glib" rel="noopener noreferrer"&gt;GNOME glib&lt;/a&gt;, mas este projeto git não tem uma meson.build.&lt;/p&gt;

&lt;p&gt;Uma simples &lt;code&gt;wrap-git&lt;/code&gt; para esse projeto, que sequer tem tags também, seria usando o &lt;code&gt;master&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./subprojects/ht.wrap&lt;/code&gt;&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="nn"&gt;[wrap-git]&lt;/span&gt;
&lt;span class="py"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;ht&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;https://github.com/benhoyt/ht&lt;/span&gt;
&lt;span class="py"&gt;revision&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;master&lt;/span&gt;
&lt;span class="py"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primeiro vamos pegar todos subprojetos &lt;code&gt;meson subprojects download&lt;/code&gt;, e adicionar a &lt;code&gt;meson.build&lt;/code&gt; na raiz deste:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./subprojects/ht&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; | tee -a ./subprojects/ht/meson.build
project('ht', 'c', version: '1.0')

ht_sources = [
    'ht.c',
    'ht.h',
]

ht_lib = static_library('ht', ht_sources)

ht_dep = declare_dependency(
    include_directories: include_directories('.'),
    link_with: ht_lib)
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/ht/meson.build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e criar o patch com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-pv&lt;/span&gt; subprojects/&lt;span class="o"&gt;{&lt;/span&gt;packagecache,packagefiles&lt;span class="o"&gt;}&lt;/span&gt;
git &lt;span class="nt"&gt;-C&lt;/span&gt; ./subprojects/ht add meson.build
git &lt;span class="nt"&gt;-C&lt;/span&gt; ./subprojects/ht diff &lt;span class="nt"&gt;--cached&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ./subprojects/packagefiles/ht-meson.patch
&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/packagefiles/ht-meson.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;uma vez com o patch devemos apontar sua presença ao &lt;code&gt;ht.wrap&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"diff_files = ht-meson.patch"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ./subprojects/ht.wrap
&lt;span class="nb"&gt;cat&lt;/span&gt; ./subprojects/ht.wrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, vamos aplicar o patch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meson subprojects purge &lt;span class="nt"&gt;--confirm&lt;/span&gt;
meson subprojects download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e compilar o projeto para confirmar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcc meson setup ./build &lt;span class="nt"&gt;--wipe&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nv"&gt;b_sanitize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="nv"&gt;buildtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;release
meson compile &lt;span class="nt"&gt;-C&lt;/span&gt; ./build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O executável vai aparecer em &lt;code&gt;./build&lt;/code&gt; como esperado.&lt;/p&gt;

&lt;p&gt;Valeu!&lt;/p&gt;

&lt;p&gt;Recomendação para leitura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mesonbuild.com/Subprojects.html" rel="noopener noreferrer"&gt;https://mesonbuild.com/Subprojects.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gcc.gnu.org" rel="noopener noreferrer"&gt;https://gcc.gnu.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/home.pt-br.html" rel="noopener noreferrer"&gt;https://www.gnu.org/home.pt-br.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Informações gerais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gcc.gnu.org" rel="noopener noreferrer"&gt;GNU GCC&lt;/a&gt; 14.2.0&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mesonbuild.com" rel="noopener noreferrer"&gt;Meson&lt;/a&gt; 1.7.0&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ninja-build.org/" rel="noopener noreferrer"&gt;Ninja&lt;/a&gt; 1.12.1&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.gnu.org/software/emacs" rel="noopener noreferrer"&gt;GNU Emacs&lt;/a&gt; 30&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.debian.org" rel="noopener noreferrer"&gt;Debian SID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guix.gnu.org/en" rel="noopener noreferrer"&gt;GNU Guix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/swaywm/sway" rel="noopener noreferrer"&gt;SwayWM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Alexays/Waybar" rel="noopener noreferrer"&gt;Waybar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mozilla.org/pt-BR/firefox/new" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://languagetool.org" rel="noopener noreferrer"&gt;https://languagetool.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/easbarba"&gt;https://dev.to/easbarba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/easbarba/onur-c" rel="noopener noreferrer"&gt;https://gitlab.com/easbarba/onur-c&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>meson</category>
      <category>git</category>
      <category>c</category>
      <category>emacs</category>
    </item>
    <item>
      <title>GNU Emacs: O bom e velho ido-mode</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Mon, 27 Jan 2025 03:34:15 +0000</pubDate>
      <link>https://dev.to/easbarba/gnu-emacs-o-bom-e-velho-ido-mode-587l</link>
      <guid>https://dev.to/easbarba/gnu-emacs-o-bom-e-velho-ido-mode-587l</guid>
      <description>&lt;p&gt;GNU Emacs é antigo, até mais que muitas cidades do Brasil e com isso tem uma bagagem cheia de pacotes velhos para leléu.&lt;/p&gt;

&lt;p&gt;Dentre as várias funções desse velhinho, existem os &lt;code&gt;completadores&lt;/code&gt; das várias partes desse editor, uma dessas é o &lt;code&gt;Interactive do things&lt;/code&gt; ou &lt;code&gt;ido-mode&lt;/code&gt;, que vai um pouco além do modesto &lt;code&gt;completing-read&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ido&lt;/code&gt; é um pacote incluído no editor, mas não ativado por padrão, então pode ser ativado sem precisar baixar nada.&lt;/p&gt;

&lt;p&gt;Nesse ponto, eventualmente você vai perceber que o Emacs tem vários pacotes alternativos em hibernação a alguns poucos códigos para sua ativação, como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;'ido&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-mode&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, &lt;code&gt;ido&lt;/code&gt; esta ativado e com isso vai consumir qualquer lista de string, mas provendo uma interface mais limpa e moderna, testa isso no &lt;em&gt;scratch&lt;/em&gt; buffer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;trapalhoes&lt;/span&gt; &lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mussum"&lt;/span&gt; &lt;span class="s"&gt;"zacarias"&lt;/span&gt; &lt;span class="s"&gt;"didi"&lt;/span&gt; &lt;span class="s"&gt;"dede"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Qual seu trapalhão favorito: "&lt;/span&gt; &lt;span class="nv"&gt;trapalhoes&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou algo mais apropriado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-load-theme&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Carregue um tema usando Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;mapcar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;symbol-name&lt;/span&gt; &lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;custom-available-themes&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bacana não?! haha, mas tem como realçar ainda mais o comportamento de &lt;code&gt;ido&lt;/code&gt; com alguns pacotes externos adicionais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/creichert/ido-vertical-mode.el" rel="noopener noreferrer"&gt;https://github.com/creichert/ido-vertical-mode.el&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nonsequitur/smex" rel="noopener noreferrer"&gt;https://github.com/nonsequitur/smex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/creichert/ido-vertical-mode.el" rel="noopener noreferrer"&gt;https://github.com/creichert/ido-vertical-mode.el&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lewang/flx/tree" rel="noopener noreferrer"&gt;https://github.com/lewang/flx/tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma ótima novidade do Emacs 30 é a opção de poder instalar pacotes de forma reproduzível via &lt;code&gt;use-package&lt;/code&gt; com a nova prop &lt;code&gt;:vc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;ido-completing-read+&lt;/span&gt;
  &lt;span class="ss"&gt;:ensure&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
  &lt;span class="ss"&gt;:vc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="s"&gt;"https://github.com/DarwinAwardWinner/ido-completing-read-plus"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:config&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;'ido-completing-read+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-ubiquitous-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por coerência aqui vai minha configuração final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight common_lisp"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;ido&lt;/span&gt;
  &lt;span class="ss"&gt;:init&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;ido-enable-flex-matching&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
    &lt;span class="nv"&gt;ido-everywhere&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-mode&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:custom&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-create-new-buffer&lt;/span&gt; &lt;span class="ss"&gt;'always&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-prefix&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-regexp&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-decorations&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;quote&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\n-&amp;gt; "&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="s"&gt;"\n "&lt;/span&gt; &lt;span class="s"&gt;"\n ..."&lt;/span&gt; &lt;span class="s"&gt;"["&lt;/span&gt; &lt;span class="s"&gt;"]"&lt;/span&gt; &lt;span class="s"&gt;" [No match]"&lt;/span&gt; &lt;span class="s"&gt;" [Matched]"&lt;/span&gt; &lt;span class="s"&gt;" [Not readable]"&lt;/span&gt; &lt;span class="s"&gt;" [Too big]"&lt;/span&gt; &lt;span class="s"&gt;" [Confirm]"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
             &lt;span class="nv"&gt;ido-file-extensions-order&lt;/span&gt; &lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;".lisp"&lt;/span&gt; &lt;span class="s"&gt;".py"&lt;/span&gt; &lt;span class="s"&gt;".org"&lt;/span&gt; &lt;span class="s"&gt;".el"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="nv"&gt;ido-max-directory-size&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-filename-at-point&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-enable-dot-prefix&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-url-at-point&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-filename-at-point&lt;/span&gt; &lt;span class="ss"&gt;'guess&lt;/span&gt;
             &lt;span class="nv"&gt;ido-use-virtual-buffers&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:config&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-bookmark-jump&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bname&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="s"&gt;"Switch to bookmark BNAME interactively using `ido'."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Bookmark: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bookmark-all-names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;bookmark-jump&lt;/span&gt; &lt;span class="nv"&gt;bname&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/recentf-ido-find-file&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Find a recent file using Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;recentf-list&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;find-file&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/ido-load-theme&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Load theme using Ido."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;mapcar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;symbol-name&lt;/span&gt; &lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;custom-available-themes&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt; &lt;span class="s"&gt;"Choose recent file: "&lt;/span&gt; &lt;span class="nv"&gt;themes&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-theme&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt; &lt;span class="nv"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;e/mx-ido&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="s"&gt;"Open Mx in ido-fashioned way."&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;call-interactively&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;intern&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;ido-completing-read&lt;/span&gt;
       &lt;span class="s"&gt;"M-x "&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;all-completions&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nv"&gt;obarray&lt;/span&gt; &lt;span class="ss"&gt;'commandp&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;define-key&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cdr&lt;/span&gt; &lt;span class="nv"&gt;ido-minor-mode-map-entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;[remap&lt;/span&gt; &lt;span class="nv"&gt;write-file]&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="ss"&gt;:bind&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"C-c r"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="ss"&gt;'e/recentf-ido-find-file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"C-x C-f"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="ss"&gt;'ido-find-file&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recomendação para leitura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/emacs/manual/html_mono/ido.html" rel="noopener noreferrer"&gt;https://www.gnu.org/software/emacs/manual/html_mono/ido.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.masteringemacs.org/article/introduction-to-ido-mode" rel="noopener noreferrer"&gt;https://www.masteringemacs.org/article/introduction-to-ido-mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Informações gerais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GNU Emacs 30&lt;/li&gt;
&lt;li&gt;GNU Guix/SwayWM/Waybar/Firefox&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/easbarba/lar" rel="noopener noreferrer"&gt;https://gitlab.com/easbarba/lar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>emacs</category>
      <category>linux</category>
      <category>vscode</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GNU Readline: Uma experiência Shell mais agradável no seu terminal</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Wed, 22 Jan 2025 04:58:04 +0000</pubDate>
      <link>https://dev.to/easbarba/-gnu-readline-uma-experiencia-shell-mais-saudavel-no-seu-terminal-13hj</link>
      <guid>https://dev.to/easbarba/-gnu-readline-uma-experiencia-shell-mais-saudavel-no-seu-terminal-13hj</guid>
      <description>&lt;p&gt;O usual de iniciantes usando Shell em terminais, como o &lt;a href="https://www.gnu.org/software/bash/" rel="noopener noreferrer"&gt;GNU Bash&lt;/a&gt;, após errar comandos, é usar bastante o mouse para correção. &lt;/p&gt;

&lt;p&gt;Por exemplo, para editar a lista de repositórios do Debian você usaria esse comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/pat/source.list&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;Então nota que o nome do diretório era &lt;code&gt;apt&lt;/code&gt; não &lt;code&gt;pat&lt;/code&gt;, e para corrigir puxa o mouse e clica em cima do &lt;code&gt;p&lt;/code&gt;, seguido de DELETE e novamente o mouse, agora após o &lt;code&gt;a&lt;/code&gt; e escrever &lt;code&gt;p&lt;/code&gt; e voilà:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/apt/source.list&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;Mas você poderia meramente usar os atalhos do &lt;a href="https://tiswww.cwru.edu/php/chet/readline/rltop.html" rel="noopener noreferrer"&gt;GNU Readline&lt;/a&gt; para essa edição.&lt;/p&gt;

&lt;p&gt;Como usar o &lt;code&gt;alt+b&lt;/code&gt; 3 vezes para voltar o cursor até o &lt;code&gt;pat&lt;/code&gt; então usar o &lt;code&gt;ctrl-f&lt;/code&gt; para ir para o &lt;code&gt;a&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/p|at/source.list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e então &lt;code&gt;ctrl-t&lt;/code&gt; para inverter o &lt;code&gt;a&lt;/code&gt; e &lt;code&gt;p&lt;/code&gt; de posição para finalmente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano /etc/apt/source.list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pronto!&lt;/p&gt;

&lt;p&gt;Bem mais simples e sem usar o mouse.&lt;/p&gt;

&lt;p&gt;Não curte os atalhos &lt;a href="https://www.gnu.org/software/emacs/" rel="noopener noreferrer"&gt;GNU Emacs&lt;/a&gt;, também tem os de &lt;a href="https://www.vim.org/" rel="noopener noreferrer"&gt;vi&lt;/a&gt;. ;)&lt;/p&gt;

&lt;p&gt;Para conhecer mais atalhos, consulte a Wikipédia do GNU Readline:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/GNU_Readline" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/GNU_Readline&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E também o seu manual: &lt;a href="https://tiswww.cwru.edu/php/chet/readline/rltop.html" rel="noopener noreferrer"&gt;https://tiswww.cwru.edu/php/chet/readline/rltop.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bash</category>
      <category>terminal</category>
      <category>linux</category>
      <category>gnu</category>
    </item>
    <item>
      <title>Debian: Easily upgrading to the SID distribution</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Feb 2023 11:04:27 +0000</pubDate>
      <link>https://dev.to/easbarba/easily-upgrading-to-the-debian-sid-distribution-gde</link>
      <guid>https://dev.to/easbarba/easily-upgrading-to-the-debian-sid-distribution-gde</guid>
      <description>&lt;p&gt;Developers usually stick with the latest version of the shiniest software out there, be it editors, browsers, stream players and office tools.&lt;/p&gt;

&lt;p&gt;Some Linux Distributions are famous for its rolling-release model with all bleeding-edge/night packages in the main repo, that goes for Arch, Manjaro, Nix.&lt;/p&gt;

&lt;p&gt;Not as famous as those there is a distribution of Debian named by SID, with all unstable packages, meaning packages not as tested as those in the Stable branch.&lt;/p&gt;

&lt;p&gt;Do not be confused by its name, it has an as solid experience as Arch, but with the advantage of having all .deb packages that most companies and OSS developers always target.&lt;/p&gt;

&lt;p&gt;Upgrading from Stable, or Testing, is about changing one word, its nickname if you will - bullseye, in the /etc/apt/source.list file, from this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deb http://deb.debian.org/debian/ bullseye main &lt;br&gt;
deb-src http://deb.debian.org/debian/ bullseye main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deb http://deb.debian.org/debian/ sid main&lt;br&gt;
deb-src http://deb.debian.org/debian/ sid main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;From there on, prepare yourself for one big upgrade of all packages installed with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt dist-upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There is only one catch on the SID distribution, as Debian changes from one big version to a new one, usually 2 years, there will be a whole month that most packages are frozen, and you may not receive any update.&lt;/p&gt;

&lt;p&gt;Usually I just go distro-hopping for the shiniest and newest Distros, and after that, I go back to my beloved Debian in its newest version.&lt;/p&gt;

&lt;p&gt;Nonetheless, do not frail from moving up to SID, it’s a rather worth effort.&lt;/p&gt;

</description>
      <category>debian</category>
      <category>linux</category>
      <category>upgrade</category>
    </item>
    <item>
      <title>Dut, yet another simple dotfile manager!</title>
      <dc:creator>Euber Alexandre Barbosa</dc:creator>
      <pubDate>Tue, 28 Feb 2023 11:02:02 +0000</pubDate>
      <link>https://dev.to/easbarba/dut-yet-another-simple-dotfile-manager-48bp</link>
      <guid>https://dev.to/easbarba/dut-yet-another-simple-dotfile-manager-48bp</guid>
      <description>&lt;p&gt;Dotfiles, as implied by its nickname, are files named prepended with a dot, that configure software initial settings and usually resides hidden on $HOME directories.&lt;/p&gt;

&lt;p&gt;Users craft their dotfiles through the years with a such a care that them can easily be the most sensible and essential files in their system, version-controlling is a must, of course.&lt;/p&gt;

&lt;p&gt;There is even a culture of proudly publicly sharing dotfiles, and that’s a good way to grab some cool snippets.&lt;/p&gt;

&lt;p&gt;We all love how frugal and simple to use are the Linux tools as find, grep or ls, so I kept that in mind on cooking up Dut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dut&lt;/strong&gt; creates links of all files in the target directory, perfectly mirroring them in the destination directory, &lt;code&gt;$HOME&lt;/code&gt; by default:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dut --from /data/dotfile_folder --create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Of course you can just try it out first:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dut --from /data/dotfile_folder --pretend&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To remove all linked files, it goes as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dut -f /data/dotfile_folder --remove&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It goes as easy to set a different destination:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dut -f /data/bin --to ~/.local/bin --create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We don’t want that just every file to be linked, eg: LICENSE. For those files, you can pin out their location by feeding the &lt;em&gt;.dutignore&lt;/em&gt;, that follows docker’s &lt;em&gt;.dockerignore&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Conflicting files found at the destination directory are moved up to &lt;code&gt;$HOME/.backup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And that is it.&lt;/p&gt;

&lt;p&gt;For more information, check the README.md in the main repository, or the &lt;code&gt;--help&lt;/code&gt; option.&lt;/p&gt;

&lt;p&gt;PS: In case you are wondering what’s with all those main.* files, as I pick a new language to learn, &lt;strong&gt;Dut&lt;/strong&gt; is a good initial project as it offers a good set of challenges.&lt;/p&gt;

&lt;p&gt;But I reckon that only the Ruby, Guile and PHP versions are fully functional.&lt;/p&gt;

&lt;p&gt;With that said, pick your poison! :)&lt;/p&gt;

</description>
      <category>dotfiles</category>
      <category>linux</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
