<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://pensieve.swijaya.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pensieve.swijaya.me/" rel="alternate" type="text/html" /><updated>2024-05-11T10:44:28-07:00</updated><id>https://pensieve.swijaya.me/feed.xml</id><title type="html">Santoso’s Pensieve</title><subtitle>A [pensieve](https://www.wizardingworld.com/fact-file/objects/pensieve#) for my thoughts and ramblings.</subtitle><author><name>Santoso Wijaya</name></author><entry><title type="html">Solarized &amp;amp; Selenized Colorscheme Cheatsheet</title><link href="https://pensieve.swijaya.me/solarized-selenized-cheatsheet" rel="alternate" type="text/html" title="Solarized &amp;amp; Selenized Colorscheme Cheatsheet" /><published>2024-05-04T00:00:00-07:00</published><updated>2024-05-04T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/solarized-selenized-cheatsheet</id><content type="html" xml:base="https://pensieve.swijaya.me/solarized-selenized-cheatsheet"><![CDATA[<style type="text/css">
  table {
    width: 95%;
    margin: auto;
    border-collapse: collapse;
  }

  thead th.name {
    width: 12%
  }

  thead th.value {
    width: 15%;
  }

  th {
    font-weight: bold;
    background-color: #d5cdb6;
  }

  th,
  td {
    text-align: center;
    vertical-align: middle;
    border: 1px solid;
  }

  td > code {
    background: none;
  }

  tbody td.darkbg > code {
    color: #c8d7d8;
  }

  tbody td.lightbg > code {
    color: #384c52;
  }
</style>

<p><a href="https://ethanschoonover.com/solarized/">Solarized</a> is a sixteen color palette
(eight monotones, eight accent colors) designed by Ethan Schoonover.</p>

<p><a href="https://github.com/jan-warchol/selenized">Selenized</a> is a redesign on Solarized
by Jan Warchoł. It improves on Solarized by providing better contrast and more
distinguishable accent colors.</p>

<p class="notice--info">Note: Color values here are canonical in CIE L*a*b* colorspace. The included
sRGB values were computed with
<a href="https://github.com/santoso-wijaya/base16cs"><code class="language-plaintext highlighter-rouge">base16cs</code></a> Rust tool that I
developed. It uses <a href="https://docs.rs/palette/latest/palette/"><code class="language-plaintext highlighter-rouge">palettte</code></a> for
colorspace computation.</p>

<h2 id="solarized-dark--light">Solarized (dark &amp; light)</h2>

<table>
  <thead>
    <tr>
      <th rowspan="2"></th>
      <th rowspan="2">Base16</th>
      <th colspan="3">Solarized dark</th>
      <th colspan="3">Solarized light</th>
    </tr>
    <tr>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
    </tr>
  </thead>

  <tbody>
  <!-- Shades bases -->
    <tr>
      <th rowspan="8">shades</th>
      <th>base00</th>
      <td bgcolor="#002b36" class="darkbg"><code>base03</code></td>
      <td bgcolor="#002b36" class="darkbg">
        <code>15 -12 -12</code>
      </td>
      <td bgcolor="#002b36" class="darkbg">
        <code>#002b36</code>
      </td>
      <td bgcolor="#fff6e3" class="lightbg"><code>base3</code></td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>97 0 10</code>
      </td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>#fff6e3</code>
      </td>
    </tr>
    <tr>
      <th>base01</th>
      <td bgcolor="#003641" class="darkbg"><code>base02</code></td>
      <td bgcolor="#003641" class="darkbg">
        <code>20 -12 -12</code>
      </td>
      <td bgcolor="#003641" class="darkbg">
        <code>#003641</code>
      </td>
      <td bgcolor="#f0e7d5" class="lightbg"><code>base2</code></td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>92 0 10</code>
      </td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>#f0e7d5</code>
      </td>
    </tr>
    <tr>
      <th>base02</th>
      <td bgcolor="#566e76" class="darkbg"><code>base01</code></td>
      <td bgcolor="#566e76" class="darkbg">
        <code>45 -7 -7</code>
      </td>
      <td bgcolor="#566e76" class="darkbg">
        <code>#566e76</code>
      </td>
      <td bgcolor="#92a1a1" class="darkbg"><code>base1</code></td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>65 -5 -2</code>
      </td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>#92a1a1</code>
      </td>
    </tr>
    <tr>
      <th>base03</th>
      <td bgcolor="#637b82" class="darkbg"><code>base00</code></td>
      <td bgcolor="#637b82" class="darkbg">
        <code>50 -7 -7</code>
      </td>
      <td bgcolor="#637b82" class="darkbg">
        <code>#637b82</code>
      </td>
      <td bgcolor="#829496" class="darkbg"><code>base0</code></td>
      <td bgcolor="#829496" class="darkbg">
        <code>60 -6 -3</code>
      </td>
      <td bgcolor="#829496" class="darkbg">
        <code>#829496</code>
      </td>
    </tr>
    <tr>
      <th>base04</th>
      <td bgcolor="#829496" class="darkbg"><code>base0</code></td>
      <td bgcolor="#829496" class="darkbg">
        <code>60 -6 -3</code>
      </td>
      <td bgcolor="#829496" class="darkbg">
        <code>#829496</code>
      </td>
      <td bgcolor="#637b82" class="darkbg"><code>base00</code></td>
      <td bgcolor="#637b82" class="darkbg">
        <code>50 -7 -7</code>
      </td>
      <td bgcolor="#637b82" class="darkbg">
        <code>#637b82</code>
      </td>
    </tr>
    <tr>
      <th>base05</th>
      <td bgcolor="#92a1a1" class="darkbg"><code>base1</code></td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>65 -5 -2</code>
      </td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>#92a1a1</code>
      </td>
      <td bgcolor="#566e76" class="darkbg"><code>base01</code></td>
      <td bgcolor="#566e76" class="darkbg">
        <code>45 -7 -7</code>
      </td>
      <td bgcolor="#566e76" class="darkbg">
        <code>#566e76</code>
      </td>
    </tr>
    <tr>
      <th>base06</th>
      <td bgcolor="#f0e7d5" class="lightbg"><code>base2</code></td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>92 0 10</code>
      </td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>#f0e7d5</code>
      </td>
      <td bgcolor="#003641" class="darkbg"><code>base02</code></td>
      <td bgcolor="#003641" class="darkbg">
        <code>20 -12 -12</code>
      </td>
      <td bgcolor="#003641" class="darkbg">
        <code>#003641</code>
      </td>
    </tr>
    <tr>
      <th>base07</th>
      <td bgcolor="#fff6e3" class="lightbg"><code>base3</code></td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>97 0 10</code>
      </td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>#fff6e3</code>
      </td>
      <td bgcolor="#002b36" class="darkbg"><code>base03</code></td>
      <td bgcolor="#002b36" class="darkbg">
        <code>15 -12 -12</code>
      </td>
      <td bgcolor="#002b36" class="darkbg">
        <code>#002b36</code>
      </td>
    </tr>

  <!-- Accents bases -->
    <tr>
      <th rowspan="8">accents</th>
      <th>base08</th>
      <td bgcolor="#e0332e" class="darkbg"><code>red</code></td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>50 65 45</code>
      </td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>#e0332e</code>
      </td>
      <td bgcolor="#e0332e" class="darkbg"><code>red</code></td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>50 65 45</code>
      </td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>#e0332e</code>
      </td>
    </tr>
    <tr>
      <th>base09</th>
      <td bgcolor="#cf4b15" class="darkbg"><code>orange</code></td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>50 50 55</code>
      </td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>#cf4b15</code>
      </td>
      <td bgcolor="#cf4b15" class="darkbg"><code>orange</code></td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>50 50 55</code>
      </td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>#cf4b15</code>
      </td>
    </tr>
    <tr>
      <th>base0a</th>
      <td bgcolor="#f2579c" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>60 65 -5</code>
      </td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>#f2579c</code>
      </td>
      <td bgcolor="#f2579c" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>60 65 -5</code>
      </td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>#f2579c</code>
      </td>
    </tr>
    <tr>
      <th>base0b</th>
      <td bgcolor="#8d9800" class="lightbg"><code>green</code></td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>60 -20 65</code>
      </td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>#8d9800</code>
      </td>
      <td bgcolor="#8d9800" class="lightbg"><code>green</code></td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>60 -20 65</code>
      </td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>#8d9800</code>
      </td>
    </tr>
    <tr>
      <th>base0c</th>
      <td bgcolor="#1fa198" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>60 -35 -5</code>
      </td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>#1fa198</code>
      </td>
      <td bgcolor="#1fa198" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>60 -35 -5</code>
      </td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>#1fa198</code>
      </td>
    </tr>
    <tr>
      <th>base0d</th>
      <td bgcolor="#008dd1" class="darkbg"><code>blue</code></td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>55 -10 -45</code>
      </td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>#008dd1</code>
      </td>
      <td bgcolor="#008dd1" class="darkbg"><code>blue</code></td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>55 -10 -45</code>
      </td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>#008dd1</code>
      </td>
    </tr>
    <tr>
      <th>base0e</th>
      <td bgcolor="#bb8801" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>60 10 65</code>
      </td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>#bb8801</code>
      </td>
      <td bgcolor="#bb8801" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>60 10 65</code>
      </td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>#bb8801</code>
      </td>
    </tr>
    <tr>
      <th>base0f</th>
      <td bgcolor="#5c73c4" class="darkbg"><code>violet</code></td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>50 15 -45</code>
      </td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>#5c73c4</code>
      </td>
      <td bgcolor="#5c73c4" class="darkbg"><code>violet</code></td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>50 15 -45</code>
      </td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>#5c73c4</code>
      </td>
    </tr>
  </tbody>
</table>

<h2 id="selenized-dark--light">Selenized (dark &amp; light)</h2>

<table>
  <thead>
    <tr>
      <th rowspan="2"></th>
      <th rowspan="2">Base16</th>
      <th colspan="3">Selenized dark</th>
      <th colspan="3">Selenized light</th>
    </tr>
    <tr>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
    </tr>
  </thead>

  <tbody>
  <!-- Shades bases -->
    <tr>
      <th rowspan="8">shades</th>
      <th>base00</th>
      <td bgcolor="#053d48" class="darkbg"><code>bg_0</code></td>
      <td bgcolor="#053d48" class="darkbg">
        <code>23 -12 -12</code>
      </td>
      <td bgcolor="#053d48" class="darkbg">
        <code>#053d48</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg"><code>bg_0</code></td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>96 0 13</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>#fef3da</code>
      </td>
    </tr>
    <tr>
      <th>base01</th>
      <td bgcolor="#0e4956" class="darkbg"><code>bg_1</code></td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>28 -13 -13</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>#0e4956</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg"><code>bg_1</code></td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>91 0 13</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>#f0e4cc</code>
      </td>
    </tr>
    <tr>
      <th>base02</th>
      <td bgcolor="#275b69" class="darkbg"><code>bg_2</code></td>
      <td bgcolor="#275b69" class="darkbg">
        <code>36 -13 -13</code>
      </td>
      <td bgcolor="#275b69" class="darkbg">
        <code>#275b69</code>
      </td>
      <td bgcolor="#d6cbb4" class="lightbg"><code>bg_2</code></td>
      <td bgcolor="#d6cbb4" class="lightbg">
        <code>82 0 13</code>
      </td>
      <td bgcolor="#d6cbb4" class="lightbg">
        <code>#d6cbb4</code>
      </td>
    </tr>
    <tr>
      <th>base03</th>
      <td bgcolor="#718b90" class="darkbg"><code>dim_0</code></td>
      <td bgcolor="#718b90" class="darkbg">
        <code>56 -8 -6</code>
      </td>
      <td bgcolor="#718b90" class="darkbg">
        <code>#718b90</code>
      </td>
      <td bgcolor="#8f9894" class="darkbg"><code>dim_0</code></td>
      <td bgcolor="#8f9894" class="darkbg">
        <code>62 -4 1</code>
      </td>
      <td bgcolor="#8f9894" class="darkbg">
        <code>#8f9894</code>
      </td>
    </tr>
    <tr>
      <th>base04</th>
      <td bgcolor="#adbcbc" class="lightbg"><code>fg_0</code></td>
      <td bgcolor="#adbcbc" class="lightbg">
        <code>75 -5 -2</code>
      </td>
      <td bgcolor="#adbcbc" class="lightbg">
        <code>#adbcbc</code>
      </td>
      <td bgcolor="#52666d" class="darkbg"><code>fg_0</code></td>
      <td bgcolor="#52666d" class="darkbg">
        <code>42 -6 -6</code>
      </td>
      <td bgcolor="#52666d" class="darkbg">
        <code>#52666d</code>
      </td>
    </tr>
    <tr>
      <th>base05</th>
      <td bgcolor="#c8d7d8" class="lightbg"><code>fg_1</code></td>
      <td bgcolor="#c8d7d8" class="lightbg">
        <code>85 -5 -2</code>
      </td>
      <td bgcolor="#c8d7d8" class="lightbg">
        <code>#c8d7d8</code>
      </td>
      <td bgcolor="#384c52" class="darkbg"><code>fg_1</code></td>
      <td bgcolor="#384c52" class="darkbg">
        <code>31 -6 -6</code>
      </td>
      <td bgcolor="#384c52" class="darkbg">
        <code>#384c52</code>
      </td>
    </tr>
    <tr>
      <th>base06</th>
      <td bgcolor="#f0e4cc" class="lightbg"><code>unused_0</code></td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>91 0 13</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>#f0e4cc</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg"><code>unused_0</code></td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>28 -13 -13</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>#0e4956</code>
      </td>
    </tr>
    <tr>
      <th>base07</th>
      <td bgcolor="#fef3da" class="lightbg"><code>unused_1</code></td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>96 0 13</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>#fef3da</code>
      </td>
      <td bgcolor="#053d48" class="darkbg"><code>unused_1</code></td>
      <td bgcolor="#053d48" class="darkbg">
        <code>23 -12 -12</code>
      </td>
      <td bgcolor="#053d48" class="darkbg">
        <code>#053d48</code>
      </td>
    </tr>

  <!-- Accents bases -->
    <tr>
      <th rowspan="8">accents</th>
      <th>base08</th>
      <td bgcolor="#fd564e" class="lightbg"><code>red</code></td>
      <td bgcolor="#fd564e" class="lightbg">
        <code>60 63 40</code>
      </td>
      <td bgcolor="#fd564e" class="lightbg">
        <code>#fd564e</code>
      </td>
      <td bgcolor="#d4212b" class="darkbg"><code>red</code></td>
      <td bgcolor="#d4212b" class="darkbg">
        <code>46 66 42</code>
      </td>
      <td bgcolor="#d4212b" class="darkbg">
        <code>#d4212b</code>
      </td>
    </tr>
    <tr>
      <th>base09</th>
      <td bgcolor="#f38649" class="lightbg"><code>orange</code></td>
      <td bgcolor="#f38649" class="lightbg">
        <code>67 37 50</code>
      </td>
      <td bgcolor="#f38649" class="lightbg">
        <code>#f38649</code>
      </td>
      <td bgcolor="#c75d20" class="darkbg"><code>orange</code></td>
      <td bgcolor="#c75d20" class="darkbg">
        <code>52 39 52</code>
      </td>
      <td bgcolor="#c75d20" class="darkbg">
        <code>#c75d20</code>
      </td>
    </tr>
    <tr>
      <th>base0a</th>
      <td bgcolor="#f176bd" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f176bd" class="lightbg">
        <code>66 55 -15</code>
      </td>
      <td bgcolor="#f176bd" class="lightbg">
        <code>#f176bd</code>
      </td>
      <td bgcolor="#cb4c99" class="darkbg"><code>magenta</code></td>
      <td bgcolor="#cb4c99" class="darkbg">
        <code>52 58 -16</code>
      </td>
      <td bgcolor="#cb4c99" class="darkbg">
        <code>#cb4c99</code>
      </td>
    </tr>
    <tr>
      <th>base0b</th>
      <td bgcolor="#80b83c" class="lightbg"><code>green</code></td>
      <td bgcolor="#80b83c" class="lightbg">
        <code>69 -38 55</code>
      </td>
      <td bgcolor="#80b83c" class="lightbg">
        <code>#80b83c</code>
      </td>
      <td bgcolor="#539100" class="darkbg"><code>green</code></td>
      <td bgcolor="#539100" class="darkbg">
        <code>54 -40 58</code>
      </td>
      <td bgcolor="#539100" class="darkbg">
        <code>#539100</code>
      </td>
    </tr>
    <tr>
      <th>base0c</th>
      <td bgcolor="#39c7b9" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#39c7b9" class="lightbg">
        <code>73 -40 -4</code>
      </td>
      <td bgcolor="#39c7b9" class="lightbg">
        <code>#39c7b9</code>
      </td>
      <td bgcolor="#009c8f" class="darkbg"><code>cyan</code></td>
      <td bgcolor="#009c8f" class="darkbg">
        <code>57 -42 -4</code>
      </td>
      <td bgcolor="#009c8f" class="darkbg">
        <code>#009c8f</code>
      </td>
    </tr>
    <tr>
      <th>base0d</th>
      <td bgcolor="#0096f5" class="lightbg"><code>blue</code></td>
      <td bgcolor="#0096f5" class="lightbg">
        <code>60 0 -57</code>
      </td>
      <td bgcolor="#0096f5" class="lightbg">
        <code>#0096f5</code>
      </td>
      <td bgcolor="#0073d2" class="darkbg"><code>blue</code></td>
      <td bgcolor="#0073d2" class="darkbg">
        <code>46 0 -60</code>
      </td>
      <td bgcolor="#0073d2" class="darkbg">
        <code>#0073d2</code>
      </td>
    </tr>
    <tr>
      <th>base0e</th>
      <td bgcolor="#e3b230" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#e3b230" class="lightbg">
        <code>75 6 68</code>
      </td>
      <td bgcolor="#e3b230" class="lightbg">
        <code>#e3b230</code>
      </td>
      <td bgcolor="#b38800" class="darkbg"><code>yellow</code></td>
      <td bgcolor="#b38800" class="darkbg">
        <code>59 6 71</code>
      </td>
      <td bgcolor="#b38800" class="darkbg">
        <code>#b38800</code>
      </td>
    </tr>
    <tr>
      <th>base0f</th>
      <td bgcolor="#a58cec" class="lightbg"><code>violet</code></td>
      <td bgcolor="#a58cec" class="lightbg">
        <code>64 30 -45</code>
      </td>
      <td bgcolor="#a58cec" class="lightbg">
        <code>#a58cec</code>
      </td>
      <td bgcolor="#7d64c5" class="darkbg"><code>violet</code></td>
      <td bgcolor="#7d64c5" class="darkbg">
        <code>49 32 -47</code>
      </td>
      <td bgcolor="#7d64c5" class="darkbg">
        <code>#7d64c5</code>
      </td>
    </tr>
  </tbody>
</table>

<h2 id="solarized-and-selenized-dark">Solarized and Selenized (dark)</h2>

<table>
  <thead>
    <tr>
      <th rowspan="2"></th>
      <th rowspan="2">Base16</th>
      <th colspan="3">Solarized dark</th>
      <th colspan="3">Selenized dark</th>
    </tr>
    <tr>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
    </tr>
  </thead>

  <tbody>
  <!-- Shades bases -->
    <tr>
      <th rowspan="8">shades</th>
      <th>base00</th>
      <td bgcolor="#002b36" class="darkbg"><code>base03</code></td>
      <td bgcolor="#002b36" class="darkbg">
        <code>15 -12 -12</code>
      </td>
      <td bgcolor="#002b36" class="darkbg">
        <code>#002b36</code>
      </td>
      <td bgcolor="#053d48" class="darkbg"><code>bg_0</code></td>
      <td bgcolor="#053d48" class="darkbg">
        <code>23 -12 -12</code>
      </td>
      <td bgcolor="#053d48" class="darkbg">
        <code>#053d48</code>
      </td>
    </tr>
    <tr>
      <th>base01</th>
      <td bgcolor="#003641" class="darkbg"><code>base02</code></td>
      <td bgcolor="#003641" class="darkbg">
        <code>20 -12 -12</code>
      </td>
      <td bgcolor="#003641" class="darkbg">
        <code>#003641</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg"><code>bg_1</code></td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>28 -13 -13</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>#0e4956</code>
      </td>
    </tr>
    <tr>
      <th>base02</th>
      <td bgcolor="#566e76" class="darkbg"><code>base01</code></td>
      <td bgcolor="#566e76" class="darkbg">
        <code>45 -7 -7</code>
      </td>
      <td bgcolor="#566e76" class="darkbg">
        <code>#566e76</code>
      </td>
      <td bgcolor="#275b69" class="darkbg"><code>bg_2</code></td>
      <td bgcolor="#275b69" class="darkbg">
        <code>36 -13 -13</code>
      </td>
      <td bgcolor="#275b69" class="darkbg">
        <code>#275b69</code>
      </td>
    </tr>
    <tr>
      <th>base03</th>
      <td bgcolor="#637b82" class="darkbg"><code>base00</code></td>
      <td bgcolor="#637b82" class="darkbg">
        <code>50 -7 -7</code>
      </td>
      <td bgcolor="#637b82" class="darkbg">
        <code>#637b82</code>
      </td>
      <td bgcolor="#718b90" class="darkbg"><code>dim_0</code></td>
      <td bgcolor="#718b90" class="darkbg">
        <code>56 -8 -6</code>
      </td>
      <td bgcolor="#718b90" class="darkbg">
        <code>#718b90</code>
      </td>
    </tr>
    <tr>
      <th>base04</th>
      <td bgcolor="#829496" class="darkbg"><code>base0</code></td>
      <td bgcolor="#829496" class="darkbg">
        <code>60 -6 -3</code>
      </td>
      <td bgcolor="#829496" class="darkbg">
        <code>#829496</code>
      </td>
      <td bgcolor="#adbcbc" class="lightbg"><code>fg_0</code></td>
      <td bgcolor="#adbcbc" class="lightbg">
        <code>75 -5 -2</code>
      </td>
      <td bgcolor="#adbcbc" class="lightbg">
        <code>#adbcbc</code>
      </td>
    </tr>
    <tr>
      <th>base05</th>
      <td bgcolor="#92a1a1" class="darkbg"><code>base1</code></td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>65 -5 -2</code>
      </td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>#92a1a1</code>
      </td>
      <td bgcolor="#c8d7d8" class="lightbg"><code>fg_1</code></td>
      <td bgcolor="#c8d7d8" class="lightbg">
        <code>85 -5 -2</code>
      </td>
      <td bgcolor="#c8d7d8" class="lightbg">
        <code>#c8d7d8</code>
      </td>
    </tr>
    <tr>
      <th>base06</th>
      <td bgcolor="#f0e7d5" class="lightbg"><code>base2</code></td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>92 0 10</code>
      </td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>#f0e7d5</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg"><code>unused_0</code></td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>91 0 13</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>#f0e4cc</code>
      </td>
    </tr>
    <tr>
      <th>base07</th>
      <td bgcolor="#fff6e3" class="lightbg"><code>base3</code></td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>97 0 10</code>
      </td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>#fff6e3</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg"><code>unused_1</code></td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>96 0 13</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>#fef3da</code>
      </td>
    </tr>

  <!-- Accents bases -->
    <tr>
      <th rowspan="8">accents</th>
      <th>base08</th>
      <td bgcolor="#e0332e" class="darkbg"><code>red</code></td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>50 65 45</code>
      </td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>#e0332e</code>
      </td>
      <td bgcolor="#fd564e" class="lightbg"><code>red</code></td>
      <td bgcolor="#fd564e" class="lightbg">
        <code>60 63 40</code>
      </td>
      <td bgcolor="#fd564e" class="lightbg">
        <code>#fd564e</code>
      </td>
    </tr>
    <tr>
      <th>base09</th>
      <td bgcolor="#cf4b15" class="darkbg"><code>orange</code></td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>50 50 55</code>
      </td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>#cf4b15</code>
      </td>
      <td bgcolor="#f38649" class="lightbg"><code>orange</code></td>
      <td bgcolor="#f38649" class="lightbg">
        <code>67 37 50</code>
      </td>
      <td bgcolor="#f38649" class="lightbg">
        <code>#f38649</code>
      </td>
    </tr>
    <tr>
      <th>base0a</th>
      <td bgcolor="#f2579c" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>60 65 -5</code>
      </td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>#f2579c</code>
      </td>
      <td bgcolor="#f176bd" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f176bd" class="lightbg">
        <code>66 55 -15</code>
      </td>
      <td bgcolor="#f176bd" class="lightbg">
        <code>#f176bd</code>
      </td>
    </tr>
    <tr>
      <th>base0b</th>
      <td bgcolor="#8d9800" class="lightbg"><code>green</code></td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>60 -20 65</code>
      </td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>#8d9800</code>
      </td>
      <td bgcolor="#80b83c" class="lightbg"><code>green</code></td>
      <td bgcolor="#80b83c" class="lightbg">
        <code>69 -38 55</code>
      </td>
      <td bgcolor="#80b83c" class="lightbg">
        <code>#80b83c</code>
      </td>
    </tr>
    <tr>
      <th>base0c</th>
      <td bgcolor="#1fa198" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>60 -35 -5</code>
      </td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>#1fa198</code>
      </td>
      <td bgcolor="#39c7b9" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#39c7b9" class="lightbg">
        <code>73 -40 -4</code>
      </td>
      <td bgcolor="#39c7b9" class="lightbg">
        <code>#39c7b9</code>
      </td>
    </tr>
    <tr>
      <th>base0d</th>
      <td bgcolor="#008dd1" class="darkbg"><code>blue</code></td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>55 -10 -45</code>
      </td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>#008dd1</code>
      </td>
      <td bgcolor="#0096f5" class="lightbg"><code>blue</code></td>
      <td bgcolor="#0096f5" class="lightbg">
        <code>60 0 -57</code>
      </td>
      <td bgcolor="#0096f5" class="lightbg">
        <code>#0096f5</code>
      </td>
    </tr>
    <tr>
      <th>base0e</th>
      <td bgcolor="#bb8801" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>60 10 65</code>
      </td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>#bb8801</code>
      </td>
      <td bgcolor="#e3b230" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#e3b230" class="lightbg">
        <code>75 6 68</code>
      </td>
      <td bgcolor="#e3b230" class="lightbg">
        <code>#e3b230</code>
      </td>
    </tr>
    <tr>
      <th>base0f</th>
      <td bgcolor="#5c73c4" class="darkbg"><code>violet</code></td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>50 15 -45</code>
      </td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>#5c73c4</code>
      </td>
      <td bgcolor="#a58cec" class="lightbg"><code>violet</code></td>
      <td bgcolor="#a58cec" class="lightbg">
        <code>64 30 -45</code>
      </td>
      <td bgcolor="#a58cec" class="lightbg">
        <code>#a58cec</code>
      </td>
    </tr>
  </tbody>
</table>

<h2 id="solarized-and-selenized-light">Solarized and Selenized (light)</h2>

<table>
  <thead>
    <tr>
      <th rowspan="2"></th>
      <th rowspan="2">Base16</th>
      <th colspan="3">Solarized light</th>
      <th colspan="3">Selenized light</th>
    </tr>
    <tr>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
      <th class="name">name</th>
      <th class="value"><strong>L*a*b*</strong></th>
      <th class="value">sRGB</th>
    </tr>
  </thead>

  <tbody>
  <!-- Shades bases -->
    <tr>
      <th rowspan="8">shades</th>
      <th>base00</th>
      <td bgcolor="#fff6e3" class="lightbg"><code>base3</code></td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>97 0 10</code>
      </td>
      <td bgcolor="#fff6e3" class="lightbg">
        <code>#fff6e3</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg"><code>bg_0</code></td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>96 0 13</code>
      </td>
      <td bgcolor="#fef3da" class="lightbg">
        <code>#fef3da</code>
      </td>
    </tr>
    <tr>
      <th>base01</th>
      <td bgcolor="#f0e7d5" class="lightbg"><code>base2</code></td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>92 0 10</code>
      </td>
      <td bgcolor="#f0e7d5" class="lightbg">
        <code>#f0e7d5</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg"><code>bg_1</code></td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>91 0 13</code>
      </td>
      <td bgcolor="#f0e4cc" class="lightbg">
        <code>#f0e4cc</code>
      </td>
    </tr>
    <tr>
      <th>base02</th>
      <td bgcolor="#92a1a1" class="darkbg"><code>base1</code></td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>65 -5 -2</code>
      </td>
      <td bgcolor="#92a1a1" class="darkbg">
        <code>#92a1a1</code>
      </td>
      <td bgcolor="#d6cbb4" class="lightbg"><code>bg_2</code></td>
      <td bgcolor="#d6cbb4" class="lightbg">
        <code>82 0 13</code>
      </td>
      <td bgcolor="#d6cbb4" class="lightbg">
        <code>#d6cbb4</code>
      </td>
    </tr>
    <tr>
      <th>base03</th>
      <td bgcolor="#829496" class="darkbg"><code>base0</code></td>
      <td bgcolor="#829496" class="darkbg">
        <code>60 -6 -3</code>
      </td>
      <td bgcolor="#829496" class="darkbg">
        <code>#829496</code>
      </td>
      <td bgcolor="#8f9894" class="darkbg"><code>dim_0</code></td>
      <td bgcolor="#8f9894" class="darkbg">
        <code>62 -4 1</code>
      </td>
      <td bgcolor="#8f9894" class="darkbg">
        <code>#8f9894</code>
      </td>
    </tr>
    <tr>
      <th>base04</th>
      <td bgcolor="#637b82" class="darkbg"><code>base00</code></td>
      <td bgcolor="#637b82" class="darkbg">
        <code>50 -7 -7</code>
      </td>
      <td bgcolor="#637b82" class="darkbg">
        <code>#637b82</code>
      </td>
      <td bgcolor="#52666d" class="darkbg"><code>fg_0</code></td>
      <td bgcolor="#52666d" class="darkbg">
        <code>42 -6 -6</code>
      </td>
      <td bgcolor="#52666d" class="darkbg">
        <code>#52666d</code>
      </td>
    </tr>
    <tr>
      <th>base05</th>
      <td bgcolor="#566e76" class="darkbg"><code>base01</code></td>
      <td bgcolor="#566e76" class="darkbg">
        <code>45 -7 -7</code>
      </td>
      <td bgcolor="#566e76" class="darkbg">
        <code>#566e76</code>
      </td>
      <td bgcolor="#384c52" class="darkbg"><code>fg_1</code></td>
      <td bgcolor="#384c52" class="darkbg">
        <code>31 -6 -6</code>
      </td>
      <td bgcolor="#384c52" class="darkbg">
        <code>#384c52</code>
      </td>
    </tr>
    <tr>
      <th>base06</th>
      <td bgcolor="#003641" class="darkbg"><code>base02</code></td>
      <td bgcolor="#003641" class="darkbg">
        <code>20 -12 -12</code>
      </td>
      <td bgcolor="#003641" class="darkbg">
        <code>#003641</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg"><code>unused_0</code></td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>28 -13 -13</code>
      </td>
      <td bgcolor="#0e4956" class="darkbg">
        <code>#0e4956</code>
      </td>
    </tr>
    <tr>
      <th>base07</th>
      <td bgcolor="#002b36" class="darkbg"><code>base03</code></td>
      <td bgcolor="#002b36" class="darkbg">
        <code>15 -12 -12</code>
      </td>
      <td bgcolor="#002b36" class="darkbg">
        <code>#002b36</code>
      </td>
      <td bgcolor="#053d48" class="darkbg"><code>unused_1</code></td>
      <td bgcolor="#053d48" class="darkbg">
        <code>23 -12 -12</code>
      </td>
      <td bgcolor="#053d48" class="darkbg">
        <code>#053d48</code>
      </td>
    </tr>

  <!-- Accents bases -->
    <tr>
      <th rowspan="8">accents</th>
      <th>base08</th>
      <td bgcolor="#e0332e" class="darkbg"><code>red</code></td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>50 65 45</code>
      </td>
      <td bgcolor="#e0332e" class="darkbg">
        <code>#e0332e</code>
      </td>
      <td bgcolor="#d4212b" class="darkbg"><code>red</code></td>
      <td bgcolor="#d4212b" class="darkbg">
        <code>46 66 42</code>
      </td>
      <td bgcolor="#d4212b" class="darkbg">
        <code>#d4212b</code>
      </td>
    </tr>
    <tr>
      <th>base09</th>
      <td bgcolor="#cf4b15" class="darkbg"><code>orange</code></td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>50 50 55</code>
      </td>
      <td bgcolor="#cf4b15" class="darkbg">
        <code>#cf4b15</code>
      </td>
      <td bgcolor="#c75d20" class="darkbg"><code>orange</code></td>
      <td bgcolor="#c75d20" class="darkbg">
        <code>52 39 52</code>
      </td>
      <td bgcolor="#c75d20" class="darkbg">
        <code>#c75d20</code>
      </td>
    </tr>
    <tr>
      <th>base0a</th>
      <td bgcolor="#f2579c" class="lightbg"><code>magenta</code></td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>60 65 -5</code>
      </td>
      <td bgcolor="#f2579c" class="lightbg">
        <code>#f2579c</code>
      </td>
      <td bgcolor="#cb4c99" class="darkbg"><code>magenta</code></td>
      <td bgcolor="#cb4c99" class="darkbg">
        <code>52 58 -16</code>
      </td>
      <td bgcolor="#cb4c99" class="darkbg">
        <code>#cb4c99</code>
      </td>
    </tr>
    <tr>
      <th>base0b</th>
      <td bgcolor="#8d9800" class="lightbg"><code>green</code></td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>60 -20 65</code>
      </td>
      <td bgcolor="#8d9800" class="lightbg">
        <code>#8d9800</code>
      </td>
      <td bgcolor="#539100" class="darkbg"><code>green</code></td>
      <td bgcolor="#539100" class="darkbg">
        <code>54 -40 58</code>
      </td>
      <td bgcolor="#539100" class="darkbg">
        <code>#539100</code>
      </td>
    </tr>
    <tr>
      <th>base0c</th>
      <td bgcolor="#1fa198" class="lightbg"><code>cyan</code></td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>60 -35 -5</code>
      </td>
      <td bgcolor="#1fa198" class="lightbg">
        <code>#1fa198</code>
      </td>
      <td bgcolor="#009c8f" class="darkbg"><code>cyan</code></td>
      <td bgcolor="#009c8f" class="darkbg">
        <code>57 -42 -4</code>
      </td>
      <td bgcolor="#009c8f" class="darkbg">
        <code>#009c8f</code>
      </td>
    </tr>
    <tr>
      <th>base0d</th>
      <td bgcolor="#008dd1" class="darkbg"><code>blue</code></td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>55 -10 -45</code>
      </td>
      <td bgcolor="#008dd1" class="darkbg">
        <code>#008dd1</code>
      </td>
      <td bgcolor="#0073d2" class="darkbg"><code>blue</code></td>
      <td bgcolor="#0073d2" class="darkbg">
        <code>46 0 -60</code>
      </td>
      <td bgcolor="#0073d2" class="darkbg">
        <code>#0073d2</code>
      </td>
    </tr>
    <tr>
      <th>base0e</th>
      <td bgcolor="#bb8801" class="lightbg"><code>yellow</code></td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>60 10 65</code>
      </td>
      <td bgcolor="#bb8801" class="lightbg">
        <code>#bb8801</code>
      </td>
      <td bgcolor="#b38800" class="darkbg"><code>yellow</code></td>
      <td bgcolor="#b38800" class="darkbg">
        <code>59 6 71</code>
      </td>
      <td bgcolor="#b38800" class="darkbg">
        <code>#b38800</code>
      </td>
    </tr>
    <tr>
      <th>base0f</th>
      <td bgcolor="#5c73c4" class="darkbg"><code>violet</code></td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>50 15 -45</code>
      </td>
      <td bgcolor="#5c73c4" class="darkbg">
        <code>#5c73c4</code>
      </td>
      <td bgcolor="#7d64c5" class="darkbg"><code>violet</code></td>
      <td bgcolor="#7d64c5" class="darkbg">
        <code>49 32 -47</code>
      </td>
      <td bgcolor="#7d64c5" class="darkbg">
        <code>#7d64c5</code>
      </td>
    </tr>
  </tbody>
</table>

<h2 id="credits">Credits</h2>

<ul>
  <li><a href="https://ethanschoonover.com/solarized/">Solarized - Ethan Schoonover</a></li>
  <li><a href="https://github.com/jan-warchol/selenized">Selenized - Jan Warchol</a></li>
</ul>]]></content><author><name>Santoso Wijaya</name></author><category term="colorscheme" /><category term="cheatsheet" /><category term="solarized" /><category term="selenized" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Hopping Around NeoVim</title><link href="https://pensieve.swijaya.me/nvim/lazyvim/hop" rel="alternate" type="text/html" title="Hopping Around NeoVim" /><published>2024-03-23T00:00:00-07:00</published><updated>2024-03-23T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/nvim/lazyvim/hop</id><content type="html" xml:base="https://pensieve.swijaya.me/nvim/lazyvim/hop"><![CDATA[<p>I liked <code class="language-plaintext highlighter-rouge">vim-easymotion</code> in plain Vim. <code class="language-plaintext highlighter-rouge">hop.nvim</code> is the NeoVim equivalent.
I had to script the keybindings (with <code class="language-plaintext highlighter-rouge">which-keys</code> so that they can be
displayed as keybinding hints in the UI, too). The rendering of the “hop spots”
is configurable and user-friendly by default. Hint-hopping is such a powerful
way to move around in Vim.</p>

<figure class="third full">
  
    
      <a href="/assets/nvim/lazyvim/hop-lines.png" title="LazyVim in NeoVide with Hop line hints">
          <img src="/assets/nvim/lazyvim/hop-lines.png" alt="LazyVim in NeoVide with Hop line hints" />
      </a>
    
  
    
      <a href="/assets/nvim/lazyvim/hop-words.png" title="LazyVim in NeoVide with Hop word hints">
          <img src="/assets/nvim/lazyvim/hop-words.png" alt="LazyVim in NeoVide with Hop word hints" />
      </a>
    
  
    
      <a href="/assets/nvim/lazyvim/hop-whichkey.png" title="LazyVim in NeoVide with Hop keybindings shown in which-key">
          <img src="/assets/nvim/lazyvim/hop-whichkey.png" alt="LazyVim in NeoVide with Hop keybindings shown in which-key" />
      </a>
    
  
  
</figure>

<p>(In Solarized dark this time)</p>

<p>I installed <code class="language-plaintext highlighter-rouge">hop.nvim</code> and registers its keybindings with LazyVim’s keybinding
config and <code class="language-plaintext highlighter-rouge">which-key</code> for the group. In
<a href="https://github.com/santoso-wijaya/lazyvim-config/blob/36306087a100d5b43d46f2bfa4df36a1724bc7be/lua/plugins/hop.lua"><code class="language-plaintext highlighter-rouge">~/.config/nvim/lua/plugins/hop.lua</code></a>:</p>

<div class="language-lua highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">return</span> <span class="p">{</span>
  <span class="c1">-- `hop` is an EasyMotion-like plugin allowing you to jump anywhere in a</span>
  <span class="c1">-- document with as few keystrokes as possible.</span>
  <span class="p">{</span>
    <span class="s2">"smoka7/hop.nvim"</span><span class="p">,</span>
    <span class="n">version</span> <span class="o">=</span> <span class="s2">"*"</span><span class="p">,</span>
    <span class="n">main</span> <span class="o">=</span> <span class="s2">"hop"</span><span class="p">,</span>
    <span class="n">opts</span> <span class="o">=</span> <span class="p">{</span>
      <span class="n">keys</span> <span class="o">=</span> <span class="s2">"hklyuiopnm,qwertzxcvbasdgjf;"</span><span class="p">,</span>
    <span class="p">},</span>
    <span class="n">keys</span> <span class="o">=</span> <span class="p">{</span>
      <span class="p">{</span> <span class="s2">"&lt;leader&gt;hw"</span><span class="p">,</span> <span class="s2">"&lt;cmd&gt;HopWord&lt;cr&gt;"</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Hop to all words in the visible buffer; most useful!"</span> <span class="p">},</span>
      <span class="p">{</span> <span class="s2">"&lt;leader&gt;hl"</span><span class="p">,</span> <span class="s2">"&lt;cmd&gt;HopLine&lt;cr&gt;"</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Hop to the first column of each visible line"</span> <span class="p">},</span>
      <span class="p">{</span>
        <span class="s2">"&lt;leader&gt;hs"</span><span class="p">,</span>
        <span class="s2">"&lt;cmd&gt;HopLineStart&lt;cr&gt;"</span><span class="p">,</span>
        <span class="n">mode</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span>
        <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Hop to the first non-whitespace character of each line"</span><span class="p">,</span>
      <span class="p">},</span>
      <span class="p">{</span>
        <span class="s2">"&lt;leader&gt;hv"</span><span class="p">,</span>
        <span class="s2">"&lt;cmd&gt;HopVertical&lt;cr&gt;"</span><span class="p">,</span>
        <span class="n">mode</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span>
        <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Hop to each line, keeping cursor column position the same"</span><span class="p">,</span>
      <span class="p">},</span>
      <span class="p">{</span> <span class="s2">"&lt;leader&gt;h/"</span><span class="p">,</span> <span class="s2">"&lt;cmd&gt;HopPattern&lt;cr&gt;"</span><span class="p">,</span> <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Validate search (`/`) with hints"</span> <span class="p">},</span>
      <span class="p">{</span> <span class="s2">"&lt;leader&gt;ha"</span><span class="p">,</span> <span class="s2">"&lt;cmd&gt;HopAnywhere&lt;cr&gt;"</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="n">desc</span> <span class="o">=</span> <span class="s2">"Hop anywhere"</span> <span class="p">},</span>
    <span class="p">},</span>
  <span class="p">},</span>

  <span class="c1">-- Register the `&lt;leader&gt;h` prefix as with a group name in which-key.</span>
  <span class="p">{</span>
    <span class="s2">"folke/which-key.nvim"</span><span class="p">,</span>
    <span class="n">opts</span> <span class="o">=</span> <span class="p">{</span>
      <span class="n">defaults</span> <span class="o">=</span> <span class="p">{</span>
        <span class="p">[</span><span class="s2">"&lt;leader&gt;h"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"+hop"</span> <span class="p">},</span>
      <span class="p">},</span>
    <span class="p">},</span>
  <span class="p">},</span>
<span class="p">}</span>
</code></pre></div></div>]]></content><author><name>Santoso Wijaya</name></author><category term="nvim" /><category term="lazyvim" /><category term="vim" /><category term="neovim" /><category term="lazyvim" /><category term="plugin" /><summary type="html"><![CDATA[I liked vim-easymotion in plain Vim. hop.nvim is the NeoVim equivalent. I had to script the keybindings (with which-keys so that they can be displayed as keybinding hints in the UI, too). The rendering of the “hop spots” is configurable and user-friendly by default. Hint-hopping is such a powerful way to move around in Vim.]]></summary></entry><entry><title type="html">Rainbow Indent Lines</title><link href="https://pensieve.swijaya.me/nvim/lazyvim/rainbow-indent-lines" rel="alternate" type="text/html" title="Rainbow Indent Lines" /><published>2024-03-22T00:00:00-07:00</published><updated>2024-03-22T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/nvim/lazyvim/rainbow-indent-lines</id><content type="html" xml:base="https://pensieve.swijaya.me/nvim/lazyvim/rainbow-indent-lines"><![CDATA[<p>LazyVim also comes with the “ibl”
(<a href="http://www.lazyvim.org/plugins/ui#indent-blanklinenvim"><code class="language-plaintext highlighter-rouge">indent-blankline.nvim</code></a>)
plugin that renders vertical lines (by default, with the <code class="language-plaintext highlighter-rouge">|</code> character)
as indent guidelines. I don’t like how strong they look, though, in the
Solarized colorscheme that I just applied.</p>

<p>But then I found this
<a href="https://github.com/lukas-reineke/indent-blankline.nvim?tab=readme-ov-file#multiple-indent-colors">example config</a>
to make them rainbow colored. I thought that was pretty neat. I landed on the
following Lua script to achieve this.</p>

<p>In
<a href="https://github.com/santoso-wijaya/lazyvim-config/blob/3d9393adacaa03bdb5a44e6a3c920096cefb3cfe/lua/plugins/indent-blankline.lua"><code class="language-plaintext highlighter-rouge">~/.config/nvim/lua/plugins/indent-blankline.lua</code></a>:</p>

<p><img src="/assets/resized/neovide-ibl-rainbow-800x552.png" alt="LazyVim in NeoVide with Indent Blanklines with rainbow lines" srcset="    /assets/resized/neovide-ibl-rainbow-480x331.png 480w,    /assets/resized/neovide-ibl-rainbow-800x552.png 800w, /assets/nvim/lazyvim/neovide-ibl-rainbow.png 1341w" /></p>]]></content><author><name>Santoso Wijaya</name></author><category term="nvim" /><category term="lazyvim" /><category term="vim" /><category term="neovim" /><category term="lazyvim" /><category term="plugin" /><category term="rainbow" /><summary type="html"><![CDATA[LazyVim also comes with the “ibl” (indent-blankline.nvim) plugin that renders vertical lines (by default, with the | character) as indent guidelines. I don’t like how strong they look, though, in the Solarized colorscheme that I just applied.]]></summary></entry><entry><title type="html">LazyVim: Deeper into NeoVim</title><link href="https://pensieve.swijaya.me/nvim/lazyvim/lazyvim" rel="alternate" type="text/html" title="LazyVim: Deeper into NeoVim" /><published>2024-03-21T00:00:00-07:00</published><updated>2024-03-21T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/nvim/lazyvim/lazyvim</id><content type="html" xml:base="https://pensieve.swijaya.me/nvim/lazyvim/lazyvim"><![CDATA[<h2 id="lazyvim-">LazyVim 💤</h2>

<p>LazyVim is a NeoVim plugin manager. It comes with a bundle of plugins that the
author/community has vetted to be working quite well together.</p>

<p>It makes managing nvim plugins and configuring them to your tastes quite easy
and pleasant to do. I’ve been having a blast with it.</p>

<p><img src="/assets/resized/neovide-solarized-dark-1400x971.png" alt="LazyVim in NeoVide with Solarized dark colorscheme" srcset="    /assets/resized/neovide-solarized-dark-480x333.png 480w,    /assets/resized/neovide-solarized-dark-800x555.png 800w,    /assets/resized/neovide-solarized-dark-1400x971.png 1400w, /assets/nvim/lazyvim/neovide-solarized-dark.png 2004w" /></p>

<h2 id="solarized-">Solarized ☯</h2>

<p>The first thing that I did was to install and configure Solarized colorscheme.</p>

<p>In LazyVim, I simply created a
<a href="https://github.com/santoso-wijaya/lazyvim-config/blob/3d9393adacaa03bdb5a44e6a3c920096cefb3cfe/lua/plugins/solarized.lua"><code class="language-plaintext highlighter-rouge">solarized.lua</code></a>
file in <code class="language-plaintext highlighter-rouge">~/.config/nvim/lua/plugins</code> directory.</p>

<div class="language-lua highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">return</span> <span class="p">{</span>
  <span class="c1">-- add Lua-scriptable solarized color scheme</span>
  <span class="p">{</span>
    <span class="s2">"maxmx03/solarized.nvim"</span><span class="p">,</span>
    <span class="n">lazy</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span>
    <span class="n">name</span> <span class="o">=</span> <span class="s2">"solarized"</span><span class="p">,</span>
    <span class="n">main</span> <span class="o">=</span> <span class="s2">"solarized"</span><span class="p">,</span>
    <span class="n">priority</span> <span class="o">=</span> <span class="mi">1000</span><span class="p">,</span>
    <span class="c1">-- See: https://www.lazyvim.org/configuration/plugins#%EF%B8%8F-customizing-plugin-specs</span>
    <span class="n">opts</span> <span class="o">=</span> <span class="p">{</span>
      <span class="c1">-- See: https://github.com/maxmx03/solarized.nvim?tab=readme-ov-file#default-config</span>
      <span class="n">styles</span> <span class="o">=</span> <span class="p">{</span>
        <span class="c1">-- Turn off the bolding of keywords syntax that this particular scheme does</span>
        <span class="n">keywords</span> <span class="o">=</span> <span class="p">{</span> <span class="n">bold</span> <span class="o">=</span> <span class="kc">false</span> <span class="p">},</span>
      <span class="p">},</span>
    <span class="p">},</span>
    <span class="n">config</span> <span class="o">=</span> <span class="k">function</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span>
      <span class="n">vim</span><span class="p">.</span><span class="n">o</span><span class="p">.</span><span class="n">background</span> <span class="o">=</span> <span class="s2">"light"</span>
      <span class="nb">require</span><span class="p">(</span><span class="n">plugin</span><span class="p">.</span><span class="n">main</span><span class="p">).</span><span class="n">setup</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
      <span class="n">vim</span><span class="p">.</span><span class="n">cmd</span><span class="p">.</span><span class="n">colorscheme</span> <span class="o">=</span> <span class="s2">"solarized"</span>
    <span class="k">end</span><span class="p">,</span>
  <span class="p">},</span>

  <span class="c1">-- configure LazyVim to load solarized</span>
  <span class="p">{</span>
    <span class="s2">"LazyVim/LazyVim"</span><span class="p">,</span>
    <span class="n">opts</span> <span class="o">=</span> <span class="p">{</span>
      <span class="n">colorscheme</span> <span class="o">=</span> <span class="s2">"solarized"</span><span class="p">,</span>
    <span class="p">},</span>
  <span class="p">},</span>
<span class="p">}</span>
</code></pre></div></div>

<p>I quite enjoyed how much more structured that process was, especially NeoVim’s
scriptability with Lua.</p>

<p>In NeoVide, this looks 🔥</p>

<figure class="third full">
  
    
      <a href="/assets/nvim/lazyvim/neovide-solarized-light-1.png" title="LazyVim in NeoVide with Solarized">
          <img src="/assets/nvim/lazyvim/neovide-solarized-light-1.png" alt="LazyVim in NeoVide with Solarized light colorscheme" />
      </a>
    
  
    
      <a href="/assets/nvim/lazyvim/neovide-solarized-light-2.png" title="LazyVim in NeoVide with Solarized">
          <img src="/assets/nvim/lazyvim/neovide-solarized-light-2.png" alt="LazyVim in NeoVide with Solarized light colorscheme" />
      </a>
    
  
    
      <a href="/assets/nvim/lazyvim/neovide-solarized-light-3.png" title="LazyVim in NeoVide with Solarized">
          <img src="/assets/nvim/lazyvim/neovide-solarized-light-3.png" alt="LazyVim in NeoVide with Solarized light colorscheme" />
      </a>
    
  
  
</figure>]]></content><author><name>Santoso Wijaya</name></author><category term="nvim" /><category term="lazyvim" /><category term="vim" /><category term="neovim" /><category term="lazyvim" /><category term="plugin" /><category term="ide" /><category term="editor" /><category term="solarized" /><summary type="html"><![CDATA[LazyVim 💤]]></summary></entry><entry><title type="html">NeoVide: a NeoVim GUI in Rust</title><link href="https://pensieve.swijaya.me/nvim/neovide" rel="alternate" type="text/html" title="NeoVide: a NeoVim GUI in Rust" /><published>2024-03-20T00:00:00-07:00</published><updated>2024-03-20T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/nvim/neovide</id><content type="html" xml:base="https://pensieve.swijaya.me/nvim/neovide"><![CDATA[<p><img src="/assets/resized/neovide-1400x971.png" alt="NeoVide" srcset="    /assets/resized/neovide-480x333.png 480w,    /assets/resized/neovide-800x555.png 800w,    /assets/resized/neovide-1400x971.png 1400w, /assets/nvim/neovide.png 2004w" /></p>

<p>👆🏼 Neovide with notable settings and plugins:</p>

<ul>
  <li><a href="https://github.com/preservim/nerdtree">NERDTree</a></li>
  <li>gutters shown</li>
  <li><a href="https://github.com/vim-airline/vim-airline">vim-airline</a>, with
    <ul>
      <li><a href="https://devicon.dev">devicons</a></li>
      <li>Monaspace Neon <a href="https://www.nerdfonts.com/font-downloads">Nerd Font</a> for
glyphs</li>
    </ul>
  </li>
  <li>Solarized color scheme</li>
</ul>

<p>I’d been zipping around NeoVim, in both terminal and NeoVide, especially with
a newfound power in <code class="language-plaintext highlighter-rouge">mini.jump2d</code> and <code class="language-plaintext highlighter-rouge">vim-easymotion</code> (I would eventually
replace these two with <a href="https://github.com/hadronized/hop.nvim"><code class="language-plaintext highlighter-rouge">hop.nvim</code></a>).</p>]]></content><author><name>Santoso Wijaya</name></author><category term="nvim" /><category term="neovim" /><category term="gui" /><category term="rust" /><category term="editor" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Alacritty</title><link href="https://pensieve.swijaya.me/alacritty" rel="alternate" type="text/html" title="Alacritty" /><published>2024-03-15T00:00:00-07:00</published><updated>2024-03-15T00:00:00-07:00</updated><id>https://pensieve.swijaya.me/alacritty</id><content type="html" xml:base="https://pensieve.swijaya.me/alacritty"><![CDATA[<p><a href="https://github.com/alacritty/alacritty">Alacritty</a> is a cross-platform terminal
emulator that’s GPU-accelerated with OpenGL and is written in Rust. I find that
developer tools written in Rust, a language beloved by the developer community,
have been impressing me a lot lately. The prompt app
<a href="https://starship.rs">Starship</a> and NeoVim GUI NeoVide come to mind.</p>

<p>I discovered Alacritty on my search for an alternative—preferably
cross-platform—terminal emulator, as I kept bumping against Mac OS’ default
Terminal.app’s limitations and rough edges.</p>

<p>What drew me the most to Alacritty is its configurability and customization
options, especially as they can be expressed in developer-friendly <code class="language-plaintext highlighter-rouge">.toml</code> file
format.</p>

<p>Here’s what my Alacritty terminal currently looks like (Solarized, of course).</p>

<p><img src="/assets/resized/alacritty-800x377.png" alt="Alacritty terminal with Solarized theme" srcset="    /assets/resized/alacritty-480x226.png 480w,    /assets/resized/alacritty-800x377.png 800w, /assets/alacritty/alacritty.png 1300w" /></p>

<p>With my <code class="language-plaintext highlighter-rouge">alacritty.toml</code> settings:</p>

<div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">[shell]</span>
<span class="py">program</span> <span class="p">=</span> <span class="s">"/bin/zsh"</span>
<span class="py">args</span> <span class="p">=</span> <span class="p">[</span><span class="s">"-l"</span><span class="p">]</span>

<span class="nn">[window]</span>
<span class="py">dimensions</span> <span class="o">=</span> <span class="p">{</span> <span class="py">columns</span> <span class="p">=</span> <span class="mi">240</span><span class="p">,</span> <span class="py">lines</span> <span class="p">=</span> <span class="mi">80</span> <span class="p">}</span>
<span class="py">padding</span> <span class="o">=</span> <span class="p">{</span> <span class="py">x</span> <span class="p">=</span> <span class="mi">5</span><span class="p">,</span> <span class="py">y</span> <span class="p">=</span> <span class="mi">5</span> <span class="p">}</span>
<span class="py">dynamic_padding</span> <span class="p">=</span> <span class="kc">true</span>
<span class="py">opacity</span> <span class="p">=</span> <span class="mf">0.8</span>
<span class="py">blur</span> <span class="p">=</span> <span class="kc">true</span> <span class="c"># Only works on MacOS</span>

<span class="nn">[font]</span>
<span class="py">normal.family</span> <span class="p">=</span> <span class="s">"MonaspiceNe Nerd Font"</span>
<span class="py">size</span> <span class="p">=</span> <span class="mi">12</span>

<span class="c"># Colors: Solarized Light</span>
<span class="nn">[colors.primary]</span>
<span class="py">foreground</span>  <span class="p">=</span> <span class="s">'0x586e75'</span>
<span class="py">background</span>  <span class="p">=</span> <span class="s">'0xfdf6e3'</span>
<span class="nn">[colors.normal]</span>
<span class="py">black</span>       <span class="p">=</span> <span class="s">'0x073642'</span>
<span class="py">red</span>         <span class="p">=</span> <span class="s">'0xdc322f'</span>
<span class="py">green</span>       <span class="p">=</span> <span class="s">'0x859900'</span>
<span class="py">yellow</span>      <span class="p">=</span> <span class="s">'0xb58900'</span>
<span class="py">blue</span>        <span class="p">=</span> <span class="s">'0x268bd2'</span>
<span class="py">magenta</span>     <span class="p">=</span> <span class="s">'0xd33682'</span>
<span class="py">cyan</span>        <span class="p">=</span> <span class="s">'0x2aa198'</span>
<span class="py">white</span>       <span class="p">=</span> <span class="s">'0xeee8d5'</span>
<span class="nn">[colors.bright]</span>
<span class="py">black</span>       <span class="p">=</span> <span class="s">'0x002b36'</span>
<span class="py">red</span>         <span class="p">=</span> <span class="s">'0xcb4b16'</span>
<span class="py">green</span>       <span class="p">=</span> <span class="s">'0x586e75'</span>
<span class="py">yellow</span>      <span class="p">=</span> <span class="s">'0x657b83'</span>
<span class="py">blue</span>        <span class="p">=</span> <span class="s">'0x839496'</span>
<span class="py">magenta</span>     <span class="p">=</span> <span class="s">'0x6c71c4'</span>
<span class="py">cyan</span>        <span class="p">=</span> <span class="s">'0x93a1a1'</span>
<span class="py">white</span>       <span class="p">=</span> <span class="s">'0xfdf6e3'</span>
</code></pre></div></div>]]></content><author><name>Santoso Wijaya</name></author><category term="terminal" /><summary type="html"><![CDATA[Alacritty is a cross-platform terminal emulator that’s GPU-accelerated with OpenGL and is written in Rust. I find that developer tools written in Rust, a language beloved by the developer community, have been impressing me a lot lately. The prompt app Starship and NeoVim GUI NeoVide come to mind.]]></summary></entry><entry><title type="html">Embedding a Nerd Font</title><link href="https://pensieve.swijaya.me/embedding-nerd-fonts" rel="alternate" type="text/html" title="Embedding a Nerd Font" /><published>2024-03-03T00:00:00-08:00</published><updated>2024-03-03T00:00:00-08:00</updated><id>https://pensieve.swijaya.me/embedding-nerd-fonts</id><content type="html" xml:base="https://pensieve.swijaya.me/embedding-nerd-fonts"><![CDATA[<p>I want to embed a Nerd Font patched font on this site. If it works, it should be
able to render the following glyphs.</p>

<div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">[os.symbols]</span>
<span class="py">Macos</span>     <span class="p">=</span> <span class="s">""</span>
<span class="py">Ubuntu</span>    <span class="p">=</span> <span class="s">"󰕈"</span>
<span class="py">Windows</span>   <span class="p">=</span> <span class="s">"󰍲"</span>
<span class="py">Alpine</span>    <span class="p">=</span> <span class="s">""</span>
<span class="py">Amazon</span>    <span class="p">=</span> <span class="s">""</span>
<span class="py">Android</span>   <span class="p">=</span> <span class="s">""</span>
<span class="py">Arch</span>      <span class="p">=</span> <span class="s">"󰣇"</span>
<span class="py">Artix</span>     <span class="p">=</span> <span class="s">"󰣇"</span>
<span class="py">CentOS</span>    <span class="p">=</span> <span class="s">""</span>
<span class="py">Debian</span>    <span class="p">=</span> <span class="s">"󰣚"</span>
<span class="py">Fedora</span>    <span class="p">=</span> <span class="s">"󰣛"</span>
<span class="py">Gentoo</span>    <span class="p">=</span> <span class="s">"󰣨"</span>
<span class="py">Linux</span>     <span class="p">=</span> <span class="s">"󰌽"</span>
<span class="py">Raspbian</span>  <span class="p">=</span> <span class="s">"󰐿"</span>
<span class="py">Redhat</span>    <span class="p">=</span> <span class="s">"󱄛"</span>
<span class="py">SUSE</span>      <span class="p">=</span> <span class="s">""</span>
<span class="py">Mint</span>      <span class="p">=</span> <span class="s">"󰣭"</span>
<span class="py">Manjaro</span>   <span class="p">=</span> <span class="s">""</span>
</code></pre></div></div>

<p>NF-patched fonts aren’t usually freely available on CDN or other like
distribution packages on the web. For this project, I need to download the
patched <code class="language-plaintext highlighter-rouge">.ttf</code>, compress it into <code class="language-plaintext highlighter-rouge">.woff2</code>, include it in this site, and define a
CSS font family out of it.</p>

<h2 id="install-monaspace-nerd-fonts">Install Monaspace Nerd Fonts</h2>

<p>TIP: <a href="https://monaspace.githubnext.com">Monaspace</a> (by GitHub) looks gorgeous!
The whole set is pleasant to behold and I appreciate the coding-specific and
contextual ligatures that they’ve done. I’m using it in my IDEs and terminals,
too, wherever I can.</p>

<p>First, we install the NF-patched fonts set (along with the original).</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install</span> <span class="nt">--cask</span> font-monaspace-nerd-font font-monaspace
</code></pre></div></div>

<p>We can then convert the downloaded OTF (OpenType Fonts) files into WOFF
(Web Fonts) files.</p>

<h2 id="define-a-new-web-font-family">Define a new web font family</h2>

<p>In our SCSS file:</p>

<div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/* Define a font family for Nerd Fonts patched variant of Monaspace Neon. */</span>
<span class="k">@font-face</span> <span class="p">{</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="s1">'MonaspiceNe Nerd Font'</span><span class="p">;</span>
  <span class="nl">src</span><span class="p">:</span> <span class="sx">url('/assets/fonts/MonaspiceNeNerdFont-Regular.woff2')</span> <span class="nf">format</span><span class="p">(</span><span class="s1">'woff2'</span><span class="p">)</span><span class="o">,</span>
       <span class="sx">url('/assets/fonts/MonaspiceNeNerdFont-Regular.woff')</span> <span class="nf">format</span><span class="p">(</span><span class="s1">'woff'</span><span class="p">)</span><span class="o">,</span>
       <span class="sx">url('/assets/fonts/MonaspiceNeNerdFont-Regular.otf')</span> <span class="nf">format</span><span class="p">(</span><span class="s1">'opentype'</span><span class="p">);</span>
  <span class="nl">font-weight</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
  <span class="nl">font-style</span><span class="p">:</span> <span class="nb">normal</span><span class="p">;</span>
<span class="p">}</span>

<span class="cm">/* system typefaces */</span>
<span class="nv">$monospace</span><span class="p">:</span> <span class="s1">'MonaspiceNe Nerd Font'</span><span class="o">,</span> <span class="nb">monospace</span><span class="p">;</span>

<span class="nt">tt</span><span class="o">,</span>
<span class="nt">code</span><span class="o">,</span>
<span class="nt">kbd</span><span class="o">,</span>
<span class="nt">samp</span><span class="o">,</span>
<span class="nt">pre</span> <span class="p">{</span>
  <span class="nl">font-family</span><span class="p">:</span> <span class="nv">$monospace</span><span class="p">;</span>
  <span class="c1">// Render all ligature and contextual healing features in Monaspace.</span>
  <span class="c1">// See: https://github.com/githubnext/monaspace?tab=readme-ov-file#coding-ligatures</span>
  <span class="nl">font-feature-settings</span><span class="p">:</span> <span class="s1">'calt'</span><span class="o">,</span> <span class="s1">'liga'</span><span class="o">,</span> <span class="s1">'dlig'</span><span class="o">,</span> <span class="s1">'ss01'</span><span class="o">,</span> <span class="s1">'ss02'</span><span class="o">,</span> <span class="s1">'ss03'</span><span class="o">,</span> <span class="s1">'ss04'</span><span class="o">,</span> <span class="s1">'ss05'</span><span class="o">,</span> <span class="s1">'ss06'</span><span class="o">,</span> <span class="s1">'ss07'</span><span class="o">,</span> <span class="s1">'ss08'</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="using-nf-with-css-classes">Using NF with CSS classes</h2>

<p>We can also render NF glyphs using CSS class names. See:
<a href="https://www.nerdfonts.com/cheat-sheet">Nerd Fonts Cheat Sheet</a></p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@import "https://www.nerdfonts.com/assets/css/webfont.css"

I really <span class="nt">&lt;i</span> <span class="na">class=</span><span class="s">"nf nf-fa-heart"</span><span class="nt">&gt;&lt;/i&gt;</span>
         <span class="nt">&lt;i</span> <span class="na">class=</span><span class="s">"nf nf-custom-vim"</span><span class="nt">&gt;</span>im<span class="nt">&lt;/i&gt;</span> <span class="err">&amp;</span>
         <span class="nt">&lt;i</span> <span class="na">class=</span><span class="s">"nf nf-custom-neovim"</span><span class="nt">&gt;</span>vim<span class="nt">&lt;/i&gt;</span>
</code></pre></div></div>

<p class="text-center">I really <i class="nf nf-fa-heart"></i> <i class="nf nf-custom-vim">im</i> &amp;
         <i class="nf nf-custom-neovim">vim</i></p>]]></content><author><name>Santoso Wijaya</name></author><category term="web" /><category term="fonts" /><category term="typography" /><summary type="html"><![CDATA[I want to embed a Nerd Font patched font on this site. If it works, it should be able to render the following glyphs.]]></summary></entry><entry><title type="html">Solarized Starship</title><link href="https://pensieve.swijaya.me/solarized-starship" rel="alternate" type="text/html" title="Solarized Starship" /><published>2024-03-03T00:00:00-08:00</published><updated>2024-03-03T00:00:00-08:00</updated><id>https://pensieve.swijaya.me/solarized-starship</id><content type="html" xml:base="https://pensieve.swijaya.me/solarized-starship"><![CDATA[<p><img src="/assets/resized/starship-800x605.png" alt="Starship prompt with Solarized colorscheme" srcset="    /assets/resized/starship-480x363.png 480w,    /assets/resized/starship-800x605.png 800w, /assets/solarized/starship.png 1097w" /></p>

<p>I just discovered <a href="https://starship.rs">Starship</a>, a Rusty terminal cross-shell
prompt with tons of customization options.</p>

<h2 id="installation">Installation</h2>

<p>Installation is easy with Homebrew.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>starship
</code></pre></div></div>

<h2 id="installing-nerd-fonts">Installing Nerd Fonts</h2>

<p>The prompt heavily utilizes extended unicode glyphs that are available in the
<a href="https://www.nerdfonts.com/font-downloads">Nerd Fonts</a> patched fonts set.
Installing an NF-patched Meslo font, for instance, can be done easily on a Mac
OS with Homebrew.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew tap homebrew/cask-fonts
brew <span class="nb">install</span> <span class="nt">--cask</span> font-meslo-lg-nerd-font
</code></pre></div></div>

<p>Then, we need to use that font in our Terminal or VSCode apps. For Terminal.app,
I find that
<a href="https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Meslo/S">“MesloLGS Nerd Font”</a>
works best. For VSCode, I am trying out
<a href="https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Monaspace">“MonaspiceNe Nerd Font”</a>
(based on GitHub’s latest
<a href="https://monaspace.githubnext.com/#learn-more">Monaspace</a> font family) at the
moment.</p>

<p>TODO: I need to also use this font for this site. Using the system font default, 
      these glyphs will not be able to render properly.</p>

<h2 id="configuring-starship">Configuring Starship</h2>

<p>I really like the
<a href="https://starship.rs/presets/gruvbox-rainbow.html#gruvbox-rainbow-preset">Gruvbox Rainbow</a>
preset as a base.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>starship preset gruvbox-rainbow <span class="nt">-o</span> ~/.config/starship.toml
</code></pre></div></div>

<p>But I want to <em>Solarize</em> it. So I tweaked its palette, and ended up with this
<code class="language-plaintext highlighter-rouge">starship.toml</code> file.</p>

<div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="py">"$schema"</span> <span class="p">=</span> <span class="s">'https://starship.rs/config-schema.json'</span>

<span class="py">format</span> <span class="p">=</span> <span class="s">"""
[](sol_orange)</span><span class="se">\
</span><span class="s">$os</span><span class="se">\
</span><span class="s">$username</span><span class="se">\
</span><span class="s">[](bg:sol_yellow fg:sol_orange)</span><span class="se">\
</span><span class="s">$directory</span><span class="se">\
</span><span class="s">[](fg:sol_yellow bg:sol_cyan)</span><span class="se">\
</span><span class="s">$git_branch</span><span class="se">\
</span><span class="s">$git_status</span><span class="se">\
</span><span class="s">[](fg:sol_cyan bg:sol_blue)</span><span class="se">\
</span><span class="s">$c</span><span class="se">\
</span><span class="s">$rust</span><span class="se">\
</span><span class="s">$golang</span><span class="se">\
</span><span class="s">$nodejs</span><span class="se">\
</span><span class="s">$php</span><span class="se">\
</span><span class="s">$java</span><span class="se">\
</span><span class="s">$kotlin</span><span class="se">\
</span><span class="s">$haskell</span><span class="se">\
</span><span class="s">$python</span><span class="se">\
</span><span class="s">[](fg:sol_blue bg:base2)</span><span class="se">\
</span><span class="s">$docker_context</span><span class="se">\
</span><span class="s">[](fg:base2 bg:base2)</span><span class="se">\
</span><span class="s">$time</span><span class="se">\
</span><span class="s">[ ](fg:base2)</span><span class="se">\
</span><span class="s">$line_break$character"""</span>

<span class="py">palette</span> <span class="p">=</span> <span class="s">'solarized_light'</span>

<span class="nn">[palettes.solarized_light]</span>
<span class="c"># background and content tones:</span>
<span class="c">#                           # DARK MODE             | LIGHT MODE</span>
<span class="py">base03</span>        <span class="p">=</span> <span class="s">'#002b36'</span>   <span class="c"># background            | -</span>
<span class="py">base02</span>        <span class="p">=</span> <span class="s">'#073642'</span>   <span class="c"># background highlights | -</span>
<span class="py">base01</span>        <span class="p">=</span> <span class="s">'#586e75'</span>   <span class="c"># comments              | opt. emph. content</span>
<span class="py">base00</span>        <span class="p">=</span> <span class="s">'#657b83'</span>   <span class="c"># -                     | primary content</span>
<span class="py">base0</span>         <span class="p">=</span> <span class="s">'#839496'</span>   <span class="c"># primary content       | -</span>
<span class="py">base1</span>         <span class="p">=</span> <span class="s">'#93a1a1'</span>   <span class="c"># opt. emph. content    | comments</span>
<span class="py">base2</span>         <span class="p">=</span> <span class="s">'#eee8d5'</span>   <span class="c"># -                     | background highlights</span>
<span class="py">base3</span>         <span class="p">=</span> <span class="s">'#fdf6e3'</span>   <span class="c"># -                     | background</span>
<span class="c"># accent colors:</span>
<span class="py">sol_yellow</span>    <span class="p">=</span> <span class="s">'#b58900'</span>
<span class="py">sol_orange</span>    <span class="p">=</span> <span class="s">'#cb4b16'</span>
<span class="py">sol_red</span>       <span class="p">=</span> <span class="s">'#dc322f'</span>
<span class="py">sol_magenta</span>   <span class="p">=</span> <span class="s">'#d33682'</span>
<span class="py">sol_violet</span>    <span class="p">=</span> <span class="s">'#6c71c4'</span>
<span class="py">sol_blue</span>      <span class="p">=</span> <span class="s">'#268bd2'</span>
<span class="py">sol_cyan</span>      <span class="p">=</span> <span class="s">'#2aa198'</span>
<span class="py">sol_green</span>     <span class="p">=</span> <span class="s">'#859900'</span>
<span class="c"># Note that for tones, the normal relationship for background and body text</span>
<span class="c"># is `base03:base0` for dark mode and `base3:base00` for light mode.</span>
<span class="c"># Notice the "flipping" of leading 0?</span>

<span class="nn">[os]</span>
<span class="py">disabled</span> <span class="p">=</span> <span class="kc">false</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_orange fg:base3"</span>

<span class="nn">[os.symbols]</span>
<span class="py">Macos</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Ubuntu</span> <span class="p">=</span> <span class="s">"󰕈"</span>
<span class="py">Windows</span> <span class="p">=</span> <span class="s">"󰍲"</span>
<span class="py">SUSE</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Raspbian</span> <span class="p">=</span> <span class="s">"󰐿"</span>
<span class="py">Mint</span> <span class="p">=</span> <span class="s">"󰣭"</span>
<span class="py">Manjaro</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Linux</span> <span class="p">=</span> <span class="s">"󰌽"</span>
<span class="py">Gentoo</span> <span class="p">=</span> <span class="s">"󰣨"</span>
<span class="py">Fedora</span> <span class="p">=</span> <span class="s">"󰣛"</span>
<span class="py">Alpine</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Amazon</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Android</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Arch</span> <span class="p">=</span> <span class="s">"󰣇"</span>
<span class="py">Artix</span> <span class="p">=</span> <span class="s">"󰣇"</span>
<span class="py">CentOS</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">Debian</span> <span class="p">=</span> <span class="s">"󰣚"</span>
<span class="py">Redhat</span> <span class="p">=</span> <span class="s">"󱄛"</span>
<span class="py">RedHatEnterprise</span> <span class="p">=</span> <span class="s">"󱄛"</span>

<span class="nn">[username]</span>
<span class="py">show_always</span> <span class="p">=</span> <span class="kc">true</span>
<span class="py">style_user</span> <span class="p">=</span> <span class="s">"bg:sol_orange fg:base3"</span>
<span class="py">style_root</span> <span class="p">=</span> <span class="s">"bg:sol_orange fg:base3"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[ $user ]($style)'</span>

<span class="nn">[directory]</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_yellow fg:base3"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">"[ $path ]($style)"</span>
<span class="py">truncation_length</span> <span class="p">=</span> <span class="mi">3</span>
<span class="py">truncation_symbol</span> <span class="p">=</span> <span class="s">"…/"</span>

<span class="nn">[directory.substitutions]</span>
<span class="py">"Documents"</span> <span class="p">=</span> <span class="s">"󰈙 "</span>
<span class="py">"Downloads"</span> <span class="p">=</span> <span class="s">" "</span>
<span class="py">"Music"</span> <span class="p">=</span> <span class="s">"󰝚 "</span>
<span class="py">"Pictures"</span> <span class="p">=</span> <span class="s">" "</span>
<span class="py">"Code"</span> <span class="p">=</span> <span class="s">"󰲋 "</span>
<span class="py">"workspace"</span> <span class="p">=</span> <span class="s">"󰲋 "</span>

<span class="nn">[git_branch]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_cyan"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol $branch ](fg:base3 bg:sol_cyan)]($style)'</span>

<span class="nn">[git_status]</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_cyan"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[($all_status$ahead_behind )](fg:base3 bg:sol_cyan)]($style)'</span>

<span class="nn">[nodejs]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[c]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">" "</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[rust]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[golang]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[php]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[java]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">" "</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[kotlin]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[haskell]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[python]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:sol_blue"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $version) ](fg:base3 bg:sol_blue)]($style)'</span>

<span class="nn">[docker_context]</span>
<span class="py">symbol</span> <span class="p">=</span> <span class="s">""</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:base2"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[ $symbol( $context) ](fg:#83a598 bg:base2)]($style)'</span>

<span class="nn">[time]</span>
<span class="py">disabled</span> <span class="p">=</span> <span class="kc">false</span>
<span class="py">time_format</span> <span class="p">=</span> <span class="s">"%R"</span>
<span class="py">style</span> <span class="p">=</span> <span class="s">"bg:base3"</span>
<span class="py">format</span> <span class="p">=</span> <span class="s">'[[  $time ](fg:base00 bg:base2)]($style)'</span>

<span class="nn">[line_break]</span>
<span class="py">disabled</span> <span class="p">=</span> <span class="kc">false</span>

<span class="nn">[character]</span>
<span class="py">disabled</span> <span class="p">=</span> <span class="kc">false</span>
<span class="py">success_symbol</span> <span class="p">=</span> <span class="s">'[&gt;](bold fg:sol_green)'</span>
<span class="py">error_symbol</span> <span class="p">=</span> <span class="s">'[&gt;](bold fg:sol_red)'</span>
<span class="py">vimcmd_symbol</span> <span class="p">=</span> <span class="s">'[&lt;](bold fg:sol_green)'</span>
<span class="py">vimcmd_replace_one_symbol</span> <span class="p">=</span> <span class="s">'[&lt;](bold fg:sol_violet)'</span>
<span class="py">vimcmd_replace_symbol</span> <span class="p">=</span> <span class="s">'[&lt;](bold fg:sol_violet)'</span>
<span class="py">vimcmd_visual_symbol</span> <span class="p">=</span> <span class="s">'[&lt;](bold fg:sol_yellow)'</span>
</code></pre></div></div>

<p>Neat!</p>]]></content><author><name>Santoso Wijaya</name></author><category term="terminal" /><category term="shell" /><category term="solarized" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Using Material Web Components</title><link href="https://pensieve.swijaya.me/jekyll/using-material-web-components" rel="alternate" type="text/html" title="Using Material Web Components" /><published>2024-03-02T00:00:00-08:00</published><updated>2024-03-02T00:00:00-08:00</updated><id>https://pensieve.swijaya.me/jekyll/using-material-web-components</id><content type="html" xml:base="https://pensieve.swijaya.me/jekyll/using-material-web-components"><![CDATA[<h1 id="m3-components">M3 components</h1>

<h2 id="buttons">Buttons</h2>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;md-outlined-button&gt;</span>Back<span class="nt">&lt;/md-outlined-button&gt;</span>
<span class="nt">&lt;md-filled-button&gt;</span>Next<span class="nt">&lt;/md-filled-button&gt;</span>
</code></pre></div></div>

<md-outlined-button>Back</md-outlined-button>
<md-filled-button>Next</md-filled-button>
<p><br /></p>

<h1 id="integrating-material-web-components-into-pensieve">Integrating Material Web components into Pensieve</h1>

<h2 id="self-hosting-install-materialweb">Self-hosting: install <code class="language-plaintext highlighter-rouge">@material/web</code></h2>

<p>I want to try using <a href="https://m3.material.io/develop/web">Material Web 3</a>
components on this site. First, let’s install it with NPM.</p>

<p>I created a <code class="language-plaintext highlighter-rouge">package.json</code> manifest file.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"engines"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"node"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^18.17.1"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"dependencies"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"@material/web"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^1.2.0"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Now, executing <code class="language-plaintext highlighter-rouge">npm install</code> will pull Material Web components sources into our
working directory.</p>

<p>TIP: To install version-specific Node and NPM with the Node version manager <code class="language-plaintext highlighter-rouge">n</code>:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt <span class="nb">install </span>npm
node <span class="nt">--version</span>
npm <span class="nb">install</span> <span class="nt">-g</span> n
n 18.17.1 <span class="o">&amp;&amp;</span> node <span class="nt">--version</span>
</code></pre></div></div>

<h2 id="javascript-import-components">JavaScript: import components</h2>

<p>Next, we create <code class="language-plaintext highlighter-rouge">_material.js</code> script to import the components that we need.</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="dl">'</span><span class="s1">@material/web/button/filled-button.js</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="dl">'</span><span class="s1">@material/web/button/outlined-button.js</span><span class="dl">'</span><span class="p">;</span>
</code></pre></div></div>

<p>These import statements still need to be rolled up (expanded with the content
of these imported files) before we can use them in the rest of our site, so
we have to add the following in our <code class="language-plaintext highlighter-rouge">package.json</code> file.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"devDependencies"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"@rollup/plugin-node-resolve"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^15.2.3"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"rollup"</span><span class="p">:</span><span class="w"> </span><span class="s2">"^4.12.0"</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"scripts"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"rollup"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rollup -p @rollup/plugin-node-resolve assets/js/_material.js -o assets/js/material.rollup.js"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"build:js"</span><span class="p">:</span><span class="w"> </span><span class="s2">"npm run rollup"</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Running <code class="language-plaintext highlighter-rouge">npm run build:js</code> would create the output <code class="language-plaintext highlighter-rouge">material.rollup.js</code> file.
This is what we need to actually use in our <code class="language-plaintext highlighter-rouge">&lt;head&gt;</code> script tag.</p>

<p>There are different routes to make this happen. The Minimal Mistakes theme that
I am using defines a config for this. In our <code class="language-plaintext highlighter-rouge">_config.yml</code> file:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">head_scripts</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">/assets/js/material.rollup.js</span> <span class="c1"># Generated by `npm run build:js`</span>
</code></pre></div></div>

<h2 id="styling-m3-components">Styling M3 components</h2>

<p>M3 uses
<a href="https://github.com/material-components/material-web/tree/main/docs/theming#tokens">design tokens</a>
as an API for styling and customizing their components.</p>

<p>For instance, to change the typography of M3 components that I will use, I just
need to add the following in this site’s <code class="language-plaintext highlighter-rouge">main.scss</code> file.</p>

<div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/*--- material web customizations ---*/</span>
<span class="nd">:root</span> <span class="p">{</span>
  <span class="na">--md-ref-typeface-brand</span><span class="p">:</span> <span class="n">Roboto</span><span class="p">;</span>
  <span class="na">--md-ref-typeface-plain</span><span class="p">:</span> <span class="n">system-ui</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/*--- end material web customizations ---*/</span>
</code></pre></div></div>

<p class="notice--primary">Note: To make Roboto available, I also need to add the fonts in <code class="language-plaintext highlighter-rouge">&lt;head&gt;</code>.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">head_scripts</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&amp;display=swap</span>
</code></pre></div></div>]]></content><author><name>Santoso Wijaya</name></author><category term="jekyll" /><category term="material design" /><category term="node.js" /><category term="web component" /><summary type="html"><![CDATA[M3 components]]></summary></entry><entry><title type="html">Exploring NeoVim</title><link href="https://pensieve.swijaya.me/exploring-neovim" rel="alternate" type="text/html" title="Exploring NeoVim" /><published>2024-02-25T00:00:00-08:00</published><updated>2024-02-25T00:00:00-08:00</updated><id>https://pensieve.swijaya.me/exploring-neovim</id><content type="html" xml:base="https://pensieve.swijaya.me/exploring-neovim"><![CDATA[<p><img src="/assets/resized/nvim-1400x1017.png" alt="NeoVim in Terminal" srcset="    /assets/resized/nvim-480x349.png 480w,    /assets/resized/nvim-800x581.png 800w,    /assets/resized/nvim-1400x1017.png 1400w, /assets/vim/nvim.png 1745w" /></p>

<p><kbd>h</kbd><kbd>j</kbd><kbd>k</kbd><kbd>l</kbd> is home.</p>

<p>I have been using vim and various IDEs with vim-like bindings for a good long
while now, ever since college.</p>

<p>Lately, I have been curious to try NeoVim and its more powerful features. I am
hoping to power up my homekey usage.</p>

<h2 id="installing-neovim">Installing NeoVim</h2>

<p>On Mac OS, with Homebrew, that&#8217;s trivial.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>neovim
</code></pre></div></div>

<p>My muscle memory compels me to type <code class="language-plaintext highlighter-rouge">vim</code> and <code class="language-plaintext highlighter-rouge">view</code> when opening text files.
To give NeoVim a fair shake at making it into my core personal toolkit, I
created aliases.</p>

<p>In my <code class="language-plaintext highlighter-rouge">~/.zshrc</code> file:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if </span>which nvim <span class="o">&gt;</span>/dev/null<span class="p">;</span> <span class="k">then
  function </span>use-nvim  <span class="o">{</span>
    <span class="nb">alias </span><span class="nv">vim</span><span class="o">=</span><span class="s2">"nvim"</span>
    <span class="nb">alias </span><span class="nv">vi</span><span class="o">=</span><span class="s2">"nvim"</span>
    <span class="nb">alias </span><span class="nv">view</span><span class="o">=</span><span class="s2">"nvim -R"</span>
  <span class="o">}</span>
  use-nvim
<span class="k">fi</span>
</code></pre></div></div>

<h3 id="user-config">User Config</h3>

<p>Vim reads from <code class="language-plaintext highlighter-rouge">~/.vimrc</code> and its plugin, etc lives in <code class="language-plaintext highlighter-rouge">~/.vim/</code>, while
NeoVim canonically reads its vimrc file from <code class="language-plaintext highlighter-rouge">~/.config/nvim/init.vim</code> (or
<code class="language-plaintext highlighter-rouge">.lua</code>) and <code class="language-plaintext highlighter-rouge">~/.config/nvim/</code>, respectively.</p>

<p>I want to keep things as compatible between the two, for now. In case I decide
later to return to Vim&#8211;or if I find myself in a system without the facilities
for NeoVim&#8211;I want most of what I use to customize NeoVim to also apply to Vim.</p>

<p>More to the point: I want my Vim and NeoVim installations to share the same
config file.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> ~/.vim/
<span class="nb">ln</span> <span class="nt">-s</span> ../.vim ~/.config/nvim  <span class="c"># this redirects nvim's config dir to vim's</span>
<span class="nb">ln</span> <span class="nt">-s</span> <span class="nv">$HOME</span>/.vimrc ~/.vim/init.vim    <span class="c"># redirects init.vim to ~/.vimrc</span>
</code></pre></div></div>

<p>The vimrc file <code class="language-plaintext highlighter-rouge">~/.vimrc</code> now becomes our master vimrc file. It should work
for both NeoVim and Vim.</p>

<p>Its content, at the moment (I&#8217;m currently in the middle of trying out three
new plugins: <code class="language-plaintext highlighter-rouge">vim-commentary</code>, <code class="language-plaintext highlighter-rouge">vim-easymotion</code>, and <code class="language-plaintext highlighter-rouge">vim-sneak</code>):</p>

<figure class="highlight"><pre><code class="language-viml" data-lang="viml"><span class="c">" Installing vim-plug:</span>
<span class="c">" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \</span>
<span class="c">"    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim</span>
<span class="k">call</span> plug#begin<span class="p">()</span>
<span class="c">" The default plugin directory will be as follows:</span>
<span class="c">"   - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'</span>

Plug <span class="s1">'tpope/vim-sensible'</span>
Plug <span class="s1">'tpope/vim-commentary'</span>     " Binds <span class="s1">'gc'</span> <span class="k">to</span> toggle <span class="nb">comments</span> <span class="k">in</span> <span class="k">visual</span> <span class="k">mode</span>
Plug <span class="s1">'tpope/vim-liquid'</span>         " <span class="nb">Syntax</span> highlighting <span class="k">for</span> Liquid templates
<span class="c">" Binds some nifty, flighty navigation modes across a file</span>
Plug <span class="s1">'easymotion/vim-easymotion'</span>
<span class="c">" Binds 's{char}{char}' as a quicker 'f' search</span>
Plug <span class="s1">'justinmk/vim-sneak'</span>
Plug <span class="s1">'rust-lang/rust.vim'</span>       " Official Rust plugin
Plug <span class="s1">'preservim/nerdtree'</span>       " A <span class="k">file</span> <span class="nb">system</span> explorer <span class="k">in</span> Vim
Plug <span class="s1">'vim-airline/vim-airline'</span>  " Lean &amp; mean status/<span class="nb">tabline</span>
Plug <span class="s1">'vim-airline/vim-airline-themes'</span>
Plug <span class="s1">'google/vim-maktaba'</span>
Plug <span class="s1">'google/vim-codefmt'</span>       " Adds <span class="p">:</span>FormatCode <span class="nb">and</span> <span class="p">:</span>FormatLines commands
<span class="c">" Also add Glaive, which is used to configure codefmt's maktaba flags.</span>
Plug <span class="s1">'google/vim-glaive'</span>

<span class="c">" Initialize plugin system</span>
<span class="c">" - Automatically executes `filetype plugin indent on` and `syntax enable`.</span>
<span class="k">call</span> plug#end<span class="p">()</span>

<span class="c">" the glaive#Install() should go after the "call plug#end()"</span>
<span class="k">call</span> glaive#Install<span class="p">()</span>
Glaive codefmt plugin<span class="p">[</span>mappings<span class="p">]</span>

<span class="c">" I was also already using pathogen for Vim to set up Solarized colorscheme.</span>

<span class="c">" First, install pathogen in your system with:</span>
<span class="c">" mkdir -p ~/.vim/autoload ~/.vim/bundle &amp;&amp; \</span>
<span class="c">"     curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim</span>
<span class="nb">execute</span> pathogen#infect<span class="p">()</span>

<span class="c">" Airline customizations; experiment at runtime with `:AirlineTheme` command.</span>
<span class="k">let</span> <span class="nv">g:airline_theme</span><span class="p">=</span><span class="s1">'solarized'</span>

<span class="c">" NERDTree keybindings</span>
nnoremap <span class="p">&lt;</span>C<span class="p">-</span><span class="k">t</span><span class="p">&gt;</span> <span class="p">:</span>NERDTreeToggle<span class="p">&lt;</span>CR<span class="p">&gt;</span>
<span class="c">" Start NERDTree when Vim is started without file arguments.</span>
autocmd <span class="nb">StdinReadPre</span> * <span class="k">let</span> <span class="nv">s:std_in</span><span class="p">=</span><span class="m">1</span>
autocmd <span class="nb">VimEnter</span> * <span class="k">if</span> <span class="nb">argc</span><span class="p">()</span> <span class="p">==</span> <span class="m">0</span> &amp;&amp; <span class="p">!</span><span class="nb">exists</span><span class="p">(</span><span class="s1">'s:std_in'</span><span class="p">)</span> <span class="p">|</span> NERDTree <span class="p">|</span> <span class="k">endif</span>
<span class="c">" Start NERDTree when Vim starts with a directory argument, and open a fresh</span>
<span class="c">" buffer.</span>
autocmd <span class="nb">StdinReadPre</span> * <span class="k">let</span> <span class="nv">s:std_in</span><span class="p">=</span><span class="m">1</span>
autocmd <span class="nb">VimEnter</span> * <span class="k">if</span> <span class="nb">argc</span><span class="p">()</span> <span class="p">==</span> <span class="m">1</span> &amp;&amp; <span class="nb">isdirectory</span><span class="p">(</span><span class="nb">argv</span><span class="p">()[</span><span class="m">0</span><span class="p">])</span> &amp;&amp; <span class="p">!</span><span class="nb">exists</span><span class="p">(</span><span class="s1">'s:std_in'</span><span class="p">)</span> <span class="p">|</span> <span class="nb">execute</span> <span class="s1">'NERDTree'</span> <span class="nb">argv</span><span class="p">()[</span><span class="m">0</span><span class="p">]</span> <span class="p">|</span> <span class="k">wincmd</span> <span class="k">p</span> <span class="p">|</span> <span class="k">enew</span> <span class="p">|</span> <span class="nb">execute</span> <span class="s1">'cd '</span><span class="p">.</span><span class="nb">argv</span><span class="p">()[</span><span class="m">0</span><span class="p">]</span> <span class="p">|</span> <span class="k">endif</span>


<span class="k">set</span> <span class="nb">nocompatible</span>
<span class="nb">syntax</span> <span class="k">on</span>
<span class="k">filetype</span> plugin <span class="nb">indent</span> <span class="k">on</span>

<span class="k">set</span> <span class="nb">background</span><span class="p">=</span><span class="nb">dark</span>
<span class="k">colorscheme</span> solarized

<span class="k">set</span> <span class="nb">hlsearch</span>
<span class="k">set</span> <span class="nb">ruler</span>
<span class="k">set</span> <span class="nb">colorcolumn</span><span class="p">=</span><span class="m">80</span><span class="p">,</span><span class="m">120</span>

<span class="k">set</span> <span class="k">number</span>
<span class="c">" toggle line numbers and fold column for easy copying:</span>
nnoremap <span class="p">&lt;</span>F2<span class="p">&gt;</span> <span class="p">:</span><span class="k">set</span> <span class="nb">nonumber</span><span class="p">!&lt;</span>CR<span class="p">&gt;:</span><span class="k">set</span> <span class="nb">foldcolumn</span><span class="p">=</span><span class="m">0</span><span class="p">&lt;</span>CR<span class="p">&gt;</span>

<span class="k">set</span> <span class="nb">backup</span>                      " Be safe<span class="p">.</span>
<span class="k">set</span> <span class="k">history</span><span class="p">=</span><span class="m">1000</span>                " Remember <span class="k">a</span> lot<span class="p">.</span>
<span class="k">set</span> <span class="nb">showcmd</span>                     " Show the <span class="k">last</span> command<span class="p">.</span>
<span class="k">set</span> <span class="nb">showmatch</span>                   " When <span class="k">a</span> bracket <span class="k">is</span> typed show its <span class="k">match</span><span class="p">.</span>
<span class="k">set</span> <span class="nb">smarttab</span>                    " Only respect <span class="nb">shiftwidth</span> <span class="k">for</span> code indents<span class="p">.</span>
<span class="k">set</span> <span class="nb">expandtab</span>
<span class="k">set</span> <span class="nb">tabstop</span><span class="p">=</span><span class="m">2</span>
<span class="k">set</span> <span class="nb">shiftwidth</span><span class="p">=</span><span class="m">2</span>
<span class="k">set</span> <span class="nb">autoindent</span>
<span class="k">set</span> <span class="nb">smartindent</span>

<span class="c">" Do not clutter the current directory with swap, backup, undo files.</span>
<span class="k">set</span> <span class="nb">swapfile</span>
<span class="k">set</span> <span class="nb">directory</span><span class="p">=.</span>swp<span class="sr">/,~/</span><span class="p">.</span>swp<span class="sr">/,/</span>tmp<span class="sr">//</span>
<span class="k">set</span> <span class="nb">backupdir</span><span class="p">=.</span><span class="nb">backup</span><span class="sr">/,~/</span><span class="p">.</span><span class="nb">backup</span><span class="sr">/,/</span>tmp<span class="sr">//</span>
<span class="k">set</span> <span class="nb">undodir</span><span class="p">=.</span><span class="k">undo</span><span class="sr">/,~/</span><span class="p">.</span><span class="k">undo</span><span class="sr">/,/</span>tmp<span class="sr">//</span></code></pre></figure>

<h2 id="next-mastering-lsps">Next: Mastering LSPs</h2>

<p>For quick edits and one-offs, Vim is great. It lets me live and stay in the
Terminal without too much context switching. For more extensive coding, though,
I still rely on language features and the bells and whistles delivered by an
IDE like VSCode.</p>

<p>Next up, I want to explore LSP servers and understand how NeoVim, as a client,
interacts with them. My goal is to set one up that lets me work comfortably
in some programming languages of choice, wholly in NeoVim.</p>]]></content><author><name>Santoso Wijaya</name></author><category term="vim" /><category term="nvim" /><category term="terminal" /><category term="editor" /><summary type="html"><![CDATA[]]></summary></entry></feed>