<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Fullstack | Nicoandres' blog]]></title><description><![CDATA[Fullstack software development topics to power up your career, mostly Javascript, but, why not Phyton, Go, and Rust as well.]]></description><link>https://blog.nicoandres.dev/</link><image><url>https://blog.nicoandres.dev/favicon.png</url><title>Fullstack | Nicoandres&apos; blog</title><link>https://blog.nicoandres.dev/</link></image><generator>Ghost 5.79</generator><lastBuildDate>Thu, 16 Apr 2026 14:32:09 GMT</lastBuildDate><atom:link href="https://blog.nicoandres.dev/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Use FIDO2 Yubikey as sudo password]]></title><description><![CDATA[Use FIDO2 Yubikey instead of sudo password in Arch linux]]></description><link>https://blog.nicoandres.dev/use-fido2-yubikey-as-sudo-password/</link><guid isPermaLink="false">693699508df4760001bc2ecf</guid><category><![CDATA[Arch]]></category><category><![CDATA[Linux edge]]></category><category><![CDATA[Terminal]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 08 Dec 2025 09:39:33 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1634979149798-e9a118734e93?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxrZXlzfGVufDB8fHx8MTc2NTE4NTg3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1634979149798-e9a118734e93?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxrZXlzfGVufDB8fHx8MTc2NTE4NTg3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Use FIDO2 Yubikey as sudo password"><p>sudo password is ok, but maybe not super safe and not nice having to type it on each pacman, systemctl, etc, why not use a Yubikey FIDO2 as your sudo password, it is nice only have to touch your key each time you need install/update your system &#x1F996;</p><h2 id="step-1">Step 1:</h2><p>Install pam-u2f:</p><pre><code class="language-sh">sudo pacman -S pam-u2f</code></pre><h2 id="step-2">Step 2:</h2><p>create config folder to store your keys setup:</p><pre><code class="language-sh">mkdir -p ~/.config/Yubico
touch ~/.config/Yubico/u2f_keys</code></pre><h2 id="step-3">Step 3:</h2><p>Enroll your yubikey, run below command, connect your yubikey and touch it:</p><pre><code class="language-sh">pamu2fcfg &gt; ~/.config/Yubico/u2f_keys</code></pre><h2 id="step-4">Step 4:</h2><p>Edit your auth configuration for sudo commands:</p><pre><code class="language-sh">sudo nvim /etc/pam.d/sudo</code></pre><p>Add/Update the below line</p><pre><code class="language-sh">auth required pam_u2f.so</code></pre><p>&#x1F389; That&apos;s it now you only need to connect/touch your key instead of type your sudo password</p>]]></content:encoded></item><item><title><![CDATA[Correct scaling factor Retina displays - Arch Hyprland]]></title><description><![CDATA[How to set up correct scaling in retina displays with hyprland and arch linux.]]></description><link>https://blog.nicoandres.dev/correct-scaling-factor-retina-displays-arch-hyprland/</link><guid isPermaLink="false">691350798df4760001bc2eb0</guid><category><![CDATA[Arch]]></category><category><![CDATA[Hyprland]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Tue, 11 Nov 2025 15:11:42 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1647524592467-33b6e5e4d884?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fHJldGluYXxlbnwwfHx8fDE3NjI4NzM0NjB8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1647524592467-33b6e5e4d884?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fHJldGluYXxlbnwwfHx8fDE3NjI4NzM0NjB8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Correct scaling factor Retina displays - Arch Hyprland"><p>This really short post is to show you how to set up correctly the scaling factor for retina displays (like mine Macbook pro late 2025) with Arch linux and hyprland.</p><p></p><h2 id="update-hyprlandconf">Update hyprland.conf</h2><p>Scales Qt apps by 130% with below config in your hyprland.conf</p><p></p><figure class="kg-card kg-code-card"><pre><code class="language-~/.config/hypr/hyprland.conf">env = QT_SCALE_FACTOR,1.3</code></pre><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">environment variable QT_SCALE_FACTOR set to 1.3 in hyprland.conf</span></p></figcaption></figure><p>above&apos;s config works perfectly for qt apps (firefox, thunderbird)</p><h2 id="electron-apps">Electron Apps</h2><p>as Slack installed via flatpak you could update the zoom with CTRL + (plus) + or Decrease the zoom with CTRL + (less) - keys and the settings will remain trough sessions.</p><p></p><h2 id="note">Note</h2><p>I didn&apos;t need of this but worth to know there are some environment variables for both GTK and QT apps:<br><br></p><h2 id="%F0%9F%97%92%EF%B8%8F-updated-summary-of-environment-variables">&#x1F5D2;&#xFE0F; Updated summary of environment variables</h2>
<table>
<thead>
<tr>
<th>Component</th>
<th>Config / Command</th>
<th>Purpose</th>
<th>Current/Expected Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Hyprland</strong></td>
<td><code>monitor=desc:Apple Computer Inc Color LCD,2560x1600@60,auto,1</code></td>
<td>Base resolution (no compositor scaling)</td>
<td>1&#xD7;</td>
</tr>
<tr>
<td><strong>Qt Apps</strong></td>
<td><code>env = QT_SCALE_FACTOR,1.3</code></td>
<td>Scale KDE/Qt apps</td>
<td>&#x2705;</td>
</tr>
<tr>
<td><strong>GTK Apps</strong></td>
<td><code>env = GDK_SCALE,1</code> + <code>env = GDK_DPI_SCALE,1.3</code></td>
<td>Scale GTK/Firefox/Thunderbird</td>
<td>&#x2705;</td>
</tr>
<tr>
<td><strong>Electron Apps</strong></td>
<td>Inherit GTK scaling under Wayland</td>
<td>Slack, VS Code, etc.</td>
<td>&#x2705;</td>
</tr>
<tr>
<td><strong>gsettings value</strong></td>
<td><code>org.gnome.desktop.interface text-scaling-factor</code></td>
<td>Only affects GNOME session</td>
<td>1.0</td>
</tr>
</tbody>
</table>
]]></content:encoded></item><item><title><![CDATA[Change your cursor in Arch - Hyprland]]></title><description><![CDATA[Enable Future-Cyan cursor in your Arch Hyprland system for a eye candy cursor]]></description><link>https://blog.nicoandres.dev/change-your-cursor-in-arch-hyprland/</link><guid isPermaLink="false">69132c848df4760001bc2e74</guid><category><![CDATA[Arch]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Linux edge]]></category><category><![CDATA[Hyprland]]></category><category><![CDATA[Hyprcursor]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Tue, 11 Nov 2025 12:46:49 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1542906453-02e875f65428?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGN1cnNvcnxlbnwwfHx8fDE3NjI4NjQyNjV8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1542906453-02e875f65428?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGN1cnNvcnxlbnwwfHx8fDE3NjI4NjQyNjV8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Change your cursor in Arch - Hyprland"><p>When you install Hyprland - Arch you get the default cursor, and it is ok but... boring, so to spice things up why not change it to have some sugar eye efect?</p><h2 id="future-cyan">Future-Cyan</h2><p>Future-Cyan is a nice cursor you could found it <a href="https://sakshatshinde.github.io/hyprcursor-themes/?ref=blog.nicoandres.dev" rel="noreferrer">here</a> (plus some others)</p><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.nicoandres.dev/content/images/2025/11/Future-Cyan.png" class="kg-image" alt="Change your cursor in Arch - Hyprland" loading="lazy" width="1200" height="750" srcset="https://blog.nicoandres.dev/content/images/size/w600/2025/11/Future-Cyan.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2025/11/Future-Cyan.png 1000w, https://blog.nicoandres.dev/content/images/2025/11/Future-Cyan.png 1200w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Future-Cyan samples cursors</span></figcaption></figure><p></p><h2 id="clone-the-repository">Clone the repository</h2><figure class="kg-card kg-code-card"><pre><code class="language-sh">git clone https://gitlab.com/Pummelfisch/future-cyan-hyprcursor.git ~/.config/future-cyan</code></pre><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">git clone of Future-Cyan repository</span></p></figcaption></figure><h2 id="copy-the-theme">Copy the theme</h2><figure class="kg-card kg-code-card"><pre><code class="language-sh">cp ~/.config/future-cyan/Future-Cyan-Hyprcursor_Theme ~/.local/share/icons/Future-Cyan</code></pre><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">copy command to move the theme folder into .local/share/icons</span></p></figcaption></figure><h2 id="edit-your-hyprlandconf">Edit your hyprland.conf</h2><p></p><p>ensure update/add:</p><pre><code class="language-hyprland.conf">env = XCURSOR_THEME,Future-Cyan
env = XCURSOR_SIZE,64
env = HYPRCURSOR_THEME,Future-Cyan
env = HYPRCURSOR_SIZE,64</code></pre><p></p><h2 id="reload-the-config">Reload the config</h2><p></p><figure class="kg-card kg-code-card"><pre><code class="language-sh">hyprctl setcursor Future-Cyan 64</code></pre><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">hyprctl to set the cursor at 64 pixels</span></p></figcaption></figure><p>Above configuration examples uses a size of 64 (best for my retina display) is likely you wanna use 24 or 32.</p><p></p><p>Enjoy!! &#x1F389;</p>]]></content:encoded></item><item><title><![CDATA[Improve your terminal look and feel with oh my posh]]></title><description><![CDATA[Quick post to show how to set up oh my posh prompt in fish shell]]></description><link>https://blog.nicoandres.dev/improve-your-terminal-look-and-feel-with-oh-my-posh/</link><guid isPermaLink="false">66b9f8e2c07bc80001f3b9f6</guid><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 12 Aug 2024 12:18:41 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1650064174470-7fe56cc5fdd2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBvc2h8ZW58MHx8fHwxNzIzNDYzOTAwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1650064174470-7fe56cc5fdd2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBvc2h8ZW58MHx8fHwxNzIzNDYzOTAwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Improve your terminal look and feel with oh my posh"><p>Oh my posh is &quot;A prompt theme engine for any shell.&quot; you could install it and set it up in you fish shell &#x1F41F; here I will show you how.</p><h2 id="install">Install</h2><p>By following the documentation you could install oh-my-posh via <code>homebrew</code> on manual installation, as I don&apos;t use <code>homebrew</code> I will do the manual installation:</p><pre><code class="language-sh">curl -s https://ohmyposh.dev/install.sh | bash -s</code></pre><p>once done you should add a new entry to your <code>path</code> in fish it is easy to do with <code>fish_add_path</code></p><pre><code class="language-fish">fish_add_path /home/&lt;user&gt;/.local/bin/</code></pre><p>don&apos;t forget to change &lt;user&gt; section.</p><h2 id="set-up">Set up</h2><p>Once you install it you should set up you <code>config.fish</code> to use oh my posh:</p><pre><code class="language-config.fish">oh-my-posh init fish | source</code></pre><h2 id="using-a-theme">Using a theme</h2><p>There is a lot of themes you could use a theme, check the complete list <a href="https://ohmyposh.dev/docs/themes?ref=blog.nicoandres.dev">here</a>, to set a theme you could do it via <code>config.fish</code></p><pre><code class="language-config.fish">oh-my-posh init fish --config ~/.cache/oh-my-posh/themes/atomic.omp.json | source</code></pre><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.nicoandres.dev/content/images/2024/08/atomic.png" class="kg-image" alt="Improve your terminal look and feel with oh my posh" loading="lazy" width="2000" height="283" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/08/atomic.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2024/08/atomic.png 1000w, https://blog.nicoandres.dev/content/images/size/w1600/2024/08/atomic.png 1600w, https://blog.nicoandres.dev/content/images/2024/08/atomic.png 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">oh-my-posh atomic prompt</span></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Non Latin characters on Arch]]></title><description><![CDATA[Short post to talk about how to install non Latin font in Arch Linux]]></description><link>https://blog.nicoandres.dev/non-latin-characters-on-arch/</link><guid isPermaLink="false">66a7680fc07bc80001f3b9ce</guid><category><![CDATA[Linux]]></category><category><![CDATA[Linux edge]]></category><category><![CDATA[Terminal]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 29 Jul 2024 10:04:17 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1528360983277-13d401cdc186?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGphcGFuZXNlfGVufDB8fHx8MTcyMjI0NzE2NHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1528360983277-13d401cdc186?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGphcGFuZXNlfGVufDB8fHx8MTcyMjI0NzE2NHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Non Latin characters on Arch"><p>Short post to talk about how to install non Latin font in Arch Linux with:</p><p><code>sudo pacman -S noto-fonts-cjk</code> </p><p>this package provides all fonts needed to show non Latin characters like Chinese or Japanese.</p><h1 id="emojis">Emojis</h1><p>Also to show emojis you will need a different font, some options could be:</p><ul><li>noto-fonts-emoji</li><li>ttf-joypixels</li></ul><p>In my case I like <code>joypixels</code> emojis, so I installed them with <code>sudo pacman -S ttf-joypixels</code></p>]]></content:encoded></item><item><title><![CDATA[Nerd fonts in Arch]]></title><description><![CDATA[Nerd fonts are an amazing way to customize your terminal by using almost all glyphs needed to end up with an stunning environment, here I will show you how to install it in your Arch system.]]></description><link>https://blog.nicoandres.dev/nerd-fonts-in-arch/</link><guid isPermaLink="false">66a709f2c07bc80001f3b991</guid><category><![CDATA[Linux]]></category><category><![CDATA[Linux edge]]></category><category><![CDATA[Terminal]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 29 Jul 2024 09:42:33 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518082593638-b6e73b35d39a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGZvbnR8ZW58MHx8fHwxNzIyMjIzMDgxfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1518082593638-b6e73b35d39a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGZvbnR8ZW58MHx8fHwxNzIyMjIzMDgxfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Nerd fonts in Arch"><p>Nerd fonts are an amazing way to customize your terminal by using almost all glyphs needed to end up with an stunning environment, but adding an nerd fond was not easy task untill now, as most of all nerd fonts are already availables in Arch <code>extra</code> repository, you could find a full list of nerd fonts available in <a href="https://archlinux.org/groups/any/nerd-fonts/?ref=blog.nicoandres.dev" rel="noreferrer">`NerdFonts Arch Extra repository</a>,</p><h2 id="installing-a-new-font">Installing a new font</h2><p>It could be accomplish by pacman, for instance <code>sudo pacman -S ttf-victor-mono-nerd</code></p><h2 id="usage">Usage</h2><p>In my case I use <code>kitty</code> terminal, so I should update my <code>kitty.conf</code> file in <code>~/.config/kitty</code> to set the font-family to:</p><p><code>font_family ttf-victor-mono-nerd</code></p><p>That&apos;s all, never has been more easy to enjoy nerd fonts in Arch &#x1F60E;  </p>]]></content:encoded></item><item><title><![CDATA[Sync Joplin CLI using Dropbox]]></title><description><![CDATA[Sync Joplin CLI using Dropbox]]></description><link>https://blog.nicoandres.dev/sync-joplin-cli-with-dropbox/</link><guid isPermaLink="false">66a66ea4c07bc80001f3b958</guid><category><![CDATA[Linux edge]]></category><category><![CDATA[Terminal]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Sun, 28 Jul 2024 16:21:46 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1721297014035-5fd86e65270f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDR8fHx8fHwyfHwxNzIyMTgyNTY3fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1721297014035-5fd86e65270f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDR8fHx8fHwyfHwxNzIyMTgyNTY3fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Sync Joplin CLI using Dropbox"><p>In a previous blog entry I shown how to set up Joplin cli in Arch Linux:</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://blog.nicoandres.dev/install-joplin-in-arch/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Install Joplin CLI in Arch</div><div class="kg-bookmark-description">Joplin is a free, open source note taking and to-do application, which can handle a large number of notes organized into notebooks, I installed in my arch via npm, with nvm setup first, read the entire post for more details :)</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.nicoandres.dev/content/images/size/w256h256/2024/03/Riise-1-2.png" alt="Sync Joplin CLI using Dropbox"><span class="kg-bookmark-author">Fullstack | Nicoandres&apos; blog</span><span class="kg-bookmark-publisher">Nicoandres Rodriguez</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1707305313174-6bd1374ce76a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDN8fHx8fHwyfHwxNzA5NDUzMDQ5fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Sync Joplin CLI using Dropbox"></div></a><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Install Joplin CLI in Arch</span></p></figcaption></figure><p>Now I will briefly show you how to sync with Dropbox:</p><h2 id="step-1">Step 1</h2><p>establish the sync method with <code>:config sync.target 7</code> , you could see which other options of sync there are with <code>config --help</code></p><h2 id="step-2">Step 2</h2><p>You will asked to open the URL and authorize the Dropbox app in you browser,</p><h2 id="step-3">Step 3</h2><p>copy and paste the Dropbox token into Joplin.</p><p>That&apos;s all now you will see how Joplin starts the process of sync.</p>]]></content:encoded></item><item><title><![CDATA[🥙 Installing Flatpak in Arch Linux]]></title><description><![CDATA[Flatpak great to instll apps in your system with out affect the core OS files it makes perfect to install any app you want with not do a mess in your OS, it could be simple but anyway I will show you how to getting started with flacpak.]]></description><link>https://blog.nicoandres.dev/installing-flatpak-in-arch-linux/</link><guid isPermaLink="false">6619436bc07bc80001f3b8d9</guid><category><![CDATA[Linux]]></category><category><![CDATA[Terminal]]></category><category><![CDATA[Linux edge]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Sat, 13 Apr 2024 10:28:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1493723843671-1d655e66ac1c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGZsYXQlMjBwYWt8ZW58MHx8fHwxNzEyOTMxNjcyfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1493723843671-1d655e66ac1c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fGZsYXQlMjBwYWt8ZW58MHx8fHwxNzEyOTMxNjcyfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x1F959; Installing Flatpak in Arch Linux"><p>TL;DR</p><p>Flatpak great to instll apps in your system with out affect the core OS files it makes perfect to install any app you want with not do a mess in your OS, it could be simple but anyway I will show you how to getting started with flacpak.</p><h2 id="%F0%9F%93%A6-install-required-packages">&#x1F4E6; Install required packages </h2><p>Install needed package and some dependencies (required at least for me to do SSO in apps like zoom, slack, etc)</p><pre><code class="language-sh">sudo pacman -S flatpak xdg-desktop-portal-wlr xdg-desktop-portal-gtk</code></pre><p>After install do a reboot to have all in order prior to install any app.</p><h2 id="%F0%9F%94%A2-install-your-first-app">&#x1F522; Install your first App</h2><p>I needed to install <code>zoom</code> in my work machine, first you could try search:</p><pre><code class="language-sh">flatpak search zoom</code></pre><p>It will show you the available apps in flathub repo.</p><h3 id="%F0%9F%AA%A9install-command">&#x1FAA9;Install command</h3><p>To install an app you could use <code>install</code> command, below example you could install <code>zoom</code></p><pre><code class="language-sh">flatpak install us.zoom.Zoom</code></pre><h2 id="%F0%9F%AA%80-run-command">&#x1FA80; Run command</h2><p>To run an app use <code>run</code> command as below example:</p><pre><code class="language-sh">flatpak run us.zoom.Zoom</code></pre><h2 id="%F0%9F%90%BC-conclusion">&#x1F43C; Conclusion</h2><p>Flatpak is portable and distro agnostic way to install any app, great to use as option if you don&apos;t wanna mees up your system by installing apps.</p>]]></content:encoded></item><item><title><![CDATA[ChatGPT to help you to solve your console issues 🧑‍⚕️]]></title><description><![CDATA[I will show you a use case for your ChatGPT terminal instance, how to use it for powered your workflow and make you even more productive 🚀]]></description><link>https://blog.nicoandres.dev/chatgpt-to-help-you-to-solve-your-issues/</link><guid isPermaLink="false">66125312c07bc80001f3b83d</guid><category><![CDATA[ChatGPT]]></category><category><![CDATA[Terminal]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Podman]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Sun, 07 Apr 2024 11:45:59 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1712415406482-e75e0afa2b02?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDN8fHx8fHwyfHwxNzEyNDc2OTE0fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1712415406482-e75e0afa2b02?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDN8fHx8fHwyfHwxNzEyNDc2OTE0fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;"><p>TL;DR</p><p>ChatGPT is the boom nowadays, it have a large compressive knowledge base of information accessible to you, how do you could use it to improve and power up your daily workflow? here I will show you how it make it for me &#x1F60E;</p><h2 id="identify-the-liar-%F0%9F%91%AE">Identify the liar &#x1F46E;</h2><p>First of all always treat this tool as the impostor.</p><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/04/impostor.webp" class="kg-image" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;" loading="lazy" width="600" height="600" srcset="https://blog.nicoandres.dev/content/images/2024/04/impostor.webp 600w"></figure><p>ChatGPT is not the source of truth, it is most like an impostor, always making you think it is genuine, but most of the time it will bring you false answers, so you will need to have knowledge to identify the correct answers from the false ones.</p><h2 id="install-chatgpt-in-your-terminal">Install ChatGPT in your terminal</h2><p>In a previous post I talked about install ChatGPT in your terminal: </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.nicoandres.dev/powering-your-terminal-with-ai/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Powering your terminal with AI</div><div class="kg-bookmark-description">Do you wanna try your terminal powered by AI, here I will show you how to it is easy and useful!</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.nicoandres.dev/content/images/size/w256h256/2024/03/Riise-1-2.png" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;"><span class="kg-bookmark-author">Fullstack | Nicoandres&apos; blog</span><span class="kg-bookmark-publisher">Nicoandres Rodriguez</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1516192518150-0d8fee5425e3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHJvYm90fGVufDB8fHx8MTcwOTM3MjIyOXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;"></div></a></figure><h2 id="raise-your-questions">Raise your questions</h2><p>So now you are ready to raise your questions, let&apos;s see a comparison between ChatGPT Vs Search Engine (DuckDuckGo, Google, etc)</p><p>I needed to change <code>podman-compose</code> instead of <code>docker-compose</code> when I execute commands via <code>podman compose</code> (by default it uses <code>docker-compose</code>) so I did a try:</p><h3 id="duckduckgo-%F0%9F%A6%86">DuckDuckGo &#x1F986;</h3><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/04/duck-duck-go.png" class="kg-image" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;" loading="lazy" width="1268" height="878" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/04/duck-duck-go.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2024/04/duck-duck-go.png 1000w, https://blog.nicoandres.dev/content/images/2024/04/duck-duck-go.png 1268w" sizes="(min-width: 720px) 720px"></figure><p>Above you can see on the first 3 search results there is not a clear answer to the question, so you will need to go through official docs, or Q&amp;A web sites like Stackoverflow, etc, so, good luck my friend.</p><h3 id="chatgpt-%F0%9F%A4%96">ChatGPT &#x1F916;</h3><p></p><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/04/chat-gpt.png" class="kg-image" alt="ChatGPT to help you to solve your console issues &#x1F9D1;&#x200D;&#x2695;&#xFE0F;" loading="lazy" width="1289" height="844" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/04/chat-gpt.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2024/04/chat-gpt.png 1000w, https://blog.nicoandres.dev/content/images/2024/04/chat-gpt.png 1289w" sizes="(min-width: 720px) 720px"></figure><p>Above image shows you the same question but with a more precise answer, after follow it, it works well, but with some highlights:</p><ol><li>The name of the field is <code>compose_providers</code></li><li>It should be put as <code>compose_providers=[&quot;podman-compose&quot;]</code></li></ol><p>That&apos;s it, after restart the <code>podman</code> service the change works as expected &#x1F389;</p><h3 id="conclusion-%F0%9F%A5%89">Conclusion &#x1F949;</h3><p>ChatGPT definitively is a tool to have in your hands, if you use wisely it will save you precious time of your day &#x1F4AA;. </p>]]></content:encoded></item><item><title><![CDATA[Welcome on board 🦭 Podman 👏]]></title><description><![CDATA[Start using Podman as alternative for docker ready to use and secure! let's do a try with it, here I will show you what do you need to know to start working with Podman today!]]></description><link>https://blog.nicoandres.dev/welcome-on-board-podman/</link><guid isPermaLink="false">66100fdbc07bc80001f3b7c6</guid><category><![CDATA[Docker]]></category><category><![CDATA[Podman]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Terminal]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Fri, 05 Apr 2024 15:42:32 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1495774856032-8b90bbb32b32?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBvZCUyMHRvJTIwbWFufGVufDB8fHx8MTcxMjMyODY1NHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1495774856032-8b90bbb32b32?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHBvZCUyMHRvJTIwbWFufGVufDB8fHx8MTcxMjMyODY1NHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Welcome on board &#x1F9AD; Podman &#x1F44F;"><p>TL;DR</p><p>Podman is the alternative to docker, but why we will need an alternative to docker? first of all docker is great or not? well it is but... in Linux it should be executed as root, and by giving root access to docker service it makes possible in theory that maybe a container could execute malicious code in host environment, that doesn&apos;t sounds great no?</p><h2 id="%F0%9F%93%9C-introduction-to-podman">&#x1F4DC; Introduction to Podman</h2><p>Podman is an open source tool alternative to docker, originally developed by Red Had &#x1F534;&#x1F3A9; Podman architecture is different to docker and it allows run containers as rootless user.</p><h2 id="%F0%9F%93%A5-installing-podman-in-arch-linux">&#x1F4E5; Installing Podman in Arch Linux</h2><p>you could install Podman with:</p><pre><code class="language-sh">sudo pacman -S podman</code></pre><p>after install it you should be able to execute <code>podman container ls</code> &#x1F389;</p><h2 id="%F0%9F%A7%8C-troubleshooting">&#x1F9CC; Troubleshooting</h2><h3 id="error-overlay-fs">Error: overlay fs</h3><p>If you run into below error:</p><pre><code class="language-sh">Error: kernel does not support overlay fs: &apos;overlay&apos; is not supported over xfs</code></pre><p>As me you&apos;re using xfs system, and you will need install <code>fuse-overlayfs</code> package as mentioned in Podman&apos;s Github issues <a href="https://github.com/containers/podman/issues/2659?ref=blog.nicoandres.dev#issuecomment-473649187">here</a>.</p><p>so install it with:</p><pre><code class="language-sh">sudo pacman -S fuse-overlayfs</code></pre><p>after that you will be able to get the correct output for <code>podman container ls</code></p><h3 id="error-devnettun-no-such-device">Error: /dev/net/tun: No such device</h3><p>As mentioned in this Github issue in Podman&apos;s repository <a href="https://github.com/containers/podman/issues/9543?ref=blog.nicoandres.dev#issuecomment-1332713964">here</a>, a reboot should solve this error.</p><h2 id="%F0%9F%8E%9F%EF%B8%8F-podman-podman-compose">&#x1F39F;&#xFE0F; Podman + Podman-Compose</h2><p>For sure you will use <code>docker-compose</code> by luck Podman also offers <code>podman-compose</code> it is not required to work with Podman as <code>podman compose</code> command by default uses <code>docker-compose</code> but I would like to use <code>podman-compose</code> as well so let&apos;s install it with:</p><pre><code class="language-sh">sudo pacman -S podman-compose</code></pre><h2 id="1%EF%B8%8F%E2%83%A3-first-lets-search-for-a-container">1&#xFE0F;&#x20E3; First lets search for a container</h2><p>for search containers in docker hub you could execute below command:</p><pre><code class="language-sh">podman search docker.io/node</code></pre><p>It will brings you a list of containers in docker hub that matches with <code>node</code></p><pre><code class="language-sh">NAME                                   DESCRIPTION
docker.io/library/node                 Node.js is a JavaScript-based platform for s...
docker.io/library/mongo-express        Web-based MongoDB admin interface, written w...
docker.io/nodered/node-red-docker      Deprecated - older Node-RED Docker images. 
docker.io/nodered/node-red             Low-code programming for event-driven applic...
docker.io/circleci/node                Node.js is a JavaScript-based platform for s...
docker.io/cimg/node                    The CircleCI Node.js Docker Convenience Imag...
</code></pre><p>now you could run into <code>node</code> container with:</p><pre><code class="language-sh">podman run -it docker.io/library/node</code></pre><p>that will bring you into node container &#x1F389;</p><pre><code class="language-sh"> ~ &#xE0B0; podman run -it docker.io/node
Welcome to Node.js v21.7.2.
Type &quot;.help&quot; for more information.
&gt; 
</code></pre><p>well that&apos;s all, enjoy Podman!</p>]]></content:encoded></item><item><title><![CDATA[Fixing issues with Ghost-Mailgun in transactional mails]]></title><description><![CDATA[What to do when your transactional emails are not working on your Ghost blog self hosted instance via docker containers? I will show you what troubleshooting you can do 🚀]]></description><link>https://blog.nicoandres.dev/fixing-issues-with-ghost-mailgun-in-transactional-mails/</link><guid isPermaLink="false">65fc5568426d8d00016cce11</guid><category><![CDATA[Docker]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Ghost]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Thu, 21 Mar 2024 15:59:41 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1707344088547-3cf7cea5ca49?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNzExMDM1NDMyfA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1707344088547-3cf7cea5ca49?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNzExMDM1NDMyfA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Fixing issues with Ghost-Mailgun in transactional mails"><p>TL;DR</p><p>If you are a self hosted ghost blog owner that uses docker, maybe you should sometimes to fix any issues with your Mailgun settings, I will show you which steps I follow to fix those issues.</p><h2 id="%F0%9F%93%A7-check-your-configproductionjson">&#x1F4E7; Check your config.production.json</h2><p>As a self  hosted Ghost blog owner, you should be aware this is the main file to setting up your transactional emails in your Ghost instance, you could check if this file is in good shape with the command:</p><pre><code class="language-sh">docker exec -it &lt;container-name&gt; cat config.production.js</code></pre><p>I previously show you hot to set up your docker-compose to always rebuild this file with the correct information in each container restart here:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.nicoandres.dev/setting-up-your-mailgun-in-your-selfhosted-ghost/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Setting up your Mailgun in your selfhosted Ghost</div><div class="kg-bookmark-description">If you&#x2019;re hosting your own Ghost blog in a docker container you should to know how to setting up your mail settings with Mailgun, if not I will show you how &#x1F44D;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.nicoandres.dev/content/images/size/w256h256/2024/03/Riise-1-2.png" alt="Fixing issues with Ghost-Mailgun in transactional mails"><span class="kg-bookmark-author">Fullstack | Nicoandres&apos; blog</span><span class="kg-bookmark-publisher">Nicoandres Rodriguez</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1526554850534-7c78330d5f90?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fE1haWx8ZW58MHx8fHwxNzA5NzMyMjY1fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Fixing issues with Ghost-Mailgun in transactional mails"></div></a></figure><p>But what to do when any issue arise? </p><h2 id="%F0%9F%93%83-check-your-ghost-logs">&#x1F4C3; Check your Ghost logs</h2><p>You should to check your containers logs with the command:</p><pre><code class="language-sh">docker container logs &lt;container-name&gt; --since 10m

</code></pre><p>The parameter <code>since</code> show logs since timestamp (e.g. &quot;2013-01-02T13:23:37Z&quot;) or relative (e.g. &quot;42m&quot; for 42 minutes).</p><p>There is useful information to check which could be the issue.</p><h2 id="%F0%9F%91%80-double-check-ghost-docs">&#x1F440; Double check Ghost docs</h2><p>Double check official docs about Ghost email settings, maybe you missed something important there.</p><p>As important reminder you should to set up first your transactional emails before your bulk emails.</p><h2 id="%F0%9F%9A%80-restart-after-each-change">&#x1F680; Restart after each change</h2><p>As rule don&apos;t forget to restart your Ghost instance after any change, in a regular self hosted instance it could be achived by running the command <code>ghost restart</code> but as a docker user you could do it by restarting your container with <code>docker container restart &lt;container-name&gt;</code></p>]]></content:encoded></item><item><title><![CDATA[Nx monorepo react-python]]></title><description><![CDATA[I will show you how to create a Nx mono-repo for a for a react-python stack app it is easy to do by CLI and requires little effort.]]></description><link>https://blog.nicoandres.dev/nx-monorepo/</link><guid isPermaLink="false">65f9ab3728812900010d13c4</guid><category><![CDATA[Nx]]></category><category><![CDATA[React]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Tue, 19 Mar 2024 16:12:25 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1650938826562-4ccbc49fa62f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fG54fGVufDB8fHx8MTcxMDg2MTE1OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h3 id="tldr">TL;DR</h3><img src="https://images.unsplash.com/photo-1650938826562-4ccbc49fa62f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDd8fG54fGVufDB8fHx8MTcxMDg2MTE1OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Nx monorepo react-python"><p>I will show you how to create a Nx mono-repo for a for a react-python stack app it is easy to do by CLI and requires little effort.</p><h2 id="create-a-nx-mono-repo-with-nx-cli-%F0%9F%8E%AE">Create a nx mono-repo with nx cli &#x1F3AE;</h2><p><a href="https://nx.dev/getting-started/tutorials/react-monorepo-tutorial?ref=blog.nicoandres.dev">nx official docs to create a react mono-repo</a> recommends this command:</p><pre><code class="language-sh">npx create-nx-workspace@latest &lt;app-name&gt; --preset=react-monorepo</code></pre><p>I run a more personalized one based on my preferences:</p><pre><code class="language-sh">npx create-nx-workspace@latest --name=&lt;app-name&gt; --preset=react-monorepo --docker=true --packageManager=pnpm --bundler=vite --style=@emotion/styled --e2eTestRunner=playwright</code></pre><p>above command specific to use <code>pnpm</code> as package manager, <code>playwright</code> for e2e test runner and <code>vite</code> bundler instead of Webpack</p><p>after running above command and if you doesn&apos;t have any errors you could navigate to the recent folder created for you app in my case <code>musiik</code> with <code>cd musiik</code> and run there <code>nx serve musiik</code> (change the name for a relevant one to you and ensure nx is globally installed with npm i -g)</p><p>If everything is going well you should to have something in <code>localhost:4200</code> similar to:</p><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/03/nx-musiik.png" class="kg-image" alt="Nx monorepo react-python" loading="lazy" width="2000" height="2119" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/03/nx-musiik.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2024/03/nx-musiik.png 1000w, https://blog.nicoandres.dev/content/images/size/w1600/2024/03/nx-musiik.png 1600w, https://blog.nicoandres.dev/content/images/2024/03/nx-musiik.png 2000w" sizes="(min-width: 720px) 720px"></figure><p>Nice!</p><h2 id="adding-python-project-based-on-poetry-%F0%9F%8E%AD">Adding Python project based on Poetry &#x1F3AD;</h2><p>lets search for the proper nx plugin in <a href="https://nx.dev/plugin-registry?ref=blog.nicoandres.dev">plugins section</a> if you search for Python you will see the poetry plugin by following the link you will land in its github page where you will found the instructions:</p><ol><li>install it <code>pnpm install @nxlv/python --save-dev</code></li><li>update nx.json:</li></ol><pre><code class="language-json">{
  ...
  &quot;plugins&quot;: [
    &quot;@nxlv/python&quot;
  ]
  ...
}</code></pre><ol start="3"><li>create project <code>nx generate @nxlv/python:poetry-project myproject</code><ol><li>Before that I needed to install <code>pipx</code> and <code>poetry</code></li><li>in Arch in installed <code>pipx</code> with <code>sudo pacman -S python-pipx</code></li><li>ensure <code>pipx</code> is in path with <code>pipx ensurepath</code></li><li>restart terminal</li><li>install <code>poetry</code> with <code>pipx install poetry</code></li><li>boom &#x1F680; ready to go!</li></ol></li></ol><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/03/mono-repo.png" class="kg-image" alt="Nx monorepo react-python" loading="lazy" width="997" height="716" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/03/mono-repo.png 600w, https://blog.nicoandres.dev/content/images/2024/03/mono-repo.png 997w" sizes="(min-width: 720px) 720px"></figure><p>This shows it creates a new python project in extractor folder.</p><h4 id="edit">Edit:</h4><p>Above command will create a Python project named <code>Extractor</code> inside a folder named same, which is not convenient, to solve this you could specify the directory name by using the parameter <code>--directory=&lt;directory-name&gt;</code>, the command will be:</p><pre><code class="language-sh">nx generate @nxlv/python:poetry-project extractor --directory=python-microservices</code></pre><p>This will create the project inside a different folder name, which is more convenient.</p>]]></content:encoded></item><item><title><![CDATA[Building an open source music streaming server]]></title><description><![CDATA[Join me in this adventure of open source project to build an music stream server for your own enjoyment.]]></description><link>https://blog.nicoandres.dev/making-an-open-source-music-streaming-server/</link><guid isPermaLink="false">65f85bec28812900010d1344</guid><category><![CDATA[Docker]]></category><category><![CDATA[React]]></category><category><![CDATA[Nx]]></category><category><![CDATA[Typescript]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 18 Mar 2024 16:07:47 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1584257274862-42aa4f6e5f55?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGVjb3N5c3RlbXxlbnwwfHx8fDE3MTA3NzUyNzB8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1584257274862-42aa4f6e5f55?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGVjb3N5c3RlbXxlbnwwfHx8fDE3MTA3NzUyNzB8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Building an open source music streaming server"><p>This short post is the first of an series of post about how to build an open source music streaming server  to stream you own music collection everywhere anytime and with style &#x1F60E;</p><h2 id="architecture-%F0%9F%8F%97%EF%B8%8F">Architecture &#x1F3D7;&#xFE0F;</h2><p>First lets decide about the architecture for our amazing streaming service:</p><ul><li>Repository mono-repo powered by Nx &#x1F50B;</li><li>Infrastructure powered by Docker containers &#x1F433;</li><li>Front-end: React NextJS, Material-Tailwind &#x1F485;</li><li>BFF: GraphQL &#x1F9D1;&#x200D;&#x1F91D;&#x200D;&#x1F9D1;</li><li>Back-end micro-service: MP3 metadata extractor. &#x1F3ED;</li><li>Back-end micro-service: AI to autocomplete missing any MP3 missing info. &#x1F916;</li><li>Authentication with Auth0 &#x1F511;</li><li>Translations with React-INTL &#x1F30E;</li><li>Redis DB &#x1F6E2;&#xFE0F;</li></ul><p>In next posts I will taking a look in each step to build this project from scratch.</p><h2 id="diagram">Diagram</h2><p>below a quick diagram of the architecture:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.nicoandres.dev/content/images/2024/03/musiik-architecture.png" class="kg-image" alt="Building an open source music streaming server" loading="lazy" width="400" height="400"><figcaption><span style="white-space: pre-wrap;">music streaming system architecture</span></figcaption></figure><h2 id="next-steps">Next steps</h2><p>In your inbox &#x1F4E5; you could see coming soon mails to see the progress of this project and each step in the building process.</p><h2 id="resources">Resources</h2><ul><li>Nx intro <a href="https://nx.dev/getting-started/intro?ref=blog.nicoandres.dev">link</a></li><li>Material-Tailwind &#x1FA81; <a href="https://www.material-tailwind.com/?ref=blog.nicoandres.dev">link</a></li><li>React-int <a href="https://formatjs.io/docs/react-intl/?ref=blog.nicoandres.dev">link</a></li><li>Auth0-NextJS plugin <a href="https://github.com/auth0/nextjs-auth0?ref=blog.nicoandres.dev">link</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Your own music stream server 📻 with Mstream]]></title><description><![CDATA[Do you wanna to host your own music server, with mStream you could do it and I wanna teach you how 📻]]></description><link>https://blog.nicoandres.dev/your-own-music-stream-server/</link><guid isPermaLink="false">65f69c1528812900010d12ce</guid><category><![CDATA[Docker]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Mon, 18 Mar 2024 14:32:31 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1707343848873-d6a834b5f9b9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNzEwNjYwNjc2fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1707343848873-d6a834b5f9b9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNzEwNjYwNjc2fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Your own music stream server &#x1F4FB; with Mstream"><p>Do you like to hear you own music library, but it is local? in that case exist <a href="https://mstream.io/?ref=blog.nicoandres.dev">Mstream</a> it is</p><blockquote>mStream is a music streaming server. With mStream you can access your music collection from anywhere.</blockquote><h2 id="tldr">TL;DR</h2><p>I will show you mStream a music stream server to access your music collection from web, I will show you how to deploy it with Docker &#x1FAD9; &#x1F433; &#x1F3B5;</p><h2 id="docker-official-image-%F0%9F%91%AE">Docker official image &#x1F46E;</h2><p>You could find the docker official image from <a href="https://hub.docker.com/r/linuxserver/mstream?ref=blog.nicoandres.dev">mStream&apos;s docker hub</a>, if you wanna do a quick try in your local machine you could do it through docker cli:</p><pre><code class="language-sh">docker run -d \
  --name=mstream \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -p 3000:3000 \
  -v /path/to/data:/config \
  -v /path/to/music:/music \
  --restart unless-stopped \
  lscr.io/linuxserver/mstream:latest</code></pre><p>to best experience let&apos;s replace some variables in above command like <code>TZ</code> for your time zone for example <code>Europe/London</code> more examples see <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones?ref=blog.nicoandres.dev#List">here</a>, <code>/path/to/music</code> with the music path where you have your music collection for instance <code>~/home/&lt;my-user&gt;/music</code> , <code>/path/to/data</code> is where mStream will store config data, so you could point it to an empty folder in your local, and that&apos;s it if you run that command you will have your mStream server running in your port 3000:</p><figure class="kg-card kg-image-card"><img src="https://blog.nicoandres.dev/content/images/2024/03/mStream-demo.png" class="kg-image" alt="Your own music stream server &#x1F4FB; with Mstream" loading="lazy" width="2000" height="1151" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/03/mStream-demo.png 600w, https://blog.nicoandres.dev/content/images/size/w1000/2024/03/mStream-demo.png 1000w, https://blog.nicoandres.dev/content/images/size/w1600/2024/03/mStream-demo.png 1600w, https://blog.nicoandres.dev/content/images/size/w2400/2024/03/mStream-demo.png 2400w" sizes="(min-width: 720px) 720px"></figure><p>That&apos;s it mstream but lets run it from your VPS &#x1F680;</p><h2 id="create-a-docker-composeyml-%F0%9F%93%84">Create a docker-compose.yml &#x1F4C4;</h2><p>First you should create a <code>docker-compose.yml</code> with:</p><pre><code class="language-yml">services:
  mstream:
    image: lscr.io/linuxserver/mstream:latest
    container_name: mstream
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /path/to/data:/config
      - /path/to/music:/music
    ports:
      - 3000:3000
    restart: unless-stopped</code></pre><p>Same as previously just take care of change the <code>data</code> and <code>music</code> folders to some relevant paths, and change your time-zone in <code>TZ=</code> line, when you are ready you could put this in a new folder in your VPS (virtual private server) and execute an <code>docker-compose up -d</code> to starting the new container &#x1F680;.</p><p>To enable it you should to follow same steps as I explained in previous post about how to enable a new web site in your Apache2 server:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.nicoandres.dev/adding-a-new-website-to-your-vps-via-docker-apache2/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Adding a new website to your VPS via docker - apache2</div><div class="kg-bookmark-description">Quick tutorial about how to enable a website via docker and apache2 using a reverse proxy configuration.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.nicoandres.dev/content/images/size/w256h256/format/png/2023/02/Riise-1.svg" alt="Your own music stream server &#x1F4FB; with Mstream"><span class="kg-bookmark-author">Fullstack | Nicoandres&apos; blog</span><span class="kg-bookmark-publisher">Nicoandres Rodriguez</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1597915869221-a9eaaa1e7700?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDR8fHByb3h5fGVufDB8fHx8MTcwODcwMDIzMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Your own music stream server &#x1F4FB; with Mstream"></div></a></figure><h2 id="resources">Resources</h2><ul><li>Linux server LXF301</li><li>Docker hub mStream <a href="https://hub.docker.com/r/linuxserver/mstream?ref=blog.nicoandres.dev">link</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Powering your terminal with AI]]></title><description><![CDATA[Do you wanna try your terminal powered by AI, here I will show you how to it is easy and useful!]]></description><link>https://blog.nicoandres.dev/powering-your-terminal-with-ai/</link><guid isPermaLink="false">65e2f32775d73800015c536a</guid><category><![CDATA[Terminal]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Linux edge]]></category><dc:creator><![CDATA[Nicoandres Rodriguez]]></dc:creator><pubDate>Wed, 06 Mar 2024 15:18:44 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1516192518150-0d8fee5425e3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHJvYm90fGVufDB8fHx8MTcwOTM3MjIyOXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h2 id="tldr">TL;DR</h2><img src="https://images.unsplash.com/photo-1516192518150-0d8fee5425e3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHJvYm90fGVufDB8fHx8MTcwOTM3MjIyOXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Powering your terminal with AI"><p>AI is becoming a rule tool nowadays, in this post I will show you how to power your terminal with ChatGPT AI.</p><h2 id="prerequisites">Prerequisites</h2><ul><li>A ChatGPT API account where you will generate an API-key.</li><li>Curl package to download the installation script</li><li>JQ package required by the bash script to interact with ChatGPT response</li></ul><h2 id="get-a-chatgpt-api-token-%F0%9F%89%90">Get a ChatGPT API token &#x1F250;</h2><p>Go to ChatGPT web site and open a new account at <a href="https://beta.openai.com/account/api-keys?ref=blog.nicoandres.dev">OpenAI</a>, get a new API token, it is free as OpenAI will charge you credits to use their API 5 usd, after that you could top up your account dont worry it is really cheap like 0.001 per request so if you top up 5 usd, that will be enough for you. </p><h2 id="install-chatgpt-cli-%F0%9F%A4%96">Install ChatGPT cli &#x1F916;</h2><p>You will need to install the script <a href="https://github.com/0xacx/chatGPT-shell-cli?ref=blog.nicoandres.dev"><code>https://github.com/0xacx/chatGPT-shell-cli</code></a> which will allow you interact with ChatGPT, so run this in your terminal:</p><pre><code class="language-sh">curl -sS https://raw.githubusercontent.com/0xacx/chatGPT-shell-cli/main/install.sh | sudo -E bash</code></pre><h3 id="arch-users-could-use-aur-%F0%9F%9B%BA">Arch users could use Aur &#x1F6FA;</h3><p>if you&apos;re an Arch user as me you could use Aur, for instance by using <code>paru</code></p><pre><code class="language-sh">paru -S chatgpt-shell-cli</code></pre><p>But if you&apos;re as me and doesn&apos;t like any Aur wrapper just clone it and install it:</p><pre><code class="language-sh"># all my Aur packages are in Aur folder
cd Aur
git clone https://aur.archlinux.org/chatgpt-shell-cli.git
cd chatgpt-shell-cli
makepkg -si</code></pre><h2 id="final-step-add-your-api-key-%F0%9F%A7%B8">Final step add your API Key &#x1F9F8;</h2><p>You should now export a variable <code>OPENAI_KEY</code> in your shell, you could do it in your .bashrc by adding</p><pre><code class="language-.bashrc">export OPENAI_KEY=&lt;paste-your-openai-key-here&gt;</code></pre><p>restart your shell and you&apos;re ready to go with your AI at your terminal:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.nicoandres.dev/content/images/2024/03/chat-gpt-cli-demo.png" class="kg-image" alt="Powering your terminal with AI" loading="lazy" width="868" height="581" srcset="https://blog.nicoandres.dev/content/images/size/w600/2024/03/chat-gpt-cli-demo.png 600w, https://blog.nicoandres.dev/content/images/2024/03/chat-gpt-cli-demo.png 868w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">demo of ChatGPT at my terminal</span></figcaption></figure><h2 id="sources">Sources</h2><ul><li><a href="https://github.com/0xacx/chatGPT-shell-cli?tab=readme-ov-file&amp;ref=blog.nicoandres.dev">chatGPT-shell-cli</a></li><li>Linux Format <a href="https://linuxformat.com/archives?issue=305&amp;ref=blog.nicoandres.dev">LFX305</a></li></ul>]]></content:encoded></item></channel></rss>