<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Work on Janusworx</title>
    <link>https://janusworx.com/work/</link>
    <description>Recent content in Work on Janusworx</description>
    <image>
      <title>Janusworx</title>
      <url>https://janusworx.com/images/jw-logo.png</url>
      <link>https://janusworx.com/images/jw-logo.png</link>
    </image>
    <generator>Hugo -- 0.160.1</generator>
    <language>en</language>
    <lastBuildDate>Mon, 20 Apr 2026 11:15:00 +0530</lastBuildDate>
    <atom:link href="https://janusworx.com/work/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kubernetes &amp; CNCF Awards</title>
      <link>https://janusworx.com/work/kubernetes-cncf-awards/</link>
      <pubDate>Mon, 20 Apr 2026 11:15:00 +0530</pubDate>
      <guid>https://janusworx.com/work/kubernetes-cncf-awards/</guid>
      <description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://janusworx.com/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css&#34; integrity=&#34;sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=&#34; crossorigin=&#34;anonymous&#34;&gt;
    &lt;div class=&#34;admonition info&#34;&gt;
      &lt;div class=&#34;admonition-header&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path d=&#34;M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z&#34;/&gt;&lt;/svg&gt;
        &lt;span&gt;Intended Audience&lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;admonition-content&#34;&gt;
        &lt;p&gt;Mostly me.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;&lt;br&gt;

&lt;figure&gt;
&lt;a href=&#34;https://janusworx.com/images/2026/cncf-k8s-awards.jpg&#34;&gt;&lt;img style=&#34;display:flex;justify-content:center;&#34; src=&#34;https://janusworx.com/images/2026/cncf-k8s-awards-s.jpg&#34;  alt=&#34;Diptych of two award photos&#34;&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figcaption style=&#34;font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)&#34;&gt;
&lt;p&gt;Click the image to embiggen!&lt;/p&gt;</description>
      <content:encoded><![CDATA[
            <link rel="stylesheet" href="/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css" integrity="sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=" crossorigin="anonymous">
    <div class="admonition info">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
        <span>Intended Audience</span>
      </div>
      <div class="admonition-content">
        <p>Mostly me.</p>
      </div>
    </div><br>

<figure>
<a href="/images/2026/cncf-k8s-awards.jpg"><img style="display:flex;justify-content:center;" src="/images/2026/cncf-k8s-awards-s.jpg"  alt="Diptych of two award photos"></a>
</figure>
<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>Click the image to embiggen!</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>This is a note of gratitude.<br>
A tad late. But better late than never :)</p>
<p>I decided to get involved with the Kubernetes community on a lark about four years ago.<br>
I wanted to learn about containers and orchestration, and I thought learning via joining the upstream community was it.</p>
<p>I was wrong 😂<br>
Life got in the way and I only finally got around to learning it all last December.</p>
<p>But the community was interesting and helpful.<br>
I got to learn the terms of art, by osmosis.<br>
I got to see how a large community functions, how a large software project was run.</p>
<p>And in time, I got to pitch in and help a bit as well.<br>
I pitched in with the Release Team for v1.25 to gain a sense of how a release comes about.<br>
And a couple of years ago, I saw my good friend (and frequent collaborator) Priyanka buckling a bit under the weight of the work, in the <a href="https://psaggu.com/about.html">various roles</a> she had assumed to help out in the community. I asked her if there was anyway I could help her, that did <em>not</em> involve meetings or talking to people 😂<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>
And she asked me if I could pitch in and help with helping folks gain membership into various Kubernetes orgs on Github.</p>
<p>I ayed.</p>
<p>She taught me the ropes. And I became a <a href="https://github.com/kubernetes/community/tree/main/github-management#new-membership-coordinator">Github New Membership Coordinator</a> for the Kubernetes project.</p>
<p>And all of this history to say, I’m grateful to Priyanka for this serendipitous opportunity.<br>
I fell in love with the work.<br>
For someone who has had to face a lot of cynicism in his real world day job, it’s been a lot of joy, welcoming folks into the project. It’s one of the happier parts of my day, when I sit at the desk to process the requests that come in.</p>
<p>I’m also grateful to the Kubernetes as well as the overarching CNCF communities for recognising what I do, for two successive years.<br>
I was the recipient of the <a href="https://www.kubernetes.dev/community/awards/2024/#:~:text=Jason%20Braganza">Kubernetes Contributor award in 2024</a> and the <a href="https://www.cncf.io/announcements/2025/11/12/cncf-honors-innovators-and-defenders-with-2025-community-awards-at-kubecon-cloudnativecon-north-america/#:~:text=Mario%20Jason%20Braganza">CNCF’s, Chop Wood Carry Water award in 2025</a>.<br>
I’m both, honoured and humbled.<br>
I hope to contribute to this community, a while longer :)</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Kubernetes &amp; CNCF Awards
%22">feedback at this domain</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I was well and truly burned out then&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Trying a Different Tack to Writing Work Posts</title>
      <link>https://janusworx.com/work/trying-a-different-tack-to-writing-work-posts/</link>
      <pubDate>Mon, 20 Apr 2026 11:00:00 +0530</pubDate>
      <guid>https://janusworx.com/work/trying-a-different-tack-to-writing-work-posts/</guid>
      <description>Just for reference</description>
      <content:encoded><![CDATA[
            <link rel="stylesheet" href="/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css" integrity="sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=" crossorigin="anonymous">
    <div class="admonition info">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
        <span>Intended Audience</span>
      </div>
      <div class="admonition-content">
        <p>My tiny audience, who reads these posts via email or rss</p>
      </div>
    </div><br>

<p>My last post in this section / category was in <a href="/work/the-big-plan-change-my-vm-to-be-gitops-driven/">December</a>.<br>
There ought to be more, because I learn so much every week.<br>
Even in December, the massive move I did, needs documenting. (at least for me, if not for your reading)</p>
<p>So the new plan is to cut the <em>doing</em> and the learning in half (or by a third). And use that time to write about what I learned.<br>
I know this about myself. I write real good … sometimes. But to even get to that point, I have to write a <em>lot of drivel.</em></p>
<p>So, in essence, welcome to the drivel :)<br>
The posts will get more frequent, so if that bothers you or I write about things that aren’t what you came to read me for, I won’t hold it against you if you choose to unsubscribe. I need to be able to write for me. And this is the only place where I can.</p>
<p>If you do decide to stay and read, as always, I’m grateful. I truly am.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Trying a Different Tack to Writing Work Posts
%22">feedback at this domain</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>The Big Plan: Change My VM to Be Gitops Driven</title>
      <link>https://janusworx.com/work/the-big-plan-change-my-vm-to-be-gitops-driven/</link>
      <pubDate>Fri, 19 Dec 2025 18:00:00 +0530</pubDate>
      <guid>https://janusworx.com/work/the-big-plan-change-my-vm-to-be-gitops-driven/</guid>
      <description>Just for reference</description>
      <content:encoded><![CDATA[
            <link rel="stylesheet" href="/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css" integrity="sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=" crossorigin="anonymous">
    <div class="admonition info">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
        <span>Intended Audience</span>
      </div>
      <div class="admonition-content">
        <p>Me!</p>
      </div>
    </div><p><em>Update 2025-12-19: All done!</em></p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I just finished a move from one Hetzner VM to another.<br>
The type of VMs are the same, in fact.<br>
It’s just that the new VM and all the software on it are entirely software driven. I kept logging my progress in my <a href="/nm">notes</a>, copy pasting the plan from day to day and ticking things off.<br>
Now that it’s done and I <em>still</em> want to <a href="/nm/2025-12-12">refer to it regularly</a>, as the rest of the services come over, I wanted a place to keep it. And so this post, it is.</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<h2 id="list-of-services-that-absolutely-need-to-come-over-miscellaneous-stuff-later">List of services that absolutely need to come over. Miscellaneous stuff later.</h2>
<ul>
<li><input checked="" disabled="" type="checkbox"> the main domain</li>
<li><input checked="" disabled="" type="checkbox"> french version of the website</li>
<li><input checked="" disabled="" type="checkbox"> the mastodon archive</li>
<li><input checked="" disabled="" type="checkbox"> the email distribution list</li>
<li><input checked="" disabled="" type="checkbox"> miniflux for rss feeds</li>
<li><input checked="" disabled="" type="checkbox"> joplin</li>
<li><input checked="" disabled="" type="checkbox"> baikal</li>
<li><input checked="" disabled="" type="checkbox"> <del>discourse</del> (no more discourse!)</li>
<li><input checked="" disabled="" type="checkbox"> markdown editor (hedgedoc)</li>
<li><input checked="" disabled="" type="checkbox"> anki</li>
<li><input checked="" disabled="" type="checkbox"> huginn</li>
<li><input checked="" disabled="" type="checkbox"> syncthing</li>
<li><input checked="" disabled="" type="checkbox"> IRC: theLounge + znc (see if we can make do with a single service now <em>(2025-12-15: we could!)</em>)</li>
<li><input checked="" disabled="" type="checkbox"> kanboard</li>
<li><input checked="" disabled="" type="checkbox"> Certs, Move them over, or figure out a way to generate and renew them via Ansible</li>
</ul>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<h2 id="the-big-point-of-the-big-plan">The Big Point of The Big Plan</h2>
<ul>
<li>Save time and energy. Managing all the disparate services I use is taking more and more of my time. I need to claim that back, while being able to use said services.</li>
<li>Be gitops driven. Managing stuff gets easier. Tearing down things and rebuilding them gets easier</li>
<li>Have most everything I use, be in a Kubernetes cluster.</li>
<li>Be pragmatic enough to know that everything cannot be in a Kubernetes cluster and will have to live in the root VM</li>
<li>Have Flux CD manage everything in the cluster</li>
<li>Have Ansible Pull manage everything in the VM, acting as my single node. The point of doing this is not idempotency, rather to have everything in code; something that I can comment and uncomment and manipulate at will, something I can update at will and something that is documented. Never again will Future Jason have to scratch his head about, just how to go about doing something. <em>(Long term note to self: Have the discipline to write tasks and drive everything with Ansible, despite the ease of “just doing it at the command line”)</em></li>
</ul>
<h2 id="the-big-plan-done-">The Big Plan (<em>Done!</em> 🎉🎉🎉)</h2>
<ul>
<li>The plan is to redo the cluster again and do my own instance of
<ul>
<li><input checked="" disabled="" type="checkbox"> K3s</li>
<li><input checked="" disabled="" type="checkbox"> Sealed Secrets</li>
<li><input checked="" disabled="" type="checkbox"> Flux CD</li>
<li><input checked="" disabled="" type="checkbox"> <del>Certmanager</del> (Not using it)</li>
<li><input checked="" disabled="" type="checkbox"> <del>Letsencrypt</del> (using pre existing Letsencrypt certs)</li>
<li><input checked="" disabled="" type="checkbox"> Get Traefik Ingress to work</li>
<li><input checked="" disabled="" type="checkbox"> Figure out a way to get certs automatically into the cluster</li>
</ul>
</li>
<li>And once <em>that</em> is done, figure out an app to move (Miniflux or Hedgedoc?); 2025-12-03: Kanboard it is!</li>
<li>Begin by moving (lifting and shifting in popular parlance) Kanboard to the cluster
<ul>
<li><input checked="" disabled="" type="checkbox"> Cert will probably be needed (Wildcard cert works now, just like it does without the cluster)</li>
<li><input checked="" disabled="" type="checkbox"> Convert a docker-compose to kubernetes manifests</li>
<li><input checked="" disabled="" type="checkbox"> Learn how to configure an app with code</li>
<li><input checked="" disabled="" type="checkbox"> Learn how to store data and back it up</li>
<li><input checked="" disabled="" type="checkbox"> Figure out secrets, if there are any (for now sealed secrets ok, figure out vault and vault injection later)</li>
<li><input checked="" disabled="" type="checkbox"> Learn how to tunnel through and reverse proxy</li>
<li><input checked="" disabled="" type="checkbox"> Make Kubernetes manifests work with flux</li>
<li><input checked="" disabled="" type="checkbox"> Figure out how to automate deployment of manual manifests</li>
<li><input checked="" disabled="" type="checkbox"> Figure out how to migrate there if there is any in an old app</li>
<li><input checked="" disabled="" type="checkbox"> Figue out how to automate updation of images in manual manifests</li>
<li><input checked="" disabled="" type="checkbox"> Get another app (Miniflux) deployed</li>
<li><input checked="" disabled="" type="checkbox"> Figure out what needs to happen as part of the lifecycle. What you want in the cluster, what stays out, do they intersect, how do updates of cluster happen? VM (node) updates as well?</li>
<li><input checked="" disabled="" type="checkbox"> Then begin to think along the lines of Live Deploys. Prototype locally and once it works, migrate to production immediately</li>
<li><input disabled="" type="checkbox"> Convert Kubernetes manifests to Helm Charts (optional, based on energy)</li>
</ul>
</li>
<li>Go live! Git is source of truth. Two repos.
<ul>
<li><input checked="" disabled="" type="checkbox"> One for the Main node and its update
<ul>
<li><input checked="" disabled="" type="checkbox"> Terraform will provision node and install package, setup firewall</li>
<li><input checked="" disabled="" type="checkbox"> Figure out how to get Terraform to get the node talking to the git forge</li>
<li><input checked="" disabled="" type="checkbox"> Structure repo, copy every thing node related there, and make sure stuff gets updated periodically and if possible, idempotantly, via ansible pull and a systemd timer</li>
</ul>
</li>
<li><input checked="" disabled="" type="checkbox"> The other one for k3s and flux
<ul>
<li><input checked="" disabled="" type="checkbox"> Convert everything I have done locally to run on prod. Add more steps as you do them below</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="unrelated-long-term-optional-just-here-so-that-i-remember">Unrelated. Long term. Optional. Just here so that I remember</h2>
<ul>
<li><input checked="" disabled="" type="checkbox"> Get Moi publish script running</li>
<li><input checked="" disabled="" type="checkbox"> Redo Huginn Scenarios</li>
</ul>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: The Big Plan: Change My VM to Be Gitops Driven
%22">feedback at this domain</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Moved From Reeder to Readkit</title>
      <link>https://janusworx.com/work/moved-from-reeder-to-readkit/</link>
      <pubDate>Mon, 17 Nov 2025 08:59:16 +0530</pubDate>
      <guid>https://janusworx.com/work/moved-from-reeder-to-readkit/</guid>
      <description>Le client du RSS est mort, vive le client du RSS!</description>
      <content:encoded><![CDATA[<p><br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/moved-from-reeder-to-readkit-00.jpg#center"
         alt=" "/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

I used <a href="https://reederapp.com/">Reeder</a> for reading all my <a href="https://en.wikipedia.org/wiki/RSS">RSS feeds</a> ever since the app launched over fifteen years ago. RSS is how I keep up with everything in the world outside and having a pleasant reading experience is very important to me.</p>
<p>It no longer serves that need for me.<br>
For a long time, the way the app worked aligned with the way I want to read. Earlier this year though, the developer decided to take the app in a different direction, with a different reading experience. The older app is still available as Reeder Classic, but only a few months of use have shown me that the app is basically abandoned. The attention to detail is obviously now being applied to the new app.</p>
<p>Enter <a href="https://readkit.app/">ReadKit</a>.<br>
I had used it briefly during the <a href="https://en.wikipedia.org/wiki/Google_Reader#Discontinuation">Google Reader apocalypse</a> when every feed reader was scrambling to find new backends to sync to. Reeder similarly had switched to local only mode and was taking a while before it supported other services.<br>
ReadKit in the meanwhile already had support for Feedwrangler, and so I switched to it until Reeder came back to speed.</p>
<p>And I’ve switched to it for the foreseeable future.<br>
It looks beautiful!<br>
It does everything I want, shows everything the way and want and behaves just the way I want it to. The only knock I have against it, is that it does not feel as <em>fluid</em> as Reeder does. But that’s nothing compared to the constant launch and relauch dance, I have to do with Reeder nowadays. Consistency and stability matter a lot to me.<br>
Even better, it syncs natively with <a href="https://miniflux.app/">Miniflux</a>, the service I use to actually fetch and read RSS feeds on my Linux desktop. No more Google Reader API!</p>
<p>This is a list of all my categories (with one of them expanded, click for a larger view)</p>
<p><a href="/images/2025/moved-from-reader-to-readkit-01-categories.jpg"><figure class="align-center ">
    <img loading="lazy" src="/images/2025/moved-from-reader-to-readkit-01-categories.jpg#center"
         alt="Readkit App Screenshot" width="800px"/> 
</figure>
</a></p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>and this is a list of unread articles in a feed, alongside one that is open (once again, click to enlarge if you want to see details)</p>
<p><a href="/images/2025/moved-from-reader-to-readkit-02-feeds.jpg"><figure class="align-center ">
    <img loading="lazy" src="/images/2025/moved-from-reader-to-readkit-02-feeds.jpg#center"
         alt="Readkit App Screenshot" width="800px"/> 
</figure>
</a>
<br>
</p>
<p>That gnawing feeling has now gone away from the back of my brain.<br>
The experience of reading and catching up with the world is once again a <em>glorious</em> experience thanks to ReadKit.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Moved From Reeder to Readkit
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/moved-from-reeder-to-readkit
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Kubernetes, Note to Self: Need Load Balancer Installed on Bare Metal</title>
      <link>https://janusworx.com/work/kubernetes-note-to-self-need-load-balancer-installed-on-bare-metal/</link>
      <pubDate>Tue, 11 Nov 2025 07:37:54 +0530</pubDate>
      <guid>https://janusworx.com/work/kubernetes-note-to-self-need-load-balancer-installed-on-bare-metal/</guid>
      <description>&lt;br&gt;

&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://janusworx.com/images/2025/kubernetes.svg#center&#34; width=&#34;600px&#34;/&gt; 
&lt;/figure&gt;

&lt;hr style=&#39;margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;&#39;/&gt;


            &lt;link rel=&#34;stylesheet&#34; href=&#34;https://janusworx.com/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css&#34; integrity=&#34;sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=&#34; crossorigin=&#34;anonymous&#34;&gt;
    &lt;div class=&#34;admonition info&#34;&gt;
      &lt;div class=&#34;admonition-header&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;path d=&#34;M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z&#34;/&gt;&lt;/svg&gt;
        &lt;span&gt;Intended Audience&lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;admonition-content&#34;&gt;
        &lt;p&gt;Mostly me. Also other grizzly sysadmins who are learning devops like me.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/kubernetes.svg#center" width="600px"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>


            <link rel="stylesheet" href="/css/vendors/admonitions.4fd9a0b8ec8899f2ca952048d255a569f433f77dfb3f52f5bc87e7d65cdce449.css" integrity="sha256-T9mguOyImfLKlSBI0lWlafQz9337P1L1vIfn1lzc5Ek=" crossorigin="anonymous">
    <div class="admonition info">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
        <span>Intended Audience</span>
      </div>
      <div class="admonition-content">
        <p>Mostly me. Also other grizzly sysadmins who are learning devops like me.</p>
      </div>
    </div><p>One thing that bit me when I was trying to expose my apps to the world when working on the home cluster, is that Kubernetes on bare metal—I was using Kind at the time—expects to talk to a load balancer service, which then talk to an actual load balancer. Which if you are using bare metal, you won’t usually have.<br>
I had to then go expose a “NodePort” to gain access from outside.</p>
<p>So to expose my stuff in as “<a href="https://www.scotthyoung.com/blog/2020/05/04/do-the-real-thing/">real world</a>” a way as possible, we need to:</p>
<ol>
<li>Either install a load balancer implementation like <a href="https://metallb.io/">MetalLB</a>. OR</li>
<li>Use a Kubernetes distribution that has a load balancer implementation built-in, like <a href="https://k3s.io">K3s</a>.</li>
</ol>
<p>I chose option 2 and used K3s, because I am, as they say in popular parlance, using Kubernetes at the edge.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><br>
In which case, I prefer to have as many batteries built-in as possible.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Kubernetes, Note to Self: Need Load Balancer Installed on Bare Metal
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/kubernetes-note-to-self-need-load-balancer-installed-on-bare-metal
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Although, from the articles I’ve read, if you’re doing a multiple node cluster, then you’re better off using MetalLB.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>K3s: Move Data Folder</title>
      <link>https://janusworx.com/work/k3s-move-data-folder/</link>
      <pubDate>Mon, 10 Nov 2025 16:50:45 +0530</pubDate>
      <guid>https://janusworx.com/work/k3s-move-data-folder/</guid>
      <description>It’s all about the data!</description>
      <content:encoded><![CDATA[<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/k3s.svg#center" width="600px"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>


    <div class="admonition info">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>
        <span>Intended Audience</span>
      </div>
      <div class="admonition-content">
        <p>Mostly me. Also other grizzly sysadmins who are learning devops like me.</p>
      </div>
    </div><h2 id="problem">Problem</h2>
<p>My main SSD is too small to hold all my kubernetes and K3s shenanigans. (It’s only about 512gb)
So I need a way to move my K3s data folder out to my big HDD.</p>
<h2 id="solution">Solution</h2>

    <div class="admonition caution">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/></svg>
        <span>Caution</span>
      </div>
      <div class="admonition-content">
        <p>Before you do any of the following, make sure to stop the cluster with:<br>
<code>sudo systemctl stop k3s</code></p>
      </div>
    </div><p>K3s supports having a<a href="https://docs.k3s.io/cli/server#data"> custom data directory</a>, by letting me specify a <code>data-dir</code>.<br>
I decided to specify it in the <a href="https://docs.k3s.io/installation/configuration#configuration-file">K3s <code>config</code> file</a> at <code>/etc/rancher/k3s/config</code>.<br>
If it isn’t there (as it wasn’t in my case), just create one. You’ll need to do this as the <code>root</code> user.<br>
This is what I now have in there.</p>
<pre tabindex="0"><code>data-dir: /BIGHDD/rancher/k3s
</code></pre><p>And then, I …</p>
<ol>
<li>Created a <code>rancher</code> directory in my big hard disk. (<code>root</code> owns it)</li>
<li>Ran rsync as the <code>root</code> user: <code>rsync -a /var/lib/rancher/k3s/ /BIGHDD/rancher/k3s/</code></li>
<li>Started up my cluster again with a <code>sudo systemctl start k3s</code></li>
</ol>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: K3s: Move Data Folder
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/k3s-move-data-folder
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Hugo Redirect From Post in One Section to Another</title>
      <link>https://janusworx.com/work/hugo-redirect-from-post-in-one-section-to-another/</link>
      <pubDate>Thu, 06 Nov 2025 08:34:36 +0530</pubDate>
      <guid>https://janusworx.com/work/hugo-redirect-from-post-in-one-section-to-another/</guid>
      <description>&lt;h2 id=&#34;problem&#34;&gt;Problem&lt;/h2&gt;
&lt;p&gt;I have a post in one section of my site, say &lt;a href=&#34;https://janusworx.com/nm/2025-11-06/&#34;&gt;notes and miscellanea&lt;/a&gt;&lt;br&gt;
That is my canonical post.&lt;br&gt;
But I also need it to show up in the work section of my site, possibly with a another name.&lt;br&gt;
A Hugo &lt;code&gt;alias&lt;/code&gt; in the &lt;code&gt;yaml&lt;/code&gt; front matter does not work, since both sections exist and Hugo gets confused.&lt;/p&gt;
&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Make sure &lt;code&gt;layouts/redirect/single.html&lt;/code&gt; exists within your Hugo folder structure and it contains just this line …&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;template&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;alias.html&amp;#34;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;dict&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Permalink&amp;#34;&lt;/span&gt; .&lt;span style=&#34;color:#a6e22e&#34;&gt;Params&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;target&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Create your &lt;a href=&#34;https://janusworx.com/nm/2025-11-06/&#34;&gt;orginal post&lt;/a&gt; as usual&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Then&lt;/em&gt; go create a post in your &lt;em&gt;other&lt;/em&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; section with the following metadata:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;title&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;Your title here&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#date autogenerated by my archetype. if missing, add date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;date&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;2025-11-06T08:30:54&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;+05&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redirect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;target&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;url-to-redirect-to&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;summary&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;Optional text, that will appear in the sectiones listing page&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;The &lt;code&gt;date&lt;/code&gt; field is critical. The post might not appear where you expect it, if it’s absent.&lt;br&gt;
If not date, then you might need to use &lt;code&gt;weight&lt;/code&gt;. One of the two is needed.&lt;/li&gt;
&lt;li&gt;In my case, the metadata looked like this:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;title&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The Plan for My New Hetzner VM&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;date&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;2025-11-06T08:30:54&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;+05&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redirect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;target&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/nm/2025-11-06/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;summary&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Alone and helpless, like you&amp;#39;ve lost your fight &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;Done! You can see an entry for “The Plan for My New Hetzner VM” in my work section as you see in the pic below. &lt;a href=&#34;https://janusworx.com/work/the-plan-for-my-new-hetzner-vm/&#34;&gt;Clicking that&lt;/a&gt; will redirect to the actual post in my &lt;a href=&#34;https://janusworx.com/nm/2025-11-06/&#34;&gt;Notes and Miscellanea&lt;/a&gt; section!&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&#34;align-center &#34;&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://janusworx.com/images/2025/hugo-redirect-from-post-in-one-section-to-another.png#center&#34;
         alt=&#34;Hugo Section with Post entries&#34;/&gt; 
&lt;/figure&gt;

&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;Tada 🎉&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;hr style=&#39;margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;&#39;/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href=&#34;mailto:feedback@janusworx.com?subject=%22Feedback on post: Hugo Redirect From Post in One Section to Another
%22&#34;&gt;feedback at this domain&lt;/a&gt; or &lt;a href=&#34;https://dc.janusworx.com/t/hugo-redirect-from-post-in-one-section-to-another
&#34;&gt;continue the discourse here&lt;/a&gt;.
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href=&#34;https://janusworx.com/subscribe/&#34;&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="problem">Problem</h2>
<p>I have a post in one section of my site, say <a href="/nm/2025-11-06/">notes and miscellanea</a><br>
That is my canonical post.<br>
But I also need it to show up in the work section of my site, possibly with a another name.<br>
A Hugo <code>alias</code> in the <code>yaml</code> front matter does not work, since both sections exist and Hugo gets confused.</p>
<h2 id="solution">Solution</h2>
<ol>
<li>Make sure <code>layouts/redirect/single.html</code> exists within your Hugo folder structure and it contains just this line …</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-golang" data-lang="golang"><span style="display:flex;"><span>{{<span style="color:#f92672">-</span> <span style="color:#a6e22e">template</span> <span style="color:#e6db74">&#34;alias.html&#34;</span> (<span style="color:#a6e22e">dict</span> <span style="color:#e6db74">&#34;Permalink&#34;</span> .<span style="color:#a6e22e">Params</span>.<span style="color:#a6e22e">target</span>) <span style="color:#f92672">-</span>}}
</span></span></code></pre></div><ol start="2">
<li>Create your <a href="/nm/2025-11-06/">orginal post</a> as usual</li>
<li><em>Then</em> go create a post in your <em>other</em><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> section with the following metadata:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#ae81ff">&lt;Your title here&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#date autogenerated by my archetype. if missing, add date</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2025-11-06T08:30:54</span><span style="color:#ae81ff">+05</span>:<span style="color:#ae81ff">30</span> 
</span></span><span style="display:flex;"><span><span style="color:#f92672">type</span>: <span style="color:#ae81ff">redirect</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">target</span>: <span style="color:#ae81ff">&lt;url-to-redirect-to&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">summary</span>: <span style="color:#ae81ff">&lt;Optional text, that will appear in the sectiones listing page&gt;</span>
</span></span><span style="display:flex;"><span>---
</span></span></code></pre></div><ol start="4">
<li>The <code>date</code> field is critical. The post might not appear where you expect it, if it’s absent.<br>
If not date, then you might need to use <code>weight</code>. One of the two is needed.</li>
<li>In my case, the metadata looked like this:</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#e6db74">&#34;The Plan for My New Hetzner VM&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2025-11-06T08:30:54</span><span style="color:#ae81ff">+05</span>:<span style="color:#ae81ff">30</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">type</span>: <span style="color:#ae81ff">redirect</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">target</span>: <span style="color:#ae81ff">/nm/2025-11-06/</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">summary</span>: <span style="color:#ae81ff">Alone and helpless, like you&#39;ve lost your fight </span>
</span></span><span style="display:flex;"><span>---
</span></span></code></pre></div><ol start="6">
<li>Done! You can see an entry for “The Plan for My New Hetzner VM” in my work section as you see in the pic below. <a href="/work/the-plan-for-my-new-hetzner-vm/">Clicking that</a> will redirect to the actual post in my <a href="/nm/2025-11-06/">Notes and Miscellanea</a> section!</li>
</ol>
<figure class="align-center ">
    <img loading="lazy" src="/images/2025/hugo-redirect-from-post-in-one-section-to-another.png#center"
         alt="Hugo Section with Post entries"/> 
</figure>

<ol start="7">
<li>Tada 🎉</li>
</ol>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Hugo Redirect From Post in One Section to Another
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/hugo-redirect-from-post-in-one-section-to-another
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>in my case, <a href="/work">work</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>The Plan for My New Hetzner VM</title>
      <link>https://janusworx.com/work/the-plan-for-my-new-hetzner-vm/</link>
      <pubDate>Thu, 06 Nov 2025 08:30:54 +0530</pubDate>
      <guid>https://janusworx.com/work/the-plan-for-my-new-hetzner-vm/</guid>
      <description>Alone and helpless, like you&amp;rsquo;ve lost your fight</description>
    </item>
    <item>
      <title>Make a Ruckus: 001, Done! Or Are We? Thank you, Dave!</title>
      <link>https://janusworx.com/work/make-a-ruckus-001/</link>
      <pubDate>Sat, 20 Sep 2025 13:39:01 +0530</pubDate>
      <guid>https://janusworx.com/work/make-a-ruckus-001/</guid>
      <description>I cannot wait to, have my brains exploded once again :)</description>
      <content:encoded><![CDATA[<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/ruckus-mabel.jpg#center" width="600px"/> 
</figure>

<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>Cute wolf Mabel, who caused quite a Ruckus, courtesy David Beazley</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I had <a href="/work/make-a-ruckus-000/">started this series</a>, to catalogue my journey learning Rust whilst doing David Beazley’s, <a href="https://dabeaz.com/ruckus.html">Ruckus</a> course.<br>
And just like that, it’s over! 😂  The course is done, and I am already missing Dave and my fellow journey folk, Rodica, Yadu, Marko, Upul, Gabriela, and Eugene!<br>
I never thought the end would be so bittersweet.</p>
<h2 id="worth-it-financially">Worth it financially?</h2>
<p>Yes! Oh, dear God, yes!<br>
To begin with, I never thought that Dave’s courses were expensive. Yes, they cost money, but he’s given so much away for free, that I was willing to save up and put my money where my mouth was.<br>
I also think, I’ve figured out Dave’s schtick with the idea of what he teaches.<br>
Take something, something hard, (Write a <a href="https://dabeaz.com/compiler.html">compiler</a>? Figure out <a href="https://dabeaz.com/raft.html">distributed consensus</a> in networked systems? <a href="https://dabeaz.com/sicp.html">The big ideas and paradigms</a> in computing?); something that would take an average Joe, 4-6 months (or a college semester) to learn, and then compress it down to anything from a couple of days to a work week. Compress the time that is … not the knowledge.<br>
Having <em>that</em> much knowledge <a href="https://www.youtube.com/watch?v=w_8NsPQBdV0">dowloaded into your head</a> in that short a time frame, is what (to use a Dave-ism) makes your brain explode.<br>
And now having actually done it, I’m now swinging around to the price is just right or “He actually undercharges a bit” camp.<br>
This is bloody addicting. I’m just going to save up and <a href="https://dabeaz.com/courses.html">do them all</a> as and when I can over time. Like Neo answering Tank’s, “How about some more?”, with a <em><strong><a href="https://youtu.be/w_8NsPQBdV0?t=41">Hell yes!</a></strong></em></p>
<br>

<h2 id="worth-it-for-the-knowledge-i-gained">Worth it for the knowledge I gained?</h2>
<p>Have I already said, Oh, dear God, Yes?! Doubly so, here!<br>
Learning it myself, I realised that Rust had paradigms, teasing me at the edge of my vision, which I couldn’t quite see, frustrating my attempts to learn the language.<br>
Python (C/OOP) is my <a href="https://madhadron.com/programming/seven_ur_languages.html">ur-language</a>. Having that, made it easy to learn Go. Rust turned out to be a different beast altogether. Having the big ideas of Rust laid bare and then explained thoroughly was therefore, such an eye opening experience. And I learned it while doing something else, that is inherently hard. Dave makes it easy though, like I describe below.</p>
<p>I just wanted to learn Rust. I didn’t really want to write a small programming language.<br>
But doing that, made me learn Rust without even realising it. He’s that good. The pedagogical method is that good.<br>
Most big ideas were in there. Ownership and borrowing, check. Compare and contrast how things are done in other languages, double check. Macro magic, check and triple check.<br>
The course was more focussed on the why of Rust, more than the more easily discoverable, how.<br>
A fascinating mental model was looking at Rust like Earth. An inner strict core, surrounded by a more relaxed, friendlier outer shell.</p>
<p>Daily work was tremendously, mentally taxing. In a <em><strong>good</strong></em> way.<br>
Dave keeps saying that minds explode due to the material. But no good Sir, that is not true!<br>
To Dave I say, <em>“’Tis thou, Dave, who dost cause the explosions of brains!”</em><br>
He starts with an innocent problem, something seemingly innocuous, and then lays his trap.<br>
Simple solutions are shown not to work, teensy yet ghastly exceptions show up to trip you, dreadful scenarios that you’d never imagine, lie beneath the surface. And your mind gets wound up so tight, that when Dave finally has had his fun, takes pity on us and shows us the solution, it naturally goes, <em><strong>Boom!</strong></em></p>
<p>I cannot wait, to have my brains exploded once again :)</p>
<h2 id="am-i-done-with-this-series">Am I done with this series?</h2>
<p>No.<br>
I jumped into the deep end of the pool, by attempting to learn Rust with a hard project at the same time.<br>
So while I’ve learned a lot, there’s plenty of work to do.<br>
While the others could do their programming exercises quickly, I have seriously lagged behind.<br>
With the notes I’ve made and the resources that I have access to, I will attempt to redo this week myself over the coming months and write about it, and ponder, struggle, work through it here.</p>
<h2 id="dave-as-teacher-and-all-round-good-egg">Dave as teacher and all round good egg</h2>
<p>The man puts in tremendous amounts of work.<br>
Every bit of the course, is planned and structured meticulously and then he just riffs off of the ideas.<br>
There was a collaborative Github repo ready and waiting, there were video recordings ready as soon as the day was done.<br>
Dave never pretends to have all the answers. 99% of the time, he does and hides it well, so we do the thinking, but the few times he didn’t, he let us know and then came back to us with answers and thoughts either in the next session or the next day.<br>
Unfailingly polite, kind and generous to a fault, he fostered an extremely collaborative environment, in which, even when there were other folks much more learned and experienced than I; I never felt like a dunce. I never felt spoken down to.<br>
All my kooky ideas were evaluated, and then Dave would point out why doing something like what I suggested wouldn’t quite work or why stuff would crash and burn or why what I suggested doing eeny, meeny, miny, moe was in fact, pretty good.<br>
I learned not just <em>what</em>, not just <em>how</em>, but also <em>why</em>.<br>
And I learned it all in a place that was nice, and friendly, and warm, and kind.</p>
<p>Dave, thank you for all you do! I’m very grateful!</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Make a Ruckus: 001, Done! Or Are We? Thank you, Dave!
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/make-a-ruckus-001
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Make a Ruckus: 000, The Motivation</title>
      <link>https://janusworx.com/work/make-a-ruckus-000/</link>
      <pubDate>Thu, 11 Sep 2025 13:47:52 +0530</pubDate>
      <guid>https://janusworx.com/work/make-a-ruckus-000/</guid>
      <description>Let’s make some noise!</description>
      <content:encoded><![CDATA[<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/ruckus-wolf-howl.svg#center" width="600px"/> 
</figure>

<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p><a href="https://commons.wikimedia.org/wiki/File:Wolf_howl_icon.svg">Wolf howl, by Lorc</a>, <a href="https://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>, via Wikimedia Commons</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I signed up for the latest cohort of <a href="https://dabeaz.com/about.html">David Beazley’s</a>, <a href="https://dabeaz.com/ruckus.html">Ruckus</a>.<br>
The basic idea, behind Ruckus is to write a small interpreter in Rust!</p>
<h3 id="why">Why?</h3>
<p>From the <a href="https://dabeaz.com/ruckus.html">Ruckus</a> page:</p>
<blockquote>
<p>This course tackles Rust by stepping back and thinking about it from the standpoint of a &ldquo;programming languages&rdquo; project. If Rust is really so different, how would you go about finding out how? Suffice to say, building a programming language will cut right to the heart of the matter.</p>
</blockquote>
<p>This is exactly how I learned Python. Only it took me an inordinately long time. And I didn’t even realise that I was doing it that way. While most of my friends were happy just using Python, I could not quite do it right, because I had no fundamentals<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and since my background has been tech support, hardware and people management, I needed to unlearn a ton of stuff.</p>
<p>I’m cautiously hoping Ruckus will help me do the same with Rust, only in a turbo charged manner.</p>
<p>Rust fascinates me. And I quite like my journey to its doorstep.<br>
I learned writing for myself with Python. But when it came time to sharing my tiny projects with friends and family, I was a bit stumped.<br>
I learned Go, just so I could give them a binary and then instruct them with a “just run this.”<br>
And while that solved my distribution problem, Go’s type system made me realise, just how well suited a typed language is for collaboration.<br>
Which brings me to Rust. Long term, this is the language<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, I would love to write for performant code, because Rust’s big picture features (safe, performant, easy to distribute) are exactly what I want for all my tiny bits and bobs.</p>
<p>Which in turn brings me back to Ruckus.<br>
Getting a teensy peek at how everything works underneath, while at the same time, getting a firm handle on the language seems like a fun challenge.<br>
I also wanted to try what Cal Newport, calls a grand gesture in <a href="https://calnewport.com/deep-work-rules-for-focused-success-in-a-distracted-world/">Deep Work</a>:</p>
<blockquote>
<p>The concept is simple: By leveraging a radical change to your normal environment, coupled perhaps with a significant investment of effort or money, all dedicated toward supporting a deep work task, you increase the perceived importance of the task. This boost in importance reduces your mind’s instinct to procrastinate and delivers an injection of motivation and energy.<br>
[…] The dominant force is the psychology of committing so seriously to the task at hand. To put yourself in an exotic location to focus on a writing project, or to take a week off from work just to think, or to lock yourself in a hotel room until you complete an important invention: These gestures push your deep goal to a level of mental priority that helps unlock the needed mental resources. Sometimes to go deep, you must first go big.</p>
</blockquote>
<p>Make no mistake, my current state is that of an enthusiastic, ignorant newbie. How hard can it be? I’m woefully unprepared for what might come. The only thing I know, is that I <em>don’t</em> know. I fully expect to be like the wolf above, losing my mind, howling at the moon and generally creating a ruckus.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Make a Ruckus: 000, The Motivation
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/make-a-ruckus-000-the-motivation/159">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!</p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I have <em>some</em> now&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I thought I could be pragmatic about the giant that stewards Go, but I realise that it’s something that’ll always stick in my craw. I have no issues using it with other folks or in a collaborative project. I just don’t want to use it for myself and my projects.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Emacs Package Updation Checklist</title>
      <link>https://janusworx.com/work/emacs-package-updation-checklist/</link>
      <pubDate>Sun, 06 Jul 2025 08:36:44 +0530</pubDate>
      <guid>https://janusworx.com/work/emacs-package-updation-checklist/</guid>
      <description>Checklist for future, lost, Jason</description>
      <content:encoded><![CDATA[<figure class="align-center ">
    <img loading="lazy" src="/images/2024/emacs-logo.svg#center" width="500px"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I’ve never updated my Emacs packages until recently, because Emacs is where <em>all</em> my writing happens, and so I’m justifiably paranoid.<br>
But then some packages stopped working, due to various circumstances<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and an update solved it.</p>
<p>So I’ve decided to update my packages once a quarter, so that I don’t lose days yak shaving when something goes wrong and I handle breakage on my terms and not the machine’s.</p>
<p>As far as package management goes, I want to keep things simple.<br>
In fact, I still haven’t graduated to <a href="https://www.gnu.org/software/emacs/manual/html_mono/use-package.html"><code>use-package</code></a> or <a href="https://github.com/radian-software/straight.el"><code>straight.el</code></a> because my package needs are few and conservative<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. And so, while there are <a href="https://github.com/rranelli/auto-package-update.el">automatic update options</a> out there, I’ll just stick to updating them manually, every quarter.</p>
<p>Ergo, this is the checklist I’ll use next time onwards …</p>
<ol>
<li>Stop emacs user service, <code>systemctl --user stop emacs</code></li>
<li>Backup emacs folder in <code>~/.config</code></li>
<li>Start emacs manually (not the service).</li>
<li><code>M-x package-refresh-contents</code></li>
<li><code>M-x package-upgrade-all</code></li>
<li>Problems? Quit emacs. Revert backup folder.</li>
<li>In the end, start emacs user sevice, <code>systemctl --user start emacs</code></li>
</ol>
<p>There’s an Org mode task, scheduled quarterly, so that I won’t forget.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Emacs Package Updation Checklist
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/emacs-package-updation-checklist
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>While I don’t want updated packages, I do want updated Emacs and that broke stuff 😂&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>The biggest change I forsee, is if Jetbrains ever turn evil and I have to move off their editors and subsequently need to use Emacs as an IDE&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Forgejo Workflow Action to Publish Hugo Blog</title>
      <link>https://janusworx.com/work/forgejo-workflow-action-to-publish-hugo-blog/</link>
      <pubDate>Mon, 09 Jun 2025 15:09:16 +0530</pubDate>
      <guid>https://janusworx.com/work/forgejo-workflow-action-to-publish-hugo-blog/</guid>
      <description>Trying to publish on a schedule</description>
      <content:encoded><![CDATA[<figure class="align-center ">
    <img loading="lazy" src="/images/common/forgejo-logo.svg#center" width="500px"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I’d gotten this working earlier and wanted to post it up.<br>
And then promptly forgot about it.<br>
Until today that is, when I wanted to make changes to it.</p>
<p>Here it is for posterity.<br>
The newest change is that the action now runs every six hours.</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">name</span>: <span style="color:#ae81ff">Build and Deploy Janusworx website</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">on</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">schedule</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">cron</span>: <span style="color:#e6db74">&#39;0 */6 * * *&#39;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">workflow_dispatch</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">push</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">branches</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">main</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">jobs</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">build-and-deploy</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">runs-on</span>: <span style="color:#ae81ff">intel</span> <span style="color:#75715e"># make sure there are runners tagged &#34;intel&#34; on your network or replace this with something of your own</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">env</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">HUGO_VERSION</span>: <span style="color:#ae81ff">${{ vars.HUGO_VERSION }}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">steps</span>:  
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Install wget &amp; rsync</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: <span style="color:#ae81ff">apt-get update &amp;&amp; apt-get install wget rsync -y</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Install Hugo</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          &amp;&amp; dpkg -i ${{ runner.temp }}/hugo.deb</span>
</span></span><span style="display:flex;"><span>      
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Checkout the website repo</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/checkout@v4</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">with</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">submodules</span>: <span style="color:#ae81ff">recursive</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">fetch-depth</span>: <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>      
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Build website with Hugo</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">env</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">HUGO_ENVIRONMENT</span>: <span style="color:#ae81ff">production</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">TZ</span>: <span style="color:#ae81ff">Asia/Kolkata</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          hugo \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            --gc \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            --minify
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            </span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Install SSH key</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          mkdir -p ~/.ssh
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          echo &#34;${{ secrets.SSH_PRIVATE_KEY }}&#34; &gt; ~/.ssh/id_ed25519
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          chmod 600 ~/.ssh/id_ed25519
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          echo &#34;${{ secrets.SSH_KNOWN_HOSTS }}&#34; &gt; ~/.ssh/known_hosts
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          chmod 644 ~/.ssh/known_hosts</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Deploy website with rsync</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">env</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">REMOTE_HOST</span>: <span style="color:#ae81ff">${{ vars.REMOTE_HOST }}</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">REMOTE_USER</span>: <span style="color:#ae81ff">${{ vars.REMOTE_USER }}</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">REMOTE_PATH</span>: <span style="color:#ae81ff">${{ vars.REMOTE_PATH }}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          rsync -avz --delete public/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Notes:<br>
It needs a few variables set, in the repo (repo-&gt;Settings-&gt;Actions-&gt;Variables), which are the details I need (Hugo version, Remote Host IP, Remote path to copy the built output to, and the Remote user to use for SSH) to push via rsync to the host.<br>
Hugo version is in there, because Hugo breaks things all the time, so I upgrade cautiously.</p>
<p>It also needs a couple of secrets, set in the repo (repo-&gt;Settings-&gt;Actions-&gt;Secrets) to enable rsync to copy. (SSH_KNOWN_HOSTS and SSH_PRIVATE_KEY). Also best if this is a dedicated private key just for copying.
Running <code>ssh-keyscan &quot;your-host-name-or-ip&quot; &gt; known_host_data.txt</code> should dump the data you’d need for SSH_KNOWN_HOSTS</p>
<p>With the changes I made today, the workflow can publish</p>
<ul>
<li>on demand</li>
<li>every 6 hours</li>
<li>every time I commit to the repo</li>
</ul>
<p>I added time based publishing, so that I could publish future dated posts as and when the time rolls around.<br>
With this, I think I’m done tinkering with my blog, with the exception of moving it out of my home network and out on to my VM, so that I can truly publish from anywhere. That is a big heft for me currently and a job for future Jason.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Forgejo Workflow Action to Publish Hugo Blog
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/forgejo-workflow-action-to-publish-hugo-blog
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Here’s What is Stopping Us From Using Free Software</title>
      <link>https://janusworx.com/work/heres-what-is-stopping-us-from-using-free-software/</link>
      <pubDate>Tue, 18 Feb 2025 12:13:45 +0530</pubDate>
      <guid>https://janusworx.com/work/heres-what-is-stopping-us-from-using-free-software/</guid>
      <description>What is this life if, full of care. We have no time to stand and stare.</description>
      <content:encoded><![CDATA[<p>A couple of thoughts on <a href="https://blog.schubisu.de/blog/2023/1/">Robin’s post</a>.<br>
Because I’ve spent a lifetime using both FOSS and proprietary software <em><strong>and</strong></em> more than two decades, advising and supporting people and businesses who do the same.</p>
<ol>
<li>To paraphrase Robin’s own point. Most people don’t care.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></li>
</ol>
<blockquote>
<p><a href="https://blog.schubisu.de/blog/2023/1/#:~:text=If%20it,fine">If it runs Minetest, then it’s fine.</a></p>
</blockquote>
<p>aka “If it does the thing, I want it to do, without too much cognitive overhead, I’ll use it.”<br>
Learning the skill, so I can do this task, is definitely not what the world at large wants to do. Nor do I imagine, do most folk have the time and the bandwidth.
iTunes (and Netflix) when they launched<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, were the prime examples of this. Convenience and ease of use trumps Free. Also by that same token, VLC is probably one of the most installed and used video players in the world, not because they are FOSS, but because they make it easy to install and use.</p>
<ol start="2">
<li>
<p>Some people feel strongly about having control over what they do, over their data. Those folks were those I found easiest to move to Free software, because it aligned with what they wanted.</p>
</li>
<li>
<p>Support costs are about the same.<br>
If a small business chooses to use free software, the cost of supporting it, if stuff breaks, (specially if it’s business critical<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>) probably is about the same as paying for the proprietary version. The fact that paying and getting it fixed benefits the world at large is lost on most. Or maybe it’s something, we Free Software evangelists could learn to to better. Robin promises his team, first-level support, but what happens when he goes on to better opportunities and is no longer around?</p>
</li>
</ol>
<p>So I agree with most of what Robin says, with just one caveat.</p>
<p>People aren’t afraid of change. Atleast not the kind of change, Free Software poses.<br>
People just don’t have the time and the energy to deal with change, with everything else happening in their lives.<br>
Free software is just not as important to them, as it is to us. That is all.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Here’s What is Stopping Us From Using Free Software
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/heres-what-is-stopping-us-from-using-free-software
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And I’d venture to say, that’s perfectly ok.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>before they went to pot&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>rpm updates, bork my expensive garment printing machine, anyone?&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>And once again, that’s perfectly ok too.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Blog Questions Challenge 2025</title>
      <link>https://janusworx.com/work/blog-questions-challenge-2025/</link>
      <pubDate>Tue, 04 Feb 2025 12:10:17 +0530</pubDate>
      <guid>https://janusworx.com/work/blog-questions-challenge-2025/</guid>
      <description>Now, this is one viral trend, I can get behind</description>
      <content:encoded><![CDATA[<p><a href="https://blog.avas.space/bear-blog-challenge/">Ava</a> started this, <a href="https://kevquirk.com/blog/blog-questions-challenge">Kev</a> modified this, and <a href="https://saptaks.website/">Saptak</a> egged me on to write this. So here goes …<br>
<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2025/meta-homepage.png#center"
         alt="screenshot of my homepage"/> 
</figure>
</p>
<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>What the home page looks like in 2025</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<h3 id="1-why-did-you-make-the-blog-in-the-first-place">1. Why did you make the blog in the first place?</h3>
<p>I write for me mostly. Because writing <a href="/personal/why-i-write/">helps me think</a>. My thoughts are too scattered otherwise. I can’t not write. I’ve always written. Privately, publicly, there’s always been some place where I’ve jotted things down.</p>
<h3 id="2-what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it">2. What platform are you using to manage your blog and why did you choose it?</h3>
<p>I use <a href="https://gohugo.io/">Hugo</a> to generate the site, which I host on my own Hetzner VM. I use it because I <a href="/work/all-about-the-move-to-hugo/">outgrew</a> my previous tool, <a href="https://getnikola.com/blog/">Nikola</a>, which still holds a dear place in my heart. While Hugo is enormously complex, it is also deceptively simple enough to get started with. And it’s <em>fast</em>. That’s what I love about it. It lets me write. It does not get in my way. It lets me preview what I’m doing with its live server. And it’s <em>unbelievably fast.</em></p>
<h3 id="3-have-you-blogged-on-other-platforms-before">3. Have you blogged on other platforms before?</h3>
<p>I’ve been writing in some form or other since the late 90s. So … yea :)<br>
Livejournal, Blogger, self hosted Wordpress, wordpress.com, Posterous, Tumblr, self hosted Wordpress, self hosted Ghost, Nikola and now Hugo. It’s been quite a ride!</p>
<h3 id="4-how-do-you-write-your-posts">4. How do you write your posts?</h3>
<p>I write them in Emacs (in Markdown, using Markdown Mode) on my desktop, with <a href="https://gohugo.io/commands/hugo_server/">Hugo Server</a> running alongside giving me a preview of what things will look like. Once I commit it to my self hosted Forgejo instance, an action publishes the site automatically</p>
<h3 id="5-when-do-you-feel-most-inspired-to-write">5. When do you feel most inspired to write?</h3>
<p>I never do. I write because it helps me function. And yet, it always feels like a chore.</p>
<h3 id="6-do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft">6. Do you publish immediately after writing or do you let it simmer a bit as a draft?</h3>
<p>I always publish it immediately. I almost never write something that is deeply thought out, that needs to stand the test of time. It’s the <em>process</em>, the <em>writing</em>, the putting words out of my mind, through my fingers down to paper,  that leads to the result, the thought, the opinion, the aha, the insight. So I’m never quite done. Which means if I ever wait for <em>finished</em>, the post will never get published. The <em>moment</em> I publish something, is invariably the moment something needs changing. So I just go back and edit it. I never notify folks about updating things on the first day. If I ever edit something much later than a day or two, then I do.</p>
<h3 id="7-your-favorite-post-on-your-blog">7. Your favorite post on your blog?</h3>
<p>None. All. They’re my thoughts, so depending on my mood, they’re either worthless or priceless gems!</p>
<h3 id="8-any-future-plans-for-your-blog-maybe-a-redesign-changing-the-tag-system-etc">8. Any future plans for your blog? Maybe a redesign, changing the tag system, etc.?</h3>
<p>Not really. For all my wandering, I’ve only ever moved when my tools outgrew me<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, or I outgrew my tools. For now, Hugo does all I ask of it, without getting in the way. The day that changes, will be the day I move.</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I’ll ask <a href="https://psaggu.com/">Priyanka</a>, <a href="https://sreeram.xyz/">Sreeram</a>, <a href="https://blogs.dgplug.org/sandeepk/">Sandeep</a>, <a href="https://pradhvanbisht.in/">Pradhvan</a>, <a href="https://rj722.com/">Rahul</a>, <a href="https://geeksocket.in/">Bhavin</a>, <a href="https://blog.lazkani.io/posts/what-2025-blog-question-challenge/">Elia</a>, <a href="https://microblog.desipenguin.com/">Mandar</a>, <a href="https://saptaks.website/">Saptak</a>, <a href="https://farhaan.me/">Farhaan</a>, <a href="https://blog.schubisu.de/blog/2025/1/">Robin</a> and <a href="https://kushaldas.in/">Kushal</a> to share more, if they have the time, energy and the inclination.</p>
<p>Folks, who’ve answered my call to arms! Go read their answers too!</p>
<ul>
<li><a href="https://blog.schubisu.de/blog/2025/1/">Robin</a></li>
<li><a href="https://blog.lazkani.io/posts/what-2025-blog-question-challenge/">Elia</a></li>
</ul>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Blog Questions Challenge 2025
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/blog-questions-challenge-2025
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Wordpress.com too restrictive, Ghost stopped serving my specific needs etc.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Hack Hugo Post Metadata With Python</title>
      <link>https://janusworx.com/work/hack-hugo-post-metadata-with-python/</link>
      <pubDate>Mon, 03 Feb 2025 09:33:37 +0530</pubDate>
      <guid>https://janusworx.com/work/hack-hugo-post-metadata-with-python/</guid>
      <description>Adding alias urls to my blog posts</description>
      <content:encoded><![CDATA[<p><a href="/work/some-site-housekeeping-new-sections-and-rss-feeds/">A while back</a>, I rejigged the sections on my site to better reflect how I think and write.<br>
Which meant, all the urls, on all my posts changed, since they now used the new category as a slug, instead of ye old <code>/blog</code>.</p>
<p>For e.g. <a href="https://janusworx.com/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo/">https://janusworx.com/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo/</a> …<br>
was now at,  <a href="https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/">https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/</a></p>
<p>After searching a bit, I found that Hugo supported <a href="https://gohugo.io/content-management/urls/#aliases">aliases</a>. For me, it would redirect the original <code>/blog</code> path url to its new location<br>
Ass I had to do, was add an <code>aliases: [&quot;/blog/old-post-slug&quot;]</code> line to each post’s metadata.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><br>
Line 4 in the snippet below shows, what I added to fix the post above.</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#e6db74">&#34;Using Hugo Variables to Help With Mailto Links in Hugo&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2024-05-30T18:17:35</span><span style="color:#ae81ff">+05</span>:<span style="color:#ae81ff">30</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">aliases</span>: [<span style="color:#e6db74">&#34;/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo&#34;</span>]
</span></span><span style="display:flex;"><span><span style="color:#f92672">categories</span>: [<span style="color:#e6db74">&#34;work&#34;</span>]
</span></span><span style="display:flex;"><span><span style="color:#f92672">tags</span>: [<span style="color:#ae81ff">100WordHabit, Dgplug, Hugo]</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">summary</span>: <span style="color:#ae81ff">Shortcodes! Hugo Variables in Shortcodes!</span>
</span></span><span style="display:flex;"><span>---
</span></span></code></pre></td></tr></table>
</div>
</div><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I did <em><strong>not</strong></em> want to do this by hand for 800+ posts.<br>
One stroke of luck for me, was that I let Hugo use its default behaviour of generating url slugs from the file names. So even if the category slugs had changed (from <code>/blog</code> to <code>/work</code> or from <code>/blog</code> to <code>/personal</code>), the url slugs would stay the same. Which meant, I could whip up a script to run through all my markdown posts and add the alias line.<br>
So I did.</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pathlib <span style="color:#f92672">import</span> Path
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>INPUT_FOLDER <span style="color:#f92672">=</span> Path(<span style="color:#e6db74">&#34;old-posts-folder&#34;</span>)
</span></span><span style="display:flex;"><span>OUTPUT_FOLDER <span style="color:#f92672">=</span> Path(<span style="color:#e6db74">&#34;modified-posts-folder&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> each_file <span style="color:#f92672">in</span> INPUT_FOLDER<span style="color:#f92672">.</span>iterdir():
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> open(each_file, <span style="color:#e6db74">&#39;r&#39;</span>) <span style="color:#66d9ef">as</span> file_to_read:
</span></span><span style="display:flex;"><span>        alias_derived_from_file <span style="color:#f92672">=</span> each_file<span style="color:#f92672">.</span>stem
</span></span><span style="display:flex;"><span>        contents_as_list <span style="color:#f92672">=</span> file_to_read<span style="color:#f92672">.</span>readlines()
</span></span><span style="display:flex;"><span>        contents_as_list<span style="color:#f92672">.</span>insert(<span style="color:#ae81ff">3</span>, <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;aliases: [</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74">/blog/</span><span style="color:#e6db74">{</span>alias_derived_from_file<span style="color:#e6db74">}</span><span style="color:#ae81ff">\&#34;</span><span style="color:#e6db74">]</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>)
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">with</span> open(Path(OUTPUT_FOLDER, each_file<span style="color:#f92672">.</span>name), <span style="color:#e6db74">&#39;w+&#39;</span>) <span style="color:#66d9ef">as</span> file_to_write:
</span></span><span style="display:flex;"><span>            file_to_write<span style="color:#f92672">.</span>writelines(contents_as_list)
</span></span></code></pre></td></tr></table>
</div>
</div><p><br>

It takes all the posts from my old folder, inserts the alias line and puts them into a new folder.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> In essence, take each file, figure out the url slug from the file name, read in the contents as a list, insert my alias at position 3 (fourth actually. zero based indexing) of the list (below the title and date) and then write it all out to a new file.</p>
<p>I ran it, published the site and then went to check on the old urls with bated breath.<br>
Hurrah, it all worked :)</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Hack Hugo Post Metadata With Python
%22">feedback at this domain</a> or <a href="https://dc.janusworx.com/t/hack-hugo-post-metadata-with-python
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>it’s a list, so I can add more aliases if I want to&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>no sense in botching up my originals :)&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Tmux Start Session Maximized With Three Panes</title>
      <link>https://janusworx.com/work/tmux-start-session-maximized-with-three-panes/</link>
      <pubDate>Sat, 01 Feb 2025 09:27:25 +0530</pubDate>
      <guid>https://janusworx.com/work/tmux-start-session-maximized-with-three-panes/</guid>
      <description>New short ritual to get my writing sessions going</description>
      <content:encoded><![CDATA[<p>So I got tired of starting up a dedicated tmux session to manage all the work related to my writing sessions. Over the past few months, I’ve boiled it down to three.<br>
And it still irks me that I have to …</p>
<ol>
<li>Launch Terminal</li>
<li>Launch Tmux</li>
<li>Split it into three windows err … panes.</li>
<li>Go to the top left pane and launch Hugo server</li>
<li>Switch to the right pane and then launch Emacs with whatever new post I want to write today.</li>
</ol>
<p>So <em>of course</em>, a <a href="https://en.wikipedia.org/wiki/Rube_Goldberg">Rube Goldberg-esque</a>, tiny bash-pipey monster took form.
It now resides, chained to an alias, <code>hssx</code><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> in my <code>.bash_aliases</code> file</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>alias hssx<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;cd /path/to/my/hugo/folder &amp;&amp; \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">xdotool windowsize $(xdotool getactivewindow) 100% 100% &amp;&amp; \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">tmux new-session \; split-window -h \; select-pane -l \; split-window -v \; select-pane -U \; send-keys &#34;hugo serve&#34; C-m \; select-pane -R&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><ol>
<li>The first line switches to my hugo folder</li>
<li>The second calls <code>xdotool</code> and maximises the terminal window</li>
<li>And the last line is a series of instructions to the tmux command. I’ve split it below for readability.</li>
</ol>
<pre tabindex="0"><code>tmux new-session \; #Tmux start a new session
split-window -h \; # Split the window into two vertical panes
select-pane -l \; # Switch to the left pane
split-window -v \; # Split that into two horizontal panes
select-pane -U \; # Select the upper pane
send-keys &#34;hugo serve&#34; C-m \; # Type in `hugo serve` followed by Enter
select-pane -R # Select the right pane
</code></pre><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>And boom!</p>
</figcaption>
<p><a href="/images/2025/tmux-layout.png"><figure class="align-center ">
    <img loading="lazy" src="/images/2025/tmux-layout.png#center"
         alt="bash terminal showing a tmux window split into three panes"/> 
</figure>
</a></p>
<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>Click pic for a larger version</p>
</figcaption>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Tmux Start Session Maximized With Three Panes
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/tmux-start-session-maximized-with-three-panes
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><code>hugo start session</code> and x just because all my aliases have ended with x for years and years&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>View Only the Day, With Org Agenda</title>
      <link>https://janusworx.com/work/view-only-day-with-org-agenda/</link>
      <pubDate>Mon, 20 Jan 2025 08:50:40 +0530</pubDate>
      <guid>https://janusworx.com/work/view-only-day-with-org-agenda/</guid>
      <description>Live in Day Tight Compartments; only worry about what’s happening today; that’s all you can control — Dale Carnegie</description>
      <content:encoded><![CDATA[<p>Org Mode, by default, shows me the whole week, when I pull up my agenda. That’s not how I work though. I normally look at the week on Monday mornings (or Sunday evenings) to plan out the week and then work everyday by just looking at what I ought to get done that particular day.</p>
<p>Like Dale Carnegie says,</p>
<blockquote>
<p>Shut off the past! Let the dead past bury its dead. Shut out the yesterdays which have lighted fools the way to dusty death.</p>
<p>The load of tomorrow, added to that of yesterday, carried today, makes the strongest falter. Shut off the future as tightly as the past.</p>
<p>The future is today. There is no tomorrow. The day of man&rsquo;s salvation is now.</p>
<p>Waste of energy, mental distress, nervous worries dog the steps of a man who is anxious about the future. Shut close, then the great fore and aft bulkheads, and prepare to cultivate the habit of life of day-tight compartments.</p>
</blockquote>
<p>So I want then, my Org Mode to do show me, only the things, I have on my plate today.</p>
<p>And Org is nothing if not adaptable. <code>org-agenda-span</code> is the variable that controls what the Agends shows me. According to the docs,</p>
<blockquote>
<p>This variable can be set to any number of days you want to see by default in the agenda, or to a span name, such a <code>day</code>, <code>week</code>, <code>month</code> or <code>year</code>.</p>
</blockquote>
<p>So that’s what I did. This little snippet went into my <code>init</code> file</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-elisp" data-lang="elisp"><span style="display:flex;"><span><span style="color:#75715e">;; Set Agenda to show a day as the default timespan, instead of a week</span>
</span></span><span style="display:flex;"><span>(setq org-agenda-span <span style="color:#e6db74">&#39;day</span>)
</span></span></code></pre></div><p><br>

Et voilà!</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: View Only the Day, With Org Agenda
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/view-only-day-with-org-agenda
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>More Espanso &amp; Emacs Shenanigans</title>
      <link>https://janusworx.com/work/more-espanso-emacs-shenanigans/</link>
      <pubDate>Sun, 19 Jan 2025 12:45:09 +0530</pubDate>
      <guid>https://janusworx.com/work/more-espanso-emacs-shenanigans/</guid>
      <description>Fixing my blog post, CTA snippet …</description>
      <content:encoded><![CDATA[<p><br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/espanso.png#center"
         alt="Espanso Logo"/> 
</figure>
</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>Now that I use my local machine to draft all my posts, desktop Emacs makes everything easier … with one exception. It swallows up a lot of my Espanso expansions.</p>
<p>My current bugbear is that it will not render a <code>=</code> when expanding.<br>
I know this is entirely something that I brought on myself, and neither Emacs or Espanso in isolation will have issues.</p>
<p>My workaround after rummaging through Espanso’s documentation was to set the backend to use <code>xdotool</code>, in my config. (<code>~/.config/espanso/config/default.yml</code>)</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">x11_use_xdotool_backend</span>: <span style="color:#66d9ef">true</span>
</span></span></code></pre></div><p>One downside now is that it no longer <a href="https://espanso.org/docs/matches/basics/#cursor-hints">jumps back to a predefined location</a> in the snippets where I’ve defined such a thing. No matter. I use them rarely and I’ll figure something out later. (Alongside why desktop emacs won’t render markdown expansions sometimes as well)</p>
<p>For now, most of my expansions work. Hurrah!</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: More Espanso &amp; Emacs Shenanigans
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/more-espanso-emacs-shenanigans
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Notes Now Has No RSS Feed</title>
      <link>https://janusworx.com/work/notes-now-has-no-rss-feed/</link>
      <pubDate>Sat, 04 Jan 2025 16:34:20 +0530</pubDate>
      <guid>https://janusworx.com/work/notes-now-has-no-rss-feed/</guid>
      <description>&lt;p&gt;Finally figured out how to disable RSS feeds on a post by post basis.&lt;/p&gt;
&lt;p&gt;I needed to do this for my stream of consciousness / wip / progress notes in the &lt;a href=&#34;https://janusworx.com/nm/&#34;&gt;Notes and Miscellanea&lt;/a&gt; section
I did not want to disable the whole section, because some posts, I do want to leak out.&lt;/p&gt;
&lt;p&gt;What it boiled down to was getting the RSS template to ignore sites with some parameter set in the front matter. Most posts on the web do a &lt;code&gt;rss_disabled: true&lt;/code&gt; or something to that effect.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Finally figured out how to disable RSS feeds on a post by post basis.</p>
<p>I needed to do this for my stream of consciousness / wip / progress notes in the <a href="/nm/">Notes and Miscellanea</a> section
I did not want to disable the whole section, because some posts, I do want to leak out.</p>
<p>What it boiled down to was getting the RSS template to ignore sites with some parameter set in the front matter. Most posts on the web do a <code>rss_disabled: true</code> or something to that effect.</p>
<p>Joe Mooring over on the Hugo Discourse <a href="https://discourse.gohugo.io/t/disable-rss-for-one-or-more-specific-posts-in-a-blog/52995/2?u=jasonbraganza">logically pointed out</a> that I’d want such posts to be disabled in the sitemap as well, so I’d do well to just piggy back off of that.</p>
<p>So all I had to do was set the following in the my front matter</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">sitemap</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">disable</span>: <span style="color:#66d9ef">true</span>
</span></span></code></pre></div><p>and then configure the embedded <a href="https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml">RSS template</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> to just range through pages that didn’t have that parameter set, like so …</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-gotmpl" data-lang="gotmpl"><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#66d9ef">range</span> <span style="color:#a6e22e">where</span> <span style="color:#a6e22e">$pages</span> <span style="color:#e6db74">&#34;Sitemap.Disable&#34;</span> <span style="color:#e6db74">&#34;ne&#34;</span> <span style="color:#66d9ef">true</span> <span style="color:#75715e">}}</span>
</span></span></code></pre></div><p>The original line would’ve been something like</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-gotmpl" data-lang="gotmpl"><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#66d9ef">range</span> <span style="color:#a6e22e">$pages</span> <span style="color:#75715e">}}</span>
</span></span></code></pre></div><p>You’ll need to create a new feed file by copying the contents of the embedded template to a file called  <code>rss.xml</code> in the <code>layouts/_default/</code> directory</p>
<p>Once that’s done, all should be hunky dory.<br>
Posts with this frontmatter, will now no longer appear in RSS feeds or the sitemap.<br>
To make things simpler, I edited this sections archetype, so that the next time I create a new Notes &amp; Miscellenea post, all of this metadata is already set for me.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Notes Now Has No RSS Feed
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/notes-now-has-no-rss-feed
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>If you already have it defined in your theme, then override it.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Fixing Espanso Expansions</title>
      <link>https://janusworx.com/work/fixing-espanso-expansions/</link>
      <pubDate>Sun, 29 Sep 2024 17:05:19 +0530</pubDate>
      <guid>https://janusworx.com/work/fixing-espanso-expansions/</guid>
      <description>Text used to not g</description>
      <content:encoded><![CDATA[<p><br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/espanso.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>
</p>
<p>I never had the time to deal with my <a href="https://espanso.org/">Espanso</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> hijinks until today.<br>
While it worked perfectly, when I installed it all those years ago, when I migrated over from the Mac, Espanso itself has changed and evolved over the years.<br>
It took over my old configuration like a champ and <em>mostly</em> worked, with the exception of a few shortcuts; ones that I <em>frequently</em> used 😂</p>
<p>Emacs was one application of mine that never quite worked right with Espanso.<br>
I’d frequently get <code>timed out waiting for reply from selection owner</code> whenever I tried expansions in there. Typing :joy to get 😂 would work in every other program, but no joy with Emacs, in additon to plenty of other expansions err … not expanding.</p>
<p>All my browser url expansions would not expand properly either, with mangled expansions most of the time.</p>
<p>So today I <a href="https://espanso.org/docs/">dove in to the docs</a>, and realised two things.<br>
1. My emacs needed a longer time out<br>
2. Espanso now tries to identify the <em>kind</em> of text, and maybe those were causing my issues?</p>
<br>

<h3 id="emacs">Emacs</h3>
<p>I realised I needed a longer clipboard threshold, only for Emacs.<br>
So I created an <a href="https://espanso.org/docs/configuration/app-specific-configurations/">App specific configuration</a>, just for Emacs to use and gave it said option. Here’s what the contents of my <code>espanso/config/emacs.yml</code> look like</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">filter_class</span>: <span style="color:#e6db74">&#39;Emacs&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">clipboard_threshold</span>: <span style="color:#ae81ff">10000</span>
</span></span></code></pre></div><br>

<h3 id="rich-text-expansions">Rich Text Expansions</h3>
<p>That helped with a lot of expansions in Emacs, but not with my joy expansion.<br>
And not with stuff that were links and oh … links! and html! and markdown! Could those be the culprits?<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><br>
The docs mention that Espanso now has <a href="https://espanso.org/docs/matches/basics/#rich-text">rich text support</a><br>
What that means, is that the trigger nows supports two new keywords <code>html</code> and <code>markdown</code> in addition ye ole <code>replace</code>
So I changed most of my affected shortcuts to either of those two keywords; <code>markdown</code> for most everything and <code>html</code> for linky stuff. Here’s what my beloved joy looks like now …</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">matches</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">trigger</span>: <span style="color:#e6db74">&#34;:joy&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">markdown</span>: <span style="color:#ae81ff">😂</span>
</span></span></code></pre></div><p><br>

And those two things did it! Every shortcut expands everwhere! What joy 😂</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Fixing Espanso Expansions
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/fixing-espanso-expansions
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Espanso lets you assign short snippets of text to longer streams of text, that you’d frequently use. I use <code>:adhx</code> for example, and it expands out to type my whole address. Pretty handy!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>dun! dun! dun! they were!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Testing Opengraph Logo</title>
      <link>https://janusworx.com/work/testing-opengraph-logo/</link>
      <pubDate>Sat, 28 Sep 2024 17:46:14 +0530</pubDate>
      <guid>https://janusworx.com/work/testing-opengraph-logo/</guid>
      <description>J, Where art thou?</description>
      <content:encoded><![CDATA[<p>‘Romeo, Romeo! Wherefore art thou Romeo?’</p>
<p>(Romeo and Juliet, Act 2, Scene 2)</p>
]]></content:encoded>
    </item>
    <item>
      <title>Forgejo</title>
      <link>https://janusworx.com/work/forgejo/</link>
      <pubDate>Sat, 28 Sep 2024 15:39:12 +0530</pubDate>
      <guid>https://janusworx.com/work/forgejo/</guid>
      <description>Light up the forge!</description>
      <content:encoded><![CDATA[<p>Setup a new instance of Forgejo for myself today.<br>
The first thing I felt, was … instant relief.<br>
I didn’t realise just how much cognitive discomfort I was feeling, because Github was the only place I had all my code. As well as mirrors/forks of all the stuff I loved.<br>
I’m going to slowly move over to my little Forgejo instance as I learn more.</p>
<p>Right now I’ve set up pull mirrors for all the projects I love.
<br>
</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/forgejo.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>Next step is to figure out how to automate my Hugo blog deployment and more importantly; having all my posts in source control.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Forgejo
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/forgejo
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Smol Note to Self, on Deploying Stuff</title>
      <link>https://janusworx.com/work/smol-note-to-self-on-deploying-stuff/</link>
      <pubDate>Sat, 28 Sep 2024 14:34:47 +0530</pubDate>
      <guid>https://janusworx.com/work/smol-note-to-self-on-deploying-stuff/</guid>
      <description>This goes here, that goes there</description>
      <content:encoded><![CDATA[<ol>
<li>Anything I want folks to see and/or interact with, goes on the public VM</li>
<li>Anything I want to host for myself, goes on the Pi.</li>
</ol>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post?<br>
Mail me at <a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Smol Note to Self, on Deploying Stuff
%22">feedback at this domain</a> <em>or</em> <a href="https://dc.janusworx.com/t/smol-note-to-self-on-deploying-stuff
">continue the discourse here</a>.
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>anki-push-u, Creating a Tiny Pushover Addon for Anki</title>
      <link>https://janusworx.com/anki-push-u/</link>
      <pubDate>Sat, 21 Sep 2024 11:31:39 +0530</pubDate>
      <guid>https://janusworx.com/anki-push-u/</guid>
      <description>Notifications! Notifications! Notifications! Notifications!</description>
      <content:encoded><![CDATA[<br>

<p>I want to slowly increase my French vocabulary, so I got this comprehensive frequency word deck from <a href="https://ankiweb.net/shared/info/893324022">Shared Decks section of the Anki website</a>.</p>
<p>I keep forgetting to look it up during the day, after my morning session and the only way I can get those stubborn words<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> to stick in my mind, is if I keep doing the deck 4–5 times a day.</p>
<p>I know! With all my newfound devops/python skills, could I figure out a way to remind myself to do it? Turns out I can! :)</p>
<p>I already use <a href="https://pushover.net">Pushover</a>, to get notified of darn near anything.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><br>
And I read enough of <a href="https://addon-docs.ankiweb.net/a-basic-addon.html">Anki’s add-on documentation</a> to know I could whip something up.<br>
So a bit of searching on the net, a bit of jiggery pokery with <a href="https://claude.ai/">Claude</a>, and some spelunking through Anki’s source code and <a href="https://forums.ankiweb.net/t/how-to-get-the-number-of-cards-due-to-today/10658">forums</a> later, I present to you … <em><strong><a href="https://github.com/jasonbraganza/anki-push-u">anki-push-u</a>!</strong></em><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<p>As long as your Anki’s running, this little add-on will find cards due, at the interval you tell it to, and then notify you wherever you have Pushover running!<br>
No more forgetting due cards!</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/anki-pushover-notifications.png#center"
         alt="A screenshot of Pushover notifications on two devices"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p><a href="https://github.com/jasonbraganza/anki-push-u">Find the add-on and instructions over at Github.</a></p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: anki-push-u, Creating a Tiny Pushover Addon for Anki
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I’m looking at you, ailleurs&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Hugo updates on three machines, calibre updates on two machines, podcast downloads and quite a bit else&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>It pushes you to do your due cards! Tada!&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Some Site Housekeeping (New Sections and RSS Feeds)</title>
      <link>https://janusworx.com/work/some-site-housekeeping-new-sections-and-rss-feeds/</link>
      <pubDate>Sat, 14 Sep 2024 11:36:16 +0530</pubDate>
      <guid>https://janusworx.com/work/some-site-housekeeping-new-sections-and-rss-feeds/</guid>
      <description>The blog is dead! Love live the new sections!</description>
      <content:encoded><![CDATA[<p><br>

<a href="/images/2024/site-housekeeping-new-sections-feeds-1.jpg"><figure class="align-center ">
    <img loading="lazy" src="/images/2024/site-housekeeping-new-sections-feeds-1-s.jpg#center"
         alt="image of a giant spanner; the size of a tree, lying half embedded in the ground, with the other half in the air"/> 
</figure>
</a></p>
<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>Hard at work, on the site<br>
Click the image, to embiggen</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>If you look at the site today, you’ll see that ye olde blog section has disappeared.<br>
I’ve replaced it with three sections, Work, Personal and Reading.<br>
I’ve done this primarily for me.</p>
<p>While I want all my writing in one place, I want them organised in piles that correspond with the three major modes of my brain.<br>
Work to hold everything I consider work.<br>
Reading for the bookworm in me.<br>
And finally personal for everything else.</p>
<p>The problem (my problem, in my mind) with the old blog was too much mental whiplash when I read the blog. I would go from poetry to docker to antifragility to photos with every turn of the page.<br>
I didn’t like it.<br>
Ergo, the reorganisation.</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p><a href="/images/2024/site-housekeeping-new-sections-feeds-2.jpg"><figure class="align-center ">
    <img loading="lazy" src="/images/2024/site-housekeeping-new-sections-feeds-2-s.jpg#center"
         alt="image of three large anthromorphic cars. left yellow, centre red and right blue. the centre car is raised on a dias ringed by a giant mechanical nut. the cars are all smiling."/> 
</figure>
</a></p>
<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>Every one in their own pretty place now.<br>
Click the image, to embiggen</p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>So now, whenever I am browsing my posts in the work section, I see only tech, and computers and docker and programming and all that good stuff.<br>
Same with the personal stuff and the reading.</p>
<h3 id="how-does-this-affect-you-my-kind-and-gentle-reader">How does this affect you, my kind and gentle reader?</h3>
<ol>
<li>If you are a subscriber to the email list, nothing changes. I know I’ve been lax with updates, but hopefully this reorg should break up the log jam and help me write more.</li>
<li>If you just come here to the site, once in a while to read through, hopefully, you’ll find it easy just like me, to read posts without too much cognitive whipsawing.</li>
<li>And finally, if you subscribe via RSS, you my friend are probably affected.<br>
<a href="https://janusworx.com/index.xml">The main feed</a>, with all articles, still remains the same, so if you drink from the firehose, nothing changes.<br>
If you’re subscribed to a tag specific feed, like Emacs or DGPLUG, nothing changes.<br>
The only change is that the blog feed has disappeared. In its place are three spanking new feeds, representing my new sections.
<ul>
<li><a href="https://janusworx.com/work/index.xml">The Work Feed</a></li>
<li><a href="https://janusworx.com/personal/index.xml">The Personal Feed</a></li>
<li><a href="https://janusworx.com/reading/index.xml">The Reading Feed</a></li>
</ul>
</li>
<li>And that about does it. <strong><em>Happy Reading!</em></strong></li>
</ol>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Some Site Housekeeping (New Sections and RSS Feeds)
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Notes to Self, Compiling Qbittorrent on a Raspberry Pi 5</title>
      <link>https://janusworx.com/work/notes-to-self-on-compiling-qbittorrent-on-a-raspberry-pi-5/</link>
      <pubDate>Mon, 19 Aug 2024 14:13:31 +0530</pubDate>
      <guid>https://janusworx.com/work/notes-to-self-on-compiling-qbittorrent-on-a-raspberry-pi-5/</guid>
      <description>Testing … Mr. Watson, come here, I want you. It works!</description>
      <content:encoded><![CDATA[<div style="font-size: 85%; ">
<p><em>Update, 2024-08-20:<br>
Added a missing step, to install the qBittorrent files to their relevant places<br>
Also, it had to happen. No releases for close to three months and then just as I learn to compile, a new version has to release the very next day 😂<br>
It gave me a chance to test my notes. It hardly took me a few minutes to get the new release in place. So all is good!</em></p>
</div>
<br>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/compilation-of-letters.jpg#center"/> 
</figure>

<figcaption style="font-style: italic; text-align: center;  font-size: 85%; color: var(--secondary)">
<p>A compilation of letters, courtesy <a href="https://www.cosmos.so/e/252611461">Cosmos</a></p>
</figcaption>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I wanted to always have the lastest stable version of <a href="https://www.qbittorrent.org/">qBittorent</a> on my Pi.<br>
So today, I sat down and followed the project’s <a href="https://github.com/qbittorrent/qBittorrent/wiki/Compilation-Debian,-Ubuntu,-and-derivatives">excellent instructions</a> and got it running.<br>
I did however stray off the beaten path a teensy bit<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.<br>
I didn’t want a gui and I wanted to be able to control it with <a href="https://systemd.io/">systemd</a>.</p>
<p>So here’s my checklist for next release. I’m currently running <a href="https://en.wikipedia.org/wiki/Debian_version_history#Debian_12_(Bookworm)">Bookworm</a> on my Pi 5</p>
<ol>
<li>
<p>In case you run into problems, compile instructions are here:
<a href="https://github.com/qbittorrent/qBittorrent/wiki/Compilation-Debian,-Ubuntu,-and-derivatives">https://github.com/qbittorrent/qBittorrent/wiki/Compilation-Debian,-Ubuntu,-and-derivatives</a></p>
</li>
<li>
<p>Do all off this after switching to root. (or <code>sudo</code>)</p>
</li>
<li>
<p>Install build tools<br>
<code>sudo apt install build-essential cmake git ninja-build pkg-config libboost-dev libssl-dev zlib1g-dev libgl1-mesa-dev</code></p>
</li>
<li>
<p>Install Qt dependencies (<code>qtbase5-private-dev</code> is not part of the instructions,
but compile will fail if you don&rsquo;t include it)<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><br>
<code>sudo apt install --no-install-recommends qtbase5-dev qtbase5-private-dev qttools5-dev libqt5svg5-dev</code></p>
</li>
<li>
<p>Qt requires Python at runtime, so: <code>sudo apt install python3</code></p>
</li>
<li>
<p>Install the libtorrent library. I compiled from source. Check <a href="https://github.com/qbittorrent/qBittorrent/wiki/Compilation-Debian,-Ubuntu,-and-derivatives">page</a> for fresh instructions, if stuff here doesn’t work</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone --recurse-submodules https://github.com/arvidn/libtorrent.git
</span></span><span style="display:flex;"><span>cd libtorrent
</span></span><span style="display:flex;"><span>git checkout RC_2_0 <span style="color:#75715e"># or a 2.0.x tag</span>
</span></span><span style="display:flex;"><span>cmake -B build -DCMAKE_BUILD_TYPE<span style="color:#f92672">=</span>RelWithDebInfo -DCMAKE_INSTALL_PREFIX<span style="color:#f92672">=</span>/usr/local
</span></span><span style="display:flex;"><span>cmake --build build -j4 <span style="color:#75715e"># the -j4 is to do on four cores at once. my addition.</span>
</span></span><span style="display:flex;"><span>sudo cmake --install build
</span></span></code></pre></div><p>If you ever want to uninstall libtorrent, then don’t delete this
main folder. The build process would have created a
<code>install_manifest.txt</code> in the build folder. So you can then
uninstall with: <code>sudo xargs rm &lt; install_manifest.txt</code></p>
</li>
<li>
<p>Get qb source: <a href="https://www.qbittorrent.org/download">https://www.qbittorrent.org/download</a>.</p>
</li>
<li>
<p>Unzip: <code>tar xzvf qbittorrent-4.6.5.tar.gz</code> and then
<code>cd qbittorrent-4.6.5/</code></p>
</li>
<li>
<p>Create Build configuration (disabled GUI and enabled systemd. Those aren’t part of the defaults)<br>
<code>cmake -G &quot;Ninja&quot; -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr/local -DGUI=OFF -DSYSTEMD=ON</code></p>
</li>
<li>
<p>Build <code>cmake --build build</code></p>
</li>
<li>
<p>Install all the files to their relevant locations <code>cmake --install build</code></p>
</li>
<li>
<p>Install service to run for a specific user.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>systemctl daemon-reload
</span></span><span style="display:flex;"><span>systemctl enable qbittorrent-nox@&lt;some-user&gt;.service
</span></span><span style="display:flex;"><span>systemctl start qbittorrent-nox@&lt;some-user&gt;.service
</span></span></code></pre></div></li>
<li>
<p>We’re done.</p>
</li>
</ol>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Notes to Self, Compiling Qbittorrent on a Raspberry Pi 5
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>which the project does make provisions for.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><code>Target &quot;qbt_base&quot; links to: Qt::CorePrivate but the target was not found.</code> or words to that effect&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Doing Devops, Dropping Rust</title>
      <link>https://janusworx.com/work/doing-devops-dropping-rust/</link>
      <pubDate>Fri, 07 Jun 2024 16:37:50 +0530</pubDate>
      <guid>https://janusworx.com/work/doing-devops-dropping-rust/</guid>
      <description>too many things, too little life</description>
      <content:encoded><![CDATA[<p>Been struggling to do it all over the past few months.<br>
But no! Life says no :)</p>
<p>So I’m building some margin into my life.<br>
And the only thing I can talk about work wise, is the familiarity I am trying to gain as part of the career pivot.<br>
The Devops Stuff.<br>
The only thing that is career adjacent to all the stuff I did as a sysadmin and then consultant. So hopefully lots of boring stuff about exciting tech as I try to build new mental models, to fit over old ones.</p>
<p>Problem though, is what do I write?<br>
I don’t have a good spin on most computer devops stuff. I don’t know what to say.<br>
So for now, they probably will be, just like I point above, boring progress logs.<br>
Mostly consistent, to give me accountability.<br>
And hopefully, I’ll find a voice.</p>
<p>On the personal front, books, reading, art, language, poetry, photography and other posts will continue. Those are what make my soul sing :)</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Doing Devops, Dropping Rust
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Note to Self, Linking to a Headline in an Org File</title>
      <link>https://janusworx.com/work/note-to-self-linking-to-a-headline-in-an-org-file/</link>
      <pubDate>Thu, 06 Jun 2024 17:31:37 +0530</pubDate>
      <guid>https://janusworx.com/work/note-to-self-linking-to-a-headline-in-an-org-file/</guid>
      <description>It ain’t that hard.</description>
      <content:encoded><![CDATA[<p>I did one of those periodic, empty your mind sessions today.<br>
Everything is now in a brain dump org file.<br>
And now, like a every good productivity system preaches, I want to review the dump periodically.<br>
There is a task for my miscellenea for e.g. Could I convert it to a link and have it open the file at that precise location?<br>
Turns out Org Mode links let me do just that.<br>
All I need to do, is first <em>“<a href="https://orgmode.org/manual/Handling-Links.html#Handling-Links-1">store a link</a>”</em> in Org parlance. I do that by going to my target file that has the dump (the bottom file in the screenshot), go to the section that I need linking to (in my case, Misc Brain Dump), and hit <code>C-c l</code></p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/org-links-1.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>After which I go to the file which needs to contain my link, and select my text that I’ll want converted into a link (<em>“<a href="https://orgmode.org/manual/Handling-Links.html#index-C_002dc-C_002dl">inserting a link</a>”</em> in org speak. In my case, the top file in the screenshot below).<br>
I select the Misc Brain Dump part of the “Look at the Misc Brain Dump” task and hit<br>
<code>C-c C-l</code><br>
It then switches me to a buffer that shows the links that Org currently has stored, with the minibuffer prompting me to choose one</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/org-links-2.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>I use the arrow keys to choose the one I want, hit return and it creates the link for me.</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/org-links-3.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>Here, I’ve switched away from my brain dump. (I’ve closed the file in fact)</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/org-links-4.png#center"/> 
</figure>

<p>I click the link in my tasks file and …</p>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>It opens right up, at the exact location I want. Woohoo!</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/org-links-5.png#center"/> 
</figure>

<p>And just like everything else with Org, it’s plain, simple, elegant, text functionality.<br>
I examined the link and it was a borg standard Org link, with the link having the header tacked on the end, like so …<br>
<code>file:brain-dump.org::*Misc Brain Dump</code><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Note to Self, Linking to a Headline in an Org File
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>which should have been evident when I chose the link to insert, but I only saw it and went Aha! much later 😂&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Moved My Music Library From Jellyfin to Emby Today</title>
      <link>https://janusworx.com/work/moved-my-music-library-from-jellyfin-to-emby-today/</link>
      <pubDate>Tue, 04 Jun 2024 10:47:23 +0530</pubDate>
      <guid>https://janusworx.com/work/moved-my-music-library-from-jellyfin-to-emby-today/</guid>
      <description>It went swimmingly well</description>
      <content:encoded><![CDATA[<p>I had moved off Plex, close to two years ago, because … reasons.<br>
Unable to decide between Emby and Jellyfin and having just learned containers at the time, I deployed both on my Pi.<br>
Emby handled video duties while Jellyfin did music.</p>
<p>And now after close to two years, I’m moving off Jellyfin to Emby.<br>
The only reason being its iOS client.<br>
It still has a lot of growing up to do, and I’ve reached the end of my tether trying to adjust to its foibles.<br>
I cannot turn the phone off, else the music goes off.<br>
I cannot switch away from the Jellyfin app, else the music goes off.<br>
If I get a call, then the app sorta-kinda loses its mind and I have to kill it and relaunch it.</p>
<p><em><strong>All</strong></em> I want from my music player is to be a good audio citizen on iOS. Connect to the server, read my songs, play my music. And do it in the background.</p>
<p>While I am sympathetic to the priorities of the open source Jellyfin team, I am not getting any younger and my hour long walks are the only time I get to enjoy my music.</p>
<p>So … I moved.</p>
<h3 id="setting-the-stage">Setting the stage</h3>
<ul>
<li>There had to be <em>two</em> instances of Emby running. I don’t want my video online and so I don’t want it exposed</li>
<li>Video is secondary anyway. So that had to be the second container. The main one is Music.</li>
<li>Music needs to be accessible from anywhere on the web.</li>
</ul>
<h3 id="doing-it">Doing it</h3>
<ul>
<li>I already had docker running and installed, along with Nginx</li>
<li>Jellyfin has better documentation. So I used <a href="https://jellyfin.org/docs/general/networking/nginx/">their guide</a> to reverse proxy Nginx to the Emby service that would come up. All I had to do, was put in my SSL cert paths correctly and change the variable <code>jellyfin</code> to <code>embymusicserver</code> (along with the rest of the require settings.)</li>
<li>I created a folder to hold Emby’s <a href="https://hub.docker.com/r/emby/embyserver/"><code>docker compose</code></a> file. I modified the container name to <code>embymusicserver</code> and gave the path to mount for its config and another one that pointed to my music folder. Pretty straightforward. (I had already changed the ports earlier on the video emby instance to 8097 &amp; 8921 to avoid conflicts with Jellyfin, so I did not have to touch that.)</li>
<li>Assigned ownership recursively to the user that would run the container.</li>
<li>Did a <code>docker compose up</code> to see if everything came up ok. And then tore it down</li>
<li>And finally, once again, adapted my <a href="https://jellyfin.org/docs/general/installation/container#using-docker-compose">old Jellyfin systemd script</a> to ensure I could have it start and stop with the system</li>
</ul>
<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/emby-1.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<figure class="align-center ">
    <img loading="lazy" src="/images/2024/emby-2.png#center"/> 
</figure>

<hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

<p>In hindsight, there was no way to pull all of this off in an hour, if it wasn’t for Docker and Emby’s image. Now I realise why containers are taking over the world.</p>
<p>And thank you for all you do, Jellyfin. I shall return as soon as the app gets more useful.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Moved My Music Library From Jellyfin to Emby Today
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
]]></content:encoded>
    </item>
    <item>
      <title>Assigning Keyboard Shortcuts to Nemo Actions</title>
      <link>https://janusworx.com/work/assigning-keyboard-shortcuts-to-nemo-actions/</link>
      <pubDate>Mon, 03 Jun 2024 17:08:35 +0530</pubDate>
      <guid>https://janusworx.com/work/assigning-keyboard-shortcuts-to-nemo-actions/</guid>
      <description>Shortcuts! Shortcuts, everywhere!</description>
      <content:encoded><![CDATA[<p>Everytime I download a <a href="https://www.humblebundle.com/books/dynamite-20th-anniversary-20000page-mega-bundle-books">Humble Bundle</a>, I’m left with a ton of books, in various formats on my desktop.<br>
I normally like all the formats for a single title to be in a single folder, so that Calibre can then treat them as a single book<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, when adding them.</p>
<p>I’ve been using Pedro Santana’s, <a href="https://github.com/pedro-augusto-santana/nemo_create_new_folder_with_selection">nifty little Nemo action</a> to help me do just this.<br>
Once installed, all I need to do is select my files, right click on them and then create a new folder, like so …
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/nemo-action-1.png#center"
         alt="nemo cinnamon screenshot with no pointer in the context command"/> 
</figure>
</p>
<p>The one remaining wrinkle, being that when you’re completely keyboard driven, you still need to come down a couple of steps with the arrow keys or switch to the mouse.<br>
When doing this with close to 250+ files, this quickly gets tedious.<br>
<a href="https://stackoverflow.com/a/42786928">Stack Overflow to the rescue</a>.</p>
<p>Turns out that all I needed to do was add an <code>_</code> in front of the letter, I wanted to use to activate my little action from the context menu.<br>
My original action went …</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">Nemo</span> <span style="color:#a6e22e">Action</span>]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Active</span>=<span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Name</span>=<span style="color:#a6e22e">Create</span> <span style="color:#a6e22e">new</span> <span style="color:#a6e22e">folder</span> <span style="color:#a6e22e">with</span> <span style="color:#a6e22e">selection</span> 
</span></span><span style="display:flex;"><span>...
</span></span></code></pre></div><p>I decided to use the <em>n</em> in <em>selection</em>. <em><strong>N</strong></em> for <em>new folder</em>. Easy to remember! So with this tiny change …</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-TOML" data-lang="TOML"><span style="display:flex;"><span><span style="color:#a6e22e">Name</span>=<span style="color:#a6e22e">Create</span> <span style="color:#a6e22e">new</span> <span style="color:#a6e22e">folder</span> <span style="color:#a6e22e">with</span> <span style="color:#a6e22e">selectio_n</span> 
</span></span></code></pre></div><p>I get to do this!</p>
<figure class="align-center ">
    <img loading="lazy" src="/images/2024/nemo-action-2.png#center"
         alt="nemo cinnamon screenshot that lets me use a custom key in the context command"/> 
</figure>

<p>I can select, get the context menu, hit n, type in the folder name and done!<br>
It’s still a lot of work when there’s lots of files, but there’s a seamless flow to the entire process.</p>
<p><hr style='margin-left: auto; margin-right: auto; margin-bottom: 40px; margin-top: 50px; width:100px; border: none; background-color:rgb(238, 238, 238); color: rgb(238, 238, 238);  height: 1px;'/>

Feedback on this post? Mail me at <a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Assigning Keyboard Shortcuts to Nemo Actions
%22">feedback at this domain</a>
<br>

<br>

P.S. Subscribe to my <a href="https://janusworx.com/subscribe/">mailing list!</a><br>
Forward these posts and letters to your friends and get them to subscribe!<br>
P.P.S. Feed my <a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share">insatiable reading habit.</a></p>
<hr>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://manual.calibre-ebook.com/gui.html#add-books">point two, in this section of the documentation</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
