<?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: ADEBI Châ-Fine Ayédoun </title>
    <description>The latest articles on DEV Community by ADEBI Châ-Fine Ayédoun  (@memlenz).</description>
    <link>https://dev.to/memlenz</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%2F2480529%2F04efe32a-9b0d-416f-8c9c-eaccc70102c9.jpg</url>
      <title>DEV Community: ADEBI Châ-Fine Ayédoun </title>
      <link>https://dev.to/memlenz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/memlenz"/>
    <language>en</language>
    <item>
      <title>🚀 Hibernate Like a Boss on Arch/EndeavourOS with Dracut + Swapfile</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Thu, 14 Aug 2025 06:38:02 +0000</pubDate>
      <link>https://dev.to/memlenz/hibernate-like-a-boss-on-archendeavouros-with-dracut-swapfile-2anh</link>
      <guid>https://dev.to/memlenz/hibernate-like-a-boss-on-archendeavouros-with-dracut-swapfile-2anh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;💡 &lt;em&gt;Because sometimes you just wanna close the lid, go make noodles, and come back like nothing happened.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1️⃣ Check your RAM &amp;amp; plan the swap
&lt;/h2&gt;

&lt;p&gt;Hibernation stores &lt;strong&gt;all your RAM&lt;/strong&gt; into the swap.&lt;br&gt;
Rule: &lt;code&gt;swap size ≥ RAM × 1.2&lt;/code&gt; (just to be safe).&lt;/p&gt;

&lt;p&gt;Mine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mem:  7.6G total
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 I’ll make a &lt;strong&gt;9G swapfile&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2️⃣ Create the swapfile
&lt;/h2&gt;

&lt;p&gt;Let’s make it, lock it, and enable it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 9G /swapfile
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3️⃣ Make it permanent in &lt;code&gt;/etc/fstab&lt;/code&gt;
&lt;/h2&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="s1"&gt;'/swapfile none swap defaults 0 0'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;No more "oops my swap disappeared after reboot".&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4️⃣ Grab the UUID and offset
&lt;/h2&gt;

&lt;p&gt;The kernel needs to know &lt;strong&gt;where&lt;/strong&gt; your swap lives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# UUID of the partition containing swapfile&lt;/span&gt;
findmnt &lt;span class="nt"&gt;-no&lt;/span&gt; UUID &lt;span class="nt"&gt;-T&lt;/span&gt; /swapfile

&lt;span class="c"&gt;# Offset of the swapfile&lt;/span&gt;
filefrag &lt;span class="nt"&gt;-v&lt;/span&gt; /swapfile | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{if($1=="0:"){print $4}}'&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/\.\.//'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write those down — we’ll need them in the GRUB step.&lt;/p&gt;




&lt;h2&gt;
  
  
  5️⃣ Tell GRUB about it
&lt;/h2&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/default/grub&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;sudo &lt;/span&gt;nano /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=&amp;lt;your_uuid_here&amp;gt; resume_offset=&amp;lt;your_offset_here&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update GRUB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;grub-mkconfig &lt;span class="nt"&gt;-o&lt;/span&gt; /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6️⃣ Teach Dracut to &lt;em&gt;resume&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;/etc/dracut.conf.d/resume.conf&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="s1"&gt;'add_dracutmodules+=" resume "'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/dracut.conf.d/resume.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rebuild initramfs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dracut &lt;span class="nt"&gt;--regenerate-all&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7️⃣ Test the magic ✨
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl hibernate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your PC powers off and comes back with &lt;strong&gt;everything exactly where you left it&lt;/strong&gt;,&lt;br&gt;
congratulations — you’re now a hibernation wizard 🧙‍♂️.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔥 Bonus: Suspend-then-Hibernate
&lt;/h2&gt;

&lt;p&gt;Suspend to RAM first, then hibernate after a delay (battery saver’s dream):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/systemd/sleep.conf.d
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/systemd/sleep.conf.d/hibernate.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Sleep]
HibernateDelaySec=30min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl suspend-then-hibernate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🏆 Done!
&lt;/h3&gt;

&lt;p&gt;Now your Arch/EndeavourOS box can sleep like a cat 🐈 and wake up like it’s got &lt;strong&gt;super memory powers&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>linux</category>
      <category>endeavoros</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Install and Configure GLPI on Mx Linux (Debian base) (Apache, PHP, MariaDB)</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Wed, 28 May 2025 18:01:29 +0000</pubDate>
      <link>https://dev.to/memlenz/how-to-install-and-configure-glpi-on-mx-linux-debian-base-apache-php-mariadb-c3c</link>
      <guid>https://dev.to/memlenz/how-to-install-and-configure-glpi-on-mx-linux-debian-base-apache-php-mariadb-c3c</guid>
      <description>&lt;h2&gt;
  
  
  ✅ 1. System Requirements &amp;amp; Packages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔧 Install Apache, PHP, and MariaDB/MySQL:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apache2 mariadb-server php php-mysql php-gd php-intl php-curl php-mbstring php-xml php-bz2 php-zip unzip wget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔧 Enable the required Apache modules:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;a2enmod rewrite
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ 2. Download and Install GLPI
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
wget https://github.com/glpi-project/glpi/releases/download/10.0.14/glpi-10.0.14.tgz
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvzf&lt;/span&gt; glpi-10.0.14.tgz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;glpi /var/www/
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data /var/www/glpi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ 3. Apache Configuration
&lt;/h2&gt;

&lt;p&gt;Create a configuration file for the VirtualHost:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/apache2/sites-available/glpi.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;VirtualHost&lt;/span&gt;&lt;span class="sr"&gt; *:80&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="nc"&gt;ServerName&lt;/span&gt; glpi.localhost

    &lt;span class="nc"&gt;DocumentRoot&lt;/span&gt; /var/www/glpi/public

    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="sr"&gt; /var/www/glpi/public&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="nc"&gt;Require&lt;/span&gt; &lt;span class="ss"&gt;all&lt;/span&gt; granted
        &lt;span class="nc"&gt;AllowOverride&lt;/span&gt; &lt;span class="ss"&gt;All&lt;/span&gt;

        &lt;span class="nc"&gt;RewriteEngine&lt;/span&gt; &lt;span class="ss"&gt;On&lt;/span&gt;

        &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{HTTP:Authorization} ^(.+)$
        &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

        &lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-f
        &lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^(.*)$ index.php [QSA,L]
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;Directory&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span class="nl"&gt;VirtualHost&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable the site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;a2ensite glpi.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ 4. Edit &lt;code&gt;/etc/hosts&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Add this domain for local development:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/hosts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;127.0.0.1 glpi.localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ 5. Database Configuration
&lt;/h2&gt;

&lt;p&gt;Start MySQL and create the database and user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the MySQL terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;glpidb&lt;/span&gt; &lt;span class="nb"&gt;CHARACTER&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;utf8mb4&lt;/span&gt; &lt;span class="k"&gt;COLLATE&lt;/span&gt; &lt;span class="n"&gt;utf8mb4_unicode_ci&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'glpiuser'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'strongpassword'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;glpidb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'glpiuser'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;EXIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ 6. Access via Browser
&lt;/h2&gt;

&lt;p&gt;Open your browser and go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://glpi.localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the GLPI installer 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Fixing the GLPI &lt;code&gt;session.cookie_httponly&lt;/code&gt; warning:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open the PHP configuration file:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Depending on your PHP version, the file might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/php/8.2/apache2/php.ini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;8.2&lt;/code&gt; with your actual version if different. You can check it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search for the following line:&lt;/strong&gt;
Press &lt;code&gt;Ctrl + W&lt;/code&gt; and type:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   session.cookie_httponly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edit or add the following line:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;   &lt;span class="py"&gt;session.cookie_httponly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;On&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Save and exit&lt;/strong&gt; (&lt;code&gt;Ctrl + O&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;, then &lt;code&gt;Ctrl + X&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Restart Apache to apply the changes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ Verification
&lt;/h3&gt;

&lt;p&gt;To make sure the directive is applied:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-i&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;session.cookie_httponly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;session.cookie_httponly =&amp;gt; On =&amp;gt; On
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>php</category>
      <category>webdev</category>
      <category>glpi</category>
    </item>
    <item>
      <title>🧙‍♂️ XBPS — The Gandalf of Package Managers on Void Linux</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Mon, 14 Apr 2025 18:39:51 +0000</pubDate>
      <link>https://dev.to/memlenz/xbps-the-gandalf-of-package-managers-on-void-linux-38ak</link>
      <guid>https://dev.to/memlenz/xbps-the-gandalf-of-package-managers-on-void-linux-38ak</guid>
      <description>&lt;p&gt;Imagine a package manager that doesn’t talk to you like an old, dusty manpage, but moves like a ninja — silent, fast, and absolutely reliable. Meet &lt;strong&gt;XBPS&lt;/strong&gt; (X Binary Package System), the unsung hero behind Void Linux that’ll make you go “damn, that’s smooth” every time you install something.&lt;/p&gt;

&lt;p&gt;Welcome to the world of &lt;strong&gt;Void Linux&lt;/strong&gt;, where we do things the &lt;em&gt;Void way&lt;/em&gt;: no &lt;code&gt;systemd&lt;/code&gt;, no bloat, just pure, clean power — and at the center of it all is &lt;strong&gt;XBPS&lt;/strong&gt;, the little beast that makes everything run like a charm 🏎️.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧬 Born and Bred in Void
&lt;/h2&gt;

&lt;p&gt;XBPS wasn’t forked from apt or borrowed from pacman. Nope. &lt;strong&gt;It was built from scratch&lt;/strong&gt;, in C, by the creators of Void Linux. Why? Because if you’re gonna build a whole distro from zero, might as well create your own package manager that actually &lt;em&gt;gets&lt;/em&gt; your vibe.&lt;/p&gt;

&lt;p&gt;XBPS is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast ⚡
&lt;/li&gt;
&lt;li&gt;Lightweight like a single-window &lt;code&gt;htop&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Rock-solid like an &lt;code&gt;i3wm&lt;/code&gt; setup after 48 hours of rice and grind&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And best of all? It handles transactions, dependency hell, signature verification... all while making it look effortless.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Commands You’ll Love (aka Your New Superpowers)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;xbps-install&lt;/code&gt; – install anything you want, like a boss
→ &lt;code&gt;sudo xbps-install neofetch&lt;/code&gt; to flex that setup&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xbps-remove&lt;/code&gt; – uninstall cleanly, without leaving ghost files behind
→ &lt;code&gt;sudo xbps-remove firefox&lt;/code&gt; (yeah we know you prefer qutebrowser 👀)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xbps-query&lt;/code&gt; – spy tool for everything package-related
→ &lt;code&gt;xbps-query -l | grep emacs&lt;/code&gt; if you're &lt;em&gt;that&lt;/em&gt; kind of hacker&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xbps-install -Syu&lt;/code&gt; – full system upgrade, the Void way
→ no drama, just magic&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 The Smart Stuff Under the Hood
&lt;/h2&gt;

&lt;p&gt;What makes XBPS really shine is its brain. It uses a &lt;strong&gt;transactional system&lt;/strong&gt;: every install or removal is done atomically. If anything breaks mid-way, it rolls back like a pro. Your system doesn’t end up in a weird limbo with broken deps.&lt;/p&gt;

&lt;p&gt;Plus, it &lt;strong&gt;verifies package signatures&lt;/strong&gt;. So yeah, you’re protected from sketchy packages trying to sneak into your system like it’s the Wild West.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 A Chill Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install cowsay fortune-mod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fortune | cowsay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom. Your terminal is now 27% funnier 🐮💬&lt;br&gt;&lt;br&gt;
And that’s the kind of stuff you do when your system is clean, fast, and rock-solid.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why You’ll Love It (Even if You’ve Dated pacman or zypper)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧼 It’s clean. No shady business.&lt;/li&gt;
&lt;li&gt;⚡ It’s fast. Really fast.&lt;/li&gt;
&lt;li&gt;🧘 It handles failure like a Zen master. Rolls back. Breathes. Tries again.&lt;/li&gt;
&lt;li&gt;👑 It’s native to Void. Not bolted on like some afterthought.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;XBPS is the kind of package manager that doesn’t scream for attention — but always delivers. You trust it. You rely on it. You lowkey brag about it.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Wanna Dive Deeper?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.voidlinux.org/xbps/index.html" rel="noopener noreferrer"&gt;Void Linux official docs&lt;/a&gt; – actually helpful, shocker!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💭 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;XBPS is like that quiet friend who always has the right command, the cleanest setup, and the patience to help you fix your system at 3AM after a “just one tweak” moment.&lt;/p&gt;

&lt;p&gt;If you want a package manager that does the job without unnecessary noise, and fits perfectly in a &lt;em&gt;techy-but-chill&lt;/em&gt; workflow — &lt;strong&gt;XBPS is your guy&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>voidlinux</category>
      <category>linux</category>
    </item>
    <item>
      <title>📝 Dev.to Post: "Bagels – A Logic Game in Python</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Wed, 19 Mar 2025 06:23:48 +0000</pubDate>
      <link>https://dev.to/memlenz/devto-post-bagels-a-logic-game-in-python-5bja</link>
      <guid>https://dev.to/memlenz/devto-post-bagels-a-logic-game-in-python-5bja</guid>
      <description>&lt;h1&gt;
  
  
  🎮 Bagels – A Logic Game in Python
&lt;/h1&gt;

&lt;p&gt;Hey everyone! Today, I’m sharing a fun little Python project: &lt;strong&gt;Bagels&lt;/strong&gt;, a deductive logic game. 🧠💡  &lt;/p&gt;

&lt;p&gt;The goal? &lt;strong&gt;Guess a secret 3-digit number within 10 attempts&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
But instead of getting direct hints, you receive &lt;strong&gt;clues&lt;/strong&gt; to help you figure out the correct number:  &lt;/p&gt;

&lt;p&gt;🟢 &lt;strong&gt;Game Rules&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Fermi&lt;/em&gt; → A digit is &lt;strong&gt;correct and in the right place&lt;/strong&gt; ✅
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Pico&lt;/em&gt; → A digit is &lt;strong&gt;correct but in the wrong place&lt;/strong&gt; 🔄
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Bagels&lt;/em&gt; → No correct digits ❌
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;&lt;br&gt;
If the secret number is &lt;strong&gt;"123"&lt;/strong&gt; and you enter &lt;strong&gt;"132"&lt;/strong&gt;, you’ll see:&lt;br&gt;&lt;br&gt;
&lt;code&gt;Fermi Pico Pico&lt;/code&gt; (1 is correct and in the right place, while 3 and 2 are correct but misplaced).  &lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Source Code&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s the full implementation in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env python3
# -*- coding: utf-8 -*-
&lt;/span&gt;
&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Nom du fichier : bagels.py
    Description : Un jeu de déduction logique pour
    deviner un nombre secret à trois chiffres.
    Vous avez 10 chances pour deviner le nombre.
    - Pico -&amp;gt; Un chiffre correct, mauvaise position.
    - Fermi -&amp;gt; Un chiffre correct, bonne position.
    - Bagels -&amp;gt; Aucun chiffre correct.

    Auteur : ADEBI Ayedoun Châ-Fine achafine@gmail.com
    Date : 03/16/2025
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="c1"&gt;# Constante
&lt;/span&gt;&lt;span class="n"&gt;GUESSES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;  &lt;span class="c1"&gt;# NOMBRE DE CHANCES
&lt;/span&gt;&lt;span class="n"&gt;DIGIT_LEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;  &lt;span class="c1"&gt;# NOMBRE DE CHIFFRES DU NOMBRE
&lt;/span&gt;&lt;span class="n"&gt;MENU&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Bagels, a deductive logic game.
    By ADEBI Ayedoun Châ-Fine achafine@gmail.com

    Je suis en train de penser à un nombre à 3 chiffres.
    Essais de deviner lequel.
    Voici quelques indices :
    Quand je dis:       Voici ce à quoi je pense:
        Pico            Un chiffre est correct mais à la mauvaise position
        Fermi           Un chiffre est correct et à la bonne position
        Bagels          Aucun des chiffres n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;est correct
    Vous avez 10 essais :
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generer_nombre_secret&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt; Générer un nombre secret unique à trois chiffres
    sous forme de liste.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;chiffres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shuffle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chiffres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chiffres&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DIGIT_LEN&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;obtenir_indices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;guess_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Comparer l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;entrée utilisateur avec le nombre secret
    et retourne des indices.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_list&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;input_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;guess_number&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fermi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;input_list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;guess_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pico&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bagels&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;valide_saisie&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Gère l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;entrée utilisateur, l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utilisateur doit entrer
    un nombre à trois chiffres&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;saisie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;saisie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;DIGIT_LEN&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;saisie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isdigit&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;saisie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Entrée invalide, vous devez entrer un nombre à trois chiffres&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Boucle principale du jeu&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;rejouer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;guess_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generer_nombre_secret&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GUESSES&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Devine #&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;input_nbre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;valide_saisie&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;input_nbre&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;guess_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vous l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;avez trouvé&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;obtenir_indices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_nbre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;guess_number&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Game Over!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Voulez-vous encore jouer ?? (oui ou non)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;rejouer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rejouer&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;oui&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;non&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vous devez répondre par &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;oui&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; ou &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;non&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rejouer&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;non&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Merci d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;avoir joué&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MENU&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;🔍 Code Breakdown&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The program generates a &lt;strong&gt;random 3-digit secret number&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;The user enters a &lt;strong&gt;guess&lt;/strong&gt; and receives a &lt;strong&gt;clue&lt;/strong&gt; in return.
&lt;/li&gt;
&lt;li&gt;The game loops for &lt;strong&gt;up to 10 attempts&lt;/strong&gt; or until the player finds the correct number.
&lt;/li&gt;
&lt;li&gt;At the end, the player can &lt;strong&gt;choose to replay&lt;/strong&gt; or exit the game.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;📌 How Can We Improve It?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I have a few ideas, but I’d love to hear your suggestions!&lt;br&gt;&lt;br&gt;
For example:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a &lt;strong&gt;hard mode&lt;/strong&gt; where the secret number has &lt;strong&gt;no repeated digits&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;graphical version&lt;/strong&gt; using Tkinter or Pygame.
&lt;/li&gt;
&lt;li&gt;Implement a &lt;strong&gt;multiplayer mode&lt;/strong&gt;, where Player 1 sets a number and Player 2 tries to guess it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think? Any other improvements you'd suggest? 🚀  &lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Let me know in the comments if you tried the game or have any optimizations to propose!&lt;/strong&gt;  &lt;/p&gt;




&lt;p&gt;📌 &lt;strong&gt;Follow me for more Python and development content!&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 [&lt;a href="https://dev.to/memlenz"&gt;Dev.to&lt;/a&gt; / &lt;a href="https://github.com/memlenz" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; / &lt;a href="https://twitter.com/achafine" rel="noopener noreferrer"&gt;Twitter Profile&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>devto</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Recursion, Tail Recursion, and Recursive Data Structures: A Deep Dive 😎💻</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Sun, 09 Mar 2025 22:51:56 +0000</pubDate>
      <link>https://dev.to/memlenz/recursion-tail-recursion-and-recursive-data-structures-a-deep-dive-1gnk</link>
      <guid>https://dev.to/memlenz/recursion-tail-recursion-and-recursive-data-structures-a-deep-dive-1gnk</guid>
      <description>&lt;p&gt;Introduction&lt;/p&gt;

&lt;p&gt;Recursion is one of those things that looks like a simple concept on paper but can quickly turn into a labyrinth of confusion 😵. Yet, it's one of the most powerful tools in a programmer's toolbox—if you know how to wield it properly 💪. In this article, we’ll dissect recursion, talk about its slightly more optimized cousin, tail recursion, and explore how recursion fits like a glove with recursive data structures. Grab your code editor, your thinking cap, and possibly a cup of coffee (or tea, or whatever helps you think ☕), because we’re about to get recursive 🔄.&lt;/p&gt;

&lt;p&gt;What Is Recursion? (And Why Does It Keep Calling Itself? 🧐)&lt;/p&gt;

&lt;p&gt;At its core, recursion is a function calling itself to solve smaller instances of a problem. It's like a Russian nesting doll—each smaller doll represents a smaller subproblem, and eventually, you hit a base case, which is your smallest doll (or, in the case of recursion, your "base case") 🪆.&lt;/p&gt;

&lt;p&gt;How Does It Work?&lt;/p&gt;

&lt;p&gt;Let’s start with a classic example: factorial. The factorial of a number n (denoted n!) is the product of all integers from 1 to n. So,&lt;/p&gt;

&lt;p&gt;n! = n * (n - 1) * (n - 2) * ... * 1&lt;/p&gt;

&lt;p&gt;In recursion, this would look something like:&lt;/p&gt;

&lt;p&gt;def factorial(n):&lt;br&gt;
    if n == 0:  # Base case&lt;br&gt;
        return 1&lt;br&gt;
    else:&lt;br&gt;
        return n * factorial(n - 1)  # Recursive call&lt;/p&gt;

&lt;p&gt;In this example, the function factorial calls itself with a smaller argument (n-1), and keeps going until n becomes 0, where it hits the base case and starts returning the results 🔁.&lt;/p&gt;

&lt;p&gt;Base Case and Recursive Case: The Dynamic Duo 👯&lt;/p&gt;

&lt;p&gt;Every recursive function has two key components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Base Case: The condition that stops the recursion. Without it, you’ll end up with an infinite loop of function calls that end up crashing your program. Not great 😬.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive Case: The part where the function calls itself with modified arguments to reduce the problem size. This is where the magic happens ✨.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Dark Side of Recursion (aka Memory Problems 😱)&lt;/p&gt;

&lt;p&gt;Recursion is amazing, but like a good superhero, it has its weaknesses. One of the main issues with recursion is memory consumption 💾. Each recursive call adds a new "layer" to the call stack, and if you recurse too deeply, you’ll get a stack overflow. It’s like trying to put one too many plates in the dishwasher—it'll break 🤯.&lt;/p&gt;

&lt;p&gt;Tail Recursion: The Superhero of Recursion 🦸‍♂️💥&lt;/p&gt;

&lt;p&gt;Now, imagine a world where recursion doesn’t add to the call stack like an overenthusiastic chef stacking dirty dishes 🥴. Enter tail recursion. This is where recursion becomes super efficient and can be optimized into an iterative process, saving you memory and processing power 🧠⚡.&lt;/p&gt;

&lt;p&gt;What Makes Tail Recursion Special? 🤔&lt;/p&gt;

&lt;p&gt;In tail recursion, the recursive call is the last thing that happens before the function returns a result. This allows compilers or interpreters to optimize the recursion by "reusing" the current function's stack frame, which makes the recursion behave more like an iteration—faster and less memory-hungry 🔥.&lt;/p&gt;

&lt;p&gt;Here’s the factorial function, but optimized with tail recursion:&lt;/p&gt;

&lt;p&gt;def factorial_tail(n, acc=1):&lt;br&gt;
    if n == 0:&lt;br&gt;
        return acc&lt;br&gt;
    else:&lt;br&gt;
        return factorial_tail(n - 1, acc * n)&lt;/p&gt;

&lt;p&gt;Notice the difference? We’re passing along an accumulator (acc) to keep track of the result as we go. The function calls itself, but there's nothing left to do after the recursive call—this is the tail call. It’s a recursive function with a clear exit strategy! 🚪&lt;/p&gt;

&lt;p&gt;Why Is Tail Recursion Better? 💡&lt;/p&gt;

&lt;p&gt;In non-tail recursion, the function needs to remember all the previous calls, which makes the call stack grow 📈. Tail recursion allows the compiler or interpreter to optimize the process by reusing the current stack frame, so you can recalculate huge numbers without blowing up your memory 💣.&lt;/p&gt;

&lt;p&gt;In short, tail recursion is like having your cake and eating it too 🎂. It gives you recursion’s elegance while still being efficient. Delicious, right? 😋&lt;/p&gt;

&lt;p&gt;Recursive Data Structures: The Perfect Match for Recursion 🤝&lt;/p&gt;

&lt;p&gt;Now, let’s talk about recursive data structures, because recursion and recursion-friendly data structures are like peanut butter and jelly 🥪. They go hand in hand. Some data structures are naturally recursive, which means they’re already structured in a way that makes them perfect for recursion 💯.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Linked Lists 📝&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A linked list is a structure where each element (node) contains a reference to the next node. It’s recursive because each list is essentially a "list" of a single element followed by another list. Here’s a simple recursive traversal of a linked list:&lt;/p&gt;

&lt;p&gt;def traverse_linked_list(node):&lt;br&gt;
    if node is None:  # Base case: empty list&lt;br&gt;
        return&lt;br&gt;
    else:&lt;br&gt;
        print(node.value)  # Process current node&lt;br&gt;
        traverse_linked_list(node.next)  # Recursive call&lt;/p&gt;

&lt;p&gt;Each node is like a mini-problem that points to a smaller problem (next node) 🔄. So, naturally, recursion fits like a glove 👌.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Binary Trees 🌳&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Binary trees are another data structure that’s inherently recursive. Each node has two children (left and right), and those children are themselves trees. If you want to traverse or manipulate a tree, recursion is the most natural way to go. Here’s a simple depth-first search (DFS) traversal:&lt;/p&gt;

&lt;p&gt;def traverse_tree(node):&lt;br&gt;
    if node is None:&lt;br&gt;
        return&lt;br&gt;
    print(node.value)  # Process the current node&lt;br&gt;
    traverse_tree(node.left)  # Recursive call on the left child&lt;br&gt;
    traverse_tree(node.right)  # Recursive call on the right child&lt;/p&gt;

&lt;p&gt;Each node's left and right children are smaller instances of the same tree, which makes recursion a perfect fit 🌱.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Graphs 🌐&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Graphs are a bit more complex, but recursion still shines through ✨. Whether you’re performing depth-first search (DFS) or exploring connected components, recursion can handle traversals like a champ 🏆. If you know how to handle recursive traversal of trees, graph traversal isn’t far behind 🧑‍💻.&lt;/p&gt;

&lt;p&gt;Why Are Recursive Data Structures So Recursion-Friendly? 🤷‍♂️&lt;/p&gt;

&lt;p&gt;Well, they are recursive by definition. Each element of the structure points to another instance of the same thing, so solving a problem within them naturally involves breaking it down into smaller, similar subproblems. Recursion is the perfect method for that kind of breakdown 🔥.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Recursion is a tool that can make your code elegant, clean, and surprisingly powerful 💥. But, like all powerful tools, it requires understanding and caution 🧐. Enter tail recursion, which optimizes the whole process, and you get a supercharged version of recursion that’s both efficient and effective 🚀. When you add recursive data structures into the mix, recursion becomes the ultimate problem-solving technique 🏅.&lt;/p&gt;

&lt;p&gt;So, the next time you’re faced with a problem that seems too complex to solve with a loop, ask yourself: "Can I break this down recursively?" And if the answer is "Yes," then you’re about to enter the wonderful, infinite (but not too infinite) world of recursion—where every call is just another layer of problem-solving goodness 🎉. Happy coding! 👨‍💻👩‍💻&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>datastructures</category>
      <category>programming</category>
    </item>
    <item>
      <title>🚀 Mastering Rofi in i3: A Cool &amp; Fun Guide</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Fri, 27 Dec 2024 10:10:57 +0000</pubDate>
      <link>https://dev.to/memlenz/mastering-rofi-in-i3-a-cool-fun-guide-28i0</link>
      <guid>https://dev.to/memlenz/mastering-rofi-in-i3-a-cool-fun-guide-28i0</guid>
      <description>&lt;p&gt;So, you've installed Rofi, jazzed it up with some sweet themes from adi1090x, and now you're ready to turn it into a powerful, futuristic multitool. Let’s dive into customizing your workflow with Rofi!&lt;/p&gt;




&lt;h3&gt;
  
  
  1️⃣ &lt;strong&gt;Install &amp;amp; Configure Rofi&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the repository&lt;/strong&gt; for amazing pre-made themes:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/adi1090x/rofi.git ~/rofi-themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate&lt;/strong&gt; to the cloned directory:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd&lt;/span&gt; ~/rofi-themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the setup script&lt;/strong&gt; to install the themes:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ./setup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Choose your desired &lt;strong&gt;theme style&lt;/strong&gt; during setup (light, dark, or custom). Themes are installed in &lt;code&gt;~/.config/rofi&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  2️⃣ &lt;strong&gt;Make Rofi Pop with i3 Keybindings&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Add the following to your &lt;strong&gt;i3 configuration file&lt;/strong&gt; (&lt;code&gt;~/.config/i3/config&lt;/code&gt;):&lt;/p&gt;

&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Launch Rofi in "drun" mode (app launcher)&lt;/strong&gt;:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+d &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; rofi &lt;span class="nt"&gt;-show&lt;/span&gt; drun &lt;span class="nt"&gt;-theme&lt;/span&gt; ~/.config/rofi/config.rasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Switch to "run" mode (execute commands)&lt;/strong&gt;:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+r &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; rofi &lt;span class="nt"&gt;-show&lt;/span&gt; run &lt;span class="nt"&gt;-theme&lt;/span&gt; ~/.config/rofi/config.rasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Switch to "window" mode (manage windows)&lt;/strong&gt;:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+w &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; rofi &lt;span class="nt"&gt;-show&lt;/span&gt; window &lt;span class="nt"&gt;-theme&lt;/span&gt; ~/.config/rofi/config.rasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Enable "file browser" mode (navigate files)&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;To browse files, ensure &lt;strong&gt;Rofi Scripts&lt;/strong&gt; are installed from the adi1090x repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+f &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; rofi &lt;span class="nt"&gt;-modi&lt;/span&gt; filebrowser &lt;span class="nt"&gt;-show&lt;/span&gt; filebrowser &lt;span class="nt"&gt;-theme&lt;/span&gt; ~/.config/rofi/config.rasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload i3 (&lt;code&gt;$mod+Shift+R&lt;/code&gt;) to apply these bindings.&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ &lt;strong&gt;Tips &amp;amp; Tricks for Using Rofi&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;Switch Between Modes Dynamically&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;While in any mode (e.g., &lt;code&gt;drun&lt;/code&gt;), type &lt;code&gt;Ctrl+Tab&lt;/code&gt; to cycle through modes like:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;drun&lt;/code&gt; → App Launcher&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;run&lt;/code&gt; → Command Runner&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;window&lt;/code&gt; → Window Switcher&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;filebrowser&lt;/code&gt; → File Manager&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;Search Smarter in "drun" Mode&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search for apps&lt;/strong&gt; by typing their name (e.g., &lt;code&gt;fir&lt;/code&gt; for Firefox).&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;arrow keys&lt;/strong&gt; to navigate and hit &lt;code&gt;Enter&lt;/code&gt; to launch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;Use "run" Mode Like a Pro&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Type &lt;strong&gt;commands&lt;/strong&gt; directly:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;htop&lt;/code&gt; → Launch system monitor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shutdown now&lt;/code&gt; → Turn off your system.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Rofi remembers past commands, making it quicker to access frequent ones.&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;Master the "window" Mode&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Quickly switch between open windows:

&lt;ul&gt;
&lt;li&gt;Type part of the window name.&lt;/li&gt;
&lt;li&gt;Example: Type "term" to jump to an open terminal.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  💡 &lt;strong&gt;Browse Files with Rofi (Filebrowser Mode)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Launch the file browser mode and navigate files using:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Arrow keys&lt;/code&gt; → Navigate.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Tab&lt;/code&gt; → Auto-complete.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Enter&lt;/code&gt; → Open the file or directory.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  4️⃣ &lt;strong&gt;Rofi Keyboard Shortcuts&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ctrl+Tab&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Switch between modes (drun, run, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Select an option&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Esc&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exit Rofi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Arrow Keys&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Navigate the menu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alt+Enter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Launch in a terminal (requires setup)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  5️⃣ &lt;strong&gt;Customize Themes for a Futuristic Look&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Edit a Theme&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;Rofi themes are located in &lt;code&gt;~/.config/rofi&lt;/code&gt;. Open and tweak a theme:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.config/rofi/config.rasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Change Colors for Abstract Vibes&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Background&lt;/strong&gt;: Neon with transparency:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  background: rgba(0, 0, 0, 0.8);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Highlight Selected Items&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  selected-background: #00FFAB;  /* Neon green */
  selected-foreground: #FFFFFF;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🔹 &lt;strong&gt;Rounded Corners&lt;/strong&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Add modern rounded corners for a clean UI:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  border-radius: 10px;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6️⃣ &lt;strong&gt;Fun Rofi Ideas&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Game Launcher&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bind &lt;code&gt;$mod+g&lt;/code&gt; to launch Rofi with a custom list of games.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Spotify Control&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Rofi to search and play songs with &lt;a href="https://github.com/davatorium/rofi" rel="noopener noreferrer"&gt;Rofi Spotify&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSH Connection Manager&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a mode to manage SSH connections for servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Calculator Mode&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a script for quick calculations using Rofi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Now you're all set to make Rofi your supertool in i3! 🎉 Feel free to experiment and share your favorite Rofi setups!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🌟 Ready to transform your desktop into a superpower? Let's get started! 🚀</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Fri, 27 Dec 2024 09:58:12 +0000</pubDate>
      <link>https://dev.to/memlenz/ready-to-transform-your-desktop-into-a-superpower-lets-get-started-10l9</link>
      <guid>https://dev.to/memlenz/ready-to-transform-your-desktop-into-a-superpower-lets-get-started-10l9</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1: Installing XFCE and i3&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Get Ready for Action - Install XFCE and i3&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before we begin, you need to install XFCE (a lightweight, awesome desktop) and i3 (a tiling window manager that’ll make you feel like a wizard). It’s simple:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;For Ubuntu/Debian users&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;Open up your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;i3 xfce4 xfce4-goodies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;For Void Linux users&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;Type this into the terminal to make your computer even cooler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; i3 xfce4 xfce4-goodies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, sit back and relax while the magic happens (aka, your system installs all the goodies).&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2: Let's Get to Work — Set Up i3 as the Window Manager&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Alright, it’s time to do some wizardry and make i3 take control of your windows. 😎&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Tweak XFCE to Make i3 Your Window Manager&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log into XFCE&lt;/strong&gt; first! If you're using a login manager like LightDM, select the &lt;strong&gt;XFCE session&lt;/strong&gt; to log in. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tell XFCE to Use i3&lt;/strong&gt;:&lt;br&gt;
We’re going to tell XFCE, "Hey, i3 is now in charge!":&lt;br&gt;
Open a terminal and run this command:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   xfconf-query &lt;span class="nt"&gt;-c&lt;/span&gt; xfce4-session &lt;span class="nt"&gt;-p&lt;/span&gt; /sessions/Failsafe/Client0_Command &lt;span class="nt"&gt;-t&lt;/span&gt; string &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"i3"&lt;/span&gt; &lt;span class="nt"&gt;--create&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart and See the Magic&lt;/strong&gt;:
Log out, then log back in. You’ll now see i3 taking charge with all the power of XFCE still backing it up. 😁&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 3: Make it Look Cool — Wallpapers and Panels&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Set Your Wallpaper Like a Boss Using feh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’re going to make your desktop look awesome with a wallpaper, using &lt;strong&gt;feh&lt;/strong&gt;. It’s lightweight and fast—perfect for i3!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install feh&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debian/Ubuntu&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;feh
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Void Linux&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; feh
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set the Wallpaper&lt;/strong&gt;:
Now, we’re going to make your desktop look &lt;em&gt;amazing&lt;/em&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   feh &lt;span class="nt"&gt;--bg-scale&lt;/span&gt; /path/to/your/wallpaper.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Replace &lt;code&gt;/path/to/your/wallpaper.jpg&lt;/code&gt; with your wallpaper file’s location).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Make it Stick&lt;/strong&gt;:&lt;br&gt;
Want the wallpaper to stick around? We’ll make sure it shows up every time i3 starts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your i3 config file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; nano ~/.config/i3/config
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Add this line to the file:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; feh &lt;span class="nt"&gt;--bg-scale&lt;/span&gt; /path/to/your/wallpaper.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save it, then reload i3 with &lt;strong&gt;Mod + Shift + R&lt;/strong&gt;. Now you have the wallpaper &lt;em&gt;forever&lt;/em&gt;!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: XFCE Panel — The Superhero of Your Desktop (Optional)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’re going to bring the &lt;strong&gt;XFCE panel&lt;/strong&gt; to life! 🎉&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the XFCE &lt;strong&gt;Panel Preferences&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   xfce4-panel &lt;span class="nt"&gt;--preferences&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Adjust the panel settings—move it, resize it, and add things like a clock, system tray, and application menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Autostart the Panel&lt;/strong&gt;:&lt;br&gt;
Let’s make sure the panel starts automatically when i3 does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your i3 config file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; nano ~/.config/i3/config
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Add this line to start the panel every time i3 launches:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; xfce4-panel &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Save and reload i3, and you’ll have your XFCE panel right on top of i3. Cool, right? 😎&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 4: Make i3 Even More Fun — Customizations&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Keybindings for i3 — Control Your World&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now, we’re going to make sure i3 listens to your every command. We’ll set up some cool keybindings for a smooth ride!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your i3 config file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nano ~/.config/i3/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add some sweet keybindings. Here are some to start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open terminal&lt;/strong&gt; with &lt;strong&gt;Mod + Enter&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+Return &lt;span class="nb"&gt;exec &lt;/span&gt;i3-sensible-terminal
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Firefox&lt;/strong&gt; with &lt;strong&gt;Mod + B&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+b &lt;span class="nb"&gt;exec &lt;/span&gt;firefox
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Switch between windows&lt;/strong&gt; (move your focus like a ninja):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+j focus left
 bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+k focus down
 bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+l focus up
 bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+semicolon focus right
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Save the file, and &lt;strong&gt;reload&lt;/strong&gt; i3 (&lt;code&gt;Mod + Shift + R&lt;/code&gt;). Now you’re ready to control your world with these shortcuts!&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 6: i3 Gaps — Because Gaps are Cool&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Want some extra space between your windows for that extra flair? Let’s install &lt;strong&gt;i3-gaps&lt;/strong&gt;, the cool sibling of i3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install i3-gaps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debian/Ubuntu&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;i3-gaps
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Void Linux&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; i3-gaps
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up your gaps&lt;/strong&gt;:
Open your i3 config file (&lt;code&gt;~/.config/i3/config&lt;/code&gt;) and add this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   gaps inner 10
   gaps outer 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Adjust the numbers for bigger/smaller gaps.)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reload i3, and voilà! Your windows have sweet gaps between them.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 5: Extra Cool Tweaks — Because You’re a Power User Now&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 7: Install Rofi — Your Stylish App Launcher&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Want to launch apps like a pro? Let’s install &lt;strong&gt;Rofi&lt;/strong&gt;!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install Rofi&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debian/Ubuntu&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;rofi
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Void Linux&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; rofi
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set it up in i3&lt;/strong&gt;:
Add this line to your i3 config file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   bindsym &lt;span class="nv"&gt;$mod&lt;/span&gt;+d &lt;span class="nb"&gt;exec &lt;/span&gt;rofi &lt;span class="nt"&gt;-show&lt;/span&gt; drun
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload i3, and now you have a super sleek app launcher! 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: You’re Now a Master of XFCE + i3! 🎉&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Look at you now! You’ve set up i3 with XFCE, customized your desktop, and made it look awesome. You’re officially a Linux wizard! 🧙‍♂️✨&lt;/p&gt;

&lt;p&gt;Feel free to explore and tweak more settings—because Linux is all about &lt;strong&gt;personalization&lt;/strong&gt;. Have fun experimenting and making your setup unique. The possibilities are endless!&lt;/p&gt;

&lt;p&gt;If you run into any roadblocks or just want to add something cool, come back to this guide anytime.&lt;/p&gt;

&lt;p&gt;Happy Linuxing! 😎🎉&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>windowsmanager</category>
      <category>i3</category>
      <category>xfce4</category>
    </item>
    <item>
      <title>🎨 Customize Void Linux with Polybar, PulseAudio, pavucontrol, nm-applet, NetworkManager, i3, and feh</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Mon, 23 Dec 2024 11:34:52 +0000</pubDate>
      <link>https://dev.to/memlenz/customize-void-linux-with-polybar-pulseaudio-pavucontrol-nm-applet-networkmanager-i3-and-feh-3aon</link>
      <guid>https://dev.to/memlenz/customize-void-linux-with-polybar-pulseaudio-pavucontrol-nm-applet-networkmanager-i3-and-feh-3aon</guid>
      <description>&lt;p&gt;Turn your Void Linux setup into a personalized masterpiece! In this tutorial, we’ll guide you through installing and configuring essential tools for a polished, productive, and eye-catching system.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;What We’re Setting Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Polybar&lt;/strong&gt;: A sleek, customizable status bar.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PulseAudio&lt;/strong&gt; and &lt;strong&gt;pavucontrol&lt;/strong&gt;: Sound management made simple.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nm-applet&lt;/strong&gt; and &lt;strong&gt;NetworkManager&lt;/strong&gt;: A graphical tool for network connections.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;i3 Window Manager&lt;/strong&gt;: Lightweight and tiling for power users.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;feh&lt;/strong&gt;: Set and manage your wallpaper effortlessly.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠️ &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A running Void Linux installation.
&lt;/li&gt;
&lt;li&gt;A terminal and root access.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 &lt;strong&gt;Step 1: Install Required Packages&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Update your package index:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install i3
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; i3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Polybar
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; polybar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install PulseAudio and pavucontrol
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; pulseaudio pavucontrol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install nm-applet and NetworkManager
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; network-manager-applet NetworkManager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install feh
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; feh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ &lt;strong&gt;Step 2: Configure NetworkManager&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Enable and start NetworkManager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/sv/NetworkManager /var/service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if it's running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sv status NetworkManager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎵 &lt;strong&gt;Step 3: Configure PulseAudio and Sound Control&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Enable PulseAudio by adding the following to your &lt;code&gt;.xinitrc&lt;/code&gt; (if you use startx):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pulseaudio &lt;span class="nt"&gt;--start&lt;/span&gt; &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch pavucontrol from your terminal or bind it to a key in your i3 config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pavucontrol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📐 &lt;strong&gt;Step 4: Configure i3&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Generate a Default Config
&lt;/h3&gt;

&lt;p&gt;If you haven’t already, generate an i3 config file:&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;-p&lt;/span&gt; ~/.config/i3
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/i3/config ~/.config/i3/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add Startup Applications
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;~/.config/i3/config&lt;/code&gt; to autostart your tools:&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;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; nm-applet &amp;amp;
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; pulseaudio &lt;span class="nt"&gt;--start&lt;/span&gt; &amp;amp;
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; feh &lt;span class="nt"&gt;--bg-scale&lt;/span&gt; ~/Pictures/wallpaper.jpg
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--no-startup-id&lt;/span&gt; ~/.config/polybar/launch.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🖼️ &lt;strong&gt;Step 5: Set Up feh for Wallpapers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Place your desired wallpaper in &lt;code&gt;~/Pictures/&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;Set it as your background:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;feh &lt;span class="nt"&gt;--bg-scale&lt;/span&gt; ~/Pictures/wallpaper.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make this persistent by adding the command to your i3 config (as shown above).  &lt;/p&gt;




&lt;h2&gt;
  
  
  📊 &lt;strong&gt;Step 6: Configure Polybar&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a Configuration File
&lt;/h3&gt;

&lt;p&gt;Generate the default Polybar config:&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;-p&lt;/span&gt; ~/.config/polybar
&lt;span class="nb"&gt;cp&lt;/span&gt; /usr/share/doc/polybar/config ~/.config/polybar/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Launch Polybar
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a launch script:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nano ~/.config/polybar/launch.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
   killall &lt;span class="nt"&gt;-q&lt;/span&gt; polybar
   polybar mybar &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make it executable:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.config/polybar/launch.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the script:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ~/.config/polybar/launch.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎨 &lt;strong&gt;Step 7: Personalize Polybar&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Edit the &lt;code&gt;~/.config/polybar/config&lt;/code&gt; file to customize your bar. For example, add a volume module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[module/volume]&lt;/span&gt;
&lt;span class="py"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;internal/volume&lt;/span&gt;
&lt;span class="py"&gt;format-volume&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;" %percentage%%"&lt;/span&gt;
&lt;span class="py"&gt;format-muted&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;" Muted"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 &lt;strong&gt;Step 8: Test Your Setup&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Restart i3 with:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+R
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verify:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;i3&lt;/strong&gt; loads with your wallpaper.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polybar&lt;/strong&gt; displays correctly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nm-applet&lt;/strong&gt; appears in the tray.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pavucontrol&lt;/strong&gt; manages sound.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎨 &lt;strong&gt;Final Touch: Make It Yours!&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Experiment with &lt;strong&gt;i3 keybindings&lt;/strong&gt; for productivity.
&lt;/li&gt;
&lt;li&gt;Customize &lt;strong&gt;Polybar themes&lt;/strong&gt; from &lt;a href="https://github.com/adi1090x/polybar-themes" rel="noopener noreferrer"&gt;Polybar Themes GitHub&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Add modules for CPU, RAM, weather, or anything you fancy!
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enjoy your fully customized Void Linux environment! 🌌&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Void Linux Base Installation: A Fun Adventure</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Mon, 23 Dec 2024 11:27:00 +0000</pubDate>
      <link>https://dev.to/memlenz/void-linux-base-installation-a-fun-adventure-4cfa</link>
      <guid>https://dev.to/memlenz/void-linux-base-installation-a-fun-adventure-4cfa</guid>
      <description>&lt;p&gt;Welcome to the void! 🖤 This tutorial will guide you step by step through installing Void Linux, the lightweight and versatile distro that puts you in control. Let’s turn this challenge into a rewarding adventure!  &lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;Why Void Linux?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XBPS&lt;/strong&gt;: A unique package manager that’s fast and efficient.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runit&lt;/strong&gt;: A lightweight init system for quicker boot times.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimalism&lt;/strong&gt;: No bloat—only what you want.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ &lt;strong&gt;What You’ll Need&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A 64-bit system.
&lt;/li&gt;
&lt;li&gt;A USB stick (4GB or more).
&lt;/li&gt;
&lt;li&gt;A good internet connection.
&lt;/li&gt;
&lt;li&gt;A cool head and a sense of adventure. 😎
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 &lt;strong&gt;Step 1: Download Void Linux ISO&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://voidlinux.org/download/" rel="noopener noreferrer"&gt;Void Linux Downloads&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Pick the &lt;strong&gt;Base Live ISO&lt;/strong&gt; for your system architecture (usually &lt;code&gt;x86_64&lt;/code&gt;).
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: If you’re unsure about your system, the &lt;code&gt;x86_64&lt;/code&gt; version is your best bet.  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💾 &lt;strong&gt;Step 2: Create a Bootable USB&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use a tool like &lt;strong&gt;Etcher&lt;/strong&gt;, &lt;strong&gt;Rufus&lt;/strong&gt;, or the command line:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo dd &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;void-live-x86_64-&lt;span class="k"&gt;*&lt;/span&gt;.iso &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdX &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4M &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;progress
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Replace &lt;code&gt;/dev/sdX&lt;/code&gt; with your USB device name.
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt;: Double-check the device name—&lt;code&gt;dd&lt;/code&gt; doesn’t forgive mistakes! 😱  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 &lt;strong&gt;Step 3: Boot into the Void&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Insert your USB and restart your computer.
&lt;/li&gt;
&lt;li&gt;Access your BIOS/UEFI settings and boot from the USB.
&lt;/li&gt;
&lt;li&gt;Choose the &lt;code&gt;Void Linux&lt;/code&gt; option from the menu.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🖥️ &lt;strong&gt;Step 4: Partition Your Drive&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;cfdisk&lt;/code&gt;&lt;/strong&gt; to partition your disk. Example:

&lt;ul&gt;
&lt;li&gt;1GB for &lt;code&gt;/boot&lt;/code&gt; (EFI system if needed).
&lt;/li&gt;
&lt;li&gt;Swap space (optional, 2GB+).
&lt;/li&gt;
&lt;li&gt;Remaining space for &lt;code&gt;/&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Format the partitions:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mkfs.ext4 /dev/sdX1  &lt;span class="c"&gt;# Replace with your partition&lt;/span&gt;
   mkfs.vfat &lt;span class="nt"&gt;-F&lt;/span&gt; 32 /dev/sdX2  &lt;span class="c"&gt;# For EFI systems&lt;/span&gt;
   mkswap /dev/sdX3  &lt;span class="c"&gt;# If you created a swap&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📦 &lt;strong&gt;Step 5: Install Void Linux&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Mount your partitions:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mount /dev/sdX1 /mnt
   &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /mnt/boot/efi
   mount /dev/sdX2 /mnt/boot/efi
   swapon /dev/sdX3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the installer:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   void-installer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Follow the prompts to configure:

&lt;ul&gt;
&lt;li&gt;Keyboard layout.
&lt;/li&gt;
&lt;li&gt;Network settings.
&lt;/li&gt;
&lt;li&gt;Hostname and user setup.
&lt;/li&gt;
&lt;li&gt;Filesystem configuration.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ⚙️ &lt;strong&gt;Step 6: Install Bootloader&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select GRUB during the installer setup.
&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   grub-install &lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x86_64-efi &lt;span class="nt"&gt;--efi-directory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/mnt/boot/efi &lt;span class="nt"&gt;--bootloader-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;void_grub
   grub-mkconfig &lt;span class="nt"&gt;-o&lt;/span&gt; /mnt/boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎉 &lt;strong&gt;Step 7: Reboot and Enjoy&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Exit the installer and unmount partitions:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   umount &lt;span class="nt"&gt;-R&lt;/span&gt; /mnt
   reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Remove the USB stick during reboot.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Welcome to the Void! 🌌  &lt;/p&gt;




&lt;h2&gt;
  
  
  🤓 &lt;strong&gt;Post-Installation Tips&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Update the system:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install essential tools:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; vim git base-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Explore and customize your environment (window manager, dotfiles, etc.).
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 &lt;strong&gt;Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.voidlinux.org/" rel="noopener noreferrer"&gt;Void Linux Handbook&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jpedmedia.com/tutorials/installations/void_install/index.html" rel="noopener noreferrer"&gt;Tutorial Reference&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Feel free to share your journey to the void or ask for help! 🎩&lt;/p&gt;

</description>
      <category>voidlinux</category>
      <category>linux</category>
    </item>
    <item>
      <title>🐍🎉 Fun and Comprehensive Guide to Installing and Setting Up Anaconda, AIMA Python, and Jupyter Notebook! 🎓📒</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Mon, 23 Dec 2024 03:23:51 +0000</pubDate>
      <link>https://dev.to/memlenz/fun-and-comprehensive-guide-to-installing-and-setting-up-anaconda-aima-python-and-jupyter-ppf</link>
      <guid>https://dev.to/memlenz/fun-and-comprehensive-guide-to-installing-and-setting-up-anaconda-aima-python-and-jupyter-ppf</guid>
      <description>&lt;p&gt;Welcome, Python adventurer! 🚀 Ready to supercharge your data science, AI, and machine learning journey? Let’s dive into setting up &lt;strong&gt;Anaconda&lt;/strong&gt;, installing &lt;strong&gt;AIMA Python&lt;/strong&gt;, and mastering &lt;strong&gt;Jupyter Notebook&lt;/strong&gt;. No boring steps here—just fun, functional, and fabulous learning! 🤓💡&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before we start, ensure you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A laptop or PC 🖥️ (Linux, Windows, or macOS—all are welcome!).&lt;/li&gt;
&lt;li&gt;A stable internet connection 🌐.&lt;/li&gt;
&lt;li&gt;Some coffee ☕ or snacks 🍪 because coding is better fueled.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 1: 🚀 Installing Anaconda
&lt;/h3&gt;

&lt;p&gt;Anaconda is your one-stop shop for Python, libraries, and environments. Here's how to install it:&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ &lt;strong&gt;Download Anaconda&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://www.anaconda.com/products/distribution" rel="noopener noreferrer"&gt;Anaconda's download page&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Choose your OS (Windows/Linux/macOS) and download the installer.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2️⃣ &lt;strong&gt;Install Anaconda&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows/macOS&lt;/strong&gt;: Double-click the installer and follow the wizard.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt;:
Open a terminal, navigate to the download folder, and run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  bash Anaconda3&lt;span class="k"&gt;*&lt;/span&gt;.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the prompts (keep pressing &lt;code&gt;Enter&lt;/code&gt;, say &lt;code&gt;yes&lt;/code&gt; when it asks!).  &lt;/p&gt;

&lt;h4&gt;
  
  
  3️⃣ &lt;strong&gt;Test Installation&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;After installation, restart your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 If you see something like &lt;code&gt;conda 23.x.x&lt;/code&gt;, you're golden!&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: 🐍 Setting Up a Python Environment
&lt;/h3&gt;

&lt;p&gt;Anaconda makes it easy to create isolated environments for projects.&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ &lt;strong&gt;Create a New Environment&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda create &lt;span class="nt"&gt;-n&lt;/span&gt; aima &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.9 &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-n aima&lt;/code&gt;: Creates an environment named &lt;code&gt;aima&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;python=3.9&lt;/code&gt;: Specifies Python 3.9.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2️⃣ &lt;strong&gt;Activate the Environment&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda activate aima
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 You’re now in your &lt;code&gt;aima&lt;/code&gt; environment. All installs here won’t affect your system Python.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: 📦 Installing AIMA Python
&lt;/h3&gt;

&lt;p&gt;AIMA Python is a set of Python implementations for the examples in the classic book &lt;em&gt;Artificial Intelligence: A Modern Approach&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ &lt;strong&gt;Clone the Repository&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/aimacode/aima-python.git
&lt;span class="nb"&gt;cd &lt;/span&gt;aima-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2️⃣ &lt;strong&gt;Install Requirements&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Still inside your &lt;code&gt;aima&lt;/code&gt; environment, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs all necessary libraries for AIMA Python. 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: 📒 Setting Up Jupyter Notebook
&lt;/h3&gt;

&lt;p&gt;Jupyter is like a magic spellbook for Python. Let’s configure it!&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ &lt;strong&gt;Install Jupyter Notebook&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda &lt;span class="nb"&gt;install &lt;/span&gt;jupyter &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2️⃣ &lt;strong&gt;Start Jupyter Notebook&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Inside the &lt;code&gt;aima-python&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jupyter notebook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 A browser window will open, showing your notebook interface!&lt;/p&gt;

&lt;h4&gt;
  
  
  3️⃣ &lt;strong&gt;Run an AIMA Notebook&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In the Jupyter interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;code&gt;notebooks&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;Open a notebook like &lt;code&gt;search.ipynb&lt;/code&gt; and hit &lt;strong&gt;Shift + Enter&lt;/strong&gt; to execute cells.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 5: 🎨 Customize and Have Fun!
&lt;/h3&gt;

&lt;p&gt;Make your environment yours with these tweaks:&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ &lt;strong&gt;Install Jupyter Themes&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Add some flair with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;jupyterthemes
jt &lt;span class="nt"&gt;-t&lt;/span&gt; chesterish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2️⃣ &lt;strong&gt;Experiment with AIMA Python&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Explore examples like pathfinding, search algorithms, and logic games. Modify code cells, rerun them, and see the magic unfold. 🧙‍♂️✨&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Troubleshooting Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anaconda Command Not Found&lt;/strong&gt;: Ensure Anaconda is added to your PATH during installation or run:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/anaconda3/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment Activation Issue&lt;/strong&gt;: Use the full path to activate:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;source&lt;/span&gt; ~/anaconda3/bin/activate aima
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Library Errors in Jupyter&lt;/strong&gt;: Double-check that Jupyter is installed in your current environment.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌟 What’s Next?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deep Dive into AI&lt;/strong&gt;: Explore the AIMA book alongside the notebooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try Projects&lt;/strong&gt;: Implement your own AI algorithms using AIMA as a guide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share the Love&lt;/strong&gt;: Show off your Jupyter-powered AI creations to friends or on GitHub!&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🎉 You Did It!
&lt;/h3&gt;

&lt;p&gt;You’re all set to conquer AI and Python programming with Anaconda, AIMA Python, and Jupyter Notebook. Now go forth and code like a wizard! 🧙‍♀️🐍✨  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Ask away or dive deeper into the &lt;a href="https://github.com/aimacode/aima-python" rel="noopener noreferrer"&gt;AIMA repo&lt;/a&gt; or &lt;a href="https://jupyter.org/documentation" rel="noopener noreferrer"&gt;Jupyter docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>The Dotfiles Quest: Becoming a Configuration Wizard 🧙‍♂️</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Sun, 22 Dec 2024 10:01:33 +0000</pubDate>
      <link>https://dev.to/memlenz/the-dotfiles-quest-becoming-a-configuration-wizard-4ogo</link>
      <guid>https://dev.to/memlenz/the-dotfiles-quest-becoming-a-configuration-wizard-4ogo</guid>
      <description>&lt;p&gt;Welcome, adventurer! Today, we embark on an epic quest to tame your Linux system, turning your configurations into sharable, portable, and easily manageable treasures known as dotfiles. Let’s sprinkle some magic and turn your mundane setup into a masterpiece.&lt;/p&gt;




&lt;p&gt;Level 1: Understand the Magic of Dotfiles&lt;/p&gt;

&lt;p&gt;Dotfiles are hidden configuration files (starting with .) that Linux and many programs use to customize their behavior. They live in your home directory (e.g., ~/.bashrc, ~/.vimrc).&lt;/p&gt;

&lt;p&gt;Why should you care about dotfiles?&lt;/p&gt;

&lt;p&gt;Portability: Move your setup to any system.&lt;/p&gt;

&lt;p&gt;Backup: Never lose your customizations.&lt;/p&gt;

&lt;p&gt;Version Control: Undo or tweak changes like a wizard.&lt;/p&gt;




&lt;p&gt;Level 2: Prepare for the Quest&lt;/p&gt;

&lt;p&gt;Equip yourself with these tools before venturing out:&lt;/p&gt;

&lt;p&gt;🛠 Tools You'll Need&lt;/p&gt;

&lt;p&gt;Git: For tracking your dotfiles.&lt;/p&gt;

&lt;p&gt;sudo xbps-install -S git  # Void Linux&lt;/p&gt;

&lt;p&gt;Stow (optional but recommended): For managing symlinks.&lt;/p&gt;

&lt;p&gt;sudo xbps-install -S stow&lt;/p&gt;




&lt;p&gt;Level 3: Summon the Dotfiles Directory&lt;/p&gt;

&lt;p&gt;This is your castle where all configurations reside.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create the Directory:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;mkdir ~/dotfiles&lt;br&gt;
cd ~/dotfiles&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move Your Files:
Relocate your precious configuration files into this directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;mkdir -p ~/dotfiles/bash ~/dotfiles/vim&lt;br&gt;
mv ~/.bashrc ~/dotfiles/bash/.bashrc&lt;br&gt;
mv ~/.vimrc ~/dotfiles/vim/.vimrc&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Organize by Programs:
Keep a clean kingdom:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;~/dotfiles/&lt;br&gt;
  bash/&lt;br&gt;
    .bashrc&lt;br&gt;
  vim/&lt;br&gt;
    .vimrc&lt;/p&gt;




&lt;p&gt;Level 4: Enchant Your System with Symlinks&lt;/p&gt;

&lt;p&gt;Here’s where the real magic begins. We’ll use symlinks to keep your system pointing to the dotfiles while they remain safe in your castle.&lt;/p&gt;

&lt;p&gt;🪄 Manual Symlinking&lt;/p&gt;

&lt;p&gt;ln -s ~/dotfiles/bash/.bashrc ~/.bashrc&lt;br&gt;
ln -s ~/dotfiles/vim/.vimrc ~/.vimrc&lt;/p&gt;

&lt;p&gt;🪄 Using GNU Stow (The Auto-Wizard Way)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your dotfiles directory:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd ~/dotfiles&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stow your configurations:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;stow bash&lt;br&gt;
stow vim&lt;/p&gt;

&lt;p&gt;Stow will automatically create symlinks for you.&lt;/p&gt;




&lt;p&gt;Level 5: Cast the Git Spell&lt;/p&gt;

&lt;p&gt;We’re ready to track changes, share our setup, and show off to our Linux buddies.&lt;/p&gt;

&lt;p&gt;🧙‍♀️ Initialize Git:&lt;/p&gt;

&lt;p&gt;cd ~/dotfiles&lt;br&gt;
git init&lt;br&gt;
git add .&lt;br&gt;
git commit -m "First commit of my magical dotfiles"&lt;/p&gt;

&lt;p&gt;🧙‍♀️ Share the Magic:&lt;/p&gt;

&lt;p&gt;Push your dotfiles to GitHub (or any Git host):&lt;/p&gt;

&lt;p&gt;git remote add origin &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt;/dotfiles.git&lt;br&gt;
git branch -M main&lt;br&gt;
git push -u origin main&lt;/p&gt;




&lt;p&gt;Level 6: Portability Potion&lt;/p&gt;

&lt;p&gt;On a new system? Clone your repository and recreate your kingdom:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone Your Dotfiles:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt;/dotfiles.git ~/dotfiles&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Recreate Symlinks: If using stow:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cd ~/dotfiles&lt;br&gt;
stow bash&lt;br&gt;
stow vim&lt;/p&gt;




&lt;p&gt;Level 7: Add Some Magic Features&lt;/p&gt;

&lt;p&gt;Dotfiles can do more than store configs. They can automate and personalize your system!&lt;/p&gt;

&lt;p&gt;🪄 Bash Aliases&lt;/p&gt;

&lt;p&gt;In ~/dotfiles/bash/.bashrc, add:&lt;/p&gt;

&lt;p&gt;alias ll='ls -la --color=auto'&lt;br&gt;
alias gs='git status'&lt;br&gt;
alias please='sudo'&lt;/p&gt;

&lt;p&gt;🪄 Vim Themes&lt;/p&gt;

&lt;p&gt;Use plugins or set colors directly in ~/dotfiles/vim/.vimrc:&lt;/p&gt;

&lt;p&gt;syntax on&lt;br&gt;
colorscheme desert&lt;/p&gt;

&lt;p&gt;🪄 Custom Scripts&lt;/p&gt;

&lt;p&gt;Add scripts like ~/dotfiles/scripts/fix_wifi.sh and make them executable:&lt;/p&gt;

&lt;p&gt;chmod +x ~/dotfiles/scripts/fix_wifi.sh&lt;/p&gt;




&lt;p&gt;Level 8: Keep Upgrading Your Arsenal&lt;/p&gt;

&lt;p&gt;Dotfiles evolve as you do. Add more configurations, track new programs, and refine your setup. Here are some ideas:&lt;/p&gt;

&lt;p&gt;Tweak your i3wm, polybar, or rofi configs.&lt;/p&gt;

&lt;p&gt;Manage aliases, functions, and environment variables.&lt;/p&gt;

&lt;p&gt;Keep adding comments for clarity.&lt;/p&gt;




&lt;p&gt;Level 9: Master the Art of Sharing&lt;/p&gt;

&lt;p&gt;Show your dotfiles to the world! But remember to:&lt;/p&gt;

&lt;p&gt;Avoid Sensitive Info: Use .gitignore for secrets.&lt;/p&gt;

&lt;p&gt;Write Documentation: Create a README.md with setup instructions.&lt;/p&gt;

&lt;p&gt;Use Branches: Experiment with new configurations safely.&lt;/p&gt;




&lt;p&gt;Level 10: Victory!&lt;/p&gt;

&lt;p&gt;Congratulations, Configuration Wizard! 🧙‍♂️ You now have:&lt;/p&gt;

&lt;p&gt;A clean, sharable dotfiles setup.&lt;/p&gt;

&lt;p&gt;Version-controlled customizations.&lt;/p&gt;

&lt;p&gt;Symlinks for effortless management.&lt;/p&gt;

&lt;p&gt;Your Linux journey has just begun. Keep tweaking and remember: "With great dotfiles comes great responsibility!"&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>dotfilles</category>
      <category>terminal</category>
    </item>
    <item>
      <title>🎉 The Fun Beginner’s Guide to Bluetooth on Void Linux 🎉</title>
      <dc:creator>ADEBI Châ-Fine Ayédoun </dc:creator>
      <pubDate>Sat, 21 Dec 2024 12:25:27 +0000</pubDate>
      <link>https://dev.to/memlenz/the-fun-beginners-guide-to-bluetooth-on-void-linux-38p0</link>
      <guid>https://dev.to/memlenz/the-fun-beginners-guide-to-bluetooth-on-void-linux-38p0</guid>
      <description>&lt;p&gt;So you’ve chosen &lt;strong&gt;Void Linux&lt;/strong&gt;, the Linux of legends. Now you want Bluetooth? Let’s get this wireless party started! Grab your favorite snack, and let’s dive into the wonderful (sometimes wacky) world of Bluetooth on Void Linux. 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Getting Your Bluetooth Superpowers (Install the Basics)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;First, we need to summon the magical tools to make Bluetooth work. Void Linux doesn’t come with Bluetooth pre-enabled because, well, it likes to keep you on your toes.&lt;/p&gt;

&lt;h4&gt;
  
  
  🛠️ &lt;strong&gt;Install Bluez (The Brain of Bluetooth)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Bluez is like the wizard behind the curtain. Without it, nothing happens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; bluez
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🎩 &lt;strong&gt;Install Blueman (Your Bluetooth Sidekick)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Who doesn’t love a good GUI? Blueman makes Bluetooth as easy as pie.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; blueman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  💻 &lt;strong&gt;For Terminal Ninjas (Optional)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Prefer typing spells instead of clicking buttons? Install &lt;code&gt;bluez-utils&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;sudo &lt;/span&gt;xbps-install &lt;span class="nt"&gt;-S&lt;/span&gt; bluez-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Wake Up the Bluetooth Beast&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Void Linux doesn’t like doing things automatically (where’s the fun in that?). So, we need to start the Bluetooth service.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔑 &lt;strong&gt;Step 2.1: Tell Bluetooth to Boot with Your System&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Link the service to your system’s startup magic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/sv/bluetoothd /var/service/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🛡️ &lt;strong&gt;Step 2.2: Start Bluetooth Right Now&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Make Bluetooth stretch and yawn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sv start bluetoothd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  📋 &lt;strong&gt;Step 2.3: Double-Check Its Mood&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Is Bluetooth awake or snoozing? Let’s see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sv status bluetoothd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it says something like &lt;code&gt;runsv running&lt;/code&gt;, congratulations! Bluetooth is ready to mingle.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Blueman Time!&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You’ve done the hard work. Now let’s let Blueman do the heavy lifting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch Blueman Manager:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for it in your applications, or just type:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; blueman-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Party Time!&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt; to find devices.&lt;/li&gt;
&lt;li&gt;Click your device and hit &lt;strong&gt;Pair&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Done! (Maybe grab a celebratory snack?)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Terminal Magic for Cool Kids&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you’re feeling brave, use &lt;code&gt;bluetoothctl&lt;/code&gt;. It’s like texting your Bluetooth devices—just cooler.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open the Chat Line:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   bluetoothctl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Turn On Bluetooth (Duh):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   power on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Make Yourself Discoverable (Show Off):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   discoverable on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find Devices (Bluetooth Tinder):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   scan on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pair with a Device (It’s a Match!):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pair XX:XX:XX:XX:XX:XX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connect (Make It Official):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   connect XX:XX:XX:XX:XX:XX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trust the Device (For BFFs Only):&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   trust XX:XX:XX:XX:XX:XX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Troubleshooting Without Tears&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Something went wrong? Don’t panic. You’re still the boss.&lt;/p&gt;

&lt;h4&gt;
  
  
  💥 &lt;strong&gt;Bluetooth Is Blocked?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Check if it’s being stubborn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rfkill list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If blocked, give it a little nudge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rfkill unblock bluetooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  💻 &lt;strong&gt;Restart the Bluetooth Wizard&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;When in doubt, restart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sv restart bluetoothd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  📜 &lt;strong&gt;Look for Clues&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Check logs to see what’s up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/messages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Step 6: Add Blueman to i3wm (For the Aesthetic)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Want quick access to Blueman in your i3 status bar? Let’s make it happen!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your i3 config file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nano ~/.config/i3/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add this line to launch Blueman with a shortcut:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   bindsym $mod+b exec blueman-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Reload i3 to make the magic happen:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   i3-msg reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now press &lt;code&gt;$mod+b&lt;/code&gt;, and BAM—Bluetooth at your fingertips!&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 7: Be a Bluetooth Pro&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By now, you’ve earned your Void Linux Bluetooth badge. Celebrate by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streaming your favorite songs on wireless headphones.&lt;/li&gt;
&lt;li&gt;Transferring files like a pro.&lt;/li&gt;
&lt;li&gt;Flexing your newfound skills to friends who still think Bluetooth is “complicated.”&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;🎉 YOU DID IT!&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Go ahead, connect all the things, and bask in the wireless glory. Let me know if your Bluetooth journey needs more spice. ✨&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>voidlinux</category>
      <category>bluetooth</category>
    </item>
  </channel>
</rss>
