<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>The Code Wanderer</title>
    <subtitle>Wandering through OpenBSD, privacy, security, programming, and data science. Powered by open source.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://hervyqa.srht.site/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://hervyqa.srht.site"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-01T00:00:00+00:00</updated>
    <id>https://hervyqa.srht.site/atom.xml</id>
    <entry xml:lang="en">
        <title>Configuring GPG &amp; OpenSSH for Git on OpenBSD</title>
        <published>2024-06-19T00:00:00+00:00</published>
        <updated>2026-06-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/blog/configuring-gpg-openssh-for-git/"/>
        <id>https://hervyqa.srht.site/blog/configuring-gpg-openssh-for-git/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/blog/configuring-gpg-openssh-for-git/">&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;gnupg.org&quot;&gt;GnuPG&lt;&#x2F;a&gt; (The GNU Privacy Guard) is one of the standards that
implements OpenPGP as defined by 

&lt;a href=&quot;https:&#x2F;&#x2F;www.ietf.org&#x2F;rfc&#x2F;rfc4880.txt&quot;&gt;rfc4880&lt;&#x2F;a&gt;. The purpose of
GnuPG is to encrypt and sign data and communications, as well as manage
system keys. 

&lt;a href=&quot;https:&#x2F;&#x2F;gnupg.org&quot;&gt;GnuPG&lt;&#x2F;a&gt; is also known as GPG, which refers to
&lt;code&gt;gpg&lt;&#x2F;code&gt; as a CLI tool that facilitates integration with other applications
and supports &lt;em&gt;Secure Socket Shell (SSH)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Since 1997, GnuPG has been one of the free software programs that
cares about user data privacy. GnuPG can be used freely, modified, and
distributed under the GPL license.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;benefits-of-using-gnupg-keys&quot;&gt;Benefits of using GnuPG keys&lt;a class=&quot;post-anchor&quot; href=&quot;#benefits-of-using-gnupg-keys&quot; aria-label=&quot;Anchor link for: benefits-of-using-gnupg-keys&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;By using GnuPG keys, users will get the following three benefits.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data integrity&lt;&#x2F;strong&gt;: GnuPG keys ensure the integrity of digital content
by creating digital signatures. This allows users to verify that the
content has not been tampered with during transit or delivery.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Authentication&lt;&#x2F;strong&gt;: GnuPG keys provide a mechanism for authenticating
the source of digital content. Users can verify that the content
originates from a trusted and verified entity.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Secure communication&lt;&#x2F;strong&gt;: GnuPG keys facilitate secure communication
by enabling encryption. This ensures that only authorized parties can
access encrypted data.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In addition, GnuPG is very useful when working with Git. To implement
it, users will enter a password into the pinentry or cli dialog for the
purpose of providing authentic authentication. Then the username will
appear in each commit with this command, which will show the digital
signature validation in each marker with &lt;code&gt;--gpg-sign&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-gpg-sign&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;sign with gpg key&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;S&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;sign with gpg key&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Once successful, users can view the digital signature on each commit
with the &lt;code&gt;--show-signature&lt;&#x2F;code&gt; parameter.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; show&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; 1af04a6001&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-show-signature&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-comment&quot;&gt;         #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; ^ hash code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It will look like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;commit 1af04a60013c8df1b0107ef29755b70feca402da (HEAD -&amp;gt; main, sh&#x2F;main)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: Signature made Fri 14 Jun 2024 07:44:44 PM WIB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg:                using EDDSA key 5A131FCDDAC2876802F631D1D7B52C04D9B41849&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: Good signature from &amp;quot;Hervy Work Email (Test) &amp;lt;work@mail.org&amp;gt;&amp;quot; [ultimate]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Primary key fingerprint: 5A13 1FCD DAC2 8768 02F6  31D1 D7B5 2C04 D9B4 1849&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Author: Hervy Work Email &amp;lt;work@mail.org&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Date:   Fri Jun 14 19:44:44 2024 +0700&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Written &lt;code&gt;Good signature from&lt;&#x2F;code&gt; the original marker in the log header.
Using GnuPG, Git, and OpenSSH is highly recommended because they can
provide a written validation trail.&lt;&#x2F;p&gt;
&lt;p&gt;This article explains:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;blog&#x2F;configuring-gpg-openssh-for-git&#x2F;.&#x2F;#gnupg-key-configuration&quot;&gt;GnuPG Key Configuration&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;blog&#x2F;configuring-gpg-openssh-for-git&#x2F;.&#x2F;#ssh-key-configuration&quot;&gt;SSH Key Configuration&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;blog&#x2F;configuring-gpg-openssh-for-git&#x2F;.&#x2F;#git-configuration&quot;&gt;Git Configuration&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This article was written using OpenBSD operating system, as the aim is
to narrow the scope of the discussion so that it does not spread to all
operating systems (the article could become pages long if written for
multiple OS). The second reason is that currently, no operating system
other than OpenBSD is installed.&lt;&#x2F;p&gt;
&lt;p&gt;However, please note that all the tools used in this article, including
GnuPG, OpenSSH, and Git, are &lt;em&gt;Open Source&lt;&#x2F;em&gt; and can therefore be used on
other operating systems such as Linux-based, Windows or MacOS. In this
explanation, you can skip to the steps you need.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gnupg-key-configuration&quot;&gt;GnuPG Key Configuration&lt;a class=&quot;post-anchor&quot; href=&quot;#gnupg-key-configuration&quot; aria-label=&quot;Anchor link for: gnupg-key-configuration&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;installing-gnupg&quot;&gt;Installing GnuPG&lt;a class=&quot;post-anchor&quot; href=&quot;#installing-gnupg&quot; aria-label=&quot;Anchor link for: installing-gnupg&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;GnuPG can be installed on various operating systems. Users can choose
the guide based on the operating system they are currently using.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;openbsd&quot;&gt;OpenBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#openbsd&quot; aria-label=&quot;Anchor link for: openbsd&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg_add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; gnupg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;freebsd&quot;&gt;FreeBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#freebsd&quot; aria-label=&quot;Anchor link for: freebsd&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; gnupg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;checking-the-gnupg-version&quot;&gt;Checking the GnuPG version&lt;a class=&quot;post-anchor&quot; href=&quot;#checking-the-gnupg-version&quot; aria-label=&quot;Anchor link for: checking-the-gnupg-version&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The first thing to do after installing GnuPG is to check its version
with &lt;code&gt;gpg&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg (GnuPG) 2.4.5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;libgcrypt 1.10.3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Copyright (C) 2024 g10 Code GmbH&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;License GNU GPL-3.0-or-later &amp;lt;https:&#x2F;&#x2F;gnu.org&#x2F;licenses&#x2F;gpl.html&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This is free software: you are free to change and redistribute it.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;There is NO WARRANTY, to the extent permitted by law.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Home: &#x2F;home&#x2F;hervyqa&#x2F;.gnupg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Supported algorithms:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        CAMELLIA128, CAMELLIA192, CAMELLIA256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Compression: Uncompressed, ZIP, ZLIB, BZIP2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For example, the version above uses version &lt;code&gt;2.4.5&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;creating-a-new-gnupg-key&quot;&gt;Creating a new GnuPG key&lt;a class=&quot;post-anchor&quot; href=&quot;#creating-a-new-gnupg-key&quot; aria-label=&quot;Anchor link for: creating-a-new-gnupg-key&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;If the version you are using is &lt;code&gt;2.1.17&lt;&#x2F;code&gt; or above, it is recommended to
use this terminal command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-full-generate-key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Meanwhile, if the version is below &lt;code&gt;2.1.17&lt;&#x2F;code&gt;, use &lt;code&gt;--gen-key&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-default-new-key-algo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; rsa4096&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-gen-key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;selecting-a-key-algorithm&quot;&gt;Selecting a key algorithm&lt;a class=&quot;post-anchor&quot; href=&quot;#selecting-a-key-algorithm&quot; aria-label=&quot;Anchor link for: selecting-a-key-algorithm&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;After running the command, a selection of key algorithm types to use
will appear.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This is free software: you are free to change and redistribute it.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;There is NO WARRANTY, to the extent permitted by law.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: directory &amp;#39;&#x2F;home&#x2F;hervyqa&#x2F;.gnupg&amp;#39; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select what kind of key you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (1) RSA and RSA&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (2) DSA and Elgamal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) DSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) RSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (9) ECC (sign and encrypt) *default*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (10) ECC (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (14) Existing key from card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are several options: 1, 2, 3, 4, 9, 10, 14. Just press {{&amp;lt; kbd
Enter &amp;gt;}} to select number 9 &lt;code&gt;ECC (sign and encrypt)&lt;&#x2F;code&gt; as the default.&lt;&#x2F;p&gt;
&lt;p&gt;Next, select the type of elliptic curve to use.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select which elliptic curve you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (1) Curve 25519 *default*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) NIST P-384&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (6) Brainpool P-256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Press &lt;kbd&gt;enter&lt;&#x2F;kbd&gt; to select number 1 &lt;code&gt;Curve 25519&lt;&#x2F;code&gt; as the
default.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;selecting-the-gnupg-key-expiration-time-limit&quot;&gt;Selecting the GnuPG key expiration time limit&lt;a class=&quot;post-anchor&quot; href=&quot;#selecting-the-gnupg-key-expiration-time-limit&quot; aria-label=&quot;Anchor link for: selecting-the-gnupg-key-expiration-time-limit&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Next, select the key expiration time. It is recommended to select 0 to
choose no expiration time.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please specify how long the key should be valid.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         0 = key does not expire&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;  = key expires in n days&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;w = key expires in n weeks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;m = key expires in n months&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;y = key expires in n years&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Select &lt;kbd&gt;0&lt;&#x2F;kbd&gt; to choose number 0 &lt;code&gt;key does not expire&lt;&#x2F;code&gt; and
select &lt;kbd&gt;y&lt;&#x2F;kbd&gt; to confirm.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key is valid for? (0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key does not expire at all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Is this correct? (y&#x2F;N)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;enter-gnupg-user-data&quot;&gt;Enter GnuPG user data&lt;a class=&quot;post-anchor&quot; href=&quot;#enter-gnupg-user-data&quot; aria-label=&quot;Anchor link for: enter-gnupg-user-data&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Next, enter the user’s GnuPG data. Enter the name, email address, and
comments. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Real name: Hervy Work Email&lt;&#x2F;li&gt;
&lt;li&gt;Email address: &lt;a href=&quot;mailto:work@mail.org&quot;&gt;work@mail.org&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Comments: Test&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Real name: Hervy Work Email&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Email address: worka@mail.org&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Comment: Test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The result of the GnuPG key user data will look like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;You selected this USER-ID:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;quot;Hervy Work Email (Test) &amp;lt;work@mail.org&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want to confirm, select &lt;kbd&gt;o&lt;&#x2F;kbd&gt; (okay).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Change (N)ame, (C)omment, (E)mail or (O)kay&#x2F;(Q)uit? o&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ensure that no errors appear in the terminal output. An example of
successful output is shown below.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;We need to generate a lot of random bytes. It is a good idea to perform&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;some other action (type on the keyboard, move the mouse, utilize the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;disks) during the prime generation; this gives the random number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;generator a better chance to gain enough entropy.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;We need to generate a lot of random bytes. It is a good idea to perform&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;some other action (type on the keyboard, move the mouse, utilize the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;disks) during the prime generation; this gives the random number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;generator a better chance to gain enough entropy.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: &#x2F;home&#x2F;hervyqa&#x2F;.gnupg&#x2F;trustdb.gpg: trustdb created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: directory &amp;#39;&#x2F;home&#x2F;hervyqa&#x2F;.gnupg&#x2F;openpgp-revocs.d&amp;#39; created&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: revocation certificate stored as &amp;#39;&#x2F;home&#x2F;hervyqa&#x2F;.gnupg&#x2F;openpgp-revocs.d&#x2F;5A131FCDDAC2876802F631D1D7B52C04D9B41849.rev&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;public and secret key created and signed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pub   ed25519 2024-06-06 [SC]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      5A131FCDDAC2876802F631D1D7B52C04D9B41849&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid                      Hervy Work Email (Test) &amp;lt;work@mail.org&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sub   cv25519 2024-06-06 [E]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;viewing-gnupg-key-id&quot;&gt;Viewing GnuPG key ID&lt;a class=&quot;post-anchor&quot; href=&quot;#viewing-gnupg-key-id&quot; aria-label=&quot;Anchor link for: viewing-gnupg-key-id&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;gpg&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-list-secret-keys&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-keyid-format&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; long&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;home&#x2F;hervyqa&#x2F;.gnupg&#x2F;pubring.kbx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec   ed25519&#x2F;D7B52C04D9B41849 2024-06-06 [SC]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Key fingerprint = 5A13 1FCD DAC2 8768 02F6  31D1 D7B5 2C04 D9B4 1849&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid                 [ultimate] Hervy Work Email (Test) &amp;lt;work@mail.org&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   cv25519&#x2F;1CC5EEC8BDE8BC06 2024-06-06 [E]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It should be noted that the user keys are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ID key = &lt;strong&gt;D7B52C04D9B41849&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Fingerprint key = &lt;strong&gt;5A13 1FCD DAC2 8768 02F6 31D1 D7B5 2C04 D9B4 1849&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The GnuPG ID key can be integrated into the OpenSSH settings in the next step.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ssh-key-configuration&quot;&gt;SSH Key Configuration&lt;a class=&quot;post-anchor&quot; href=&quot;#ssh-key-configuration&quot; aria-label=&quot;Anchor link for: ssh-key-configuration&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;openssh.org&quot;&gt;OpenSSH&lt;&#x2F;a&gt; (OpenBSD Secure Shell) is a tool for securing
network protocols based on &lt;em&gt;Secure Socket Shell&lt;&#x2F;em&gt;. OpenSSH is integrated
with several operating systems such as BSD, Windows, macOS, and most
Linux distributions.&lt;&#x2F;p&gt;
&lt;p&gt;SSH has several contexts, including:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Refers to the &lt;strong&gt;Secure Socket Shell&lt;&#x2F;strong&gt; network protocol.&lt;&#x2F;li&gt;
&lt;li&gt;Refers to the &lt;strong&gt;OpenSSH&lt;&#x2F;strong&gt; software.&lt;&#x2F;li&gt;
&lt;li&gt;Refers to a commercial company called 

&lt;a href=&quot;https:&#x2F;&#x2F;www.ssh.com&quot;&gt;SSH.com&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;For clarification, this article uses two contexts, namely numbers 1
and 2. Number 3 is not possible because it is not the subject of this
article. To be clear, this article only uses these two contexts.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;SSH as a network protocol, which refers to &lt;strong&gt;Secure Socket Shell&lt;&#x2F;strong&gt;.
Therefore, &lt;strong&gt;SSH keys&lt;&#x2F;strong&gt; refer to the authentication keys used for the
SSH network protocol.&lt;&#x2F;li&gt;
&lt;li&gt;The software that can manage, run, and generate SSH keys is
&lt;strong&gt;OpenSSH&lt;&#x2F;strong&gt; software.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;installing-openssh&quot;&gt;Installing OpenSSH&lt;a class=&quot;post-anchor&quot; href=&quot;#installing-openssh&quot; aria-label=&quot;Anchor link for: installing-openssh&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Similar to GnuPG, &lt;strong&gt;OpenSSH&lt;&#x2F;strong&gt; can be installed on any platform,
especially BSD dan Linux-based.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;openbsd-1&quot;&gt;OpenBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#openbsd-1&quot; aria-label=&quot;Anchor link for: openbsd-1&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg_add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; openssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;freebsd-1&quot;&gt;FreeBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#freebsd-1&quot; aria-label=&quot;Anchor link for: freebsd-1&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; openssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;checking-the-openssh-version&quot;&gt;Checking the OpenSSH version&lt;a class=&quot;post-anchor&quot; href=&quot;#checking-the-openssh-version&quot; aria-label=&quot;Anchor link for: checking-the-openssh-version&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Each operating system may have a different version of OpenSSH. Users can
view the Git version with this command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;V&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OpenSSH_9.7p1, OpenSSL 3.0.13 30 Jan 2024&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For example, the version above uses version &lt;code&gt;9.7p1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;checking-ssh-keys&quot;&gt;Checking SSH Keys&lt;a class=&quot;post-anchor&quot; href=&quot;#checking-ssh-keys&quot; aria-label=&quot;Anchor link for: checking-ssh-keys&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;SSH keys are used for remote control authentication. They are most
commonly used to log in to git forges such as sourcehut, github, or
gitlab.&lt;&#x2F;p&gt;
&lt;p&gt;Before configuring, make sure there are no SSH keys in the &lt;code&gt;~&#x2F;.ssh&lt;&#x2F;code&gt;
directory. You can check this with the following terminal command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ls&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;al&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Permissions Size User    Date Modified Name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rw-------   203 hervyqa 21 Mar 07:09  config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rw-------   464 hervyqa 21 Mar 07:09  id_ed25519&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rw-------    99 hervyqa 21 Mar 07:09  id_ed25519.pub&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.rw-------  3.6k hervyqa 21 Mar 07:09  known_hosts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Generally, there are three types of public key files:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;id_rsa.pub&lt;&#x2F;li&gt;
&lt;li&gt;id_ecdsa.pub&lt;&#x2F;li&gt;
&lt;li&gt;id_ed25519.pub&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If it is still empty, you can proceed to the next step to create a new
SSH key.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;creating-a-new-ssh-key&quot;&gt;Creating a new SSH key&lt;a class=&quot;post-anchor&quot; href=&quot;#creating-a-new-ssh-key&quot; aria-label=&quot;Anchor link for: creating-a-new-ssh-key&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh-keygen&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ed25519&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;C&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;work@mail.com&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If it doesn’t work, and you get an &lt;code&gt;invalid format&lt;&#x2F;code&gt; or &lt;code&gt;feature not supported&lt;&#x2F;code&gt; error, then there is hardware security that requires the use
of the &lt;code&gt;ecdsa-sk&lt;&#x2F;code&gt; algorithm.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh-keygen&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ecdsa-sk&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;C&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;work@mail.com&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Just press &lt;kbd&gt;enter&lt;&#x2F;kbd&gt; to select the default directory location.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Generating public&#x2F;private ed25519 key pair.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Enter file in which to save the key (&#x2F;home&#x2F;hervyqa&#x2F;.ssh&#x2F;id_ed25519): (ENTER)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Created directory &amp;#39;&#x2F;home&#x2F;hervyqa&#x2F;.ssh&amp;#39;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Next, enter the user’s secret password.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Enter passphrase (empty for no passphrase):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Enter same passphrase again:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If successful, the output will look like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your identification has been saved in &#x2F;home&#x2F;hervyqa&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your public key has been saved in &#x2F;home&#x2F;hervyqa&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;The key fingerprint is:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHA256:KUfzOkl2FyOf5&#x2F;30nIEH60jrdNV2HafUCl8fdjgVBL8 work@mail.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;The key&amp;#39;s randomart image is:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+--[ED25519 256]--+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|             .ooo|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|              .+ |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|        o . + +==|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|       . + o B.=X|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|      . S o +.=E*|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|       = + . o=o.|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|        +  o +.oo|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|         .o = .o=|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|          .+ . .+|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+----[SHA256]-----+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Please note, based on the output above, there are two files that you
need to know about:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The private&#x2F;secret key is located at: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;The public key is located at: &lt;code&gt;~&#x2F;.ssh&#x2F;id_ed25519.pub&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The key that can be shared is &lt;code&gt;id_ed25519.pub&lt;&#x2F;code&gt; because it is public.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;changing-the-ssh-email&quot;&gt;Changing the SSH Email&lt;a class=&quot;post-anchor&quot; href=&quot;#changing-the-ssh-email&quot; aria-label=&quot;Anchor link for: changing-the-ssh-email&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;If you want to change the old SSH email name, you can use the following
command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh-keygen&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;C&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;newusername@mail.com&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c&lt;&#x2F;code&gt; replaces the comment in the private and public keys.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;-f&lt;&#x2F;code&gt; is the name of the private key file.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;-C&lt;&#x2F;code&gt; is the comment name of the generated key.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;adding-ssh-keys-to-ssh-agent&quot;&gt;Adding SSH Keys to ssh-agent&lt;a class=&quot;post-anchor&quot; href=&quot;#adding-ssh-keys-to-ssh-agent&quot; aria-label=&quot;Anchor link for: adding-ssh-keys-to-ssh-agent&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;By adding SSH keys to &lt;code&gt;ssh-agent&lt;&#x2F;code&gt;, if you are working with
&lt;code&gt;git&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;gitui&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;lazygit&lt;&#x2F;code&gt; in a terminal environment, you only need to
enter your password once. When &lt;code&gt;git push&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;git pull&lt;&#x2F;code&gt; with SSH, the
command will be executed directly without entering a password in the
future. Therefore, &lt;code&gt;ssh-agent&lt;&#x2F;code&gt; is very useful and convenient for users.&lt;&#x2F;p&gt;
&lt;p&gt;The following is the command to run ssh-agent in the background.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;eval&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh-agent&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then add the private key with ssh-add.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;ssh-add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.ssh&#x2F;id_ed25519&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;git-configuration&quot;&gt;Git Configuration&lt;a class=&quot;post-anchor&quot; href=&quot;#git-configuration&quot; aria-label=&quot;Anchor link for: git-configuration&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;installing-git&quot;&gt;Installing Git&lt;a class=&quot;post-anchor&quot; href=&quot;#installing-git&quot; aria-label=&quot;Anchor link for: installing-git&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Git can also be installed on any platform, especially BSD and
Linux-based.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;openbsd-2&quot;&gt;OpenBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#openbsd-2&quot; aria-label=&quot;Anchor link for: openbsd-2&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg_add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;freebsd-2&quot;&gt;FreeBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#freebsd-2&quot; aria-label=&quot;Anchor link for: freebsd-2&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;pkg&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;checking-the-git-version&quot;&gt;Checking the Git version&lt;a class=&quot;post-anchor&quot; href=&quot;#checking-the-git-version&quot; aria-label=&quot;Anchor link for: checking-the-git-version&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Each operating system may have a different Git version. Users can view
the Git version with this command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git version 2.44.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For example, the version above uses version &lt;code&gt;2.44.1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;adding-username-and-email&quot;&gt;Adding Username and Email&lt;a class=&quot;post-anchor&quot; href=&quot;#adding-username-and-email&quot; aria-label=&quot;Anchor link for: adding-username-and-email&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Add an active username and email. The username uses a name from a git
forge account such as Sourehut, Github, Gitlab, Codeberg, or others. For
example, we will use &lt;code&gt;hervyqa&lt;&#x2F;code&gt; and &lt;code&gt;work@mail.com&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; user.name&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;hervyqa&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; user.email&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;work@mail.org&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;adding-gnupg-key-id-to-git&quot;&gt;Adding GnuPG Key ID to Git&lt;a class=&quot;post-anchor&quot; href=&quot;#adding-gnupg-key-id-to-git&quot; aria-label=&quot;Anchor link for: adding-gnupg-key-id-to-git&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Next, add the GnuPG key ID to the Git configuration. The ID can be found
in &lt;a href=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;blog&#x2F;configuring-gpg-openssh-for-git&#x2F;.&#x2F;#viewing-gnupg-key-id&quot;&gt;how to view GnuPG key ID&lt;&#x2F;a&gt; in the previous
step.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; user.signingkey&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; D7B52C04D9B41849&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you don’t want to add &lt;code&gt;--gpg-sign&lt;&#x2F;code&gt; manually, you can add this
configuration.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commit.gpgsign&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;At the same time, if you want to create a tag without manually adding
&lt;code&gt;--gpg-sign&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tag.gpgsign&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Additional settings to change the branch name from &lt;code&gt;master&lt;&#x2F;code&gt; to &lt;code&gt;main&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; init.defaultBranch&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;viewing-all-git-configurations&quot;&gt;Viewing All Git Configurations&lt;a class=&quot;post-anchor&quot; href=&quot;#viewing-all-git-configurations&quot; aria-label=&quot;Anchor link for: viewing-all-git-configurations&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;If you want to view the configurations that have been set previously,
you can use the command below.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; config&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The configuration can also be viewed in the &lt;code&gt;~&#x2F;.config&#x2F;git&lt;&#x2F;code&gt; directory.
The configuration looks something like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ~&#x2F;.config&#x2F;git&#x2F;config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[commit]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        gpgSign = true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[init]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        defaultBranch = &amp;quot;main&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[tag]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        gpgSign = true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[user]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        email = &amp;quot;work@mail.org&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        name = &amp;quot;Hervy Work Email&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        signingKey = &amp;quot;D7B52C04D9B41849&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;in-conclusion&quot;&gt;In conclusion&lt;a class=&quot;post-anchor&quot; href=&quot;#in-conclusion&quot; aria-label=&quot;Anchor link for: in-conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Thus, the explanation above uses the CLI, which takes longer and is not
instantaneous. Users can use GUI (Client) software for managing GnuPG,
OpenSSH, and Git. However, that is not the purpose here. The hope is
that readers will understand the CLI process and commands so that they
can better understand the process. Of course, increasing literacy in
the use of OpenSSH and Git is very helpful for software development and
programming processes.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Industrial Revolution 4.0 for University</title>
        <published>2024-05-18T00:00:00+00:00</published>
        <updated>2026-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/talks/industrial-revolution/"/>
        <id>https://hervyqa.srht.site/talks/industrial-revolution/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/talks/industrial-revolution/">&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;a class=&quot;post-anchor&quot; href=&quot;#abstract&quot; aria-label=&quot;Anchor link for: abstract&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;The Fourth Industrial Revolution has brought significant changes across
various aspects of society, including the education sector. Therefore,
understanding its concepts, objectives, and impacts has become essential
for students as the younger generation.&lt;&#x2F;p&gt;
&lt;p&gt;This learning material aims to provide an understanding of the meaning
and purpose of the Fourth Industrial Revolution, its impacts on
different sectors particularly education and the role students should
play in responding to the era of digital transformation.&lt;&#x2F;p&gt;
&lt;p&gt;Through this learning, participants are expected to gain broader
insights into the Fourth Industrial Revolution, recognize opportunities
arising from technological advancements, and develop relevant
competencies to adapt and contribute effectively in the future.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>SourceHut: An Open Source Git Forge Alternative to GitHub</title>
        <published>2024-04-02T00:00:00+00:00</published>
        <updated>2026-06-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/blog/sourcehut-open-source-git-forge/"/>
        <id>https://hervyqa.srht.site/blog/sourcehut-open-source-git-forge/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/blog/sourcehut-open-source-git-forge/">&lt;p&gt;As a software developer, you are certainly familiar with GitHub
as a git repository hosting provider, also known as a &lt;em&gt;git forge&lt;&#x2F;em&gt;.
Besides GitHub, there are other alternatives such as Gitlab, Codeberg,
SourceForge, and Bitbucket. I have used all of them, but I will not
discuss them here.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;benefits-of-using-git-forge&quot;&gt;Benefits of using Git Forge&lt;a class=&quot;post-anchor&quot; href=&quot;#benefits-of-using-git-forge&quot; aria-label=&quot;Anchor link for: benefits-of-using-git-forge&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Before using a &lt;em&gt;git forge&lt;&#x2F;em&gt; such as SourceHut, it is important to
understand the general benefits of using a &lt;em&gt;git forge&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Facilitates code collaboration. If you are working with a team, it
is recommended to use a &lt;em&gt;git forge&lt;&#x2F;em&gt; because of the many features it
offers.&lt;&#x2F;li&gt;
&lt;li&gt;Monitors code changes before they are merged into the main branch.
Monitoring code results is very important for project managers who
need to check code quality.&lt;&#x2F;li&gt;
&lt;li&gt;Serves as a portfolio for developers. Various projects that have been
worked on can be made into a public portfolio that can be used as
a reference.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;With the various benefits mentioned above, developers should have one of
these &lt;em&gt;git forge&lt;&#x2F;em&gt; institutions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-sourcehut&quot;&gt;Why SourceHut?&lt;a class=&quot;post-anchor&quot; href=&quot;#why-sourcehut&quot; aria-label=&quot;Anchor link for: why-sourcehut&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&quot;&gt;SourceHut&lt;&#x2F;a&gt; is a cloud-based git repository hosting provider
for managing project code. Of course, SourceHut is also open source
software that can be customized by its users.&lt;&#x2F;p&gt;
&lt;p&gt;So, what are the benefits of using SourceHut over other git forges? There are
several interesting facts that have been discovered.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;free-and-open-source-software&quot;&gt;Free and open source software&lt;a class=&quot;post-anchor&quot; href=&quot;#free-and-open-source-software&quot; aria-label=&quot;Anchor link for: free-and-open-source-software&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&quot;&gt;SourceHut&lt;&#x2F;a&gt; is a free and open source &lt;em&gt;git forge&lt;&#x2F;em&gt; software
under the &lt;em&gt;GNU Affero General Public License&lt;&#x2F;em&gt; (AGPL 3.0). Unlike GitHub
or GitLab, SourceHut is 100% open source. You can view, access, and
modify the sourcehut source code at 

&lt;a href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~sircmpwn&#x2F;sourcehut&quot;&gt;SourceHut Source&lt;&#x2F;a&gt;. Compared to
other &lt;em&gt;git forges&lt;&#x2F;em&gt; such as GitHub, this is impossible to access because
only authorized personnel within the company know the source code.
Sourcehut can even be installed independently.&lt;&#x2F;p&gt;
&lt;p&gt;Some &lt;em&gt;git forges&lt;&#x2F;em&gt; that have been used along with their source code.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Git Forge&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Source&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;SourceHut&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~sircmpwn&#x2F;sourcehut&quot;&gt;Open Source&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;GitLab&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab&quot;&gt;Open Source&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;GitHub&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Proprietary&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;BitBucket&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Proprietary&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;blockquote class=&quot;markdown-alert-important&quot;&gt;
&lt;p&gt;Open source is software code that is open, while proprietary is closed
program code that is not shared publicly. Only those with
authorization can access it.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Sourcehut was not founded by a large company. It was founded by 

&lt;a href=&quot;https:&#x2F;&#x2F;drewdevault.com&quot;&gt;Drew DeVault&lt;&#x2F;a&gt; as CEO and maintainer of
the 

&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.freedesktop.org&#x2F;wlroots&#x2F;wlroots&quot;&gt;Wlroot&lt;&#x2F;a&gt; project and 

&lt;a href=&quot;https:&#x2F;&#x2F;swaywm.org&quot;&gt;Swaywm&lt;&#x2F;a&gt; projects,
along with 

&lt;a href=&quot;https:&#x2F;&#x2F;emersion.fr&quot;&gt;Simon Ser&lt;&#x2F;a&gt; as release manager of the 

&lt;a href=&quot;https:&#x2F;&#x2F;wayland.freedesktop.org&quot;&gt;Wayland&lt;&#x2F;a&gt; project. In addition, Sourcehut is supported
by the talented engineer 

&lt;a href=&quot;https:&#x2F;&#x2F;bitfehler.srht.site&quot;&gt;Conrad Hoffmann&lt;&#x2F;a&gt;, who contributes to
the 

&lt;a href=&quot;https:&#x2F;&#x2F;kde.org&quot;&gt;KDE&lt;&#x2F;a&gt; project, 

&lt;a href=&quot;https:&#x2F;&#x2F;www.haproxy.org&quot;&gt;HAProxy&lt;&#x2F;a&gt;, and the 

&lt;a href=&quot;https:&#x2F;&#x2F;prometheus.io&quot;&gt;Prometheus ecosystem&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;owned-code-data&quot;&gt;Owned code data&lt;a class=&quot;post-anchor&quot; href=&quot;#owned-code-data&quot; aria-label=&quot;Anchor link for: owned-code-data&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;No party at sourcehut allows for data sharing, whether code data or
user data. Judging from the founders’ track record, they have long been
creating various types of free software that allows for extreme caution
regarding user privacy.&lt;&#x2F;p&gt;
&lt;p&gt;Are you familiar with 

&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;features&#x2F;copilot&quot;&gt;Github Copilot&lt;&#x2F;a&gt;, some of you may have
used it. The code generated by AI is code under the GPL license that is
used as a &lt;em&gt;proprietary&lt;&#x2F;em&gt; product, which of course violates the license
policy itself. At sourcehut, the program code belongs entirely to the
&lt;em&gt;programmer&lt;&#x2F;em&gt; or &lt;em&gt;developer&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quick-and-lightweight-access&quot;&gt;Quick and lightweight access&lt;a class=&quot;post-anchor&quot; href=&quot;#quick-and-lightweight-access&quot; aria-label=&quot;Anchor link for: quick-and-lightweight-access&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Sourcehut’s performance is faster than other git forges. It’s as light
as opening plain text. Sourcehut’s workflow itself also uses plain text
email to send patches, reviews, replies, or comments. There is no pull
request (PR) feature, but it uses email-based communication similar to
that used in Linux kernel development, which uses plain text email. For
your information, Git itself is basically developed 

&lt;a href=&quot;https:&#x2F;&#x2F;lore.kernel.org&#x2F;git&quot;&gt;based on email&lt;&#x2F;a&gt; to this day, not based on pull requests like
commercial git forges currently do.&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-tip&quot;&gt;
&lt;p&gt;If you are interested in why &lt;em&gt;plain text email&lt;&#x2F;em&gt; is used instead of
HTML email, we recommend visiting 

&lt;a href=&quot;https:&#x2F;&#x2F;useplaintext.email&quot;&gt;Use Plain Text&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Drew DeVault is also the developer of 

&lt;a href=&quot;https:&#x2F;&#x2F;aerc-mail.org&quot;&gt;Aerc&lt;&#x2F;a&gt;, a TUI-based
&lt;em&gt;email client&lt;&#x2F;em&gt; that supports &lt;em&gt;vim workflow&lt;&#x2F;em&gt;, making it easier for
&lt;em&gt;keyboard centric&lt;&#x2F;em&gt; developers.&lt;&#x2F;p&gt;
&lt;p&gt;Sourcehut even claims to be the fastest of other &lt;em&gt;git forge&lt;&#x2F;em&gt; software
such as Pagure, GitHub, GitLab, Bitbucket, and Codeberg. For more
details, please refer to the link 

&lt;a href=&quot;https:&#x2F;&#x2F;forgeperf.org&quot;&gt;Forgeperf&lt;&#x2F;a&gt; to find out
more detailed differences.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;independent-and-modular&quot;&gt;Independent and modular&lt;a class=&quot;post-anchor&quot; href=&quot;#independent-and-modular&quot; aria-label=&quot;Anchor link for: independent-and-modular&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;SourceHut can be installed independently by users. For installation
instructions, refer to the SourceHut installation section at


&lt;a href=&quot;https:&#x2F;&#x2F;man.sr.ht&#x2F;installation.md&quot;&gt;SourceHut Installation&lt;&#x2F;a&gt;. The &lt;code&gt;sr.ht&lt;&#x2F;code&gt; service requires a 

&lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&quot;&gt;PostgreSQL&lt;&#x2F;a&gt; server, 

&lt;a href=&quot;https:&#x2F;&#x2F;redis.io&quot;&gt;Redis&lt;&#x2F;a&gt; server, and
mail server. Since the sourcehut source code is open, it can be
installed as long as you have the infrastructure for CI and CD &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;parasrah2022&quot;&gt;(&lt;a href=&quot;#ref-parasrah2022&quot;&gt;Parasrah&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Of course, there are no
subscription or licensing fees if you install sourcehut yourself.
Anyone can also contribute to sourcehut for service development &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;marcin_strus2022&quot;&gt;(&lt;a href=&quot;#ref-marcin_strus2022&quot;&gt;Marcin Struś&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Sourcehut not only provides git repository services, but also many other
services, including.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Service&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;builds.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;em&gt;Continuous integration&lt;&#x2F;em&gt; service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;git.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Git repository service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;hg.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Mercurial repository service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;hub.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Project index and organization service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;lists.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Mailing list service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;man.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Project wiki service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;meta.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Authentication and user account service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;pages.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Static web service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;paste.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Code pasting service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;todo.sr.ht&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Issue and bug tracker service.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;It does require more effort to build the infrastructure, manage
CI&#x2F;CD, ensure stability, and patch system vulnerabilities. It would be
troublesome if that happened. But sourcehut also has several parameters
that can be considered for installation and use in production.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;How much is it tied to third-party agencies?&lt;&#x2F;li&gt;
&lt;li&gt;How good is the code quality?&lt;&#x2F;li&gt;
&lt;li&gt;How many bugs have been found?&lt;&#x2F;li&gt;
&lt;li&gt;How are these bugs resolved?&lt;&#x2F;li&gt;
&lt;li&gt;How many people are involved?&lt;&#x2F;li&gt;
&lt;li&gt;And so on.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Based on these parameters, sourcehut is still in the “safe” category.
In fact, one of the Android-based operating systems called PostMarketOS
is also seriously considering using sourcehut for its independent
infrastructure &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;postmarketos2022&quot;&gt;(&lt;a href=&quot;#ref-postmarketos2022&quot;&gt;PostMarketOS&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you use a Nix-based operating system, it is very easy to install
sourcehut, because there is already an option to declare it that is
integrated with PostgreSQL and Redis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;affordable-costs&quot;&gt;Affordable costs&lt;a class=&quot;post-anchor&quot; href=&quot;#affordable-costs&quot; aria-label=&quot;Anchor link for: affordable-costs&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Currently, sourcehut is entering the &lt;em&gt;alpha&lt;&#x2F;em&gt; development stage, where
users can use all available features except the &lt;em&gt;build&lt;&#x2F;em&gt;&#x2F;&lt;em&gt;deploy&lt;&#x2F;em&gt; system
at 

&lt;a href=&quot;https:&#x2F;&#x2F;build.sr.ht&quot;&gt;SourceHut Build&lt;&#x2F;a&gt;. To use this feature, users are required to
pay for the &lt;em&gt;build&lt;&#x2F;em&gt; system service. If anything, this is not a payment,
but rather a contribution or donation to cover living expenses. For
example, to cover the electricity, taxes, and accommodation costs of
sourcehut developers. Uniquely, sourcehut does not have any mandatory
pricing plan categories, meaning that each category has the same
facilities despite having different prices. More details are available
at sourcehut 

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&#x2F;pricing&quot;&gt;SourceHut Pricing&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Amateur Hacker: 2 USD&#x2F;month or 20 USD&#x2F;year&lt;&#x2F;li&gt;
&lt;li&gt;Typical Hacker: 5 USD&#x2F;month or 50 USD&#x2F;year&lt;&#x2F;li&gt;
&lt;li&gt;Professional Hacker: 10 USD&#x2F;month or 100 USD&#x2F;year&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Converted to Indonesian rupiah at a rate of Rp16,000, this becomes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Amateur Hacker: Rp320,000&#x2F;year&lt;&#x2F;li&gt;
&lt;li&gt;Typical Hacker: Rp800,000&#x2F;year&lt;&#x2F;li&gt;
&lt;li&gt;Professional Hacker: Rp1,600,000&#x2F;year&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The facilities and features are the same for all three categories. Users
are free to choose the category they want depending on their financial
needs. Payment is also easy via credit card, Stripe, or cryptocurrency.&lt;&#x2F;p&gt;
&lt;p&gt;How can it be so cheap? For example, renting a VPS costs Rp50,000 per
month, or Rp600,000 per year. This is cheaper than Sourcehut, which
costs Rp320,000 (Amateur Hacker), or 46.6% cheaper than renting a VPS
yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Why pay for a CI&#x2F;CD deployment system when other Git forges like GitHub
and GitLab are free? Actually, other Git forges aren’t free. Users don’t
pay because someone else is paying behind the scenes, like many venture
capital firms (investors) sponsoring those Git forge companies. As for
Sourcehut, we all know where it stands.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;no-tracking-and-advertising&quot;&gt;No tracking and advertising&lt;a class=&quot;post-anchor&quot; href=&quot;#no-tracking-and-advertising&quot; aria-label=&quot;Anchor link for: no-tracking-and-advertising&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;So far, since this article was written, no advertisements have been
found on SourceHut. The SourceHut homepage also states that there is no
tracking or advertising displayed on SourceHut. In fact, all features
work without JavaScript.&lt;&#x2F;p&gt;
&lt;p&gt;SourceHut is simple and lightweight. Don’t be fooled by the classic look
of the website, which lacks any artistic flair. Visually (UI), it may
be considered poor because there are no animations, motion, pop-ups,
or other bells and whistles. However, in terms of user experience (UX),
sourcehut is very responsive, although it takes some getting used to
using the email workflow.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-existence-of-hut-as-a-cli-tool-supporting-sourcehut&quot;&gt;The existence of &lt;code&gt;hut&lt;&#x2F;code&gt; as a CLI tool supporting sourcehut&lt;a class=&quot;post-anchor&quot; href=&quot;#the-existence-of-hut-as-a-cli-tool-supporting-sourcehut&quot; aria-label=&quot;Anchor link for: the-existence-of-hut-as-a-cli-tool-supporting-sourcehut&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;sr.ht&#x2F;~emersion&#x2F;hut&quot;&gt;Hut&lt;&#x2F;a&gt; is a CLI application for interacting with 

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&quot;&gt;SourceHut&lt;&#x2F;a&gt;. It functions to monitor system deployment work,
view tickets, patch lists, git repositories, and more. It can even be
specified by name, owner, or URL.&lt;&#x2F;p&gt;
&lt;p&gt;With &lt;code&gt;hut&lt;&#x2F;code&gt;, it is easier to manage sourcehut repositories, eliminating
the need to open the website to access sourcehut. For the first setup,
&lt;code&gt;hut init&lt;&#x2F;code&gt; is required to initialize a token that identifies the user
account.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; hut&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; help&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hut is a CLI tool for sr.ht&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Usage:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  hut [command]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Available Commands:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  builds      Use the builds API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  export      Exports your account data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  git         Use the git API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  graphql     Execute a GraphQL query&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  help        Help about any command&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  hg          Use the hg API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  init        Initialize hut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  lists       Use the lists API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  meta        Use the meta API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  pages       Use the pages API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  paste       Use the paste API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  todo        Use the todo API&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Flags:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      --config string     config file to use&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -h, --help              help for hut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      --instance string   sr.ht instance to use&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Use &amp;quot;hut [command] --help&amp;quot; for more information about a command.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In sourcehut, you can also view repositories with &lt;code&gt;hut&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;hut&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;website (public)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Learn about data science and statistics in bahasa.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;swayhome (public)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Nixos configuration, sway and home-manager.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;oldblog (public)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Personal blog of Hervy qurrotul&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dotfire (public)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Nixos KDE Plasma configuration for data science.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;hosting-websites-with-sourcehut-pages&quot;&gt;Hosting websites with &lt;em&gt;sourcehut pages&lt;&#x2F;em&gt;&lt;a class=&quot;post-anchor&quot; href=&quot;#hosting-websites-with-sourcehut-pages&quot; aria-label=&quot;Anchor link for: hosting-websites-with-sourcehut-pages&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;You can create website pages for free with &lt;em&gt;sourcehut pages&lt;&#x2F;em&gt; using
the domain name &lt;code&gt;username.srht.site&lt;&#x2F;code&gt;. The website whose repository is
located at 

&lt;a href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~hervyqa&#x2F;termivy&quot;&gt;~hervyqa&amp;#x2F;termivy&lt;&#x2F;a&gt; is also
built using sourcehut pages. Creating sourcehut pages is also very
simple, just by creating a &lt;code&gt;.build.yml&lt;&#x2F;code&gt; file.&lt;&#x2F;p&gt;
&lt;p&gt;For example, deploying a static website with &lt;code&gt;zola&lt;&#x2F;code&gt;. Several other
examples can be found at 

&lt;a href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~sircmpwn&#x2F;pages.sr.ht-examples&#x2F;tree&#x2F;master&quot;&gt;SourceHut Pages examples&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot; data-name=&quot;.build.yml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; a&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;lpine&#x2F;edge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ackages&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; h&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; z&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ola&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;auth&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ages.sr.ht&#x2F;PAGES:RW&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;nvironment&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ite&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; w&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ww.example.org&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  p&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;kgs&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ite.tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  b&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;uild_dir&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ublic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;10&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ources&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt; h&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml z-string&quot;&gt;ttps:&#x2F;&#x2F;git.sr.ht&#x2F;~your_username&#x2F;my-website&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;12&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;asks&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;uild&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;14&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml z-string&quot;&gt;      cd my-website&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;15&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml z-string&quot;&gt;      zola build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt; p&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ackage&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;17&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml z-string&quot;&gt;      cd my-website&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;18&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml z-string&quot;&gt;      tar -czfv $pkgs -C $build_dir ..&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;19&lt;&#x2F;span&gt;&lt;span&gt;  -&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt; u&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;pload&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;20&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml z-string&quot;&gt;      hut pages publish -d $site $pkgs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Optionally, change the DNS server in your domain provider’s &lt;em&gt;domain
management&lt;&#x2F;em&gt; to support 

&lt;a href=&quot;https:&#x2F;&#x2F;srht.site&#x2F;custom-domains&quot;&gt;custom
domain&lt;&#x2F;a&gt; on sourcehut.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@ IN A    46.23.81.157&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@ IN AAAA 2a03:6000:1813:1337::157&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;diverse-continuous-integration-architecture&quot;&gt;Diverse Continuous Integration Architecture&lt;a class=&quot;post-anchor&quot; href=&quot;#diverse-continuous-integration-architecture&quot; aria-label=&quot;Anchor link for: diverse-continuous-integration-architecture&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;SourceHut is equipped with various Linux distribution operating systems
with different architectures for Continuous Integration (CI) needs.
Supported operating systems include BSD and linux-based.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Alpine linux&lt;&#x2F;li&gt;
&lt;li&gt;Arch linux&lt;&#x2F;li&gt;
&lt;li&gt;Debian&lt;&#x2F;li&gt;
&lt;li&gt;Fedora&lt;&#x2F;li&gt;
&lt;li&gt;FreeBSD&lt;&#x2F;li&gt;
&lt;li&gt;Guix System&lt;&#x2F;li&gt;
&lt;li&gt;NetBSD&lt;&#x2F;li&gt;
&lt;li&gt;OpenBSD&lt;&#x2F;li&gt;
&lt;li&gt;Rocky linux&lt;&#x2F;li&gt;
&lt;li&gt;Ubuntu&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Supported architectures:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;aarch64&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;arm64&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;armel&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;armhf&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;i386&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ppc64el&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;s390x&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;x86_64&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;x86&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;And many other architectures. If you use the &lt;code&gt;x86_64&lt;&#x2F;code&gt; or &lt;code&gt;amd64&lt;&#x2F;code&gt;
architecture, then that architecture uses &lt;em&gt;native&lt;&#x2F;em&gt; hardware. For
more information, refer to the 

&lt;a href=&quot;https:&#x2F;&#x2F;man.sr.ht&#x2F;builds.sr.ht&#x2F;compatibility.md&quot;&gt;compatibility&lt;&#x2F;a&gt; page.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;closing&quot;&gt;Closing&lt;a class=&quot;post-anchor&quot; href=&quot;#closing&quot; aria-label=&quot;Anchor link for: closing&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Personally, I think sourcehut is worth using for &lt;em&gt;developers&lt;&#x2F;em&gt;. Several
important personal repositories have been migrated to sourcehut,
including this website’s repository. When I first started using
sourcehut, the repository was still quiet and not very popular at the
time this article was written. But after researching its features and
how sourcehut works, I became interested in some of the advantages that
other &lt;em&gt;git forges&lt;&#x2F;em&gt; don’t have. The initial considerations for choosing
SourceHut were its speed, minimal bugs, the availability of a CLI
application (hut), a well-built system, and of course, its open source
nature.&lt;&#x2F;p&gt;
&lt;p&gt;SourceHut is not a viral and well-known git forge. It does not have
features that make it famous on social media. For example, there is no
star rating or total number of stars in a repository, no special badges,
and no repository banners, so the thumbnail images look elegant. Even
its users don’t have the feature to upload profile photos. But despite
these shortcomings, many large project repositories are on SourceHut,
and the famous button feature is not really needed. By leaving out these
bells and whistles, SourceHut becomes more minimalist and faster. Back
to the concept of &lt;em&gt;less is more&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Paying for the &lt;em&gt;deploy&lt;&#x2F;em&gt; feature on sourcehut still makes sense. First,
the price is still affordable. And second, the money stays within
the realm of FOSS (Free Open Source Software), rather than flowing to
investors. This may be a matter of debate, but it still doesn’t make
sense to argue about it. The simplest logic is, is there such a thing
as free electricity? Even the most free things still require effort. And
effort requires accommodation and supplies.&lt;&#x2F;p&gt;
&lt;p&gt;The word “free” in the principle of &lt;em&gt;free software&lt;&#x2F;em&gt; has a
specific meaning that cannot be generalized. Roughly speaking,
“if it’s &lt;em&gt;free&lt;&#x2F;em&gt;, then it’s &lt;em&gt;free&lt;&#x2F;em&gt; everything” is clearly
impossible. Some features are indeed free, while others are
not, and each has its own limitations. Sourcehut’s business
model is clear and transparent. There are also annual financial
reports, for example for 

&lt;a href=&quot;https:&#x2F;&#x2F;lists.sr.ht&#x2F;~sircmpwn&#x2F;sr.ht-discuss&#x2F;%3CBVRVZEWYB30Q.3HGIC803LDBH7@homura%3E&quot;&gt;2019&lt;&#x2F;a&gt;, 

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&#x2F;blog&#x2F;2022-04-08-2021-financial-report&quot;&gt;2021&lt;&#x2F;a&gt;, and 

&lt;a href=&quot;https:&#x2F;&#x2F;sourcehut.org&#x2F;blog&#x2F;2023-03-27-2022-financial-report&quot;&gt;2022&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you are accustomed to using an email-based workflow and prioritize
performance, then Sourcehut is worth trying.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;The source code 

&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab&quot;&gt;Gitlab Source&lt;&#x2F;a&gt; is open source but
not completely open, as there is some proprietary (closed)
code. If you want to use open source code, you can use 

&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gitlab-org&#x2F;gitlab-foss&quot;&gt;Gitlab Floss&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Getting Started with Helix: A Terminal Editor That Rivals Neovim</title>
        <published>2023-02-07T00:00:00+00:00</published>
        <updated>2026-04-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/blog/getting-started-with-helix/"/>
        <id>https://hervyqa.srht.site/blog/getting-started-with-helix/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/blog/getting-started-with-helix/">&lt;p&gt;

&lt;a href=&quot;https:&#x2F;&#x2F;helix-editor.com&quot;&gt;Helix&lt;&#x2F;a&gt; is a CLI text editor with alternative modal support
for Neovim and VIM. This editor is written in the Rust programming
language, making it faster with a &lt;em&gt;single binary&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;key-features&quot;&gt;Key Features&lt;a class=&quot;post-anchor&quot; href=&quot;#key-features&quot; aria-label=&quot;Anchor link for: key-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Helix has minimal configuration. Unlike Neovim and VIM, which require
managing configurations by installing plugins to suit the desired
workflow. Here is a list of features that Helix has, quoted from its
official website:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiple selections simultaneously.&lt;&#x2F;strong&gt; Multi-cursor code editing is built
into Helix.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Integration with Tree-sitter.&lt;&#x2F;strong&gt; Enables syntax highlighting, indentation
calculation, and code navigation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Code manipulation.&lt;&#x2F;strong&gt; Easy navigation and selection of functions, classes,
comments, and so on.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Language server support.&lt;&#x2F;strong&gt; With language-specific autocomplete, go to
definition, documentation, diagnostics, and IDE features without additional
configuration.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Built with the Rust programming language.&lt;&#x2F;strong&gt; High performance and more
battery efficient.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Built-in features.&lt;&#x2F;strong&gt; Fuzzy search for files, symbols, projects, themes,
fugitive, surround, and much more.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;figure
   id=&quot;fig-cms&quot;
  class=&quot;ref-placeholder figure-center&quot;
   data-ref=&quot;cms&quot;
&gt;

  &lt;picture&gt;
    
    &lt;img
      src=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;processed_images&#x2F;matplotlib-sample.9f5bcbad9a7a8d83.jpg&quot; alt=&quot;matplotlib-sample&quot; width=&quot;1280&quot; height=&quot;613&quot; srcset=&quot;https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;processed_images&#x2F;matplotlib-sample.ec12bdd4ba67c0e9.jpg 640w, https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;processed_images&#x2F;matplotlib-sample.0b4624a5e3a5f018.jpg 784w, https:&#x2F;&#x2F;hervyqa.srht.site&#x2F;processed_images&#x2F;matplotlib-sample.09bf65d85075a494.jpg 1280w&quot; sizes=&quot;(min-width: 920px) 784px, (min-width: 700px) calc(82vw + 46px), calc(100vw - 40px)&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;picture&gt;
    &lt;figcaption
      class=&quot;center&quot;
      &gt;Figure: Programming with Helix Editor&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;

&lt;p&gt;Helix is equipped with a variety of features including syntax highlight
which makes it easy for &lt;em&gt;Platform Engineer&lt;&#x2F;em&gt; &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;wyssmann22&quot;&gt;(&lt;a href=&quot;#ref-wyssmann22&quot;&gt;Wyssmann, Adrian&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shock-therapy&quot;&gt;Shock therapy&lt;a class=&quot;post-anchor&quot; href=&quot;#shock-therapy&quot; aria-label=&quot;Anchor link for: shock-therapy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;When using Helix, you have no choice but to learn again. Even with
minimal configuration, Helix has a keymap that is 30% different from
neovim&#x2F;vim and must be memorized to get used to. The rest of the
keymap is almost the same.  Fortunately, the Helix developers have
provided a built-in tutorial like &lt;code&gt;vimtutor&lt;&#x2F;code&gt; in vim.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;hx&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;-tutor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Moreover, there is no need to think about how LSP configuration in
Helix, because it has been well configured. If using vim&#x2F;neovim,
too many vimscripts need to be taken care of all of them. While in
Helix checking can be done with &lt;code&gt;hx --health markdown&lt;&#x2F;code&gt; and see what
LSP needs to be installed &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;timh23&quot;&gt;(&lt;a href=&quot;#ref-timh23&quot;&gt;Hårek, Tim&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;a class=&quot;post-anchor&quot; href=&quot;#installation&quot; aria-label=&quot;Anchor link for: installation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;openbsd&quot;&gt;OpenBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#openbsd&quot; aria-label=&quot;Anchor link for: openbsd&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;doas&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pkg_add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;freebsd&quot;&gt;FreeBSD&lt;a class=&quot;post-anchor&quot; href=&quot;#freebsd&quot; aria-label=&quot;Anchor link for: freebsd&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;doas&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pkg&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; helix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For complete installation instructions, please refer to the 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.helix-editor.com&quot;&gt;Helix Docs&lt;&#x2F;a&gt; page.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;basic-usage&quot;&gt;Basic usage&lt;a class=&quot;post-anchor&quot; href=&quot;#basic-usage&quot; aria-label=&quot;Anchor link for: basic-usage&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;cursor-navigation-directions&quot;&gt;Cursor navigation directions&lt;a class=&quot;post-anchor&quot; href=&quot;#cursor-navigation-directions&quot; aria-label=&quot;Anchor link for: cursor-navigation-directions&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Like navigation in vim, &lt;code&gt;helix&lt;&#x2F;code&gt; uses &lt;kbd&gt;h&lt;&#x2F;kbd&gt;, &lt;kbd&gt;j&lt;&#x2F;kbd&gt;, &lt;kbd&gt;k&lt;&#x2F;kbd&gt;, and &lt;kbd&gt;l&lt;&#x2F;kbd&gt; to move the cursor. You
can also use the arrow keys, but hjkl is faster.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Key&lt;&#x2F;th&gt;&lt;th&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;kbd&gt;h&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td&gt;Left&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;kbd&gt;j&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td&gt;Down&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;kbd&gt;k&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td&gt;Up&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;kbd&gt;l&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td&gt;Right&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;opening-files&quot;&gt;Opening files&lt;a class=&quot;post-anchor&quot; href=&quot;#opening-files&quot; aria-label=&quot;Anchor link for: opening-files&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Open helix by running &lt;code&gt;hx&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;hx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Open with a specific file.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;hx&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; filename.xyz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;closing-helix&quot;&gt;Closing helix&lt;a class=&quot;post-anchor&quot; href=&quot;#closing-helix&quot; aria-label=&quot;Anchor link for: closing-helix&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Helix also has &lt;code&gt;normal&lt;&#x2F;code&gt;, &lt;code&gt;insert&lt;&#x2F;code&gt;, and &lt;code&gt;visual&lt;&#x2F;code&gt; modes like vim. Some of
the following &lt;code&gt;normal&lt;&#x2F;code&gt; mode shortcuts are still common and compatible
with helix.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Command&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:q&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Close the file and application.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:q!&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Force close the application.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:qa!&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Force close all open buffers and the application.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;Buffer is a file or directory that has been opened.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;configuration&quot;&gt;Configuration&lt;a class=&quot;post-anchor&quot; href=&quot;#configuration&quot; aria-label=&quot;Anchor link for: configuration&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Some basic configurations that may need to be added. For example,
theme type and line number.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Command&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:theme tokyonight&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Change the theme.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Permanent configurations can be opened in &lt;code&gt;config.toml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Command&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:config-open&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Opens the helix configuration.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:config-reload&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Reloads the helix configuration.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;toml&quot; data-name=&quot;~&#x2F;.config&#x2F;helix&#x2F;config.toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;theme&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;tokyonight&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;editor&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;line-number&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;relative&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;cursorline&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;editor&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;lsp&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;display-messages&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yep, that’s right. The additional configuration is just a few lines
above. For more details, please refer to the 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.helix-editor.com&quot;&gt;Helix Docs&lt;&#x2F;a&gt; page.&lt;&#x2F;p&gt;
&lt;p&gt;If you are working on a project that is quite large. Suggested enable
multiple to make the helix display the tab in a built-in language
not single file &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;jonathanf24&quot;&gt;(&lt;a href=&quot;#ref-jonathanf24&quot;&gt;Frere, Jonathan&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;toml&quot; data-name=&quot;~&#x2F;.config&#x2F;helix&#x2F;config.toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span&gt;editor&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt;bufferline&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;multiline&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;advanced-usage&quot;&gt;Advanced usage&lt;a class=&quot;post-anchor&quot; href=&quot;#advanced-usage&quot; aria-label=&quot;Anchor link for: advanced-usage&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;deleting-characters&quot;&gt;Deleting characters&lt;a class=&quot;post-anchor&quot; href=&quot;#deleting-characters&quot; aria-label=&quot;Anchor link for: deleting-characters&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Unlike vim, deleting characters in helix uses the keymap &lt;kbd&gt;d&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;d&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Deletes 1 character.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;entering-characters&quot;&gt;Entering characters&lt;a class=&quot;post-anchor&quot; href=&quot;#entering-characters&quot; aria-label=&quot;Anchor link for: entering-characters&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Similar to vim, the &lt;code&gt;insert&lt;&#x2F;code&gt; mode still uses &lt;kbd&gt;i&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;i&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;esc&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;normal&lt;&#x2F;code&gt; mode (exit insert mode).&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;saving-files&quot;&gt;Saving files&lt;a class=&quot;post-anchor&quot; href=&quot;#saving-files&quot; aria-label=&quot;Anchor link for: saving-files&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Command&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:w&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Save the file in the current buffer.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:w filename.xyz&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Save the file in the buffer with a specific name.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Can be combined with &lt;code&gt;q&lt;&#x2F;code&gt; to exit the helix.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Command&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:wq&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Save and close the application.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;:wqa&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Save and close all buffers.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;insert-mode&quot;&gt;Insert mode&lt;a class=&quot;post-anchor&quot; href=&quot;#insert-mode&quot; aria-label=&quot;Anchor link for: insert-mode&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;As previously mentioned, the keymap &lt;kbd&gt;i&lt;&#x2F;kbd&gt; for insert
mode is right before the cursor. Meanwhile, there are several other
keymaps such as:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;i&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode before the cursor.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;a&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode after the cursor.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;i&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode at the beginning of the line.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;a&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode at the end of the line.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;starting-a-new-line&quot;&gt;Starting a new line&lt;a class=&quot;post-anchor&quot; href=&quot;#starting-a-new-line&quot; aria-label=&quot;Anchor link for: starting-a-new-line&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;o&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode after the current line.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;o&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;insert&lt;&#x2F;code&gt; mode before the current line.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The above commands are similar to those in neovim or vim.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;movement-and-selection&quot;&gt;Movement and selection&lt;a class=&quot;post-anchor&quot; href=&quot;#movement-and-selection&quot; aria-label=&quot;Anchor link for: movement-and-selection&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Movement and selection in helix are performed automatically and
simultaneously.  This is slightly different from vim.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;w&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move and select 1 word, including its space.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;e&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move and select 1 word from the cursor to the end of the word.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;b&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move and select 1 word from the cursor to the beginning of the word.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The keymaps &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;w&lt;&#x2F;kbd&gt;, &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;e&lt;&#x2F;kbd&gt;, and &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;b&lt;&#x2F;kbd&gt; also have similar functions, except that the
movement depends on whitespace such as spaces and tabs.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;moving-by-count&quot;&gt;Moving by count&lt;a class=&quot;post-anchor&quot; href=&quot;#moving-by-count&quot; aria-label=&quot;Anchor link for: moving-by-count&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Moving by count is also possible, for example &lt;kbd&gt;2&lt;&#x2F;kbd&gt;&lt;kbd&gt;w&lt;&#x2F;kbd&gt;, &lt;kbd&gt;4&lt;&#x2F;kbd&gt;&lt;kbd&gt;e&lt;&#x2F;kbd&gt;, &lt;kbd&gt;5&lt;&#x2F;kbd&gt;&lt;kbd&gt;b&lt;&#x2F;kbd&gt;. The explanation is as follows:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;2&lt;&#x2F;kbd&gt;&lt;kbd&gt;w&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move 2 words forward.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;4&lt;&#x2F;kbd&gt;&lt;kbd&gt;e&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move 4 words forward ending at the end of a word.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;5&lt;&#x2F;kbd&gt;&lt;kbd&gt;b&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Move 5 words backward.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;changing-characters&quot;&gt;Changing characters&lt;a class=&quot;post-anchor&quot; href=&quot;#changing-characters&quot; aria-label=&quot;Anchor link for: changing-characters&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;The shortcut used is the keymap &lt;kbd&gt;r&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;c&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Changes the selected character or word&#x2F;sentence.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;For example, select a word with &lt;kbd&gt;w&lt;&#x2F;kbd&gt;, then replace it with
the keymap &lt;kbd&gt;c&lt;&#x2F;kbd&gt;, which immediately enters insert mode.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;visual-selection-mode&quot;&gt;Visual&#x2F;selection mode&lt;a class=&quot;post-anchor&quot; href=&quot;#visual-selection-mode&quot; aria-label=&quot;Anchor link for: visual-selection-mode&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Visual mode in helix is almost the same as in vim.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;v&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;visual&lt;&#x2F;code&gt; mode.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;v&lt;&#x2F;kbd&gt; again, or &lt;kbd&gt;esc&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;normal&lt;&#x2F;code&gt; mode (exit visual mode).&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;selecting-lines&quot;&gt;Selecting lines&lt;a class=&quot;post-anchor&quot; href=&quot;#selecting-lines&quot; aria-label=&quot;Anchor link for: selecting-lines&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Select a line using the &lt;kbd&gt;x&lt;&#x2F;kbd&gt; keymap. If you want to
select the next line, press &lt;kbd&gt;x&lt;&#x2F;kbd&gt; again. Sometimes you may
intend to delete a character, but instead select it in helix. (This
is because your subconscious is used to using &lt;kbd&gt;x&lt;&#x2F;kbd&gt;
to delete characters in vim.)&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;x&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Select 1 row.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;5&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Select 5 rows.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Deselect rows.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Flip row selection.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;undoing-changes&quot;&gt;Undoing changes&lt;a class=&quot;post-anchor&quot; href=&quot;#undoing-changes&quot; aria-label=&quot;Anchor link for: undoing-changes&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Commands for undoing changes:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;u&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Undo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;u&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Redo.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Repeat several times until the changes are as expected.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;copying-and-pasting&quot;&gt;Copying and pasting&lt;a class=&quot;post-anchor&quot; href=&quot;#copying-and-pasting&quot; aria-label=&quot;Anchor link for: copying-and-pasting&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Copying in helix can be done in the internal helix or in the clipboard
system.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Yank&#x2F;copy, copies the selected characters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste, pastes the copied content.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste, pastes the copied content before the cursor.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;This can also be done with calculations to determine the number of
copies&#x2F;pastes.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;2&lt;&#x2F;kbd&gt; &lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2x Yank&#x2F;copy, copies the selected characters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;4&lt;&#x2F;kbd&gt; &lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4x Paste, pastes the copied characters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;10&lt;&#x2F;kbd&gt; &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;10x Paste, pastes the copied characters before the cursor.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Basically, the keymaps &lt;kbd&gt;d&lt;&#x2F;kbd&gt; (delete character) and &lt;kbd&gt;c&lt;&#x2F;kbd&gt; (change character) can also be considered yank mode,
where the deleted&#x2F;changed characters are stored in the buffer so
that the paste command &lt;kbd&gt;p&lt;&#x2F;kbd&gt; or &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;p&lt;&#x2F;kbd&gt; can be executed.&lt;&#x2F;p&gt;
&lt;p&gt;To avoid storing in the buffer, use &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;d&lt;&#x2F;kbd&gt; or &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;c&lt;&#x2F;kbd&gt;. To copy or paste from the system clipboard,
use the keymaps below.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;space&lt;&#x2F;kbd&gt;&lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Copy to system clipboard.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;space&lt;&#x2F;kbd&gt;&lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste from system clipboard.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;character-search&quot;&gt;Character search&lt;a class=&quot;post-anchor&quot; href=&quot;#character-search&quot; aria-label=&quot;Anchor link for: character-search&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Search for characters like in vim or neovim.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;&amp;#x2F;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Search for characters&#x2F;words.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;n&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the next search result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;n&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the previous search result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;?&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Search for characters&#x2F;words backwards.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Unlike in vim, in helix, when searching with &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x2F;&lt;&#x2F;kbd&gt;,
the &lt;kbd&gt;n&lt;&#x2F;kbd&gt; direction remains forward and &lt;kbd&gt;shift
n&lt;&#x2F;kbd&gt; remains backward&#x2F;previous.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;multiple-cursors&quot;&gt;Multiple cursors&lt;a class=&quot;post-anchor&quot; href=&quot;#multiple-cursors&quot; aria-label=&quot;Anchor link for: multiple-cursors&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Adding cursors is very useful for changing characters
simultaneously. For example, for deleting, replacing, and regex
functions.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;c&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Search for characters&#x2F;words.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;c&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the next search result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;,&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the previous search result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;selecting-from-the-selection-results&quot;&gt;Selecting from the selection results&lt;a class=&quot;post-anchor&quot; href=&quot;#selecting-from-the-selection-results&quot; aria-label=&quot;Anchor link for: selecting-from-the-selection-results&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This is intended to replace a selected character or text. Usually to
replace a word, similar to the sed regex function in vim.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;s&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Selects the appropriate character according to the selection.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;For example, the pattern works like this: select several times
with &lt;kbd&gt;x&lt;&#x2F;kbd&gt; or &lt;kbd&gt;%&lt;&#x2F;kbd&gt; for all lines. Press
&lt;kbd&gt;s&lt;&#x2F;kbd&gt;, then enter the desired character and press &lt;kbd&gt;enter&lt;&#x2F;kbd&gt;. It will automatically become a multi-cursor. You
can then change it as desired.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;additional-selection-with-regex&quot;&gt;Additional selection with &lt;em&gt;regex&lt;&#x2F;em&gt;&lt;a class=&quot;post-anchor&quot; href=&quot;#additional-selection-with-regex&quot; aria-label=&quot;Anchor link for: additional-selection-with-regex&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This selection can use the plus sign &lt;code&gt;+&lt;&#x2F;code&gt; when using the &lt;kbd&gt;s&lt;&#x2F;kbd&gt; keymap in the selection area. For example: space and plus &lt;code&gt;+&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;straightening-from-selection&quot;&gt;Straightening from selection&lt;a class=&quot;post-anchor&quot; href=&quot;#straightening-from-selection&quot; aria-label=&quot;Anchor link for: straightening-from-selection&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;&amp;amp;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Straighten the selection results.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;For example, there is a line like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 98) lorem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 99) ipsum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 100) dolor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 101) sit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 102) amet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Becoming:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; *  97) lorem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; *  99) ipsum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 100) dolor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 101) sit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; * 102) amet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;dividing-the-selection-into-rows&quot;&gt;Dividing the selection into rows&lt;a class=&quot;post-anchor&quot; href=&quot;#dividing-the-selection-into-rows&quot; aria-label=&quot;Anchor link for: dividing-the-selection-into-rows&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;s&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;To split into options on each line. Generally used to straighten tables.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    | FRUIT   | AMOUNT |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    |---------|--------|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; | Apples  | 8      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    | Bananas | 6      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Oranges | 3      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | Donuts  | 4      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Becoming:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | FRUIT   | AMOUNT |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     |---------|--------|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | Apples  | 8      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | Bananas | 6      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | Oranges | 3      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     | Donuts  | 4      |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;selecting-down-to-specific-characters&quot;&gt;Selecting down to specific characters&lt;a class=&quot;post-anchor&quot; href=&quot;#selecting-down-to-specific-characters&quot; aria-label=&quot;Anchor link for: selecting-down-to-specific-characters&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;f&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Selects the line up to and including the specified character.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;t&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Selects the line up to but not including the specified character.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;f&lt;&#x2F;kbd&gt; and &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;t&lt;&#x2F;kbd&gt; also have
similar functions, except that they skip over whitespace characters
such as spaces or tabs.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;replacing-characters-or-words&quot;&gt;Replacing characters or words&lt;a class=&quot;post-anchor&quot; href=&quot;#replacing-characters-or-words&quot; aria-label=&quot;Anchor link for: replacing-characters-or-words&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste with special characters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste with the contents of the buffer or the system clipboard.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;repetition&quot;&gt;Repetition&lt;a class=&quot;post-anchor&quot; href=&quot;#repetition&quot; aria-label=&quot;Anchor link for: repetition&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Repetition can be used to repeat the same command, or to repeat the
previous search results &lt;kbd&gt;f&lt;&#x2F;kbd&gt; and &lt;kbd&gt;t&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;.&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Repeats the previous insert mode result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;.&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Repeats the command from the previous &lt;kbd&gt;f&lt;&#x2F;kbd&gt; or &lt;kbd&gt;t&lt;&#x2F;kbd&gt; result.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;replacing-text-from-the-yank-clipboard-copy&quot;&gt;Replacing text from the &lt;em&gt;yank&#x2F;clipboard&lt;&#x2F;em&gt; copy&lt;a class=&quot;post-anchor&quot; href=&quot;#replacing-text-from-the-yank-clipboard-copy&quot; aria-label=&quot;Anchor link for: replacing-text-from-the-yank-clipboard-copy&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Once text has been copied, either by yanking or from the system
clipboard, it can be used to replace other text if it has been selected.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Replaces the selected text with the contents of the clipboard.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;merging-lines&quot;&gt;Merging lines&lt;a class=&quot;post-anchor&quot; href=&quot;#merging-lines&quot; aria-label=&quot;Anchor link for: merging-lines&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Multiple lines must first be selected with &lt;kbd&gt;x&lt;&#x2F;kbd&gt;, then
press &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;j&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;j&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Merges multiple selected lines.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;line-indentation&quot;&gt;Line indentation&lt;a class=&quot;post-anchor&quot; href=&quot;#line-indentation&quot; aria-label=&quot;Anchor link for: line-indentation&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Indents the current line or selected lines.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;&amp;gt;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Indentation protrudes outward&#x2F;to the right.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;&amp;lt;&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Indentation protrudes inward&#x2F;to the left.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;addition-and-subtraction&quot;&gt;Addition and subtraction&lt;a class=&quot;post-anchor&quot; href=&quot;#addition-and-subtraction&quot; aria-label=&quot;Anchor link for: addition-and-subtraction&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Incrementing and decrementing values can be done in helix. This is
usually done to change values in a list.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;a&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Increases the value.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;x&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Decreases the value.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;For example:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) list a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) list b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) list c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5) list d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6) list e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Becoming,&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) list a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) list b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) list c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) list d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5) list e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;register-function&quot;&gt;&lt;em&gt;Register&lt;&#x2F;em&gt; Function&lt;a class=&quot;post-anchor&quot; href=&quot;#register-function&quot; aria-label=&quot;Anchor link for: register-function&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This function is used to store different copies, which can be called
up at any time. Unlike the usual yank, which only stores one copy,
the register can store many different copies. register key is &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;For example, register:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;condition a: copy &lt;code&gt;sentence one&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;condition b: copy &lt;code&gt;sentence two&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;condition c: copy &lt;code&gt;sentence three&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There are 3 conditions consisting of &lt;code&gt;a&lt;&#x2F;code&gt;, &lt;code&gt;b&lt;&#x2F;code&gt;, and &lt;code&gt;c&lt;&#x2F;code&gt;. To store the
register, use the command:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;a&lt;&#x2F;kbd&gt; &lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Stores (yanks) the copy to register &lt;code&gt;a&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;b&lt;&#x2F;kbd&gt; &lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Stores (yanks) the copy to register &lt;code&gt;b&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;c&lt;&#x2F;kbd&gt; &lt;kbd&gt;y&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Stores (yanks) a copy to register &lt;code&gt;c&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;After storing, next paste the text from a register.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;a&lt;&#x2F;kbd&gt; &lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste text from register &lt;code&gt;a&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;b&lt;&#x2F;kbd&gt; &lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Paste text from register &lt;code&gt;b&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;c&lt;&#x2F;kbd&gt; &lt;kbd&gt;p&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Pastes text from register &lt;code&gt;c&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The copied text can also be used to replace selected text.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;a&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Replaces the text from register &lt;code&gt;a&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;b&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Replaces the text from register &lt;code&gt;b&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;&amp;#x27;&lt;&#x2F;kbd&gt; &lt;kbd&gt;c&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Replaces text from register &lt;code&gt;c&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;macro-function&quot;&gt;&lt;em&gt;Macro&lt;&#x2F;em&gt; Function&lt;a class=&quot;post-anchor&quot; href=&quot;#macro-function&quot; aria-label=&quot;Anchor link for: macro-function&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Useful for storing command steps in a register. Default key is &lt;kbd&gt;@&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;q&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Start macro recording.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;q&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Stop macro recording.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;q&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Run the macro function.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;5&lt;&#x2F;kbd&gt;&lt;kbd&gt;q&lt;&#x2F;kbd&gt; &lt;kbd&gt;r&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Run the macro function 5 times, can be replaced with &lt;code&gt;nq&lt;&#x2F;code&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;searching-with-selection&quot;&gt;Searching with selection&lt;a class=&quot;post-anchor&quot; href=&quot;#searching-with-selection&quot; aria-label=&quot;Anchor link for: searching-with-selection&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Search for text using &lt;kbd&gt;&amp;#x2F;&lt;&#x2F;kbd&gt; and then type the word you
want to find.  In addition to typing characters, another way is to
select characters as search characters.&lt;&#x2F;p&gt;
&lt;p&gt;After selecting a character word, for example with &lt;kbd&gt;w&lt;&#x2F;kbd&gt;&#x2F;&lt;kbd&gt;e&lt;&#x2F;kbd&gt;&#x2F;&lt;kbd&gt;b&lt;&#x2F;kbd&gt;, press &lt;kbd&gt;*&lt;&#x2F;kbd&gt;
to save it as a search register. Then the word can be searched for
with &lt;kbd&gt;n&lt;&#x2F;kbd&gt; or &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;n&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;*&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Keep selection results into search registers &lt;kbd&gt;&amp;#x2F;&lt;&#x2F;kbd&gt;.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;using-jumplist&quot;&gt;Using Jumplist&lt;a class=&quot;post-anchor&quot; href=&quot;#using-jumplist&quot; aria-label=&quot;Anchor link for: using-jumplist&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;With jumplist, you can save the cursor position at a specific location.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;ctrl&lt;&#x2F;kbd&gt;+&lt;kbd&gt;s&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Save jumplist.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;ctrl&lt;&#x2F;kbd&gt;+&lt;kbd&gt;o&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Next jumplist.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;ctrl&lt;&#x2F;kbd&gt;+&lt;kbd&gt;i&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Previous jumplist.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;rotate-and-delete-primary-selection&quot;&gt;Rotate and delete primary selection&lt;a class=&quot;post-anchor&quot; href=&quot;#rotate-and-delete-primary-selection&quot; aria-label=&quot;Anchor link for: rotate-and-delete-primary-selection&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;After selecting, there may be times when some selections are not
needed. By using &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;,&lt;&#x2F;kbd&gt;, the selected results can
be deleted.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;)&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the next selection.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;(&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Go to the previous selection.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;,&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Clear the main selection.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;changing-uppercase-lowercase-letters&quot;&gt;Changing uppercase&#x2F;lowercase letters&lt;a class=&quot;post-anchor&quot; href=&quot;#changing-uppercase-lowercase-letters&quot; aria-label=&quot;Anchor link for: changing-uppercase-lowercase-letters&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;To change uppercase letters to lowercase letters, use &lt;kbd&gt;`&lt;&#x2F;kbd&gt;, while to change lowercase letters to uppercase letters, use &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;`&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Key&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;`&lt;&#x2F;kbd&gt; or &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;`&lt;&#x2F;kbd&gt; &amp;gt;}}&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Switch between lowercase and uppercase letters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;kbd&gt;~&lt;&#x2F;kbd&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Switch between uppercase and lowercase letters.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;separating-selections-with-regex-patterns&quot;&gt;Separating selections with &lt;em&gt;regex patterns&lt;&#x2F;em&gt;&lt;a class=&quot;post-anchor&quot; href=&quot;#separating-selections-with-regex-patterns&quot; aria-label=&quot;Anchor link for: separating-selections-with-regex-patterns&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Separating selections has specific use cases, such as capitalizing
a sentence, separating combined lines into multiple lines, and other
conditions that require separating selected words&#x2F;sentences.&lt;&#x2F;p&gt;
&lt;p&gt;The general steps are as follows.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Select a line, using either &lt;kbd&gt;x&lt;&#x2F;kbd&gt;, &lt;kbd&gt;w&lt;&#x2F;kbd&gt;, &lt;kbd&gt;e&lt;&#x2F;kbd&gt;, or &lt;kbd&gt;b&lt;&#x2F;kbd&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Press &lt;kbd&gt;shift&lt;&#x2F;kbd&gt;+&lt;kbd&gt;s&lt;&#x2F;kbd&gt; to split the selection.&lt;&#x2F;li&gt;
&lt;li&gt;Select the regex pattern. For example, separate by a period space &lt;code&gt;.&lt;&#x2F;code&gt;,
exclamation mark space &lt;code&gt;!&lt;&#x2F;code&gt;, or question mark space &lt;code&gt;?&lt;&#x2F;code&gt;. Sentences
are usually separated by separators and spaces. So, the regex is
&lt;code&gt;\. |! |\?&lt;&#x2F;code&gt;. Periods and question marks need to be preceded by a
backslash &lt;code&gt;\&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Select the cursor position to be in front of or behind the separated
sentence. Move it using &lt;kbd&gt;alt&lt;&#x2F;kbd&gt;+&lt;kbd&gt;;&lt;&#x2F;kbd&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;In multi-cursor mode, replace the desired changes with &lt;kbd&gt;r&lt;&#x2F;kbd&gt;, &lt;kbd&gt;c&lt;&#x2F;kbd&gt;, or &lt;kbd&gt;i&lt;&#x2F;kbd&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For example, there are 3 sentences. Separate them and capitalize the first letter.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;learn programming languages! python is a high-level programming language? created by guido van rossum.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Becomes:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Learn programming languages!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;python is a high-level programming language?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Created by guido van rossum.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;post-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Helix is ideal because it uses minimal configuration with built-in
autocomplete, fuzzy search, and multi-cursor features. Although each
programming language’s &lt;code&gt;language-server&lt;&#x2F;code&gt; is installed separately
with Helix (as with other editors), Helix still has features such as
autopairs, fugitive, and others to support program writing. Settings
for LSP are available on the 

&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helix-editor&#x2F;helix&#x2F;wiki&#x2F;How-to-install-the-default-language-servers&quot;&gt;Helix Wiki&lt;&#x2F;a&gt;. More complete
keymap configurations and usage instructions are available in the 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.helix-editor.com&quot;&gt;official documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Helix is considered to have fairly fast performance. It even
supports modals such as &lt;kbd&gt;space&lt;&#x2F;kbd&gt;, &lt;kbd&gt;f&lt;&#x2F;kbd&gt;, and &lt;kbd&gt;g&lt;&#x2F;kbd&gt;, which make navigation maneuvers easier
&lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;evans25&quot;&gt;(&lt;a href=&quot;#ref-evans25&quot;&gt;Evans, Julia&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Good to go to definition,
declaration, and reference.&lt;&#x2F;p&gt;
&lt;p&gt;New users migrating from vim or neovim will certainly like it, and it
is definitely worth trying. Even if you are a veteran vim&#x2F;neovim with
decades of experience &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;lafdzun25&quot;&gt;(&lt;a href=&quot;#ref-lafdzun25&quot;&gt;Lafdzun, Kalamuna&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Programming Languages For Data Scientists Must Know</title>
        <published>2023-02-01T00:00:00+00:00</published>
        <updated>2026-06-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/blog/programming-languages-for-data-science/"/>
        <id>https://hervyqa.srht.site/blog/programming-languages-for-data-science/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/blog/programming-languages-for-data-science/">&lt;p&gt;Becoming a data scientist does not require an IT background. From the
networks I follow on LinkedIn, many people have changed careers from
various backgrounds to become data scientists. And that’s only natural,
considering that companies around the world are flocking to the digital
industry. In early January 2023, I tried to transition from designer to
data scientist.&lt;&#x2F;p&gt;
&lt;p&gt;Alright, let’s get straight to the topic. Here are the programming
languages that data scientists need to know. What are they?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;python&quot;&gt;Python&lt;a class=&quot;post-anchor&quot; href=&quot;#python&quot; aria-label=&quot;Anchor link for: python&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Website: 

&lt;a href=&quot;https:&#x2F;&#x2F;python.org&quot;&gt;Python&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Documentation: 

&lt;a href=&quot;https:&#x2F;&#x2F;python.org&#x2F;doc&quot;&gt;Python Docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Books: 

&lt;a href=&quot;https:&#x2F;&#x2F;pythonbooks.org&quot;&gt;Python Books&lt;&#x2F;a&gt;, 

&lt;a href=&quot;https:&#x2F;&#x2F;realpython.com&#x2F;best-python-books&quot;&gt;Realpython Books&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Python, created by 

&lt;a href=&quot;https:&#x2F;&#x2F;gvanrossum.github.io&quot;&gt;Guido van Rossum&lt;&#x2F;a&gt;, is a high-level data
structure programming language that is simple, clear, and logical, yet
effective for object-oriented programming (OOP).&lt;&#x2F;p&gt;
&lt;p&gt;It is recommended to install Python version &lt;code&gt;python3.10&lt;&#x2F;code&gt; or higher
to get full support. Python, which is a multi-paradigm programming
language, also offers several functional programming supports similar to
&lt;code&gt;lisp&lt;&#x2F;code&gt;, such as filter, map, reduce, set, and generator expressions.&lt;&#x2F;p&gt;
&lt;p&gt;Python also offers a wide range of 

&lt;a href=&quot;https:&#x2F;&#x2F;pypi.org&quot;&gt;library&lt;&#x2F;a&gt;.
For example, pandas, numpy, scipy, scikit-learn, matplotlib, seaborn,
and many more for data science needs. You can try Python using the link
above and practice your programming skills every day.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;python&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Python 3.10.9 (main, Dec  6 2022, 18:44:57) [GCC 11.3.0] on linux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Hello World&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hello World&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;sql&quot;&gt;SQL&lt;a class=&quot;post-anchor&quot; href=&quot;#sql&quot; aria-label=&quot;Anchor link for: sql&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Website: 

&lt;a href=&quot;https:&#x2F;&#x2F;mariadb.org&quot;&gt;MariaDB&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Documentation: 

&lt;a href=&quot;https:&#x2F;&#x2F;mariadb.org&#x2F;documentation&quot;&gt;MariaDB Docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Books: 

&lt;a href=&quot;https:&#x2F;&#x2F;mariadb.com&#x2F;kb&#x2F;en&#x2F;books&quot;&gt;MariaDB Books&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;SQL (pronounced: sequel) or Structured Query Language is a programming
language for accessing data in relational databases (RDBMS). Almost all
database servers use SQL for data management.&lt;&#x2F;p&gt;
&lt;p&gt;Data scientists will inevitably deal with databases, such as creating
databases, processing data, and translating data to make it more
understandable. This is necessary for determining stakeholder decisions.&lt;&#x2F;p&gt;
&lt;p&gt;When using SQL, 

&lt;a href=&quot;https:&#x2F;&#x2F;mariadb.org&quot;&gt;MariaDB&lt;&#x2F;a&gt; (a derivative of 

&lt;a href=&quot;https:&#x2F;&#x2F;mysql.com&quot;&gt;MySQL&lt;&#x2F;a&gt;) is used for data management because it is more
flexible to develop openly and is not tied to proprietary licensed
products (Oracle). MariaDB also has more storage engines than MySQL.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; mysql&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;u&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; root&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-option&quot;&gt;p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Welcome to the MariaDB monitor.  Commands end with ; or \g.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your MariaDB connection id is 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Server version: 10.6.11-MariaDB MariaDB Server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;help;&amp;#39; or &amp;#39;\h&amp;#39; for help. Type &amp;#39;\c&amp;#39; to clear the current input statement.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MariaDB [(none)]&amp;gt; show databases;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+--------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| Database           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+--------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| hervymart          |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| hervypraktek       |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| information_schema |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| mysql              |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| performance_schema |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| sys                |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+--------------------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6 rows in set (0,097 sec)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MariaDB [(none)]&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;r&quot;&gt;R&lt;a class=&quot;post-anchor&quot; href=&quot;#r&quot; aria-label=&quot;Anchor link for: r&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Website: 

&lt;a href=&quot;https:&#x2F;&#x2F;r-project.org&quot;&gt;R-Project&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Documentation: 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.posit.co&#x2F;ide&#x2F;user&#x2F;ide&#x2F;get-started&quot;&gt;Posit Docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Books: 

&lt;a href=&quot;https:&#x2F;&#x2F;www.r-project.org&#x2F;doc&#x2F;bib&#x2F;R-books.html&quot;&gt;R-Project Books&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The R programming language is better known as a programming
language for statistics and graphical visualization. Created by 

&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ross_Ihaka&quot;&gt;Ross Ihaka&lt;&#x2F;a&gt; and 

&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Robert_Gentleman_(statistician)&quot;&gt;Robert Gentleman&lt;&#x2F;a&gt; at the
University of Auckland, it is now developed by the R Development Core
Team.&lt;&#x2F;p&gt;
&lt;p&gt;The R language, under the GNU GPL license, has become the de facto
standard among statisticians for statistical software development, and
is widely used for statistical software development and data analysis.&lt;&#x2F;p&gt;
&lt;p&gt;The R language can be used with 

&lt;a href=&quot;https:&#x2F;&#x2F;jupyter.org&quot;&gt;Jupyter&lt;&#x2F;a&gt; or 

&lt;a href=&quot;https:&#x2F;&#x2F;posit.co&#x2F;products&#x2F;open-source&#x2F;rstudio&quot;&gt;RStudio Posit&lt;&#x2F;a&gt; to make it easier for data scientists to process
data.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;R&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;R version 4.2.1 (2022-06-23) -- &amp;quot;Funny-Looking Kid&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Copyright (C) 2022 The R Foundation for Statistical Computing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Platform: x86_64-pc-linux-gnu (64-bit)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;R is free software and comes with ABSOLUTELY NO WARRANTY.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;You are welcome to redistribute it under certain conditions.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;license()&amp;#39; or &amp;#39;licence()&amp;#39; for distribution details.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Natural language support but running in an English locale&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;R is a collaborative project with many contributors.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;contributors()&amp;#39; for more information and&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39;citation()&amp;#39; on how to cite R or R packages in publications.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;demo()&amp;#39; for some demos, &amp;#39;help()&amp;#39; for on-line help, or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39;help.start()&amp;#39; for an HTML browser interface to help.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;q()&amp;#39; to quit R.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;gt; print(&amp;quot;HelloWorld&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1] &amp;quot;HelloWorld&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;julia&quot;&gt;Julia&lt;a class=&quot;post-anchor&quot; href=&quot;#julia&quot; aria-label=&quot;Anchor link for: julia&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Website: 

&lt;a href=&quot;https:&#x2F;&#x2F;julialang.org&quot;&gt;Julia Language&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Documentation: 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.julialang.org&#x2F;en&quot;&gt;Julia Language Docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Books: 

&lt;a href=&quot;https:&#x2F;&#x2F;julialang.org&#x2F;learning&#x2F;books&quot;&gt;Julia Language Books&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The Julia programming language is one of the languages used for
efficient numerical analysis and data visualization. Similar to Python,
Julia is a high-level language with syntax that is relatively easy for
beginners.&lt;&#x2F;p&gt;
&lt;p&gt;Julia is arguably Python’s competitor, as its performance is much faster
than Python’s. This is because Julia is compiled with the LLVM framework
for JIT compilation, which is comparable to the speed of C. In addition,
Julia can be integrated with VIM, Jupyter, and 

&lt;a href=&quot;https:&#x2F;&#x2F;julia-vscode.org&quot;&gt;Julia VScode&lt;&#x2F;a&gt;. Julia also has 

&lt;a href=&quot;https:&#x2F;&#x2F;www.juliapackages.com&quot;&gt;Julia Packages&lt;&#x2F;a&gt; for libraries needed by
data scientists, and interestingly, Julia has 

&lt;a href=&quot;https:&#x2F;&#x2F;fluxml.ai&quot;&gt;FluxML&lt;&#x2F;a&gt;, a
library specifically for machine learning.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;julia&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   _       _ _(_)_     |  Documentation: https:&#x2F;&#x2F;docs.julialang.org&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (_)     | (_) (_)    |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   _ _   _| |_  __ _   |  Type &amp;quot;?&amp;quot; for help, &amp;quot;]?&amp;quot; for Pkg help.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | | | | | | |&#x2F; _` |  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | | |_| | | | (_| |  |  Version 1.8.5 (2023-01-08)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; _&#x2F; |\__&amp;#39;_|_|_|\__&amp;#39;_|  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|__&#x2F;                   |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;julia&amp;gt; print(&amp;quot;Hello World&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hello World&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;julia&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;scala&quot;&gt;Scala&lt;a class=&quot;post-anchor&quot; href=&quot;#scala&quot; aria-label=&quot;Anchor link for: scala&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Website: 

&lt;a href=&quot;https:&#x2F;&#x2F;scala-lang.org&quot;&gt;Scala Language&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Documentation: 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.scala-lang.org&quot;&gt;Scala Language Docs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Books: 

&lt;a href=&quot;https:&#x2F;&#x2F;docs.scala-lang.org&#x2F;books&quot;&gt;Scala Language Books&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Scala (Scalable language) was started in 2001 by Martin Odersky and is a
general-purpose, high-level, multi-paradigm programming language.&lt;&#x2F;p&gt;
&lt;p&gt;Scala, like Java, is an object-oriented programming language that
is safe and supports functional programming. Scala runs on the Java
platform (Java virtual machine) and is compatible with existing Java
programs.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;scala&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;object&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-class&quot;&gt; HelloWorld&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; extends&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-class&quot;&gt; App&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  println&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Hello, World!&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Compiling:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;scalac&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; HelloWorld.scala&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Running binary:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;scala&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; HelloWorld&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hello, World!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;post-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Regardless of the language used, tailor it to the needs and criteria of
the data at hand for greater effectiveness. The following programming
examples are organized by subheading, starting with the easiest and most
common ones, making them easier for beginners to learn.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What is the best language?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;All programming languages are the best as long as they meet the needs
and specifications, because each language has its own advantages and
disadvantages. Personally, I recommend not focusing on the language
itself, but rather understanding the basic concepts of programming
algorithms first, which is more important.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Are You Sure It&#x27;s Just About Learning?</title>
        <published>2023-01-31T00:00:00+00:00</published>
        <updated>2026-06-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            hervyqa
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hervyqa.srht.site/blog/just-about-learning/"/>
        <id>https://hervyqa.srht.site/blog/just-about-learning/</id>
        
        <content type="html" xml:base="https://hervyqa.srht.site/blog/just-about-learning/">&lt;p&gt;Essentially, the learning process involves a change in the nature of
the learner from not knowing to knowing, from not understanding to
understanding.&lt;&#x2F;p&gt;
&lt;p&gt;Whether it’s programming, playing guitar, learning languages, public
speaking, cooking, or sports. People who look skilled usually don’t just
learn the theory, they’ve gotten used to doing it every day.&lt;&#x2F;p&gt;
&lt;p&gt;This means that learning does not necessarily change a person’s
attitude, does not always produce results, and certainly does not make
the learner a professional in a particular field.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;getting-used-to-it&quot;&gt;Getting used to it&lt;a class=&quot;post-anchor&quot; href=&quot;#getting-used-to-it&quot; aria-label=&quot;Anchor link for: getting-used-to-it&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;One potential approach is to &lt;strong&gt;get used to&lt;&#x2F;strong&gt; a particular process by
repeating it over and over again (looping) until it becomes second
nature.&lt;&#x2F;p&gt;
&lt;p&gt;By getting used to it, whether you like it or not, you will shape and
practice what you have learned. Of course, the output of the learning
process can be remembered in the long term. If the “learning” process is
done first, how can someone understand without getting used to it first?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Friend: What are you learning right now?&lt;&#x2F;li&gt;
&lt;li&gt;Me: I’m learning in C (programming language) so that I can get used to
build application.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Similar questions that are often asked are: why use an operating system
when the commands is complicated and difficult to memorize, instead of just
clicking? Why use an application when there are few tutorials, but others
with plenty? Why choose X over Z? And so on.&lt;&#x2F;p&gt;
&lt;p&gt;The answer often like these: “Because I’m used to”. It can be said that
this answer is very subjective based on the experience of the person
answering, but that’s the actual reality.&lt;&#x2F;p&gt;
&lt;p&gt;The way to get used to and be fluent in computer programming is to code
every day. To get used to making good designs, you have to design every
day. To get used to speaking Japanese, you have to speak Japanese every
day. To get used to public speaking, of course, you have to speak every
day.&lt;&#x2F;p&gt;
&lt;p&gt;In 2009, I still remember my junior high school biology teacher, who
was also an MIPA (Mathematics and Natural Sciences) Olympiad instructor
at the time, asking, “Sir, how did you memorize all the terms related
to digestion, respiration, hearing, the excretory system, cells, and so
on?” He casually replied, “Because I’ve been teaching biology every
day for years and I also teach at a private school.”&lt;&#x2F;p&gt;
&lt;p&gt;I could only mutter, “Oh… that makes sense.” It turns out that
frequent practice and getting used to something are ways to build a
strong foundation.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;having-a-goal&quot;&gt;Having a goal&lt;a class=&quot;post-anchor&quot; href=&quot;#having-a-goal&quot; aria-label=&quot;Anchor link for: having-a-goal&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Apart from “being accustomed to it,” another strong reason is having
a goal for what you want to get used to. This is what becomes the
fundamental (intention and motivation) for getting used to something.
Before planning to get used to something, first make sure you have a
strong reason for needing it.&lt;&#x2F;p&gt;
&lt;p&gt;For example, why should you use Linux? Because you want to become a
certified system administrator at a company. Why should you get used to
Python and SQL? To become a professional data scientist in the future.
Why should you get used to Java? To become a mobile programmer at a
company. Why should you get used to Inkscape? To become a great logo
designer. And so on. It will feel empty if you do something without a
meaningful and defined goal.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;having-more-features&quot;&gt;Having more features&lt;a class=&quot;post-anchor&quot; href=&quot;#having-more-features&quot; aria-label=&quot;Anchor link for: having-more-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Another answer is because it has “more features.” Usually, the argument
is based on features that are more suitable and meet spesific needs.
For example, using BSD or Linux-based because it is lighter and offers
maximum performance. Using drawing apps because it has editable layers
and compatible with printing color standards, and so on.&lt;&#x2F;p&gt;
&lt;p&gt;The answers to these arguments generally refer more to technical
matters.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;same-network&quot;&gt;Same network&lt;a class=&quot;post-anchor&quot; href=&quot;#same-network&quot; aria-label=&quot;Anchor link for: same-network&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;“I use X software because many of my colleagues use it,” is a fairly
rational argument. Once you know your goal, there will definitely be
individuals or groups who share the same passion. By joining a group
or community, you will be able to build connections within the same
network. That way, you can ask for feedback once you have created your
portfolio.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;back-to-the-topic&quot;&gt;Back to the topic&lt;a class=&quot;post-anchor&quot; href=&quot;#back-to-the-topic&quot; aria-label=&quot;Anchor link for: back-to-the-topic&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;It’s not just about learning, but also practicing what has been learned.
Learning is only the initial process of understanding concepts and
theories, but the euphoria is more about the results of execution, trial
and error, and repeated practice.&lt;&#x2F;p&gt;
&lt;p&gt;Is it enough to just practice? Of course not. The concept of learning
is more than that. The process is as follows: Starting with having a
specific goal &amp;gt; Getting used to it &amp;gt; Learning &amp;gt; Understanding &amp;gt; Teaching
others &amp;gt; Guiding &amp;gt; Facilitating learners to maintain the concept of
learning &lt;span class=&quot;ref-placeholder&quot; data-ref=&quot;neuroscience2019&quot;&gt;(&lt;a href=&quot;#ref-neuroscience2019&quot;&gt;Dagmar et al&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I hate every minute of training, but I say, Don’t quit. Suffer now
and live the rest of your life as a champion.”&lt;&#x2F;p&gt;
&lt;p&gt;— &lt;cite&gt;Muhammad Ali&lt;&#x2F;cite&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;If you only read books, subscribe to courses, watch webinars and video
tutorials, this is only a small part of the learning concept above. It
must be more than that, one must get used to practicing it. Every day!&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
