<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Documentation</title><link>https://docs.ayshell.dev/</link><description>Recent content on Documentation</description><generator>Hugo -- 0.147.5</generator><language>en</language><lastBuildDate>Tue, 20 Oct 2026 09:35:49 +0530</lastBuildDate><atom:link href="https://docs.ayshell.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Fedora bootc on a Raspberry Pi 5: Build, Flash, and Boot (Partial Support)</title><link>https://docs.ayshell.dev/posts/bootc/rpi5-f42/</link><pubDate>Tue, 20 Oct 2026 09:35:49 +0530</pubDate><guid>https://docs.ayshell.dev/posts/bootc/rpi5-f42/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>Host: Fedora Linux &lt;span style="color:#ae81ff">44&lt;/span> KDE &lt;span style="color:#f92672">(&lt;/span>x86_65&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Target: Raspberry Pi &lt;span style="color:#ae81ff">5&lt;/span> &lt;span style="color:#f92672">(&lt;/span>ARM64&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Tools: Podman, dd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Container Image: quay.io/iamyaash/rpi5-bootc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Firmware: github.com/worproject/rpi5-uefi
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="0-build-the-container-image-and-push-it-to-quayio">0. Build the container image and push it to quay.io&lt;/h1>
&lt;p>Everything in this guide starts from a &lt;code>bootc&lt;/code> container image, here &lt;code>quay.io/iamyaash/rpi5-bootc:latest&lt;/code>.&lt;/p>
&lt;p>Although you need &lt;code>qemu-user-static&lt;/code> to be installed on your host PC but I ran Podman to build the container image on a Raspberry Pi 5, so it won&amp;rsquo;t be needed.&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-Containerfile" data-lang="Containerfile">FROM --platform=linux/arm64 quay.io/fedora/fedora-bootc:42
# Install hardware utilities, firmware packages, and essentials
RUN dnf -y install \
NetworkManager \
NetworkManager-wifi \
wireless-regdb \
linux-firmware \
iproute \
openssh-server \
htop &amp;amp;&amp;amp; \
dnf clean all
# Ensure critical services start on boot
RUN systemctl enable NetworkManager sshd
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Build the image&lt;/strong>:
Run this in the project folder.&lt;/p></description></item><item><title>Forgejo: Getting Started with Integration Tests &amp; E2E Tests</title><link>https://docs.ayshell.dev/posts/forgejo/integration_tests/</link><pubDate>Tue, 29 Sep 2026 11:50:50 +0530</pubDate><guid>https://docs.ayshell.dev/posts/forgejo/integration_tests/</guid><description>A beginner-friendly guide to running integration tests in Forgejo. Learn how to execute individual tests, use tools like &amp;lsquo;make&amp;rsquo; and &amp;lsquo;go&amp;rsquo;, and explore the essential basics to help you get started with integration testing.</description></item><item><title>Forgejo: Installing and Configuring the Forgejo Runner Binary</title><link>https://docs.ayshell.dev/posts/forgejo/runner-install-binary/</link><pubDate>Tue, 04 Aug 2026 11:20:02 +0530</pubDate><guid>https://docs.ayshell.dev/posts/forgejo/runner-install-binary/</guid><description>A step-by-step guide to installing the Forgejo runner as a standalone binary, configuring it as a systemd service, and connecting it to your Forgejo or Codeberg instance.</description></item><item><title>Kubectl: Show Details of Specific/Group Resources</title><link>https://docs.ayshell.dev/posts/kubectl/describe/</link><pubDate>Thu, 09 Jul 2026 12:47:35 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kubectl/describe/</guid><description>This post explains how to get detailed description of the specific or group resources using describe command. This provides a human-readable overview of k8s resources on status, events, configs and relationships with other components.</description></item><item><title>Linux: Fundamentals of Swap Space</title><link>https://docs.ayshell.dev/posts/linux/swap-space/swap-file/</link><pubDate>Wed, 08 Jul 2026 13:21:43 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/swap-space/swap-file/</guid><description>Linux swap memory is a portion of disk storage used as virtual memory to supplement RAM, allowing the system to continue running when physical memory is full.</description></item><item><title>Kubectl: Safely Drain A Node</title><link>https://docs.ayshell.dev/posts/kubectl/drain/</link><pubDate>Tue, 07 Jul 2026 13:47:33 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kubectl/drain/</guid><description>This post explains how to safely evict pods using the drain command. It covers how the drain command works behind the scenes, includes the essential commands you need, and ends with a practical example to demonstrate its usage.</description></item><item><title>Kubectl: Renaming the Nodes</title><link>https://docs.ayshell.dev/posts/kubectl/rename-node/</link><pubDate>Thu, 02 Jul 2026 11:28:42 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kubectl/rename-node/</guid><description>This post shows how to rename a k3s node using the standard drain, rejoin, and relabel procedure. It walks through changing the hostname, replacing the old node entry, and restoring workload scheduling on the new node.</description></item><item><title>Managing Keyboard Control and Macros with keyd</title><link>https://docs.ayshell.dev/posts/macros/keyd-essentials/</link><pubDate>Mon, 29 Jun 2026 12:41:39 +0530</pubDate><guid>https://docs.ayshell.dev/posts/macros/keyd-essentials/</guid><description>Use keyd to create macros with more control, so they run only when keys are pressed on a specific keyboard. I will also show the installation, setup, and configuration steps.</description></item><item><title>Kubectl: Running kubectl Without sudo (and Fixing Permission Warnings)</title><link>https://docs.ayshell.dev/posts/kubectl/no-sudo-access-kubectl/</link><pubDate>Sun, 28 Jun 2026 15:31:27 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kubectl/no-sudo-access-kubectl/</guid><description>This guide outlines three proven methods to configure passwordless non-root kubectl access in a K3s cluster. It covers setting up your local user context, adjusting system file permissions, and permanently silencing annoying configuration permission warnings.</description></item><item><title>KDE: Limiting Battery Charging Level</title><link>https://docs.ayshell.dev/posts/kde/battery-charge-limit/</link><pubDate>Mon, 18 May 2026 12:24:56 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kde/battery-charge-limit/</guid><description>Quick guide on how to limit battery charge level in KDE using systemd service.</description></item><item><title>Docker: Persistent Storage Using Volumes</title><link>https://docs.ayshell.dev/posts/docker/volumes/</link><pubDate>Sat, 06 Sep 2025 18:55:00 +0530</pubDate><guid>https://docs.ayshell.dev/posts/docker/volumes/</guid><description>&lt;h1 id="what-are-docker-volumes">What are Docker Volumes?&lt;/h1>
&lt;p>Docker volumes are a mechanism for persisting data independently of the container lifecycle. Since, the data in a container will be deleted once the container is stopped, using Docker volumes ensures the data is stored permenently.&lt;/p>
&lt;ul>
&lt;li>Volumes are managed by Docker and stored on the host (mostly under &lt;code>/var/lib/docker/volumes&lt;/code>).&lt;/li>
&lt;li>Most importantly, it allows the data to be stored, retained and shared between container, suriving container restarts and removals.&lt;/li>
&lt;li>It preferrable to use for stateful applications like databases or file servers where data persistence matters.&lt;/li>
&lt;/ul>
&lt;h2 id="creating-and-using-volumes">Creating and Using Volumes&lt;/h2>
&lt;ul>
&lt;li>Volumes can be created implicitly by Docker when referenced or explicitly using:
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker volume create &amp;lt;volume_name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Start a container and mount a volume:
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker run -it -v &amp;lt;volume_name&amp;gt;:/path/in/container &amp;lt;image:tag&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h2 id="volume-content-persistence-and-sharing">Volume Content Persistence and Sharing&lt;/h2>
&lt;ul>
&lt;li>Files written/modified inside the container at the mount point path persist on the volume.&lt;/li>
&lt;li>When a new container mounts the same volume, it can process the previously stored data.&lt;/li>
&lt;li>Volumes can be mounted &lt;code>read-write&lt;/code> (&lt;em>default&lt;/em>) or &lt;code>read-only&lt;/code> with &lt;code>:ro&lt;/code> option:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker run -it -v &amp;lt;volume_name&amp;gt;:/container/path/:ro &amp;lt;image:tag&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="inspecting-and-managing-volumes">Inspecting and Managing Volumes&lt;/h2>
&lt;ul>
&lt;li>List volumes:
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker volume ls
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Inspect a volume for details like mount point:
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker volume inspect &amp;lt;volume_name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Remove a Volume(&lt;em>only when inactive/not being by any containers&lt;/em>)
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>docker volume rm &amp;lt;volume_name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h1 id="thoughts">Thoughts&lt;/h1>
&lt;p>If you read this posts about &lt;a href="https://iamyaash.github.io/spells/posts/docker/mount-volume/">&lt;strong>Bind Mounts&lt;/strong>&lt;/a>, using Volumes over Bind Mount is a benefit because:&lt;/p></description></item><item><title>KDE: Reset Audio Configurations</title><link>https://docs.ayshell.dev/posts/kde/audio-reset/</link><pubDate>Sat, 06 Sep 2025 18:28:17 +0530</pubDate><guid>https://docs.ayshell.dev/posts/kde/audio-reset/</guid><description>Quick guide on how to reset audio configurations in KDE.</description></item><item><title>Docker: Using Bind Mounts (Volume Mount)</title><link>https://docs.ayshell.dev/posts/docker/mount-volume/</link><pubDate>Fri, 05 Sep 2025 14:50:04 +0530</pubDate><guid>https://docs.ayshell.dev/posts/docker/mount-volume/</guid><description>A short guide on mounting a local directory inside a container.</description></item><item><title>SSH: Agent</title><link>https://docs.ayshell.dev/posts/ssh/ssh-agent/</link><pubDate>Wed, 27 Aug 2025 15:48:48 +0530</pubDate><guid>https://docs.ayshell.dev/posts/ssh/ssh-agent/</guid><description>SSH agent is a background program that manages and storess SSH private keys for secure authentication, letting users connect to remote servers via SSH without repeatedly entering passphrase or password.</description></item><item><title>GPG: Beginner's Guide</title><link>https://docs.ayshell.dev/posts/gpg/gpg-101/</link><pubDate>Wed, 20 Aug 2025 12:59:29 +0530</pubDate><guid>https://docs.ayshell.dev/posts/gpg/gpg-101/</guid><description>&lt;h1 id="what-is-gpg--pgp">What is GPG / PGP?&lt;/h1>
&lt;p>GnuPG (&lt;em>aka GPG&lt;/em>) is an implementation of standard known as PGP (&lt;em>Pretty Good Privacy&lt;/em>). It uses a system of &amp;ldquo;Public&amp;rdquo; and &amp;ldquo;Private&amp;rdquo; keys for the encryption and signing of message or data.&lt;/p>
&lt;h2 id="private-key">Private Key&lt;/h2>
&lt;ul>
&lt;li>Private keys are the first half of a GPG key which is &lt;strong>used to decrypt messages&lt;/strong> that are encrypted using public keys.&lt;/li>
&lt;li>Also used for signing messages - a way to prove that you own the key.&lt;/li>
&lt;li>&lt;strong>Obviously, you must not share the private keys anywhere&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;h2 id="public-key">Public Key&lt;/h2>
&lt;ul>
&lt;li>Public keys are the second half of a GPG key which is &lt;strong>used to encrypt messages&lt;/strong> for the owner of private key.&lt;/li>
&lt;li>It is &lt;strong>safe to share it anywhere publicly&lt;/strong>, as it can &lt;strong>&lt;em>only be used to encrypt&lt;/em>&lt;/strong> messages for the owner of the private key. In simple terms, owning just the public key is useless unless you own the private key.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h1 id="why-use-gpg">Why Use GPG?&lt;/h1>
&lt;p>GPG (&lt;em>GNU Privacy Guard&lt;/em>) provides encryption and digital signing to:&lt;/p></description></item><item><title>SSH: Beginner's Guide</title><link>https://docs.ayshell.dev/posts/ssh/ssh-101/</link><pubDate>Tue, 19 Aug 2025 14:28:17 +0530</pubDate><guid>https://docs.ayshell.dev/posts/ssh/ssh-101/</guid><description>&lt;h1 id="what-is-ssh">What is SSH?&lt;/h1>
&lt;p>SSH (&lt;em>Secure Shell&lt;/em>) is a protocol used to securely access and manage remote systems over insecure networks. It&amp;rsquo;s widely used to log into remote Linux/Unis servers, transfers files, and run common across multiple machines.&lt;/p>
&lt;h1 id="basic-ssh-concepts">Basic SSH Concepts&lt;/h1>
&lt;ol>
&lt;li>SSH Client&lt;/li>
&lt;/ol>
&lt;p>Software on your computer that initiates the connection
&lt;strong>Example&lt;/strong>: &lt;code>terminal&lt;/code>, &lt;code>Konsole&lt;/code>, &lt;code>PuTTY&lt;/code>, &amp;amp; more.&lt;/p>
&lt;ol start="2">
&lt;li>SSH Server&lt;/li>
&lt;/ol>
&lt;p>The remote computer you want to access; It listens for incoming SSH request and process them accordingly.&lt;/p></description></item><item><title>Docker: Build Multi-Architecture Container Images</title><link>https://docs.ayshell.dev/posts/docker/multi-arch-build/</link><pubDate>Tue, 05 Aug 2025 22:56:12 +0530</pubDate><guid>https://docs.ayshell.dev/posts/docker/multi-arch-build/</guid><description>A short guide to building and running container images for multiple architectures with instruction emulation.</description></item><item><title>Linux: Booting Process</title><link>https://docs.ayshell.dev/posts/linux/boot/linux-booting-sequence/</link><pubDate>Fri, 25 Jul 2025 19:33:51 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/boot/linux-booting-sequence/</guid><description>High-level explanation of how the Linux is booted.</description></item><item><title>Package Management</title><link>https://docs.ayshell.dev/posts/package/management/</link><pubDate>Mon, 21 Jul 2025 19:48:46 +0530</pubDate><guid>https://docs.ayshell.dev/posts/package/management/</guid><description>Essential package management and real world examples that cover all fundamental operations for managing RPM/DEB packages.</description></item><item><title>What is LVM (Logical Volume Manager) and Why Use it?</title><link>https://docs.ayshell.dev/posts/linux/file-systems/lvm/</link><pubDate>Sun, 20 Jul 2025 19:35:31 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/file-systems/lvm/</guid><description>&lt;h1 id="what-is-lvm">What is LVM?&lt;/h1>
&lt;p>&lt;strong>LVM&lt;/strong> is a special tool in Linux that let&amp;rsquo;s you manage disk storage in much more flexible way than traditional partitions.&lt;/p>
&lt;p>&lt;em>Think of it as turning multiple hard drives into a big, flexible stroage pool that you can split, resize, or grow whenever you want, without worrying about the limits of classic disk partitions&lt;/em>.&lt;/p>
&lt;h1 id="why-use-lvm">Why Use LVM?&lt;/h1>
&lt;ul>
&lt;li>&lt;strong>Resize storage easily&lt;/strong>: You can expand or shrink volumes without reformatting or losing data.&lt;/li>
&lt;li>&lt;strong>Combine multiple disks&lt;/strong>: Make many drives look like one big storage area.&lt;/li>
&lt;li>&lt;strong>Add more space anytime&lt;/strong>: Plug in new hard drive and add its space instantly.&lt;/li>
&lt;li>&lt;strong>Move or migrate data&lt;/strong>: Shift storage between drives with little downtime.&lt;/li>
&lt;li>&lt;strong>Take snapshots&lt;/strong>: Save the exact state of you data at a moment in time, which helps with backups.&lt;/li>
&lt;/ul>
&lt;h1 id="practical-example">Practical Example&lt;/h1>
&lt;h2 id="classic-partitioning-without-lvm">Classic Partitioning (without LVM)&lt;/h2>
&lt;ul>
&lt;li>You have 100GB disk with &lt;code>/home&lt;/code> and &lt;code>/var&lt;/code> partitions.&lt;/li>
&lt;li>&lt;code>/home&lt;/code> fills up, while &lt;code>/var&lt;/code> has lots of free space.&lt;/li>
&lt;li>&lt;strong>Problem&lt;/strong>: You can&amp;rsquo;t take space from &lt;code>/var&lt;/code> and give it to &lt;code>/home&lt;/code> without migrating, deleting, repartitioning or copying data aroud. &lt;em>Which is possible but risky and time-consuming&lt;/em>.&lt;/li>
&lt;/ul>
&lt;h2 id="with-lvm">With LVM&lt;/h2>
&lt;p>Let&amp;rsquo;s say you have two physical disks:&lt;/p></description></item><item><title>Linux Environment Variables</title><link>https://docs.ayshell.dev/posts/linux/environment-variables/</link><pubDate>Fri, 18 Jul 2025 23:36:37 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/environment-variables/</guid><description>&lt;h1 id="environment-variables">Environment Variables&lt;/h1>
&lt;p>In Linux, &lt;strong>Environment variables are named key-value pairs&lt;/strong> that store information about your operating environment and configuration. They are crucial because they let the operating system, applications, and scripts know about elements such as :&lt;/p>
&lt;ul>
&lt;li>Where programs are location; _via _&lt;code>PATH&lt;/code>.&lt;/li>
&lt;li>Your user/currently logged-in directory; &lt;code>HOME&lt;/code>.&lt;/li>
&lt;li>Language or locale settings.&lt;/li>
&lt;li>System-wide or app-specific configurations.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>In simple terms, &lt;strong>environment variables&lt;/strong> are a foundational way that Linux customizes, configues, and manages the actions of programs and users through simple &amp;ldquo;key=value&amp;rdquo; pairs.&lt;/em>&lt;/p></description></item><item><title>Linux Messaging Basics: mail, wall &amp; write</title><link>https://docs.ayshell.dev/posts/linux/communications/wall-write-mail/</link><pubDate>Fri, 18 Jul 2025 00:00:52 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/communications/wall-write-mail/</guid><description>Use mail to send or receive stored messages &amp;amp; system notificaitons, wall to broadcast announcements to all users and use write for quick direct messages to another user.</description></item><item><title>Fundamentals of Regular Expressions</title><link>https://docs.ayshell.dev/posts/regex/regex-basics/</link><pubDate>Sun, 13 Jul 2025 19:51:31 +0530</pubDate><guid>https://docs.ayshell.dev/posts/regex/regex-basics/</guid><description>&lt;h1 id="regular-expression">Regular Expression&lt;/h1>
&lt;p>Regular expression is a &lt;em>method of pattern matching&lt;/em>. It &lt;strong>allows you to define patterns of texts and search for it in other texts&lt;/strong>, no matter the complexity or the amount of text there is to process.&lt;/p>
&lt;p>Using regular expression is considered a &lt;em>more efficient solution, when there&amp;rsquo;s complexity in searching for a text&lt;/em> that you want to find. It is also called as &lt;strong>regex&lt;/strong>.&lt;/p>
&lt;blockquote>
&lt;p>Keep in mind that regular expression is supported in almost every programming language. If you were to face a situation when there&amp;rsquo;s complexity in searching a text, take a look at how the systax looks like other programming languages and utilize them.&lt;/p></description></item><item><title>Packaging: Debian File Deep Dive</title><link>https://docs.ayshell.dev/posts/packaging/file-structure-debian/</link><pubDate>Sat, 05 Jul 2025 22:29:13 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/file-structure-debian/</guid><description>Detailed explanation of Debian packaging file structure.</description></item><item><title>Packaging: RPM Spec File Deep Dive</title><link>https://docs.ayshell.dev/posts/packaging/file-structure-rpm-spec/</link><pubDate>Sat, 05 Jul 2025 12:39:02 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/file-structure-rpm-spec/</guid><description>Detailed explanation of RPM package file structure.</description></item><item><title>Linux Tools: Getting Started with the tar Command</title><link>https://docs.ayshell.dev/posts/linux/tools/tar-guide/</link><pubDate>Sat, 05 Jul 2025 10:13:55 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/tar-guide/</guid><description>The tar command (short for tape archive) is a foundational tool in Linux for archiving and compressing files and directories</description></item><item><title>Linux Tools: Basic File Viewing &amp; Handling</title><link>https://docs.ayshell.dev/posts/linux/tools/cat-head-tail-less/</link><pubDate>Fri, 04 Jul 2025 21:40:45 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/cat-head-tail-less/</guid><description>Read and preview file contents using commands like cat, head, tail, less.</description></item><item><title>Linux Tools: Data Extraction &amp; Manipulation</title><link>https://docs.ayshell.dev/posts/linux/tools/cut-sort-uniq/</link><pubDate>Fri, 04 Jul 2025 20:42:38 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/cut-sort-uniq/</guid><description>Focuses on shaping, refining, or deduplicating data using cut, sort, uniq commands.</description></item><item><title>Packaging: Build Your First Debian Package!</title><link>https://docs.ayshell.dev/posts/packaging/build-deb/</link><pubDate>Fri, 04 Jul 2025 00:10:18 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/build-deb/</guid><description>Create a simple &amp;ldquo;Hello World&amp;rdquo; C program, prepare necessary Debian packaging files (debian/) build the .deb pacakge, install it to test and remvoe it.</description></item><item><title>Packaging: Build Your First RPM Package!</title><link>https://docs.ayshell.dev/posts/packaging/build-rpm/</link><pubDate>Thu, 03 Jul 2025 14:13:41 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/build-rpm/</guid><description>Create a simple &amp;ldquo;Hello World&amp;rdquo; C program, write a .spec file, build an RPM package with rpmbuild, install it to test, and then remove it.</description></item><item><title>Packaging: Conceptual Differences Between RPM and DEB</title><link>https://docs.ayshell.dev/posts/packaging/rpm-deb-pkg-diff/</link><pubDate>Wed, 02 Jul 2025 20:25:25 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/rpm-deb-pkg-diff/</guid><description>Philosophies, design goals, and build process of &amp;ldquo;Red Hat Package Manager&amp;rdquo; and &amp;ldquo;Debian Package&amp;rdquo;.</description></item><item><title>Packaging: Introduction to Packaging in Linux</title><link>https://docs.ayshell.dev/posts/packaging/introduction-to-packaging/</link><pubDate>Wed, 02 Jul 2025 11:16:35 +0530</pubDate><guid>https://docs.ayshell.dev/posts/packaging/introduction-to-packaging/</guid><description>Provides an overview of what is a package and what is inside a package in Linux? Covers the essential and introduction part of packaging only.</description></item><item><title>Linux Tools: Transform &amp; Edit</title><link>https://docs.ayshell.dev/posts/linux/tools/awk-sed/</link><pubDate>Mon, 30 Jun 2025 16:00:03 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/awk-sed/</guid><description>Modify or reformat text streams or files; Command: awk &amp;amp; sed</description></item><item><title>Linux Tools: Search &amp; Filter</title><link>https://docs.ayshell.dev/posts/linux/tools/grep-find/</link><pubDate>Mon, 30 Jun 2025 15:20:08 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/grep-find/</guid><description>Searches for patterns in text (files or streams) using regular expressions and Searches for files and directories based on name, size, date, permissions, etc.</description></item><item><title>Linux: Advanced Filtering and Analyzing System Logs with journalctl</title><link>https://docs.ayshell.dev/posts/linux/journald/filters-journalctl/</link><pubDate>Mon, 30 Jun 2025 10:38:19 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/journald/filters-journalctl/</guid><description>&lt;h1 id="what-is-journalctl-filters">What is &lt;code>journalctl&lt;/code> Filters?&lt;/h1>
&lt;p>You can use filters with &lt;code>journalctl&lt;/code> to narrow down and control which log entries are displayed. &lt;code>journalctl&lt;/code> supports a wide range of filtering options, both by structured fields and by command-line flags.&lt;/p>
&lt;ul>
&lt;li>Structured Fields: &lt;code>SYSLOG_IDENTIFIER&lt;/code>, &lt;code>_SYSTEMD_UNIT&lt;/code>, &lt;code>_UID&lt;/code>, etc&lt;/li>
&lt;li>Command-Line Fields: &lt;code>--since&lt;/code>, &lt;code>--until&lt;/code>, &lt;code>-u&lt;/code>, &lt;code>-p&lt;/code>, &lt;code>--grep&lt;/code>, etc&lt;/li>
&lt;/ul>
&lt;h2 id="common-journalctl-filters">Common &lt;code>journalctl&lt;/code> Filters&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Filter Type&lt;/th>
&lt;th>Example Command&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>By Time&lt;/td>
&lt;td>&lt;code>journalctl --since &amp;quot;8 hours ago&amp;quot;&lt;/code>&lt;/td>
&lt;td>Shows logs since a specific time&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Service/Unit&lt;/td>
&lt;td>&lt;code>journalctl -u nginx.server&lt;/code>&lt;/td>
&lt;td>Show logs for a specific server/unit&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Priority&lt;/td>
&lt;td>&lt;code>journalctl -p warning&lt;/code>&lt;/td>
&lt;td>Show logs at/above a certain severity&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Field&lt;/td>
&lt;td>&lt;code>journalctl SYSLOG_IDENTIFIER=sudo&lt;/code>&lt;/td>
&lt;td>Show logs where a field matches a value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Boot&lt;/td>
&lt;td>&lt;code>journalctl -b -1&lt;/code>&lt;/td>
&lt;td>Shows logs from the previous boot&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Keyword&lt;/td>
&lt;td>&lt;code>journalctl --grep &amp;quot;error&amp;quot;&lt;/code>&lt;/td>
&lt;td>Shows logs containing a keyword&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="advanced-journalctl-filters">Advanced &lt;code>journalctl&lt;/code> Filters&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Filter Type&lt;/th>
&lt;th>Example Command&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>By User ID&lt;/td>
&lt;td>&lt;code>journalctl _UID=user_id&lt;/code>&lt;/td>
&lt;td>Filter logs by the user ID of the process that generated them&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Group ID&lt;/td>
&lt;td>&lt;code>journalctl _GID=group_id&lt;/code>&lt;/td>
&lt;td>Filter logs by the group ID of the process that generated them&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Process ID&lt;/td>
&lt;td>&lt;code>journalctl _PID=process_id&lt;/code>&lt;/td>
&lt;td>Filter logs by process ID&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Process name&lt;/td>
&lt;td>&lt;code>journalctl _COMM=nginx&lt;/code>&lt;/td>
&lt;td>Filter by process name (eg. &lt;code>_COMM=nginx&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Hostname&lt;/td>
&lt;td>&lt;code>journalctl _HOSTNAME=hostname&lt;/code>&lt;/td>
&lt;td>Filter logs by hostname&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Executable Path&lt;/td>
&lt;td>&lt;code>journalctl _EXE=exe_path&lt;/code>&lt;/td>
&lt;td>Filter logs by executable path (eg: &lt;code>/usr/local/bin/hugo&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Boot Session&lt;/td>
&lt;td>&lt;code>journalctl _BOOT_ID=boot_id&lt;/code>&lt;/td>
&lt;td>Filter logs by a specific boot session&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Audit Session&lt;/td>
&lt;td>&lt;code>journalctl _AUDIT_SESSION=session_id&lt;/code>&lt;/td>
&lt;td>Filter logs by audit session ID&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>By Syslog Facility Code&lt;/td>
&lt;td>&lt;code>journalctl _SYSLOG_FACILITY=facility_number&lt;/code>&lt;/td>
&lt;td>Filter by syslog facility code&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Alternatively&lt;/strong>, you can find the available filters in &lt;code>journalctl&lt;/code> by using:&lt;/p></description></item><item><title>Linux: Service Management with systemd</title><link>https://docs.ayshell.dev/posts/linux/systemd/service-management/</link><pubDate>Sun, 29 Jun 2025 20:02:46 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/systemd/service-management/</guid><description>&lt;h1 id="checking-service-status-in-detail">Checking Service Status In Detail&lt;/h1>
&lt;p>The &lt;code>systemctl status&lt;/code> command provides detailed information about a service, including it&amp;rsquo;s current state (&lt;em>active, inactive, failed&lt;/em>), recent log entries, and reasons for failure if the service is not running.&lt;/p>
&lt;p>&lt;strong>Example Command&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo systemctl status apache2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#or httpd service&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo systemctl status httpd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Output&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>iamyaash@pi5:~ $ sudo systemctl status firewalld.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>● firewalld.service - firewalld - dynamic firewall daemon
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Loaded: loaded &lt;span style="color:#f92672">(&lt;/span>/lib/systemd/system/firewalld.service; enabled; preset: enabled&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: active &lt;span style="color:#f92672">(&lt;/span>running&lt;span style="color:#f92672">)&lt;/span> since Sun 2025-06-29 20:30:48 IST; 1s ago
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Docs: man:firewalld&lt;span style="color:#f92672">(&lt;/span>1&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Main PID: &lt;span style="color:#ae81ff">7956&lt;/span> &lt;span style="color:#f92672">(&lt;/span>firewalld&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Tasks: &lt;span style="color:#ae81ff">2&lt;/span> &lt;span style="color:#f92672">(&lt;/span>limit: 9585&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CPU: 279ms
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CGroup: /system.slice/firewalld.service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └─7956 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">29&lt;/span> 20:30:48 pi5 systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: Starting firewalld.service - firewalld - dynamic firewall daemon...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">29&lt;/span> 20:30:48 pi5 systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: Started firewalld.service - firewalld - dynamic firewall daemon.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The output includes:&lt;/p></description></item><item><title>Linux: Task Scheduling with systemd Timers</title><link>https://docs.ayshell.dev/posts/linux/systemd/task-schedule/</link><pubDate>Sun, 29 Jun 2025 16:17:54 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/systemd/task-schedule/</guid><description>Practical guide to systemd timers, covering the differences from cron, the structure of timer files, key directives, and hands-on exercises.</description></item><item><title>Linux: Creating and Customizing systemd Units</title><link>https://docs.ayshell.dev/posts/linux/systemd/systemd-write-units/</link><pubDate>Sun, 29 Jun 2025 12:15:36 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/systemd/systemd-write-units/</guid><description>Important directives: ExecStart, ExecStop, Restart policies; Dependencies and ordering: Requires, Wants, Before, After; Writing your own service units with examples; Overriding units using drop-in configurations (systemctl edit)</description></item><item><title>Linux: Manage File Permissions</title><link>https://docs.ayshell.dev/posts/linux/manage-file-permissions/</link><pubDate>Fri, 27 Jun 2025 20:16:49 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/manage-file-permissions/</guid><description>This guide explains how to use Linux commands to manage file permissions, ownership and special permissions. Commands: chmod, chown, and chgrp.</description></item><item><title>Linux: How To Mount And Un-Mount Permanently/Temporarily</title><link>https://docs.ayshell.dev/posts/linux/mount-unmount/</link><pubDate>Thu, 26 Jun 2025 20:37:51 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/mount-unmount/</guid><description>Know how to mount and unmount storage effectively for temporary and permanent storage.</description></item><item><title>Linux: Assigning Permissions and Group Ownership Automatically For Newly Created Files &amp; Directories (umask &amp; chgrp)</title><link>https://docs.ayshell.dev/posts/linux/umask-chgrp/</link><pubDate>Wed, 25 Jun 2025 11:27:37 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/umask-chgrp/</guid><description>To ensure that new files created in a shared directory are automatically assigned to the directory’s group rather than the group of the user who created them.</description></item><item><title>Linux: firewalld &amp; iptables</title><link>https://docs.ayshell.dev/posts/linux/firewalld/firewalld/</link><pubDate>Tue, 24 Jun 2025 22:07:49 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/firewalld/firewalld/</guid><description>Firewalls in Linux system administration, focussing on both firewalld and iptables.</description></item><item><title>Linux Tools: dd Utility Tool</title><link>https://docs.ayshell.dev/posts/linux/tools/dd-util/</link><pubDate>Sun, 22 Jun 2025 22:09:10 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/tools/dd-util/</guid><description>dd is a Linux tool, and it widely used for Linux system administration and is essential for many low-level tasks involving disks, partitions, and files at the block level.</description></item><item><title>Linux: Log Analysis and Journals</title><link>https://docs.ayshell.dev/posts/linux/journald/journalctl/</link><pubDate>Sun, 22 Jun 2025 14:15:38 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/journald/journalctl/</guid><description>Understanding Linux log locations, using journalctl, analyzing traditional logs, filtering and searching logs with grep, less and time filters.</description></item><item><title>Linux: Networking Tools</title><link>https://docs.ayshell.dev/posts/linux/networking-tools/</link><pubDate>Sun, 22 Jun 2025 11:22:47 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/networking-tools/</guid><description>Linux networking tools for system administration: ip, ss, netstat, ping, and more.</description></item><item><title>Linux: Systemd And Service Management</title><link>https://docs.ayshell.dev/posts/linux/systemd/systemd-service-management/</link><pubDate>Sat, 21 Jun 2025 14:50:43 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/systemd/systemd-service-management/</guid><description>What is systemd and how it works? What are units, services, targets in systemd? Essential commands like systemctl &amp;amp; journalctl, and creating &amp;amp; managing custom services.</description></item><item><title>Emacs: Daemon &amp; Client Automation</title><link>https://docs.ayshell.dev/posts/emacs/emacs-daemon/</link><pubDate>Fri, 20 Jun 2025 22:35:06 +0530</pubDate><guid>https://docs.ayshell.dev/posts/emacs/emacs-daemon/</guid><description>Running an Emacs daemon server in the background and using emacsclient instead of a standalone application helps make opening, closing, and other operations faster.</description></item><item><title>Linux: File Systems And Storage</title><link>https://docs.ayshell.dev/posts/linux/file-systems-storage/</link><pubDate>Wed, 18 Jun 2025 16:12:05 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/file-systems-storage/</guid><description>How to manage file systems and storage in Linux operating systems.</description></item><item><title>Linux: Fundamentals Of File Permissions And Ownership</title><link>https://docs.ayshell.dev/posts/linux/file-permissions/</link><pubDate>Tue, 17 Jun 2025 22:07:53 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/file-permissions/</guid><description>How to manage file permissions and ownership in Linux based operating systems.</description></item><item><title>Linux: User &amp; Group Management</title><link>https://docs.ayshell.dev/posts/linux/user-group/</link><pubDate>Sun, 15 Jun 2025 14:51:16 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/user-group/</guid><description>How to manage users &amp;amp; groups on Linux based operating systems, with exercise based explanations!</description></item><item><title>Instant Page Deploy Hugo: papermod</title><link>https://docs.ayshell.dev/posts/hugo/instant-deploy-papermod/</link><pubDate>Sun, 11 May 2025 12:45:30 +0530</pubDate><guid>https://docs.ayshell.dev/posts/hugo/instant-deploy-papermod/</guid><description>&lt;h1 id="download-the-latest-version-of-hugo">Download the Latest Version of Hugo&lt;/h1>
&lt;ol>
&lt;li>Visit &lt;a href="https://github.com/gohugoio/hugo/releases/latest">https://github.com/gohugoio/hugo/releases/latest&lt;/a>.&lt;/li>
&lt;li>Download the compatible version of Hugo for your operating system.&lt;/li>
&lt;li>Extract the downloaded archive and move the binary file into &lt;code>/usr/local/bin&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h1 id="1-create-a-site">1. Create a Site&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>hugo new site sitename --format yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># replace sitename with name of your website&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>cd sitename
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="2-installing-papermod">2. Installing PaperMod&lt;/h1>
&lt;blockquote>
&lt;p>&lt;strong>INSTALL&lt;/strong> : Inside the folder of your Hugo site MyFreshWebsite, run:&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git init &lt;span style="color:#75715e">#initialize git as well&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git submodule add --depth&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git submodule update --init --recursive &lt;span style="color:#75715e"># needed when you reclone your repo (submodules may not get cloned automatically)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="3-configuration">3 Configuration&lt;/h1>
&lt;h3 id="31-lets-configure-hugo-to-use-papermod">3.1 Let&amp;rsquo;s Configure &lt;code>hugo&lt;/code> to use &lt;code>PaperMod&lt;/code>&lt;/h3>
&lt;p>The filename &lt;code>hugo.yaml&lt;/code> may vary based on the version, so make sure to rename it to &lt;code>hugo.yaml&lt;/code> if you find any other names. While this might not cause any errors, it will help avoid confusion.&amp;quot;&lt;/p></description></item><item><title>Git Basics: Rebase</title><link>https://docs.ayshell.dev/posts/git/rebasing-tips/</link><pubDate>Tue, 29 Apr 2025 17:27:49 +0530</pubDate><guid>https://docs.ayshell.dev/posts/git/rebasing-tips/</guid><description>Introduction into the git rebase feature, explains how to make changes to branches and commits</description></item><item><title>Linux: Directories</title><link>https://docs.ayshell.dev/posts/linux/linux-directories/</link><pubDate>Sun, 30 Mar 2025 19:41:36 +0530</pubDate><guid>https://docs.ayshell.dev/posts/linux/linux-directories/</guid><description>A table summarizing Linux directories for a quick reference.</description></item><item><title> Generate SSH Keys</title><link>https://docs.ayshell.dev/posts/ssh/ssh/</link><pubDate>Sat, 29 Mar 2025 20:07:55 +0530</pubDate><guid>https://docs.ayshell.dev/posts/ssh/ssh/</guid><description>&lt;h2 id="adding--new-ssh-key">Adding New &lt;code>ssh&lt;/code> Key&lt;/h2>
&lt;ol>
&lt;li>Create &lt;code>.ssh&lt;/code> key:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>ssh-keygen -t rsa -b &lt;span style="color:#ae81ff">4096&lt;/span> -C &lt;span style="color:#e6db74">&amp;#34;email&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Save it the keys in a specific directory location&lt;/p>&lt;/blockquote>
&lt;ol start="2">
&lt;li>Add the key to &lt;code>ssh&lt;/code> agent&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>ssh-add /home/user/.ssh/ssh-filename
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Verify the key has been added&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>ssh-add -l
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Generating public/private rsa key pair.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter file in which to save the key &lt;span style="color:#f92672">(&lt;/span>/home/username/.ssh/id_rsa&lt;span style="color:#f92672">)&lt;/span>: /home/username/.ssh/temp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter passphrase &lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#e6db74">&amp;#34;/home/username/.ssh/temp&amp;#34;&lt;/span> &lt;span style="color:#f92672">(&lt;/span>empty &lt;span style="color:#66d9ef">for&lt;/span> no passphrase&lt;span style="color:#f92672">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter same passphrase again:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Your identification has been saved in /home/username/.ssh/temp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Your public key has been saved in /home/username/.ssh/temp.pub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The key fingerprint is:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>SHA256:zUJ0dU9gncA7rVf6+C5BsMmBVdHmCMUqzkEGWpu6QWM temp@gmail.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The key&lt;span style="color:#e6db74">&amp;#39;s randomart image is:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">+---[RSA 4096]----+
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| +..++=O=o|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| + ++ ++.++|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| E +o . Bo+.|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| o + oo =oo.o|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| o Sooo .o..|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| o .o .o. |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| . .+ |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| o .|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">| +o|
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">+----[SHA256]-----+&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>username@fedora:~$ ssh-add /home/username/.ssh/temp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Identity added: /home/username/.ssh/temp &lt;span style="color:#f92672">(&lt;/span>temp@gmail.com&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>username@fedora:~$ ssh-add -l
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">4096&lt;/span> SHA256:&amp;lt;keys&amp;gt; &amp;lt;email&amp;gt; &lt;span style="color:#f92672">(&lt;/span>RSA&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">4096&lt;/span> SHA256:&amp;lt;keys&amp;gt; &amp;lt;email&amp;gt; &lt;span style="color:#f92672">(&lt;/span>RSA&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">3072&lt;/span> SHA256:&amp;lt;keys&amp;gt; &amp;lt;email&amp;gt; &lt;span style="color:#f92672">(&lt;/span>RSA&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">4096&lt;/span> SHA256:&amp;lt;keys&amp;gt; &amp;lt;email&amp;gt; &lt;span style="color:#f92672">(&lt;/span>RSA&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Git Basics: Essential Commands</title><link>https://docs.ayshell.dev/posts/git/howtousegit/</link><pubDate>Sat, 29 Mar 2025 19:37:21 +0530</pubDate><guid>https://docs.ayshell.dev/posts/git/howtousegit/</guid><description>A quick reference guide to the most essential Git commands for everyday use, including initializing repositories, making commits, branching, and working with remotes.</description></item><item><title>Instant Page Deploy Hugo: holy</title><link>https://docs.ayshell.dev/posts/hugo/instant-deploy-holy/</link><pubDate>Fri, 07 Mar 2025 21:45:47 +0530</pubDate><guid>https://docs.ayshell.dev/posts/hugo/instant-deploy-holy/</guid><description>&lt;p>I noticed that I&amp;rsquo;m keep deploying many pages on Github and still looking at the documentation. So I decided to make a short documentation how to do it fast (keeping me from looking at the documentation)&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Create a &lt;code>hugo&lt;/code> site in a specific directory you want&lt;/strong>:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>hugo new site sitename
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Replace the &lt;code>sitename&lt;/code> with the actual sitename you want to create.&lt;/p>&lt;/blockquote>
&lt;ul>
&lt;li>Head inside the directory(&lt;em>&lt;code>hugo site&lt;/code>&lt;/em>)&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>cd sitename
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Download a theme (&lt;em>we&amp;rsquo;re using &lt;code>holy&lt;/code> theme here&lt;/em>)&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git submodule add https://github.com/serkodev/holy.git themes/holy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo &lt;span style="color:#e6db74">&amp;#34;theme = &amp;#39;holy&amp;#39;&amp;#34;&lt;/span> &amp;gt;&amp;gt; hugo.toml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Let&amp;rsquo;s test it locally!&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>hugo server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;a href="https://github.com/new">&lt;strong>Create a GitHub Repository&lt;/strong>&lt;/a>&lt;/li>
&lt;li>&lt;strong>Head inside the Repository on GitHub&lt;/strong>
&lt;ul>
&lt;li>Goto &lt;code>Settings &amp;gt; Pages&lt;/code>&lt;/li>
&lt;li>Change the &lt;em>&lt;code>Source&lt;/code>&lt;/em> settings to &amp;ldquo;&lt;strong>&lt;code>GitHub Actions&lt;/code>&lt;/strong>&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Create a file named &lt;code>hugo.yaml&lt;/code> inside &lt;code>.github/workflows&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mkdir -p .github/workflows
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>touch .github/workflows/hugo.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>Copy and paste the text into &lt;code>YAML&lt;/code> file&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Sample workflow for building and deploying a Hugo site to GitHub Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Deploy Hugo site to Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">on&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Runs on pushes targeting the default branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">push&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">branches&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">main&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Allows you to run this workflow manually from the Actions tab&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">workflow_dispatch&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">contents&lt;/span>: &lt;span style="color:#ae81ff">read&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">pages&lt;/span>: &lt;span style="color:#ae81ff">write&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">id-token&lt;/span>: &lt;span style="color:#ae81ff">write&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">concurrency&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">group&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;pages&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">cancel-in-progress&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Default to bash&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">defaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">shell&lt;/span>: &lt;span style="color:#ae81ff">bash&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">jobs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Build job&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">build&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">runs-on&lt;/span>: &lt;span style="color:#ae81ff">ubuntu-latest&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">HUGO_VERSION&lt;/span>: &lt;span style="color:#ae81ff">0.144.2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">steps&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Install Hugo CLI&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: |&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;amp;&amp;amp; sudo dpkg -i ${{ runner.temp }}/hugo.deb&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Install Dart Sass&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: &lt;span style="color:#ae81ff">sudo snap install dart-sass&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Checkout&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/checkout@v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">with&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">submodules&lt;/span>: &lt;span style="color:#ae81ff">recursive&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">fetch-depth&lt;/span>: &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Setup Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">id&lt;/span>: &lt;span style="color:#ae81ff">pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/configure-pages@v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Install Node.js dependencies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;[[ -f package-lock.json || -f npm-shrinkwrap.json ]] &amp;amp;&amp;amp; npm ci || true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Build with Hugo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">HUGO_CACHEDIR&lt;/span>: &lt;span style="color:#ae81ff">${{ runner.temp }}/hugo_cache&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">HUGO_ENVIRONMENT&lt;/span>: &lt;span style="color:#ae81ff">production&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">TZ&lt;/span>: &lt;span style="color:#ae81ff">America/Los_Angeles&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: |&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> hugo \
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> --gc \
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> --minify \
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> --baseURL &amp;#34;${{ steps.pages.outputs.base_url }}/&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Upload artifact&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/upload-pages-artifact@v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">with&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">path&lt;/span>: &lt;span style="color:#ae81ff">./public&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Deployment job&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">deploy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">github-pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">url&lt;/span>: &lt;span style="color:#ae81ff">${{ steps.deployment.outputs.page_url }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">runs-on&lt;/span>: &lt;span style="color:#ae81ff">ubuntu-latest&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">needs&lt;/span>: &lt;span style="color:#ae81ff">build&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">steps&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Deploy to GitHub Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">id&lt;/span>: &lt;span style="color:#ae81ff">deployment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/deploy-pages@v4&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="6">
&lt;li>Head inside the root directory of your &lt;code>sitename&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>hugo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git add -A
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git commit -m &lt;span style="color:#e6db74">&amp;#34;deploying the sitename&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git push origin main
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Getting Started with nmcli (NetworkManager CLI)</title><link>https://docs.ayshell.dev/posts/nmcli/nmcli/</link><pubDate>Sun, 23 Feb 2025 18:16:08 +0530</pubDate><guid>https://docs.ayshell.dev/posts/nmcli/nmcli/</guid><description>&lt;h1 id="what-is-nmcli">What is &lt;code>nmcli&lt;/code>?&lt;/h1>
&lt;p>The &lt;code>nmcli&lt;/code> means &lt;strong>NetworkManager Command Line Interface&lt;/strong>. It&amp;rsquo;s command-line utility tool used for controlling &lt;code>NetworkManager&lt;/code> and reporting network status.&lt;/p>
&lt;p>&lt;em>In simple terms, we use that to interact with network related devices.&lt;/em>&lt;/p>
&lt;h2 id="how-to-use-it">How to use it?&lt;/h2>
&lt;p>I don&amp;rsquo;t have proper way to explain, but let&amp;rsquo;s learn it with a case-scenario:&lt;/p>
&lt;h3 id="connect-to-a-wifi-network">Connect to a wifi network:&lt;/h3>
&lt;ol>
&lt;li>Turn on the &lt;code>wifi&lt;/code> module:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo nmcli radio wifi on
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>List the available networks:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo nmcli device wifi list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In case, it didn&amp;rsquo;t display any network, please &lt;code>rescan&lt;/code> the available network and list it:&lt;/p></description></item><item><title>Switch to NVIDIA GPU on Fedora Linux</title><link>https://docs.ayshell.dev/posts/nvidia/switch-nvidia/</link><pubDate>Mon, 27 Jan 2025 20:32:26 +0530</pubDate><guid>https://docs.ayshell.dev/posts/nvidia/switch-nvidia/</guid><description>&lt;blockquote>
&lt;p>&lt;code>Note&lt;/code>: Make sure to &lt;strong>Disable Secure Boot&lt;/strong>, else whatever you do it won&amp;rsquo;t work :)&lt;/p>&lt;/blockquote>
&lt;h1 id="install--switch">Install &amp;amp; Switch&lt;/h1>
&lt;p>&lt;strong>1. Install the required dependencies&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo dnf install akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-cuda
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. Edit the environment configuration file for your shell&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo nano /etc/environment
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3. Add the following lines to enable the GPU&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>__GLX_VENDOR_LIBRARY_NAME&lt;span style="color:#f92672">=&lt;/span>nvidia
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>__NV_PRIME_RENDER_OFFLOAD&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>__VK_LAYER_NV_optimus&lt;span style="color:#f92672">=&lt;/span>NVIDIA_only
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>4. Restart the system&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>sudo reboot
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://github.com/iamyaash/spells/blob/main/content/posts/nvidia/install_nvidia.sh">Download&lt;/a> and execute this script to automate the above process!&lt;/p></description></item></channel></rss>