<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Work on Janusworx</title><link>https://janusworx.com/work/</link><description>Recent content in Work on Janusworx</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>feedback@janusworx.com (Mario Jason Braganza)</managingEditor><webMaster>feedback@janusworx.com (Mario Jason Braganza)</webMaster><copyright>© 2026, Mario Jason Braganza</copyright><lastBuildDate>Fri, 24 Jul 2026 08:30:00 +0530</lastBuildDate><atom:link href="https://janusworx.com/work/index.xml" rel="self" type="application/rss+xml"/><item><title>Moved From Papermod to Blowfish</title><link>https://janusworx.com/work/moved-from-papermod-to-blowfish/</link><pubDate>Fri, 24 Jul 2026 08:30:00 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/moved-from-papermod-to-blowfish/</guid><description>&lt;br&gt;

&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Me.&lt;br&gt;
This is a sorta-kinda living document, a record of my idiosyncratic decisions to first move to, and then bend the Blowfish theme to my needs.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update (2026-07-24) :&lt;/strong&gt;&lt;/em&gt; &lt;a href="https://janusworx.com/work/moved-from-papermod-to-blowfish/#rss" &gt;RSS updates&lt;/a&gt;, &lt;a href="https://janusworx.com/work/moved-from-papermod-to-blowfish/#miscellanea" &gt;Miscellanea&lt;/a&gt;, some editing.&lt;/p&gt;

&lt;figure class="mjb-img-center"&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2026/moved-from-papermod-to-blowfish_logo.png" alt="Blowfish Hugo theme logo, a pufferfish in blue and white" /&gt;
 
 &lt;figcaption&gt;Blowfish theme logo&lt;/figcaption&gt;
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I changed my blog theme from &lt;a href="https://adityatelange.github.io/hugo-PaperMod/" target="_blank" rel="noreferrer"&gt;Papermod&lt;/a&gt; to &lt;a href="https://blowfish.page" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Why move to &lt;a href="https://blowfish.page" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;?
 &lt;div id="why-move-to-blowfish" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-move-to-blowfish" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://adityatelange.github.io/hugo-PaperMod/" target="_blank" rel="noreferrer"&gt;Papermod&lt;/a&gt;, to my mind, is perfection. And I outgrew it. That’s all there is to the why.&lt;br&gt;
Papermod caters to the needs of a blog, and I think my blog is slowly turning into a multi section website.&lt;br&gt;
I want menus, and possibly submenus and Papermod does not do them.&lt;br&gt;
The finished outcome, while not as pretty and uniform as the old Papermod site, makes writing and managing it all, much simpler.&lt;/p&gt;
&lt;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;'/&gt;


&lt;h2 class="relative group"&gt;Blowfish specific things for future Jason to note.
 &lt;div id="blowfish-specific-things-for-future-jason-to-note" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#blowfish-specific-things-for-future-jason-to-note" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Big Picture things
 &lt;div id="big-picture-things" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#big-picture-things" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The theme does a lot. Most of which I don’t think I need.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;The aim is to match what my site looked with Papermod, as closely as possible.&lt;/li&gt;
&lt;li&gt;Everything CSS is in &lt;code&gt;assets/css/custom.css&lt;/code&gt;, rather than multiple CSS files as it was with Papermod.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://janusworx.com/work/you-can-now-search-this-blog/" &gt;Pagefind&lt;/a&gt; powers search on the site. The inbuilt search is disabled in &lt;code&gt;main.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Footnotes use &lt;a href="https://janusworx.com/work/note-to-self-footnotes-using-littlefoot.js/" &gt;Littlefoot&lt;/a&gt;; so they appear as popups, and the need to scroll up and down the page is reduced.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Configuration
 &lt;div id="configuration" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#configuration" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Blowfish separates everything out in its config. Lots of &lt;code&gt;toml&lt;/code&gt; files in there.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Base config is in &lt;code&gt;hugo.toml&lt;/code&gt;, theme parameters are in &lt;code&gt;params.toml&lt;/code&gt;, menus in &lt;code&gt;menus.XX.toml&lt;/code&gt; and language + translation related stuff is in &lt;code&gt;languages.XX.toml&lt;/code&gt; &lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.toml&lt;/code&gt; sets the theme, the &lt;code&gt;baseURL&lt;/code&gt; and I’ve added a section to limit RSS entries to only the last 50 items.&lt;/li&gt;
&lt;li&gt;The author parameters along with the social link set, as well as the logo, are in &lt;code&gt;languages.XX.toml&lt;/code&gt;. I have duplicated them. One for &lt;code&gt;EN&lt;/code&gt; and one for &lt;code&gt;FR&lt;/code&gt;. The logo that it requires, is in the &lt;code&gt;assets/logo&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Menus and submenus in &lt;code&gt;menus.XX.toml&lt;/code&gt;. Duplicated. The English menus have English names and the French, French ones.&lt;/li&gt;
&lt;li&gt;Parameters; the header is set to basic. Every other option creates a sticky header of some sort. Lots of other changes. Most are self explanatory. Turned off “Hero” options everywhere, to stick to a plain, basic layout as much as possible.&lt;/li&gt;
&lt;li&gt;My split of the various configuration files for environments (base, development &amp;amp; production) have stayed the same with no changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Content Structure
 &lt;div id="content-structure" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#content-structure" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Directories and subdirectories for each section.&lt;/li&gt;
&lt;li&gt;Make sure each section has a corresponding &lt;code&gt;index.XX.md&lt;/code&gt; for static pages or &lt;code&gt;_index.XX.md&lt;/code&gt; for list pages. This, I think (but am not sure) has fixed my old, nagging issue of page navigation overflowing. I would keep going next, in the Talks section for example, and when I reached the end, it would show me another entry from some other section. Now the front/back buttons stay restricted to the section they are in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Archetypes
 &lt;div id="archetypes" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#archetypes" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;All the archetypes have been slightly tweaked. They now also include a template line for an image. It uses the theme’s &lt;code&gt;figure&lt;/code&gt; shortcode for images.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;i18n (Internationalisation)
 &lt;div id="i18n-internationalisation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#i18n-internationalisation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The internationalisation options are easier here. Just defining a term somewhere and then referring to it here just works.&lt;br&gt;
For e.g., I use &lt;code&gt;search_placeholder&lt;/code&gt; as a term in the &lt;code&gt;search&lt;/code&gt; layout and then in &lt;code&gt;i18n/en.yaml&lt;/code&gt; I have, &lt;code&gt;search_placeholder: &amp;quot;Search for something …&amp;quot;&lt;/code&gt; while &lt;code&gt;i18n/fr.yaml&lt;/code&gt; gives the same term a different spin, &lt;code&gt;search_placeholder: &amp;quot;Rechercher des articles …&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Layout Overrides
 &lt;div id="layout-overrides" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#layout-overrides" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;RSS
 &lt;div id="rss" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rss" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Have tweaked the RSS layout a teensy bit. My version is in &lt;code&gt;layouts/_default/rss.xml&lt;/code&gt;, which includes the full text of the post, instead of just a summary.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- &amp;lt;description&amp;gt;&lt;/span&gt;&lt;span class="cm"&gt;{{/* .Summary | transform.XMLEscape | safeHTML */}}&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;/description&amp;gt; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;transform&lt;/span&gt;&lt;span class="na"&gt;.XMLEscape&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;safeHTML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Have restricted RSS feed generation for posts in the &lt;a href="https://janusworx.com/nm/" &gt;Notes and Miscellanea&lt;/a&gt; section. They won’t appear in the RSS feed unless I want them to. Most of them are just streams of consciousness, to help me get on with my day. Only a few are exceptions, that I want published.&lt;br&gt;
I even disable sitemap generation for those “important to me, but useless for thee” posts with this bit of metadata in each post&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;So I have then taken advantage of this fact, to exclude these posts from having entries in the RSS feed, by telling Hugo to only look at posts where such a key does not exist; which basically, is everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- &lt;/span&gt;&lt;span class="cm"&gt;{{/* range $pages */}}&lt;/span&gt;&lt;span class="c"&gt; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Sitemap.Disable&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ne&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;Search
 &lt;div id="search" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#search" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;This pulls in the script and the styles for &lt;a href="https://janusworx.com/work/you-can-now-search-this-blog/" &gt;Pagefind&lt;/a&gt;, which I use for searching the blog. Layout is in &lt;code&gt;layouts/_default/search.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Also note, then when working on search locally, first create an index with pagefind and move it to the static folder because our normal way of working is to render it all in memory.
&lt;ul&gt;
&lt;li&gt;do a &lt;code&gt;hugo build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;then do &lt;code&gt;pagefind_extended --site public&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;then &lt;code&gt;mv public/pagefind static/pagefind&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;then &lt;code&gt;rm -rf public&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;and then start the hugo server like we normally do&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;Littlefoot
 &lt;div id="littlefoot" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#littlefoot" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Footnotes are powered by &lt;a href="https://janusworx.com/work/note-to-self-footnotes-using-littlefoot.js/" &gt;Littlefoot&lt;/a&gt;. Have used &lt;code&gt;layouts/partials/extend-footer.html&lt;/code&gt; to pull in the Littlefoot script and &lt;code&gt;layouts/partials/extend-footer.html&lt;/code&gt; to grab the CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;Redirect
 &lt;div id="redirect" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#redirect" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;An old redirect template to redirect from one section to the other is still in place in the &lt;code&gt;layouts/redirect&lt;/code&gt; directory&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="relative group"&gt;Shortcodes
 &lt;div id="shortcodes" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#shortcodes" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Most of the old shortcodes made it over. Retired my image and caption shortcodes in favour of using Blowfish’s version. Also created an &lt;code&gt;hsgallery&lt;/code&gt; shortcode, so that I could continue using my old &lt;a href="https://github.com/mfg92/hugo-shortcode-gallery" target="_blank" rel="noreferrer"&gt;Hugo Shortcode Gallery&lt;/a&gt; to create image galleries. The &lt;code&gt;gallery&lt;/code&gt; shortcode conflicts with Blowfish’s own, which I don’t like and so won’t use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Static + Tools
 &lt;div id="static--tools" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#static--tools" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fonts and Littlefoot reside in the &lt;code&gt;static&lt;/code&gt; directory, along with all my images.&lt;/li&gt;
&lt;li&gt;There’s also a &lt;code&gt;tools&lt;/code&gt; directory which contains the Pagefind binary. This does not get published obviously. But the Forgejo action uses this to generate an index for the site and then sends the whole thing off to the VM.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Themes
 &lt;div id="themes" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#themes" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Contains &lt;a href="https://blowfish.page" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt; and &lt;a href="https://github.com/mfg92/hugo-shortcode-gallery" target="_blank" rel="noreferrer"&gt;Hugo Shortcode Gallery&lt;/a&gt;, added as &lt;code&gt;git&lt;/code&gt; submodules. I dropped Hugo Admonitions, because Blowfish has them already.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;CSS
 &lt;div id="css" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#css" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;All in &lt;code&gt;assets/css/custom.css&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Import fonts: Valkyrie for the site and Source Code Pro for code.&lt;/li&gt;
&lt;li&gt;Tweaked the Janusworx up left on my site, and changed all the nav bar items to use Valkyrie Caps.&lt;/li&gt;
&lt;li&gt;Dark mode links were not contrasty enough. So changed the colour and added an underline on hover.&lt;/li&gt;
&lt;li&gt;Added a class to the figure tag, so I could center the pics I use.&lt;/li&gt;
&lt;li&gt;Added an indent to the numbered list items on the Annual Book List pages, so that the numbers stay &lt;em&gt;under&lt;/em&gt; each month.&lt;/li&gt;
&lt;li&gt;Style littlefoot footnotes, so that the button is slightly smaller and higher, and the notes use Valkyrie, along with a couple of other tiny tweaks.&lt;/li&gt;
&lt;li&gt;Style the Blowfish box, and the results, on the search page&lt;/li&gt;
&lt;li&gt;Main thing to note. Use &lt;code&gt;!important;&lt;/code&gt; liberally. Changes don’t always cascade down correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class="relative group"&gt;Miscellanea
 &lt;div id="miscellanea" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#miscellanea" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;Go Templates:
 &lt;div id="go-templates" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#go-templates" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;```go-html-template&lt;/code&gt; as the language hint to the code fence to display Go template code correctly. (like I needed to in this post for e.g.)&lt;/li&gt;
&lt;li&gt;If it is pure Go Template stuff with little to no html, another alternative is &lt;code&gt;```go-text-template &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I could not just comment out Go template code with HTML comment markers &lt;code&gt;&amp;lt;!-- --&amp;gt;&lt;/code&gt;. The Hugo live server kept crashing on me with weird EOF errors, until I figured this out. The Go template block needs a comment marker &lt;em&gt;inside&lt;/em&gt; the the &lt;code&gt;{{ … }}&lt;/code&gt; section like so, &lt;code&gt;{{/* … */}}&lt;/code&gt;.&lt;br&gt;
E.g. &lt;code&gt;{{/* range $pages */}}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Moved From Papermod to Blowfish
%22" &gt;feedback at this domain&lt;/a&gt;.&lt;br&gt;
P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;famous last words!&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;XX is the language code. I have EN for English and FR for French. So &lt;code&gt;menus.fr.toml&lt;/code&gt; for e.g.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;I have modified the notes archetype, so this is always pre filled and set.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>You Can Now Search this Blog</title><link>https://janusworx.com/work/you-can-now-search-this-blog/</link><pubDate>Tue, 23 Jun 2026 14:24:24 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/you-can-now-search-this-blog/</guid><description>&lt;br&gt;

&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Me. In case I want to retrace the big idea tomorrow&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2026/you-can-now-search-this-blog-pagefind.png" alt="Pagefind PNG logo" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;


&lt;h3 class="relative group"&gt;tldr: &lt;a href="https://janusworx.com/search" target="_blank" rel="noreferrer"&gt;https://janusworx.com/search&lt;/a&gt;
 &lt;div id="tldr" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tldr" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Being the lazyass that I am, I used to depend on search engine indexes to find something on my own blog. (First google, then DuckDuckGo.)&lt;br&gt;
Kushal, having &lt;a href="https://search.kushaldas.in/" target="_blank" rel="noreferrer"&gt;https://search.kushaldas.in/&lt;/a&gt; has always made me jealous though.&lt;br&gt;
And now, the days of finding something relevant on my blog, on the first search are long gone. Search engines today are a pale shadow of what they used to be. The current load of crap actually makes me long for the days of &lt;a href="https://en.wikipedia.org/wiki/AltaVista" target="_blank" rel="noreferrer"&gt;Altavista&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;So, I decided to get off my butt, and go do something about it, because everytime I want something, my blog is one of the first places I search.&lt;br&gt;
For e.g. when writing this post, I needed to look up how to add line numbers to my code blocks. &lt;a href="https://janusworx.com/work/line-numbers-in-hugo-codeblocks/" &gt;Search helped me find it&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;I went to the &lt;a href="https://gohugo.io/tools/search/" target="_blank" rel="noreferrer"&gt;Hugo website&lt;/a&gt; and decided to implement the first search tool&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; they suggested: &lt;em&gt;&lt;strong&gt;&lt;a href="https://pagefind.app" target="_blank" rel="noreferrer"&gt;Pagefind&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;.&lt;br&gt;
Well, I did that since Pagefind took care of the only thing I’m anal about. It keeps everything local and under my control. If not, I’d have kept looking for something else.&lt;br&gt;
What it (Pagefind) does, is parse the site, Hugo builds for me, and create a search index along with some more goodies (an api for search as well as UI components) in a bundle. The rendered html and the bundle together are now the artifact that my site is made up of.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The Plan
 &lt;div id="the-plan" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-plan" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Get Pagefind and install it into a tools subdirectory in my blog’s directory, so I always have it handy (and the Forgejo action can get its grubby paws on it when it wants to run the publishing workflow)&lt;/li&gt;
&lt;li&gt;Create an entry in my menu, so I can go clicky to a search page.&lt;/li&gt;
&lt;li&gt;Create said search page.&lt;/li&gt;
&lt;li&gt;Make search work.&lt;/li&gt;
&lt;li&gt;Make the page resemble the rest of the blog as much as possible.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;Installing it and wiring it all up
 &lt;div id="installing-it-and-wiring-it-all-up" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installing-it-and-wiring-it-all-up" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;1. Installation
 &lt;div id="1-installation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-installation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;This is the easy part. Pagefind is a single binary, which I shoved into the &lt;code&gt;tools&lt;/code&gt; subdirectory.&lt;/p&gt;

&lt;h3 class="relative group"&gt;2. Creating an entry for search in the navigation menu
 &lt;div id="2-creating-an-entry-for-search-in-the-navigation-menu" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-creating-an-entry-for-search-in-the-navigation-menu" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I edited my Hugo config (mine is called &lt;code&gt;hugo.yaml&lt;/code&gt;), and added &lt;code&gt;search&lt;/code&gt; as a menu item.&lt;br&gt;
More shifted downwards, as did its weight.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;menus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# elided config&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;identifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;search&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;search&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/search&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;identifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;more&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;more …&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/more/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;70&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;3. Creating the search page.
 &lt;div id="3-creating-the-search-page" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-creating-the-search-page" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;This was a two step process.&lt;/p&gt;

&lt;h4 class="relative group"&gt;a. I needed a placeholder page that I could render some layout (a template) into.
 &lt;div id="a-i-needed-a-placeholder-page-that-i-could-render-some-layout-a-template-into" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-i-needed-a-placeholder-page-that-i-could-render-some-layout-a-template-into" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;This was &lt;code&gt;search.md&lt;/code&gt; which lives in my &lt;code&gt;content&lt;/code&gt; directory.
This is all it contains …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Search&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;search&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/search/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;See the key that says &lt;code&gt;layout&lt;/code&gt; on line 3? This is looking for a layout called &lt;code&gt;search&lt;/code&gt; which is what we now create …&lt;/p&gt;

&lt;h4 class="relative group"&gt;b. Creating the search layout.
 &lt;div id="b-creating-the-search-layout" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#b-creating-the-search-layout" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;Papermod already ships with a layout called &lt;code&gt;search&lt;/code&gt;. Which I did not want, because it is meant for use with another local search engine called &lt;a href="https://lunrjs.com/" target="_blank" rel="noreferrer"&gt;lunr.js&lt;/a&gt;.&lt;br&gt;
Hugo can override whatever file your theme provides, by letting you create your own versions of said file in the &lt;code&gt;layouts&lt;/code&gt; directory. Hugo will then look at &lt;em&gt;that&lt;/em&gt; instead of the theme’s file.&lt;br&gt;
Over the years I’ve gotten dangerous enough by using &lt;a href="https://discourse.gohugo.io/t/how-to-override-a-themes-partials/47227" target="_blank" rel="noreferrer"&gt;Hugo’s lovely channel for discourse&lt;/a&gt;. Between that, and &lt;a href="https://gohugo.io/documentation/" target="_blank" rel="noreferrer"&gt;Hugo’s documentation&lt;/a&gt; as well as &lt;a href="https://pagefind.app/" target="_blank" rel="noreferrer"&gt;Pagefind’s own help page&lt;/a&gt;, I rustled up a layout file called &lt;code&gt;search.html&lt;/code&gt; which lives in my &lt;code&gt;layouts/_default&lt;/code&gt; directory. This is what it contains …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/pagefind/pagefind-component-ui.css&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;module&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/pagefind/pagefind-component-ui.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;post-single&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;post-header&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;post-title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.Title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;post-content search-content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pagefind-searchbox&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;searchbox&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			 &lt;span class="na"&gt;autofocus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			 &lt;span class="na"&gt;shortcut&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			 &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;i18n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;search_placeholder&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;pagefind-searchbox&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// we’re waiting for the pagefind-searchbox component to be registered 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;customElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;whenDefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pagefind-searchbox&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pagefind-searchbox&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// shadowRoot input, or a delegatesFocus component may expose it differently
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tryFocus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowRoot&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;input&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;input&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// search for input boxes in two different ways above
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// and if it finds one focus it below
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// component rendered but input not yet in DOM — wait one more frame
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	 &lt;span class="c1"&gt;// wait for the shado
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tryFocus&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// try one more time
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tryFocus&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This creates the box on the search page, ready to take input and show results.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update (2026-06-24):&lt;/strong&gt;&lt;/em&gt; The eagle eyed amongst you, have figured out this code has changed between yesterday and today. I used Pagefind’s documentation to simplify what I had yesterday even more and then got one of the llms to write a script that focuses the input box when the page loads, so that we can just start typing in whatever we need to search.&lt;/p&gt;

&lt;h3 class="relative group"&gt;4. Make the page resemble the rest of the blog as much as possible.
 &lt;div id="4-make-the-page-resemble-the-rest-of-the-blog-as-much-as-possible" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-make-the-page-resemble-the-rest-of-the-blog-as-much-as-possible" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Doing things a bit out of order and finishing up with the page first.&lt;br&gt;
Leaned on Pagefind’s docs as well as Chatgpt, Claude and Gemini for this part to create a CSS file, that looks pretty native to my blog. I’ve called it &lt;code&gt;include-pagefind.css&lt;/code&gt; and it lives in the &lt;code&gt;assets/css/extended&lt;/code&gt; subdirectory.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;span class="lnt"&gt;65
&lt;/span&gt;&lt;span class="lnt"&gt;66
&lt;/span&gt;&lt;span class="lnt"&gt;67
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c"&gt;/* you don’t really need to use `pf-font`, 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;	if you don’t have a custom font.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;	for some reason, it wouldn’t render the font I specified here, 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;	so I forced it with `!important` */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;your-font-name-here&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-text-secondary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-text-muted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-border-focus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;tertiary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-mark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-input-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-input-font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-result-title-font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-result-excerpt-font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.90&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-shadow-sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-shadow-md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--pf-shadow-lg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;search-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-input&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-summary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-results&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-results&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-results&lt;/span&gt; &lt;span class="nt"&gt;article&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="kc"&gt;solid&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pagefind-results&lt;/span&gt; &lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;tertiary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;5. Make Search Work.
 &lt;div id="5-make-search-work" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#5-make-search-work" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;This is a 3 step process&lt;/p&gt;

&lt;h4 class="relative group"&gt;a. Build the blog.
 &lt;div id="a-build-the-blog" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-build-the-blog" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;Easy peasy. &lt;code&gt;hugo build&lt;/code&gt; and we have our blog rendered in the &lt;code&gt;public&lt;/code&gt; subdirectory.&lt;/p&gt;

&lt;h4 class="relative group"&gt;b. Get Pagefind to create its index in the build directory.
 &lt;div id="b-get-pagefind-to-create-its-index-in-the-build-directory" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#b-get-pagefind-to-create-its-index-in-the-build-directory" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;This is easy as well.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./tools/pagefind --site public&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and Pagefind creates a &lt;code&gt;pagefind&lt;/code&gt; subdirectory in our &lt;code&gt;public&lt;/code&gt; directory where it creates its search index after reading all the html.&lt;br&gt;
All I need to do now, is just …&lt;/p&gt;

&lt;h4 class="relative group"&gt;c. Publish!
 &lt;div id="c-publish" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#c-publish" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;Ok, I lied a teensy bit. I don’t have to do &lt;em&gt;steps a.&lt;/em&gt; and &lt;em&gt;b.&lt;/em&gt; because they are part of &lt;em&gt;step c.&lt;/em&gt;&lt;br&gt;
The Forgejo action checks out my committed files, pulls in Hugo from a private package repo, builds the site, then runs Pagefind to generate the index&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; and finally uses rysnc to sync it with the VM. Here’s the relevant section of the action.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# lots of stuff elided …&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build-and-deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-big-box&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;HUGO_VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ vars.HUGO_VERSION }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# lots of snipped stuff …&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Checkout the website repo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;submodules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build website with Hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;HUGO_ENVIRONMENT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; hugo \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; --gc \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; --minify&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build the Pagefind search index&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; tools/pagefind \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; --site public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;I thought the indexing would take a lot of time and was hesitant to use it as part of a regularly run Forgejo action workflow, but several runs show that the index generation only increases the time by at a couple of seconds at most. This is amazing!&lt;/p&gt;
&lt;p&gt;Now I can search my own words, on my own blog, to my hearts content!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: You Can Now Search this Blog
%22" &gt;feedback at this domain&lt;/a&gt;.
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;as on 2026-06-23&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;this is why i chucked it into the tools subdirectory and committed it.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Matthias Endler Built His Own Newsletter Setup</title><link>https://janusworx.com/work/matthias-endler-built-his-own-newsletter-setup/</link><pubDate>Fri, 22 May 2026 16:13:29 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/matthias-endler-built-his-own-newsletter-setup/</guid><description>&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mostly me (confirmation bias. slight gloating 😂)&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2026/matthias-endler-newsletter-setup-rust-in-production.jpg" alt="Rust in Production podcast logo" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I’m writing this post today, because I monkeyed with my &lt;a href="https://janusworx.com/work/found-mjml/" &gt;newsletter template&lt;/a&gt;. &lt;em&gt;&lt;strong&gt;Again!&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
So this post is just to make sure there are no more hiccoughs :)&lt;/p&gt;
&lt;p&gt;Matthias Endler, he of the fantastic &lt;a href="https://corrode.dev/podcast/s06e04-rust4linux/" target="_blank" rel="noreferrer"&gt;Rust in Production podcast&lt;/a&gt; (and the Corrode rust consultancy) just published &lt;a href="https://endler.dev/2026/newsletter-setup/" target="_blank" rel="noreferrer"&gt;a post on his newsletter setup&lt;/a&gt; and how he went about building it.&lt;/p&gt;
&lt;p&gt;His reasons (and his story) are really similar to mine.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
Tinyletter =&amp;gt; Mailchimp =&amp;gt;&lt;br&gt;
Wanting to have a semblance of control after being burnt =&amp;gt; Self hosting!&lt;/p&gt;
&lt;p&gt;He settled on &lt;a href="https://www.useplunk.com/" target="_blank" rel="noreferrer"&gt;Plunk&lt;/a&gt;, while I use my &lt;a href="https://sendy.co" target="_blank" rel="noreferrer"&gt;Sendy&lt;/a&gt; + Amazon SES combo. (they look pretty similar to me)&lt;br&gt;
Newsletters live in a git controlled repo. Same.&lt;br&gt;
Write in my favourite editor. Ditto.&lt;br&gt;
One markdown file per letter. Same pinch!&lt;/p&gt;
&lt;p&gt;The only difference, is his workflow is controlled by a fancy cli, while I depend on ye old copy &amp;amp; paste.&lt;/p&gt;
&lt;p&gt;Having someone with a visible presence do this, hopefully serves as an inspiration to others.&lt;br&gt;
I just wish more of my nerd kinfolk do this!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Matthias Endler Built His Own Newsletter Setup
%22" &gt;feedback at this domain&lt;/a&gt;.
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;except for his audience ofcourse! Which is orders of magnitude larger than my dinky little circle of friends&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Found MJML</title><link>https://janusworx.com/work/found-mjml/</link><pubDate>Thu, 21 May 2026 10:51:49 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/found-mjml/</guid><description>&lt;br&gt;

&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mostly me.&lt;br&gt;
Also hopefully, other folks struggling with, or looking for a way to create email newsletters.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2026/mjml-logo.svg" alt="MJML SVG logo" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I recently upgraded &lt;a href="https://sendy.co/" target="_blank" rel="noreferrer"&gt;Sendy&lt;/a&gt;, the software, I’m using to create and send my newsletters.&lt;br&gt;
(I don’t need the new shiny, or the extra features, but also those folks have been pretty good as far as pricing and functionality go, and I want them to stick around for a long time.)&lt;/p&gt;
&lt;p&gt;The new release, in addition to a refreshed interface, now features a block WYSIWYG editor. And my old template (based on the venerable &lt;a href="https://github.com/internations/antwort" target="_blank" rel="noreferrer"&gt;Antwort&lt;/a&gt;) that I used to compose my emails broke. What used to be a predictable way of writing emails, now turned into something filled with papercuts. Everything would look alright, but everything was ever so subtly out of place.&lt;/p&gt;
&lt;p&gt;So I went looking for something that I could live with long term once again.&lt;br&gt;
Since all of this is a personal hobby and I only use all of this to send mail to a handful of my friends, most of the paid options go right out of the window, because. And because I am a control freak, hosted options aren’t a thing for me either.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="https://mjml.io/" target="_blank" rel="noreferrer"&gt;MJML&lt;/a&gt;.&lt;br&gt;
From their website:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;MJML was created in early 2015 by a team of Mailjet developers while they were working on Passport, Mailjet’s drag-and-drop interface for creating responsive emails. Having been knee deep in email for five years, the Mailjet team saw two things: a) email HTML is antiquated and not developer friendly b) a growing trend of email being viewed on mobile and tablet and the number of screens is only increasing. This means that finding a way to code responsive email easily and quickly is pretty important. The team started by creating a new markup language that would abstract the complexity of responsive HTML and automatically generate it. And that’s how MJML was born.&lt;/p&gt;
&lt;p&gt;After learning so much from our users, we wanted to give back to the community by sharing this open-source framework to make responsive email easier and redefine the coding experience once and for all.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;It works in the same vein as &lt;a href="https://revealjs.com/" target="_blank" rel="noreferrer"&gt;revealjs&lt;/a&gt;.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
You install the tool and use their semantic markup to write a document.&lt;br&gt;
The MJML cli tool, in this case, then renders it to email worthy HTML.&lt;br&gt;
The &lt;a href="https://documentation.mjml.io/#mjml-guide" target="_blank" rel="noreferrer"&gt;markup&lt;/a&gt; is simple and well thought out. Writing it is a breeze.&lt;br&gt;
I used Timo Reymann’s &lt;a href="https://plugins.jetbrains.com/plugin/16418-mjml-support" target="_blank" rel="noreferrer"&gt;MJML plugin&lt;/a&gt; for Jetbrains editors to help me write, which makes things even easier, since it let’s me preview my work live.&lt;/p&gt;
&lt;p&gt;I took one of their pretty templates, &lt;a href="https://mjml.io/try-it-live/templates/recast" target="_blank" rel="noreferrer"&gt;Recast&lt;/a&gt; and then stripped it down to meet my needs and match it as closely as I could to my old customised Antwort template.&lt;/p&gt;
&lt;p&gt;Now all I do, is write, copy the HTML into the sendy editor and send. Life is good!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Found MJML
%22" &gt;feedback at this domain&lt;/a&gt;.
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Or does revealjs work in the same vein as mjml?&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/kubernetes-cncf-awards/</guid><description>&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mostly me.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;

&lt;figure&gt;
&lt;a href="https://janusworx.com/images/2026/cncf-k8s-awards.jpg"&gt;&lt;img style="display:flex;justify-content:center;" src="https://janusworx.com/images/2026/cncf-k8s-awards-s.jpg" alt="Diptych of two award photos"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Click the image to embiggen!&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;This is a note of gratitude.&lt;br&gt;
A tad late. But better late than never :)&lt;/p&gt;
&lt;p&gt;I decided to get involved with the Kubernetes community on a lark about four years ago.&lt;br&gt;
I wanted to learn about containers and orchestration, and I thought learning via joining the upstream community was it.&lt;/p&gt;
&lt;p&gt;I was wrong 😂&lt;br&gt;
Life got in the way and I only finally got around to learning it all last December.&lt;/p&gt;
&lt;p&gt;But the community was interesting and helpful.&lt;br&gt;
I got to learn the terms of art, by osmosis.&lt;br&gt;
I got to see how a large community functions, how a large software project was run.&lt;/p&gt;
&lt;p&gt;And in time, I got to pitch in and help a bit as well.&lt;br&gt;
I pitched in with the Release Team for v1.25 to gain a sense of how a release comes about.&lt;br&gt;
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 &lt;a href="https://psaggu.com/about.html" target="_blank" rel="noreferrer"&gt;various roles&lt;/a&gt; she had assumed to help out in the community. I asked her if there was anyway I could help her, that did &lt;em&gt;not&lt;/em&gt; involve meetings or talking to people 😂&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;
And she asked me if I could pitch in and help with helping folks gain membership into various Kubernetes orgs on Github.&lt;/p&gt;
&lt;p&gt;I ayed.&lt;/p&gt;
&lt;p&gt;She taught me the ropes. And I became a &lt;a href="https://github.com/kubernetes/community/tree/main/github-management#new-membership-coordinator" target="_blank" rel="noreferrer"&gt;Github New Membership Coordinator&lt;/a&gt; for the Kubernetes project.&lt;/p&gt;
&lt;p&gt;And all of this history to say, I’m grateful to Priyanka for this serendipitous opportunity.&lt;br&gt;
I fell in love with the work.&lt;br&gt;
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.&lt;/p&gt;
&lt;p&gt;I’m also grateful to the Kubernetes as well as the overarching CNCF communities for recognising what I do, for two successive years.&lt;br&gt;
I was the recipient of the &lt;a href="https://www.kubernetes.dev/community/awards/2024/#:~:text=Jason%20Braganza" target="_blank" rel="noreferrer"&gt;Kubernetes Contributor award in 2024&lt;/a&gt; and the &lt;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" target="_blank" rel="noreferrer"&gt;CNCF’s, Chop Wood Carry Water award in 2025&lt;/a&gt;.&lt;br&gt;
I’m both, honoured and humbled.&lt;br&gt;
I hope to contribute to this community, a while longer :)&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

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

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I was well and truly burned out then&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/trying-a-different-tack-to-writing-work-posts/</guid><description>&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;My tiny audience, who reads these posts via email or rss&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;

&lt;p&gt;My last post in this section / category was in &lt;a href="https://janusworx.com/work/the-big-plan-change-my-vm-to-be-gitops-driven/" &gt;December&lt;/a&gt;.&lt;br&gt;
There ought to be more, because I learn so much every week.&lt;br&gt;
Even in December, the massive move I did, needs documenting. (at least for me, if not for your reading)&lt;/p&gt;
&lt;p&gt;So the new plan is to cut the &lt;em&gt;doing&lt;/em&gt; and the learning in half (or by a third). And use that time to write about what I learned.&lt;br&gt;
I know this about myself. I write real good … sometimes. But to even get to that point, I have to write a &lt;em&gt;lot of drivel.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, in essence, welcome to the drivel :)&lt;br&gt;
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.&lt;/p&gt;
&lt;p&gt;If you do decide to stay and read, as always, I’m grateful. I truly am.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

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

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/the-big-plan-change-my-vm-to-be-gitops-driven/</guid><description>&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Me!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Update 2025-12-19: All done!&lt;/em&gt;&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;I just finished a move from one Hetzner VM to another.&lt;br&gt;
The type of VMs are the same, in fact.&lt;br&gt;
It’s just that the new VM and all the software on it are entirely software driven. I kept logging my progress in my &lt;a href="https://janusworx.com/nm/" &gt;notes&lt;/a&gt;, copy pasting the plan from day to day and ticking things off.&lt;br&gt;
Now that it’s done and I &lt;em&gt;still&lt;/em&gt; want to &lt;a href="https://janusworx.com/nm/2025-12-12/" &gt;refer to it regularly&lt;/a&gt;, as the rest of the services come over, I wanted a place to keep it. And so this post, it is.&lt;/p&gt;
&lt;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;'/&gt;


&lt;h2 class="relative group"&gt;List of services that absolutely need to come over. Miscellaneous stuff later.
 &lt;div id="list-of-services-that-absolutely-need-to-come-over-miscellaneous-stuff-later" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#list-of-services-that-absolutely-need-to-come-over-miscellaneous-stuff-later" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; the main domain&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; french version of the website&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; the mastodon archive&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; the email distribution list&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; miniflux for rss feeds&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; joplin&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; baikal&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; &lt;del&gt;discourse&lt;/del&gt; (no more discourse!)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; markdown editor (hedgedoc)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; anki&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; huginn&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; syncthing&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; IRC: theLounge + znc (see if we can make do with a single service now &lt;em&gt;(2025-12-15: we could!)&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; kanboard&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Certs, Move them over, or figure out a way to generate and renew them via Ansible&lt;/li&gt;
&lt;/ul&gt;
&lt;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;'/&gt;


&lt;h2 class="relative group"&gt;The Big Point of The Big Plan
 &lt;div id="the-big-point-of-the-big-plan" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-big-point-of-the-big-plan" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Be gitops driven. Managing stuff gets easier. Tearing down things and rebuilding them gets easier&lt;/li&gt;
&lt;li&gt;Have most everything I use, be in a Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;Be pragmatic enough to know that everything cannot be in a Kubernetes cluster and will have to live in the root VM&lt;/li&gt;
&lt;li&gt;Have Flux CD manage everything in the cluster&lt;/li&gt;
&lt;li&gt;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. &lt;em&gt;(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”)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;The Big Plan (&lt;em&gt;Done!&lt;/em&gt; 🎉🎉🎉)
 &lt;div id="the-big-plan-done-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-big-plan-done-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The plan is to redo the cluster again and do my own instance of
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; K3s&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Sealed Secrets&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Flux CD&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; &lt;del&gt;Certmanager&lt;/del&gt; (Not using it)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; &lt;del&gt;Letsencrypt&lt;/del&gt; (using pre existing Letsencrypt certs)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Get Traefik Ingress to work&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out a way to get certs automatically into the cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And once &lt;em&gt;that&lt;/em&gt; is done, figure out an app to move (Miniflux or Hedgedoc?); 2025-12-03: Kanboard it is!&lt;/li&gt;
&lt;li&gt;Begin by moving (lifting and shifting in popular parlance) Kanboard to the cluster
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Cert will probably be needed (Wildcard cert works now, just like it does without the cluster)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Convert a docker-compose to kubernetes manifests&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Learn how to configure an app with code&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Learn how to store data and back it up&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out secrets, if there are any (for now sealed secrets ok, figure out vault and vault injection later)&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Learn how to tunnel through and reverse proxy&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Make Kubernetes manifests work with flux&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to automate deployment of manual manifests&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to migrate there if there is any in an old app&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figue out how to automate updation of images in manual manifests&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Get another app (Miniflux) deployed&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 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?&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Then begin to think along the lines of Live Deploys. Prototype locally and once it works, migrate to production immediately&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Convert Kubernetes manifests to Helm Charts (optional, based on energy)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go live! Git is source of truth. Two repos.
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; One for the Main node and its update
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Terraform will provision node and install package, setup firewall&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to get Terraform to get the node talking to the git forge&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 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&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; The other one for k3s and flux
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Convert everything I have done locally to run on prod. Add more steps as you do them below&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Unrelated. Long term. Optional. Just here so that I remember
 &lt;div id="unrelated-long-term-optional-just-here-so-that-i-remember" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#unrelated-long-term-optional-just-here-so-that-i-remember" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Get Moi publish script running&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Redo Huginn Scenarios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

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

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/moved-from-reeder-to-readkit/</guid><description>&lt;p&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/moved-from-reeder-to-readkit-00.jpg" alt=" " /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

I used &lt;a href="https://reederapp.com/" target="_blank" rel="noreferrer"&gt;Reeder&lt;/a&gt; for reading all my &lt;a href="https://en.wikipedia.org/wiki/RSS" target="_blank" rel="noreferrer"&gt;RSS feeds&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;It no longer serves that need for me.&lt;br&gt;
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.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="https://readkit.app/" target="_blank" rel="noreferrer"&gt;ReadKit&lt;/a&gt;.&lt;br&gt;
I had used it briefly during the &lt;a href="https://en.wikipedia.org/wiki/Google_Reader#Discontinuation" target="_blank" rel="noreferrer"&gt;Google Reader apocalypse&lt;/a&gt; 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.&lt;br&gt;
ReadKit in the meanwhile already had support for Feedwrangler, and so I switched to it until Reeder came back to speed.&lt;/p&gt;
&lt;p&gt;And I’ve switched to it for the foreseeable future.&lt;br&gt;
It looks beautiful!&lt;br&gt;
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 &lt;em&gt;fluid&lt;/em&gt; 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.&lt;br&gt;
Even better, it syncs natively with &lt;a href="https://miniflux.app/" target="_blank" rel="noreferrer"&gt;Miniflux&lt;/a&gt;, the service I use to actually fetch and read RSS feeds on my Linux desktop. No more Google Reader API!&lt;/p&gt;
&lt;p&gt;This is a list of all my categories (with one of them expanded, click for a larger view)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2025/moved-from-reader-to-readkit-01-categories.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/moved-from-reader-to-readkit-01-categories.jpg" alt="Readkit App Screenshot" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;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)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2025/moved-from-reader-to-readkit-02-feeds.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/moved-from-reader-to-readkit-02-feeds.jpg" alt="Readkit App Screenshot" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;That gnawing feeling has now gone away from the back of my brain.&lt;br&gt;
The experience of reading and catching up with the world is once again a &lt;em&gt;glorious&lt;/em&gt; experience thanks to ReadKit.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Moved From Reeder to Readkit
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][2].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/kubernetes-note-to-self-need-load-balancer-installed-on-bare-metal/</guid><description>&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/kubernetes.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mostly me. Also other grizzly sysadmins who are learning devops like me.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;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.&lt;br&gt;
I had to then go expose a “NodePort” to gain access from outside.&lt;/p&gt;
&lt;p&gt;So to expose my stuff in as “&lt;a href="https://www.scotthyoung.com/blog/2020/05/04/do-the-real-thing/" target="_blank" rel="noreferrer"&gt;real world&lt;/a&gt;” a way as possible, we need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Either install a load balancer implementation like &lt;a href="https://metallb.io/" target="_blank" rel="noreferrer"&gt;MetalLB&lt;/a&gt;. OR&lt;/li&gt;
&lt;li&gt;Use a Kubernetes distribution that has a load balancer implementation built-in, like &lt;a href="https://k3s.io" target="_blank" rel="noreferrer"&gt;K3s&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I chose option 2 and used K3s, because I am, as they say in popular parlance, using Kubernetes at the edge.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
In which case, I prefer to have as many batteries built-in as possible.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Kubernetes, Note to Self: Need Load Balancer Installed on Bare Metal
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][2].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Although, from the articles I’ve read, if you’re doing a multiple node cluster, then you’re better off using MetalLB.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/k3s-move-data-folder/</guid><description>&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/k3s.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Intended Audience
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mostly me. Also other grizzly sysadmins who are learning devops like me.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;Problem
 &lt;div id="problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Solution
 &lt;div id="solution" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#solution" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="caution"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;
&lt;path fill="currentColor" d="M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-2.8-5.6-5.6-11.2-9.8-16.8l-50.6 58.8s-81.4-103.6-87.1-110.6C133.1 243.8 112 273.2 112 306.8C112 375.4 162.6 416 225.7 416z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Caution
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Before you do any of the following, make sure to stop the cluster with:&lt;br&gt;
&lt;code&gt;sudo systemctl stop k3s&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;K3s supports having a&lt;a href="https://docs.k3s.io/cli/server#data" target="_blank" rel="noreferrer"&gt; custom data directory&lt;/a&gt;, by letting me specify a &lt;code&gt;data-dir&lt;/code&gt;.&lt;br&gt;
I decided to specify it in the &lt;a href="https://docs.k3s.io/installation/configuration#configuration-file" target="_blank" rel="noreferrer"&gt;K3s &lt;code&gt;config&lt;/code&gt; file&lt;/a&gt; at &lt;code&gt;/etc/rancher/k3s/config&lt;/code&gt;.&lt;br&gt;
If it isn’t there (as it wasn’t in my case), just create one. You’ll need to do this as the &lt;code&gt;root&lt;/code&gt; user.&lt;br&gt;
This is what I now have in there.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;data-dir: /BIGHDD/rancher/k3s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And then, I …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Created a &lt;code&gt;rancher&lt;/code&gt; directory in my big hard disk. (&lt;code&gt;root&lt;/code&gt; owns it)&lt;/li&gt;
&lt;li&gt;Ran rsync as the &lt;code&gt;root&lt;/code&gt; user: &lt;code&gt;rsync -a /var/lib/rancher/k3s/ /BIGHDD/rancher/k3s/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Started up my cluster again with a &lt;code&gt;sudo systemctl start k3s&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: K3s: Move Data Folder
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][2].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/hugo-redirect-from-post-in-one-section-to-another/</guid><description>
&lt;h2 class="relative group"&gt;Problem
 &lt;div id="problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;I have a post in one section of my site, say &lt;a href="https://janusworx.com/nm/2025-11-06/" &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 class="relative group"&gt;Solution
 &lt;div id="solution" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#solution" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&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="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-golang" data-lang="golang"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alias.html&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dict&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Permalink&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Create your &lt;a href="https://janusworx.com/nm/2025-11-06/" &gt;original 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="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; section with the following metadata:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;Your title here&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#date autogenerated by my archetype. if missing, add date&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2025-11-06T08:30:54&lt;/span&gt;&lt;span class="m"&gt;+05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redirect&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;url-to-redirect-to&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;Optional text, that will appear in the sectiones listing page&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="4"&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="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;The Plan for My New Hetzner VM&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2025-11-06T08:30:54&lt;/span&gt;&lt;span class="m"&gt;+05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redirect&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/nm/2025-11-06/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Alone and helpless, like you&amp;#39;ve lost your fight &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="6"&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="https://janusworx.com/work/the-plan-for-my-new-hetzner-vm/" &gt;Clicking that&lt;/a&gt; will redirect to the actual post in my &lt;a href="https://janusworx.com/nm/2025-11-06/" &gt;Notes and Miscellanea&lt;/a&gt; section!&lt;/li&gt;
&lt;/ol&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/hugo-redirect-from-post-in-one-section-to-another.png" alt="Hugo Section with Post entries" /&gt;
 
 
 &lt;/figure&gt;
&lt;ol start="7"&gt;
&lt;li&gt;Tada 🎉&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: Hugo Redirect From Post in One Section to Another
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][2].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;in my case, &lt;a href="https://janusworx.com/work/" &gt;work&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/the-plan-for-my-new-hetzner-vm/</guid><description>
&lt;h2 class="relative group"&gt;Update: &lt;a href="https://janusworx.com/nm/2025-12-11/" &gt;2025-12-11&lt;/a&gt;
 &lt;div id="update-2025-12-11" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#update-2025-12-11" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;I got it done!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;Preamble
 &lt;div id="preamble" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#preamble" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;If this post is weird and stream of consciousness like, that’s by design.&lt;br&gt;
You are seeing a &lt;a href="https://janusworx.com/" &gt;notes and miscellanea&lt;/a&gt; post, in the work category.&lt;br&gt;
I want to be able to think through what I am doing. Mostly to clarify, document and explicitly state &lt;em&gt;&lt;strong&gt;what&lt;/strong&gt;&lt;/em&gt; I want. To avoid shifting goalposts (or rather to shift them intentionally, if need be.)&lt;br&gt;
I’ll be updating and revising this post as I think and learn and experience things&lt;/p&gt;

&lt;h2 class="relative group"&gt;Goals
 &lt;div id="goals" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#goals" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Think about and write what I want to get done with my hetzner&lt;/li&gt;
&lt;li&gt;For now, the how does not matter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;What I want
 &lt;div id="what-i-want" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-i-want" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A VM running K3s, that I can deploy my Hugo website to, as well all the apps that I choose to run on Janusworx&lt;/li&gt;
&lt;li&gt;My main need with a cluster is the GitOps aspect. Not the scaling or redundancy.
I want infrastructure as code and automated updates, as much as possible.&lt;/li&gt;
&lt;li&gt;Everything goes through my Forgejo instance at home&lt;/li&gt;
&lt;li&gt;I write a post and it should deploy to the website somehow&lt;/li&gt;
&lt;li&gt;Apps that I put in there, either just my config files of already published images/deployments, or my own custom things, ought to be pushed to or pulled by the cluster and deployed. Upgrades should be a matter of manipulating code&lt;/li&gt;
&lt;li&gt;Secrets should be self hosted, via environment variables or some self hosted solution. Never at a third party service&lt;/li&gt;
&lt;/ul&gt;
&lt;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;'/&gt;


&lt;h3 class="relative group"&gt;2025-11-06 09:35
 &lt;div id="2025-11-06-0935" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2025-11-06-0935" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Got tangled with Hugo in the morning.&lt;/li&gt;
&lt;li&gt;I think I got the basics down, the VM comes up. K3s in installed, but in what order do I move my apps over?&lt;/li&gt;
&lt;li&gt;Think I’ll the root domail last. And try beginning with the “simpler” apps first&lt;/li&gt;
&lt;li&gt;Begin with familiarising myself with Helm&lt;/li&gt;
&lt;li&gt;&lt;em&gt;2025-11-06 10:06:&lt;/em&gt; Tea break&lt;/li&gt;
&lt;li&gt;&lt;em&gt;2025-11-06 13:06:&lt;/em&gt; Lunch break&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;2025-11-06 16:00
 &lt;div id="2025-11-06-1600" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2025-11-06-1600" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Back. Trying to port my dev terraform setup to production. It should &lt;em&gt;just&lt;/em&gt; work. But it does not.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;2025-11-06 16:59:&lt;/em&gt; Solved. I had somehow borked my Terraform state. Nuked it. And then things started working again&lt;/li&gt;
&lt;li&gt;Show stopper now. My GPG key has expired. Need to figure out how to sign my git commits with SSH now&lt;/li&gt;
&lt;li&gt;&lt;em&gt;2025-11-06 18:26:&lt;/em&gt; I &lt;em&gt;think&lt;/em&gt; I’ve licked it. Both Github and Forgejo don’t seem to be complaining. Let’s see what else I’ve broken over the coming days&lt;/li&gt;
&lt;li&gt;&lt;em&gt;2025-11-06 20:00:&lt;/em&gt; Done! My production cluster is up! &lt;em&gt;&lt;strong&gt;And&lt;/strong&gt;&lt;/em&gt; I can tear it down and build it up consistently. Now to work with it tomorrow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feedback@janusworx.com?subject=%22Feedback on post: The Plan for My New Hetzner VM
%22" &gt;feedback at this domain&lt;/a&gt;.
&lt;br&gt;
&lt;/p&gt;</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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/make-a-ruckus-001/</guid><description>&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/ruckus-mabel.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Cute wolf Mabel, who caused quite a Ruckus, courtesy David Beazley&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;I had &lt;a href="https://janusworx.com/work/make-a-ruckus-000/" &gt;started this series&lt;/a&gt;, to catalogue my journey learning Rust whilst doing David Beazley’s, &lt;a href="https://dabeaz.com/ruckus.html" target="_blank" rel="noreferrer"&gt;Ruckus&lt;/a&gt; course.&lt;br&gt;
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!&lt;br&gt;
I never thought the end would be so bittersweet.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Worth it financially?
 &lt;div id="worth-it-financially" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#worth-it-financially" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Yes! Oh, dear God, yes!&lt;br&gt;
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.&lt;br&gt;
I also think, I’ve figured out Dave’s schtick with the idea of what he teaches.&lt;br&gt;
Take something, something hard, (Write a &lt;a href="https://dabeaz.com/compiler.html" target="_blank" rel="noreferrer"&gt;compiler&lt;/a&gt;? Figure out &lt;a href="https://dabeaz.com/raft.html" target="_blank" rel="noreferrer"&gt;distributed consensus&lt;/a&gt; in networked systems? &lt;a href="https://dabeaz.com/sicp.html" target="_blank" rel="noreferrer"&gt;The big ideas and paradigms&lt;/a&gt; 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.&lt;br&gt;
Having &lt;em&gt;that&lt;/em&gt; much knowledge &lt;a href="https://www.youtube.com/watch?v=w_8NsPQBdV0" target="_blank" rel="noreferrer"&gt;dowloaded into your head&lt;/a&gt; in that short a time frame, is what (to use a Dave-ism) makes your brain explode.&lt;br&gt;
And now having actually done it, I’m now swinging around to the price is just right or “He actually undercharges a bit” camp.&lt;br&gt;
This is bloody addicting. I’m just going to save up and &lt;a href="https://dabeaz.com/courses.html" target="_blank" rel="noreferrer"&gt;do them all&lt;/a&gt; as and when I can over time. Like Neo answering Tank’s, “How about some more?”, with a &lt;em&gt;&lt;strong&gt;&lt;a href="https://youtu.be/w_8NsPQBdV0?t=41" target="_blank" rel="noreferrer"&gt;Hell yes!&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;br&gt;


&lt;h2 class="relative group"&gt;Worth it for the knowledge I gained?
 &lt;div id="worth-it-for-the-knowledge-i-gained" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#worth-it-for-the-knowledge-i-gained" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Have I already said, Oh, dear God, Yes?! Doubly so, here!&lt;br&gt;
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.&lt;br&gt;
Python (C/OOP) is my &lt;a href="https://madhadron.com/programming/seven_ur_languages.html" target="_blank" rel="noreferrer"&gt;ur-language&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;I just wanted to learn Rust. I didn’t really want to write a small programming language.&lt;br&gt;
But doing that, made me learn Rust without even realising it. He’s that good. The pedagogical method is that good.&lt;br&gt;
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.&lt;br&gt;
The course was more focussed on the why of Rust, more than the more easily discoverable, how.&lt;br&gt;
A fascinating mental model was looking at Rust like Earth. An inner strict core, surrounded by a more relaxed, friendlier outer shell.&lt;/p&gt;
&lt;p&gt;Daily work was tremendously, mentally taxing. In a &lt;em&gt;&lt;strong&gt;good&lt;/strong&gt;&lt;/em&gt; way.&lt;br&gt;
Dave keeps saying that minds explode due to the material. But no good Sir, that is not true!&lt;br&gt;
To Dave I say, &lt;em&gt;“’Tis thou, Dave, who dost cause the explosions of brains!”&lt;/em&gt;&lt;br&gt;
He starts with an innocent problem, something seemingly innocuous, and then lays his trap.&lt;br&gt;
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, &lt;em&gt;&lt;strong&gt;Boom!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I cannot wait, to have my brains exploded once again :)&lt;/p&gt;

&lt;h2 class="relative group"&gt;Am I done with this series?
 &lt;div id="am-i-done-with-this-series" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#am-i-done-with-this-series" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;No.&lt;br&gt;
I jumped into the deep end of the pool, by attempting to learn Rust with a hard project at the same time.&lt;br&gt;
So while I’ve learned a lot, there’s plenty of work to do.&lt;br&gt;
While the others could do their programming exercises quickly, I have seriously lagged behind.&lt;br&gt;
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.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Dave as teacher and all round good egg
 &lt;div id="dave-as-teacher-and-all-round-good-egg" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#dave-as-teacher-and-all-round-good-egg" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The man puts in tremendous amounts of work.&lt;br&gt;
Every bit of the course, is planned and structured meticulously and then he just riffs off of the ideas.&lt;br&gt;
There was a collaborative Github repo ready and waiting, there were video recordings ready as soon as the day was done.&lt;br&gt;
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.&lt;br&gt;
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.&lt;br&gt;
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.&lt;br&gt;
I learned not just &lt;em&gt;what&lt;/em&gt;, not just &lt;em&gt;how&lt;/em&gt;, but also &lt;em&gt;why&lt;/em&gt;.&lt;br&gt;
And I learned it all in a place that was nice, and friendly, and warm, and kind.&lt;/p&gt;
&lt;p&gt;Dave, thank you for all you do! I’m very grateful!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Make a Ruckus: 001, Done! Or Are We? Thank you, Dave!
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][2].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/make-a-ruckus-000/</guid><description>&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/ruckus-wolf-howl.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;&lt;a href="https://commons.wikimedia.org/wiki/File:Wolf_howl_icon.svg" target="_blank" rel="noreferrer"&gt;Wolf howl, by Lorc&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/by/3.0" target="_blank" rel="noreferrer"&gt;CC BY 3.0&lt;/a&gt;, via Wikimedia Commons&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;I signed up for the latest cohort of &lt;a href="https://dabeaz.com/about.html" target="_blank" rel="noreferrer"&gt;David Beazley’s&lt;/a&gt;, &lt;a href="https://dabeaz.com/ruckus.html" target="_blank" rel="noreferrer"&gt;Ruckus&lt;/a&gt;.&lt;br&gt;
The basic idea, behind Ruckus is to write a small interpreter in Rust!&lt;/p&gt;

&lt;h3 class="relative group"&gt;Why?
 &lt;div id="why" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;From the &lt;a href="https://dabeaz.com/ruckus.html" target="_blank" rel="noreferrer"&gt;Ruckus&lt;/a&gt; page:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This course tackles Rust by stepping back and thinking about it from the standpoint of a &amp;ldquo;programming languages&amp;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.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;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&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, and since my background has been tech support, hardware and people management, I needed to unlearn a ton of stuff.&lt;/p&gt;
&lt;p&gt;I’m cautiously hoping Ruckus will help me do the same with Rust, only in a turbo charged manner.&lt;/p&gt;
&lt;p&gt;Rust fascinates me. And I quite like my journey to its doorstep.&lt;br&gt;
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.&lt;br&gt;
I learned Go, just so I could give them a binary and then instruct them with a “just run this.”&lt;br&gt;
And while that solved my distribution problem, Go’s type system made me realise, just how well suited a typed language is for collaboration.&lt;br&gt;
Which brings me to Rust. Long term, this is the language&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, 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.&lt;/p&gt;
&lt;p&gt;Which in turn brings me back to Ruckus.&lt;br&gt;
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.&lt;br&gt;
I also wanted to try what Cal Newport, calls a grand gesture in &lt;a href="https://calnewport.com/deep-work-rules-for-focused-success-in-a-distracted-world/" target="_blank" rel="noreferrer"&gt;Deep Work&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;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.&lt;br&gt;
[…] 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.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;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 &lt;em&gt;don’t&lt;/em&gt; know. I fully expect to be like the wolf above, losing my mind, howling at the moon and generally creating a ruckus.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

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

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&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;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I have &lt;em&gt;some&lt;/em&gt; now&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;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.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/emacs-package-updation-checklist/</guid><description>
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/emacs-logo.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I’ve never updated my Emacs packages until recently, because Emacs is where &lt;em&gt;all&lt;/em&gt; my writing happens, and so I’m justifiably paranoid.&lt;br&gt;
But then some packages stopped working, due to various circumstances&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; and an update solved it.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;As far as package management goes, I want to keep things simple.&lt;br&gt;
In fact, I still haven’t graduated to &lt;a href="https://www.gnu.org/software/emacs/manual/html_mono/use-package.html" target="_blank" rel="noreferrer"&gt;&lt;code&gt;use-package&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://github.com/radian-software/straight.el" target="_blank" rel="noreferrer"&gt;&lt;code&gt;straight.el&lt;/code&gt;&lt;/a&gt; because my package needs are few and conservative&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. And so, while there are &lt;a href="https://github.com/rranelli/auto-package-update.el" target="_blank" rel="noreferrer"&gt;automatic update options&lt;/a&gt; out there, I’ll just stick to updating them manually, every quarter.&lt;/p&gt;
&lt;p&gt;Ergo, this is the checklist I’ll use next time onwards …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stop emacs user service, &lt;code&gt;systemctl --user stop emacs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Backup emacs folder in &lt;code&gt;~/.config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start emacs manually (not the service).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;M-x package-refresh-contents&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;M-x package-upgrade-all&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Problems? Quit emacs. Revert backup folder.&lt;/li&gt;
&lt;li&gt;In the end, start emacs user sevice, &lt;code&gt;systemctl --user start emacs&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There’s an Org mode task, scheduled quarterly, so that I won’t forget.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Emacs Package Updation Checklist
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;While I don’t want updated packages, I do want updated Emacs and that broke stuff 😂&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;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&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/forgejo-workflow-action-to-publish-hugo-blog/</guid><description>
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/common/forgejo-logo.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I’d gotten this working earlier and wanted to post it up.&lt;br&gt;
And then promptly forgot about it.&lt;br&gt;
Until today that is, when I wanted to make changes to it.&lt;/p&gt;
&lt;p&gt;Here it is for posterity.&lt;br&gt;
The newest change is that the action now runs every six hours.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build and Deploy Janusworx website&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0 */6 * * *&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build-and-deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;intel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# make sure there are runners tagged &amp;#34;intel&amp;#34; on your network or replace this with something of your own&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;HUGO_VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ vars.HUGO_VERSION }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install wget &amp;amp; rsync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apt-get update &amp;amp;&amp;amp; apt-get install wget rsync -y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install Hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &amp;amp;&amp;amp; dpkg -i ${{ runner.temp }}/hugo.deb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Checkout the website repo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;submodules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build website with Hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;HUGO_ENVIRONMENT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TZ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Asia/Kolkata&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; hugo \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; --gc \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; --minify
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install SSH key&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; mkdir -p ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;${{ secrets.SSH_PRIVATE_KEY }}&amp;#34; &amp;gt; ~/.ssh/id_ed25519
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; chmod 600 ~/.ssh/id_ed25519
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;${{ secrets.SSH_KNOWN_HOSTS }}&amp;#34; &amp;gt; ~/.ssh/known_hosts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; chmod 644 ~/.ssh/known_hosts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy website with rsync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;REMOTE_HOST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ vars.REMOTE_HOST }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;REMOTE_USER&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ vars.REMOTE_USER }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;REMOTE_PATH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ vars.REMOTE_PATH }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; rsync -avz --delete public/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Notes:&lt;br&gt;
It needs a few variables set, in the repo (repo-&amp;gt;Settings-&amp;gt;Actions-&amp;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.&lt;br&gt;
Hugo version is in there, because Hugo breaks things all the time, so I upgrade cautiously.&lt;/p&gt;
&lt;p&gt;It also needs a couple of secrets, set in the repo (repo-&amp;gt;Settings-&amp;gt;Actions-&amp;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 &lt;code&gt;ssh-keyscan &amp;quot;your-host-name-or-ip&amp;quot; &amp;gt; known_host_data.txt&lt;/code&gt; should dump the data you’d need for SSH_KNOWN_HOSTS&lt;/p&gt;
&lt;p&gt;With the changes I made today, the workflow can publish&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on demand&lt;/li&gt;
&lt;li&gt;every 6 hours&lt;/li&gt;
&lt;li&gt;every time I commit to the repo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I added time based publishing, so that I could publish future dated posts as and when the time rolls around.&lt;br&gt;
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.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Forgejo Workflow Action to Publish Hugo Blog
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/heres-what-is-stopping-us-from-using-free-software/</guid><description>&lt;p&gt;A couple of thoughts on &lt;a href="https://blog.schubisu.de/blog/2023/1/" target="_blank" rel="noreferrer"&gt;Robin’s post&lt;/a&gt;.&lt;br&gt;
Because I’ve spent a lifetime using both FOSS and proprietary software &lt;em&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/em&gt; more than two decades, advising and supporting people and businesses who do the same.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To paraphrase Robin’s own point. Most people don’t care.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href="https://blog.schubisu.de/blog/2023/1/#:~:text=If%20it,fine" target="_blank" rel="noreferrer"&gt;If it runs Minetest, then it’s fine.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;aka “If it does the thing, I want it to do, without too much cognitive overhead, I’ll use it.”&lt;br&gt;
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&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, 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.&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Support costs are about the same.&lt;br&gt;
If a small business chooses to use free software, the cost of supporting it, if stuff breaks, (specially if it’s business critical&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;) 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?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So I agree with most of what Robin says, with just one caveat.&lt;/p&gt;
&lt;p&gt;People aren’t afraid of change. Atleast not the kind of change, Free Software poses.&lt;br&gt;
People just don’t have the time and the energy to deal with change, with everything else happening in their lives.&lt;br&gt;
Free software is just not as important to them, as it is to us. That is all.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Here’s What is Stopping Us From Using Free Software
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;And I’d venture to say, that’s perfectly ok.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;before they went to pot&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;rpm updates, bork my expensive garment printing machine, anyone?&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;And once again, that’s perfectly ok too.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/blog-questions-challenge-2025/</guid><description>&lt;p&gt;&lt;a href="https://blog.avas.space/bear-blog-challenge/" target="_blank" rel="noreferrer"&gt;Ava&lt;/a&gt; started this, &lt;a href="https://kevquirk.com/blog/blog-questions-challenge" target="_blank" rel="noreferrer"&gt;Kev&lt;/a&gt; modified this, and &lt;a href="https://saptaks.website/" target="_blank" rel="noreferrer"&gt;Saptak&lt;/a&gt; egged me on to write this. So here goes …&lt;br&gt;
&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/meta-homepage.png" alt="screenshot of my homepage" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;What the home page looks like in 2025&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;


&lt;h3 class="relative group"&gt;1. Why did you make the blog in the first place?
 &lt;div id="1-why-did-you-make-the-blog-in-the-first-place" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-why-did-you-make-the-blog-in-the-first-place" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I write for me mostly. Because writing &lt;a href="https://janusworx.com/personal/why-i-write/" &gt;helps me think&lt;/a&gt;. 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.&lt;/p&gt;

&lt;h3 class="relative group"&gt;2. What platform are you using to manage your blog and why did you choose it?
 &lt;div id="2-what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I use &lt;a href="https://gohugo.io/" target="_blank" rel="noreferrer"&gt;Hugo&lt;/a&gt; to generate the site, which I host on my own Hetzner VM. I use it because I &lt;a href="https://janusworx.com/work/all-about-the-move-to-hugo/" &gt;outgrew&lt;/a&gt; my previous tool, &lt;a href="https://getnikola.com/blog/" target="_blank" rel="noreferrer"&gt;Nikola&lt;/a&gt;, 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 &lt;em&gt;fast&lt;/em&gt;. 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 &lt;em&gt;unbelievably fast.&lt;/em&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;3. Have you blogged on other platforms before?
 &lt;div id="3-have-you-blogged-on-other-platforms-before" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-have-you-blogged-on-other-platforms-before" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I’ve been writing in some form or other since the late 90s. So … yea :)&lt;br&gt;
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!&lt;/p&gt;

&lt;h3 class="relative group"&gt;4. How do you write your posts?
 &lt;div id="4-how-do-you-write-your-posts" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-how-do-you-write-your-posts" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I write them in Emacs (in Markdown, using Markdown Mode) on my desktop, with &lt;a href="https://gohugo.io/commands/hugo_server/" target="_blank" rel="noreferrer"&gt;Hugo Server&lt;/a&gt; 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&lt;/p&gt;

&lt;h3 class="relative group"&gt;5. When do you feel most inspired to write?
 &lt;div id="5-when-do-you-feel-most-inspired-to-write" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#5-when-do-you-feel-most-inspired-to-write" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I never do. I write because it helps me function. And yet, it always feels like a chore.&lt;/p&gt;

&lt;h3 class="relative group"&gt;6. Do you publish immediately after writing or do you let it simmer a bit as a draft?
 &lt;div id="6-do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#6-do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;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 &lt;em&gt;process&lt;/em&gt;, the &lt;em&gt;writing&lt;/em&gt;, 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 &lt;em&gt;finished&lt;/em&gt;, the post will never get published. The &lt;em&gt;moment&lt;/em&gt; 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.&lt;/p&gt;

&lt;h3 class="relative group"&gt;7. Your favorite post on your blog?
 &lt;div id="7-your-favorite-post-on-your-blog" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#7-your-favorite-post-on-your-blog" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;None. All. They’re my thoughts, so depending on my mood, they’re either worthless or priceless gems!&lt;/p&gt;

&lt;h3 class="relative group"&gt;8. Any future plans for your blog? Maybe a redesign, changing the tag system, etc.?
 &lt;div id="8-any-future-plans-for-your-blog-maybe-a-redesign-changing-the-tag-system-etc" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#8-any-future-plans-for-your-blog-maybe-a-redesign-changing-the-tag-system-etc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Not really. For all my wandering, I’ve only ever moved when my tools outgrew me&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, 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.&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;I’ll ask &lt;a href="https://psaggu.com/" target="_blank" rel="noreferrer"&gt;Priyanka&lt;/a&gt;, &lt;a href="https://sreeram.xyz/" target="_blank" rel="noreferrer"&gt;Sreeram&lt;/a&gt;, &lt;a href="https://blogs.dgplug.org/sandeepk/" target="_blank" rel="noreferrer"&gt;Sandeep&lt;/a&gt;, &lt;a href="https://pradhvanbisht.in/" target="_blank" rel="noreferrer"&gt;Pradhvan&lt;/a&gt;, &lt;a href="https://rj722.com/" target="_blank" rel="noreferrer"&gt;Rahul&lt;/a&gt;, &lt;a href="https://geeksocket.in/" target="_blank" rel="noreferrer"&gt;Bhavin&lt;/a&gt;, &lt;a href="https://blog.lazkani.io/posts/what-2025-blog-question-challenge/" target="_blank" rel="noreferrer"&gt;Elia&lt;/a&gt;, &lt;a href="https://microblog.desipenguin.com/" target="_blank" rel="noreferrer"&gt;Mandar&lt;/a&gt;, &lt;a href="https://saptaks.website/" target="_blank" rel="noreferrer"&gt;Saptak&lt;/a&gt;, &lt;a href="https://farhaan.me/" target="_blank" rel="noreferrer"&gt;Farhaan&lt;/a&gt;, &lt;a href="https://blog.schubisu.de/blog/2025/1/" target="_blank" rel="noreferrer"&gt;Robin&lt;/a&gt; and &lt;a href="https://kushaldas.in/" target="_blank" rel="noreferrer"&gt;Kushal&lt;/a&gt; to share more, if they have the time, energy and the inclination.&lt;/p&gt;
&lt;p&gt;Folks, who’ve answered my call to arms! Go read their answers too!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.schubisu.de/blog/2025/1/" target="_blank" rel="noreferrer"&gt;Robin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.lazkani.io/posts/what-2025-blog-question-challenge/" target="_blank" rel="noreferrer"&gt;Elia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Blog Questions Challenge 2025
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Wordpress.com too restrictive, Ghost stopped serving my specific needs etc.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/hack-hugo-post-metadata-with-python/</guid><description>&lt;p&gt;&lt;a href="https://janusworx.com/work/some-site-housekeeping-new-sections-and-rss-feeds/" &gt;A while back&lt;/a&gt;, I rejigged the sections on my site to better reflect how I think and write.&lt;br&gt;
Which meant, all the urls, on all my posts changed, since they now used the new category as a slug, instead of ye old &lt;code&gt;/blog&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For e.g. &lt;a href="https://janusworx.com/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo/" target="_blank" rel="noreferrer"&gt;https://janusworx.com/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo/&lt;/a&gt; …&lt;br&gt;
was now at, &lt;a href="https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/" target="_blank" rel="noreferrer"&gt;https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After searching a bit, I found that Hugo supported &lt;a href="https://gohugo.io/content-management/urls/#aliases" target="_blank" rel="noreferrer"&gt;aliases&lt;/a&gt;. For me, it would redirect the original &lt;code&gt;/blog&lt;/code&gt; path url to its new location&lt;br&gt;
Ass I had to do, was add an &lt;code&gt;aliases: [&amp;quot;/blog/old-post-slug&amp;quot;]&lt;/code&gt; line to each post’s metadata.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
Line 4 in the snippet below shows, what I added to fix the post above.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Using Hugo Variables to Help With Mailto Links in Hugo&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2024-05-30T18:17:35&lt;/span&gt;&lt;span class="m"&gt;+05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;aliases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/blog/using-hugo-variables-to-help-with-mailto-links-in-hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;work&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;100WordHabit, Dgplug, Hugo]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Shortcodes! Hugo Variables in Shortcodes!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;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;'/&gt;

&lt;p&gt;I did &lt;em&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/em&gt; want to do this by hand for 800+ posts.&lt;br&gt;
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 &lt;code&gt;/blog&lt;/code&gt; to &lt;code&gt;/work&lt;/code&gt; or from &lt;code&gt;/blog&lt;/code&gt; to &lt;code&gt;/personal&lt;/code&gt;), 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.&lt;br&gt;
So I did.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;INPUT_FOLDER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;old-posts-folder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OUTPUT_FOLDER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;modified-posts-folder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;each_file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;INPUT_FOLDER&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iterdir&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;each_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file_to_read&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias_derived_from_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;each_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;contents_as_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file_to_read&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;contents_as_list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;aliases: [&lt;/span&gt;&lt;span class="se"&gt;\&amp;#34;&lt;/span&gt;&lt;span class="s2"&gt;/blog/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;alias_derived_from_file&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\&amp;#34;&lt;/span&gt;&lt;span class="s2"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTPUT_FOLDER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;each_file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w+&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file_to_write&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;file_to_write&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writelines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;contents_as_list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;br&gt;

It takes all the posts from my old folder, inserts the alias line and puts them into a new folder.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; 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.&lt;/p&gt;
&lt;p&gt;I ran it, published the site and then went to check on the old urls with bated breath.&lt;br&gt;
Hurrah, it all worked :)&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Hack Hugo Post Metadata With Python
%22" &gt;feedback at this domain&lt;/a&gt; or [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;it’s a list, so I can add more aliases if I want to&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;no sense in botching up my originals :)&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/tmux-start-session-maximized-with-three-panes/</guid><description>&lt;p&gt;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.&lt;br&gt;
And it still irks me that I have to …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Launch Terminal&lt;/li&gt;
&lt;li&gt;Launch Tmux&lt;/li&gt;
&lt;li&gt;Split it into three windows err … panes.&lt;/li&gt;
&lt;li&gt;Go to the top left pane and launch Hugo server&lt;/li&gt;
&lt;li&gt;Switch to the right pane and then launch Emacs with whatever new post I want to write today.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So &lt;em&gt;of course&lt;/em&gt;, a &lt;a href="https://en.wikipedia.org/wiki/Rube_Goldberg" target="_blank" rel="noreferrer"&gt;Rube Goldberg-esque&lt;/a&gt;, tiny bash-pipey monster took form.
It now resides, chained to an alias, &lt;code&gt;hssx&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; in my &lt;code&gt;.bash_aliases&lt;/code&gt; file&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;hssx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cd /path/to/my/hugo/folder &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;xdotool windowsize $(xdotool getactivewindow) 100% 100% &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;tmux new-session \; split-window -h \; select-pane -l \; split-window -v \; select-pane -U \; send-keys &amp;#34;hugo serve&amp;#34; C-m \; select-pane -R&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;The first line switches to my hugo folder&lt;/li&gt;
&lt;li&gt;The second calls &lt;code&gt;xdotool&lt;/code&gt; and maximises the terminal window&lt;/li&gt;
&lt;li&gt;And the last line is a series of instructions to the tmux command. I’ve split it below for readability.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tmux new-session \; #Tmux start a new session
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;split-window -h \; # Split the window into two vertical panes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;select-pane -l \; # Switch to the left pane
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;split-window -v \; # Split that into two horizontal panes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;select-pane -U \; # Select the upper pane
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;send-keys &amp;#34;hugo serve&amp;#34; C-m \; # Type in `hugo serve` followed by Enter
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;select-pane -R # Select the right pane&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;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;'/&gt;

&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;And boom!&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2025/tmux-layout.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2025/tmux-layout.png" alt="bash terminal showing a tmux window split into three panes" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Click pic for a larger version&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Tmux Start Session Maximized With Three Panes
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;code&gt;hugo start session&lt;/code&gt; and x just because all my aliases have ended with x for years and years&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/view-only-day-with-org-agenda/</guid><description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Like Dale Carnegie says,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Shut off the past! Let the dead past bury its dead. Shut out the yesterdays which have lighted fools the way to dusty death.&lt;/p&gt;
&lt;p&gt;The load of tomorrow, added to that of yesterday, carried today, makes the strongest falter. Shut off the future as tightly as the past.&lt;/p&gt;
&lt;p&gt;The future is today. There is no tomorrow. The day of man&amp;rsquo;s salvation is now.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;So I want then, my Org Mode to do show me, only the things, I have on my plate today.&lt;/p&gt;
&lt;p&gt;And Org is nothing if not adaptable. &lt;code&gt;org-agenda-span&lt;/code&gt; is the variable that controls what the Agends shows me. According to the docs,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;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 &lt;code&gt;day&lt;/code&gt;, &lt;code&gt;week&lt;/code&gt;, &lt;code&gt;month&lt;/code&gt; or &lt;code&gt;year&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;So that’s what I did. This little snippet went into my &lt;code&gt;init&lt;/code&gt; file&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;; Set Agenda to show a day as the default timespan, instead of a week&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;org-agenda-span&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;br&gt;

Et voilà!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: View Only the Day, With Org Agenda
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/more-espanso-emacs-shenanigans/</guid><description>&lt;p&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/espanso.png" alt="Espanso Logo" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;My current bugbear is that it will not render a &lt;code&gt;=&lt;/code&gt; when expanding.&lt;br&gt;
I know this is entirely something that I brought on myself, and neither Emacs or Espanso in isolation will have issues.&lt;/p&gt;
&lt;p&gt;My workaround after rummaging through Espanso’s documentation was to set the backend to use &lt;code&gt;xdotool&lt;/code&gt;, in my config. (&lt;code&gt;~/.config/espanso/config/default.yml&lt;/code&gt;)&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;x11_use_xdotool_backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;One downside now is that it no longer &lt;a href="https://espanso.org/docs/matches/basics/#cursor-hints" target="_blank" rel="noreferrer"&gt;jumps back to a predefined location&lt;/a&gt; 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)&lt;/p&gt;
&lt;p&gt;For now, most of my expansions work. Hurrah!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: More Espanso &amp;amp; Emacs Shenanigans
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><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="https://janusworx.com/nm/" &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;
&lt;p&gt;Joe Mooring over on the Hugo Discourse &lt;a href="https://discourse.gohugo.io/t/disable-rss-for-one-or-more-specific-posts-in-a-blog/52995/2?u=jasonbraganza" target="_blank" rel="noreferrer"&gt;logically pointed out&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;So all I had to do was set the following in the my front matter&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and then configure the embedded &lt;a href="https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml" target="_blank" rel="noreferrer"&gt;RSS template&lt;/a&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; to just range through pages that didn’t have that parameter set, like so …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gotmpl" data-lang="gotmpl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Sitemap.Disable&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ne&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The original line would’ve been something like&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gotmpl" data-lang="gotmpl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You’ll need to create a new feed file by copying the contents of the embedded template to a file called &lt;code&gt;rss.xml&lt;/code&gt; in the &lt;code&gt;layouts/_default/&lt;/code&gt; directory&lt;/p&gt;
&lt;p&gt;Once that’s done, all should be hunky dory.&lt;br&gt;
Posts with this frontmatter, will now no longer appear in RSS feeds or the sitemap.&lt;br&gt;
To make things simpler, I edited this sections archetype, so that the next time I create a new Notes &amp;amp; Miscellenea post, all of this metadata is already set for me.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Notes Now Has No RSS Feed
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;If you already have it defined in your theme, then override it.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/fixing-espanso-expansions/</guid><description>&lt;p&gt;&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/espanso.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;I never had the time to deal with my &lt;a href="https://espanso.org/" target="_blank" rel="noreferrer"&gt;Espanso&lt;/a&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; hijinks until today.&lt;br&gt;
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.&lt;br&gt;
It took over my old configuration like a champ and &lt;em&gt;mostly&lt;/em&gt; worked, with the exception of a few shortcuts; ones that I &lt;em&gt;frequently&lt;/em&gt; used 😂&lt;/p&gt;
&lt;p&gt;Emacs was one application of mine that never quite worked right with Espanso.&lt;br&gt;
I’d frequently get &lt;code&gt;timed out waiting for reply from selection owner&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;All my browser url expansions would not expand properly either, with mangled expansions most of the time.&lt;/p&gt;
&lt;p&gt;So today I &lt;a href="https://espanso.org/docs/" target="_blank" rel="noreferrer"&gt;dove in to the docs&lt;/a&gt;, and realised two things.&lt;br&gt;
1. My emacs needed a longer time out&lt;br&gt;
2. Espanso now tries to identify the &lt;em&gt;kind&lt;/em&gt; of text, and maybe those were causing my issues?&lt;/p&gt;
&lt;br&gt;


&lt;h3 class="relative group"&gt;Emacs
 &lt;div id="emacs" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#emacs" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;I realised I needed a longer clipboard threshold, only for Emacs.&lt;br&gt;
So I created an &lt;a href="https://espanso.org/docs/configuration/app-specific-configurations/" target="_blank" rel="noreferrer"&gt;App specific configuration&lt;/a&gt;, just for Emacs to use and gave it said option. Here’s what the contents of my &lt;code&gt;espanso/config/emacs.yml&lt;/code&gt; look like&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;filter_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Emacs&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;clipboard_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;br&gt;


&lt;h3 class="relative group"&gt;Rich Text Expansions
 &lt;div id="rich-text-expansions" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rich-text-expansions" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;That helped with a lot of expansions in Emacs, but not with my joy expansion.&lt;br&gt;
And not with stuff that were links and oh … links! and html! and markdown! Could those be the culprits?&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
The docs mention that Espanso now has &lt;a href="https://espanso.org/docs/matches/basics/#rich-text" target="_blank" rel="noreferrer"&gt;rich text support&lt;/a&gt;&lt;br&gt;
What that means, is that the trigger nows supports two new keywords &lt;code&gt;html&lt;/code&gt; and &lt;code&gt;markdown&lt;/code&gt; in addition ye ole &lt;code&gt;replace&lt;/code&gt;
So I changed most of my affected shortcuts to either of those two keywords; &lt;code&gt;markdown&lt;/code&gt; for most everything and &lt;code&gt;html&lt;/code&gt; for linky stuff. Here’s what my beloved joy looks like now …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;:joy&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;😂&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;br&gt;

And those two things did it! Every shortcut expands everwhere! What joy 😂&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subjectFeedback on post: Fixing Espanso Expansions
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_l_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Espanso lets you assign short snippets of text to longer streams of text, that you’d frequently use. I use &lt;code&gt;:adhx&lt;/code&gt; for example, and it expands out to type my whole address. Pretty handy!&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;dun! dun! dun! they were!&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/testing-opengraph-logo/</guid><description>&lt;p&gt;‘Romeo, Romeo! Wherefore art thou Romeo?’&lt;/p&gt;
&lt;p&gt;(Romeo and Juliet, Act 2, Scene 2)&lt;/p&gt;</description></item><item><title>Forgejo</title><link>https://janusworx.com/work/forgejo/</link><pubDate>Sat, 28 Sep 2024 15:39:12 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/forgejo/</guid><description>&lt;p&gt;Setup a new instance of Forgejo for myself today.&lt;br&gt;
The first thing I felt, was … instant relief.&lt;br&gt;
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.&lt;br&gt;
I’m going to slowly move over to my little Forgejo instance as I learn more.&lt;/p&gt;
&lt;p&gt;Right now I’ve set up pull mirrors for all the projects I love.
&lt;br&gt;
&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/forgejo.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;Next step is to figure out how to automate my Hugo blog deployment and more importantly; having all my posts in source control.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Forgejo
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/smol-note-to-self-on-deploying-stuff/</guid><description>&lt;ol&gt;
&lt;li&gt;Anything I want folks to see and/or interact with, goes on the public VM&lt;/li&gt;
&lt;li&gt;Anything I want to host for myself, goes on the Pi.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post?&lt;br&gt;
Mail me at &lt;a href="mailto:feebdback@janusworx.com?subject=%22Feedback on post: Smol Note to Self, on Deploying Stuff
%22" &gt;feedback at this domain&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; [continue the discourse here][3].
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/anki-push-u/</guid><description>&lt;br&gt;

&lt;p&gt;I want to slowly increase my French vocabulary, so I got this comprehensive frequency word deck from &lt;a href="https://ankiweb.net/shared/info/893324022" target="_blank" rel="noreferrer"&gt;Shared Decks section of the Anki website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I keep forgetting to look it up during the day, after my morning session and the only way I can get those stubborn words&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; to stick in my mind, is if I keep doing the deck 4–5 times a day.&lt;/p&gt;
&lt;p&gt;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! :)&lt;/p&gt;
&lt;p&gt;I already use &lt;a href="https://pushover.net" target="_blank" rel="noreferrer"&gt;Pushover&lt;/a&gt;, to get notified of darn near anything.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
And I read enough of &lt;a href="https://addon-docs.ankiweb.net/a-basic-addon.html" target="_blank" rel="noreferrer"&gt;Anki’s add-on documentation&lt;/a&gt; to know I could whip something up.&lt;br&gt;
So a bit of searching on the net, a bit of jiggery pokery with &lt;a href="https://claude.ai/" target="_blank" rel="noreferrer"&gt;Claude&lt;/a&gt;, and some spelunking through Anki’s source code and &lt;a href="https://forums.ankiweb.net/t/how-to-get-the-number-of-cards-due-to-today/10658" target="_blank" rel="noreferrer"&gt;forums&lt;/a&gt; later, I present to you … &lt;em&gt;&lt;strong&gt;&lt;a href="https://github.com/jasonbraganza/anki-push-u" target="_blank" rel="noreferrer"&gt;anki-push-u&lt;/a&gt;!&lt;/strong&gt;&lt;/em&gt;&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;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!&lt;br&gt;
No more forgetting due cards!&lt;/p&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/anki-pushover-notifications.png" alt="A screenshot of Pushover notifications on two devices" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;&lt;a href="https://github.com/jasonbraganza/anki-push-u" target="_blank" rel="noreferrer"&gt;Find the add-on and instructions over at Github.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: anki-push-u, Creating a Tiny Pushover Addon for Anki
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I’m looking at you, ailleurs&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Hugo updates on three machines, calibre updates on two machines, podcast downloads and quite a bit else&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;It pushes you to do your due cards! Tada!&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/some-site-housekeeping-new-sections-and-rss-feeds/</guid><description>&lt;p&gt;&lt;br&gt;

&lt;a href="https://janusworx.com/images/2024/site-housekeeping-new-sections-feeds-1.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/site-housekeeping-new-sections-feeds-1-s.jpg" alt="image of a giant spanner; the size of a tree, lying half embedded in the ground, with the other half in the air" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Hard at work, on the site&lt;br&gt;
Click the image, to embiggen&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;If you look at the site today, you’ll see that ye olde blog section has disappeared.&lt;br&gt;
I’ve replaced it with three sections, Work, Personal and Reading.&lt;br&gt;
I’ve done this primarily for me.&lt;/p&gt;
&lt;p&gt;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.&lt;br&gt;
Work to hold everything I consider work.&lt;br&gt;
Reading for the bookworm in me.&lt;br&gt;
And finally personal for everything else.&lt;/p&gt;
&lt;p&gt;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.&lt;br&gt;
I didn’t like it.&lt;br&gt;
Ergo, the reorganisation.&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;&lt;a href="https://janusworx.com/images/2024/site-housekeeping-new-sections-feeds-2.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/site-housekeeping-new-sections-feeds-2-s.jpg" 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." /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Every one in their own pretty place now.&lt;br&gt;
Click the image, to embiggen&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;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.&lt;br&gt;
Same with the personal stuff and the reading.&lt;/p&gt;

&lt;h3 class="relative group"&gt;How does this affect you, my kind and gentle reader?
 &lt;div id="how-does-this-affect-you-my-kind-and-gentle-reader" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-does-this-affect-you-my-kind-and-gentle-reader" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;And finally, if you subscribe via RSS, you my friend are probably affected.&lt;br&gt;
&lt;a href="https://janusworx.com/index.xml" target="_blank" rel="noreferrer"&gt;The main feed&lt;/a&gt;, with all articles, still remains the same, so if you drink from the firehose, nothing changes.&lt;br&gt;
If you’re subscribed to a tag specific feed, like Emacs or DGPLUG, nothing changes.&lt;br&gt;
The only change is that the blog feed has disappeared. In its place are three spanking new feeds, representing my new sections.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://janusworx.com/work/index.xml" target="_blank" rel="noreferrer"&gt;The Work Feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://janusworx.com/personal/index.xml" target="_blank" rel="noreferrer"&gt;The Personal Feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://janusworx.com/reading/index.xml" target="_blank" rel="noreferrer"&gt;The Reading Feed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;And that about does it. &lt;strong&gt;&lt;em&gt;Happy Reading!&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Some Site Housekeeping (New Sections and RSS Feeds)
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/notes-to-self-on-compiling-qbittorrent-on-a-raspberry-pi-5/</guid><description>&lt;div style="font-size: 85%; "&gt;
&lt;p&gt;&lt;em&gt;Update, 2024-08-20:&lt;br&gt;
Added a missing step, to install the qBittorrent files to their relevant places&lt;br&gt;
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 😂&lt;br&gt;
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!&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/compilation-of-letters.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;A compilation of letters, courtesy &lt;a href="https://www.cosmos.so/e/252611461" target="_blank" rel="noreferrer"&gt;Cosmos&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

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

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Notes to Self, Compiling Qbittorrent on a Raspberry Pi 5
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;which the project does make provisions for.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;&lt;code&gt;Target &amp;quot;qbt_base&amp;quot; links to: Qt::CorePrivate but the target was not found.&lt;/code&gt; or words to that effect&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/doing-devops-dropping-rust/</guid><description>&lt;p&gt;Been struggling to do it all over the past few months.&lt;br&gt;
But no! Life says no :)&lt;/p&gt;
&lt;p&gt;So I’m building some margin into my life.&lt;br&gt;
And the only thing I can talk about work wise, is the familiarity I am trying to gain as part of the career pivot.&lt;br&gt;
The Devops Stuff.&lt;br&gt;
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.&lt;/p&gt;
&lt;p&gt;Problem though, is what do I write?&lt;br&gt;
I don’t have a good spin on most computer devops stuff. I don’t know what to say.&lt;br&gt;
So for now, they probably will be, just like I point above, boring progress logs.&lt;br&gt;
Mostly consistent, to give me accountability.&lt;br&gt;
And hopefully, I’ll find a voice.&lt;/p&gt;
&lt;p&gt;On the personal front, books, reading, art, language, poetry, photography and other posts will continue. Those are what make my soul sing :)&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Doing Devops, Dropping Rust
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/note-to-self-linking-to-a-headline-in-an-org-file/</guid><description>&lt;p&gt;I did one of those periodic, empty your mind sessions today.&lt;br&gt;
Everything is now in a brain dump org file.&lt;br&gt;
And now, like a every good productivity system preaches, I want to review the dump periodically.&lt;br&gt;
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?&lt;br&gt;
Turns out Org Mode links let me do just that.&lt;br&gt;
All I need to do, is first &lt;em&gt;“&lt;a href="https://orgmode.org/manual/Handling-Links.html#Handling-Links-1" target="_blank" rel="noreferrer"&gt;store a link&lt;/a&gt;”&lt;/em&gt; 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 &lt;code&gt;C-c l&lt;/code&gt;&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-links-1.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;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 (&lt;em&gt;“&lt;a href="https://orgmode.org/manual/Handling-Links.html#index-C_002dc-C_002dl" target="_blank" rel="noreferrer"&gt;inserting a link&lt;/a&gt;”&lt;/em&gt; in org speak. In my case, the top file in the screenshot below).&lt;br&gt;
I select the Misc Brain Dump part of the “Look at the Misc Brain Dump” task and hit&lt;br&gt;
&lt;code&gt;C-c C-l&lt;/code&gt;&lt;br&gt;
It then switches me to a buffer that shows the links that Org currently has stored, with the minibuffer prompting me to choose one&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-links-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;I use the arrow keys to choose the one I want, hit return and it creates the link for me.&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-links-3.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;Here, I’ve switched away from my brain dump. (I’ve closed the file in fact)&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-links-4.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;I click the link in my tasks file and …&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;It opens right up, at the exact location I want. Woohoo!&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-links-5.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;And just like everything else with Org, it’s plain, simple, elegant, text functionality.&lt;br&gt;
I examined the link and it was a borg standard Org link, with the link having the header tacked on the end, like so …&lt;br&gt;
&lt;code&gt;file:brain-dump.org::*Misc Brain Dump&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Note to Self, Linking to a Headline in an Org File
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;which should have been evident when I chose the link to insert, but I only saw it and went Aha! much later 😂&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/moved-my-music-library-from-jellyfin-to-emby-today/</guid><description>&lt;p&gt;I had moved off Plex, close to two years ago, because … reasons.&lt;br&gt;
Unable to decide between Emby and Jellyfin and having just learned containers at the time, I deployed both on my Pi.&lt;br&gt;
Emby handled video duties while Jellyfin did music.&lt;/p&gt;
&lt;p&gt;And now after close to two years, I’m moving off Jellyfin to Emby.&lt;br&gt;
The only reason being its iOS client.&lt;br&gt;
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.&lt;br&gt;
I cannot turn the phone off, else the music goes off.&lt;br&gt;
I cannot switch away from the Jellyfin app, else the music goes off.&lt;br&gt;
If I get a call, then the app sorta-kinda loses its mind and I have to kill it and relaunch it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;All&lt;/strong&gt;&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;So … I moved.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Setting the stage
 &lt;div id="setting-the-stage" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#setting-the-stage" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;There had to be &lt;em&gt;two&lt;/em&gt; instances of Emby running. I don’t want my video online and so I don’t want it exposed&lt;/li&gt;
&lt;li&gt;Video is secondary anyway. So that had to be the second container. The main one is Music.&lt;/li&gt;
&lt;li&gt;Music needs to be accessible from anywhere on the web.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Doing it
 &lt;div id="doing-it" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#doing-it" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I already had docker running and installed, along with Nginx&lt;/li&gt;
&lt;li&gt;Jellyfin has better documentation. So I used &lt;a href="https://jellyfin.org/docs/general/networking/nginx/" target="_blank" rel="noreferrer"&gt;their guide&lt;/a&gt; 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 &lt;code&gt;jellyfin&lt;/code&gt; to &lt;code&gt;embymusicserver&lt;/code&gt; (along with the rest of the require settings.)&lt;/li&gt;
&lt;li&gt;I created a folder to hold Emby’s &lt;a href="https://hub.docker.com/r/emby/embyserver/" target="_blank" rel="noreferrer"&gt;&lt;code&gt;docker compose&lt;/code&gt;&lt;/a&gt; file. I modified the container name to &lt;code&gt;embymusicserver&lt;/code&gt; 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;amp; 8921 to avoid conflicts with Jellyfin, so I did not have to touch that.)&lt;/li&gt;
&lt;li&gt;Assigned ownership recursively to the user that would run the container.&lt;/li&gt;
&lt;li&gt;Did a &lt;code&gt;docker compose up&lt;/code&gt; to see if everything came up ok. And then tore it down&lt;/li&gt;
&lt;li&gt;And finally, once again, adapted my &lt;a href="https://jellyfin.org/docs/general/installation/container#using-docker-compose" target="_blank" rel="noreferrer"&gt;old Jellyfin systemd script&lt;/a&gt; to ensure I could have it start and stop with the system&lt;/li&gt;
&lt;/ul&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/emby-1.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/emby-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;And thank you for all you do, Jellyfin. I shall return as soon as the app gets more useful.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Moved My Music Library From Jellyfin to Emby Today
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></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><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/assigning-keyboard-shortcuts-to-nemo-actions/</guid><description>&lt;p&gt;Everytime I download a &lt;a href="https://www.humblebundle.com/books/dynamite-20th-anniversary-20000page-mega-bundle-books" target="_blank" rel="noreferrer"&gt;Humble Bundle&lt;/a&gt;, I’m left with a ton of books, in various formats on my desktop.&lt;br&gt;
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&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, when adding them.&lt;/p&gt;
&lt;p&gt;I’ve been using Pedro Santana’s, &lt;a href="https://github.com/pedro-augusto-santana/nemo_create_new_folder_with_selection" target="_blank" rel="noreferrer"&gt;nifty little Nemo action&lt;/a&gt; to help me do just this.&lt;br&gt;
Once installed, all I need to do is select my files, right click on them and then create a new folder, like so …

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/nemo-action-1.png" alt="nemo cinnamon screenshot with no pointer in the context command" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;br&gt;
When doing this with close to 250+ files, this quickly gets tedious.&lt;br&gt;
&lt;a href="https://stackoverflow.com/a/42786928" target="_blank" rel="noreferrer"&gt;Stack Overflow to the rescue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Turns out that all I needed to do was add an &lt;code&gt;_&lt;/code&gt; in front of the letter, I wanted to use to activate my little action from the context menu.&lt;br&gt;
My original action went …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Nemo&lt;/span&gt; &lt;span class="nx"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Active&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;folder&lt;/span&gt; &lt;span class="nx"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;selection&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I decided to use the &lt;em&gt;n&lt;/em&gt; in &lt;em&gt;selection&lt;/em&gt;. &lt;em&gt;&lt;strong&gt;N&lt;/strong&gt;&lt;/em&gt; for &lt;em&gt;new folder&lt;/em&gt;. Easy to remember! So with this tiny change …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-TOML" data-lang="TOML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;folder&lt;/span&gt; &lt;span class="nx"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;selectio_n&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I get to do this!&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/nemo-action-2.png" alt="nemo cinnamon screenshot that lets me use a custom key in the context command" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;I can select, get the context menu, hit n, type in the folder name and done!&lt;br&gt;
It’s still a lot of work when there’s lots of files, but there’s a seamless flow to the entire process.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Assigning Keyboard Shortcuts to Nemo Actions
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a href="https://manual.calibre-ebook.com/gui.html#add-books" target="_blank" rel="noreferrer"&gt;point two, in this section of the documentation&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Notes to Self on Renewing Wildcard Letsencrypt Certs Manually With Lego</title><link>https://janusworx.com/work/notes-to-self-on-renewing-wildcard-letsencrypt-certs-manually-with-lego/</link><pubDate>Fri, 31 May 2024 11:12:17 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/notes-to-self-on-renewing-wildcard-letsencrypt-certs-manually-with-lego/</guid><description>&lt;p&gt;&lt;br&gt;
&lt;br&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/lego-logo.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;image courtesy, the &lt;a href="https://github.com/go-acme/lego" target="_blank" rel="noreferrer"&gt;Lego Github page&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;I want to someday, automate all my domain certificate renewals.&lt;br&gt;
Namecheap doesn’t support it, ergo my move to &lt;a href="https://porkbun.com/about" target="_blank" rel="noreferrer"&gt;Porkbun&lt;/a&gt;.&lt;br&gt;
And &lt;code&gt;certbot&lt;/code&gt; doesn’t support Porkbun, so I’ve moved to &lt;a href="https://github.com/go-acme/lego" target="_blank" rel="noreferrer"&gt;Lego&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I still need to someday figure out how to do this automatically, but for now, since all is in place, this is the new manual process.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You’ll need to generate a Porkbun API key along with its associated secret, and store it somewhere safe and secure. (This is a one time thing, the &lt;a href="https://kb.porkbun.com/article/190-getting-started-with-the-porkbun-api" target="_blank" rel="noreferrer"&gt;Generating API keys&lt;/a&gt; section here describes how)&lt;/li&gt;
&lt;li&gt;Another one time step is to &lt;a href="https://go-acme.github.io/lego/installation/" target="_blank" rel="noreferrer"&gt;get Lego installed&lt;/a&gt; and have it &lt;a href="https://go-acme.github.io/lego/dns/porkbun/" target="_blank" rel="noreferrer"&gt;generate your certs&lt;/a&gt;,
and then have your applications, point to where they are.&lt;/li&gt;
&lt;li&gt;Command to renew: &lt;code&gt;PORKBUN_SECRET_API_KEY=&amp;quot;your-api-*secret*&amp;quot; PORKBUN_API_KEY=&amp;quot;your-porkbun-api-key&amp;quot; ./lego --domains your-domain.tld --domains *.domain.tld --email your-email@domain --dns porkbun renew&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;And the renewal’s done!&lt;/li&gt;
&lt;li&gt;Restart yer engines … err your applications&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; et voilà!&lt;/li&gt;
&lt;li&gt;If you have multiple machines, figure out a way to securely transfer the certs there too.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Notes to Self on Renewing Wildcard Letsencrypt Certs Manually With Lego
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;in my case Nginx&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Using Hugo Variables to Help With Mailto Links in Hugo</title><link>https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/</link><pubDate>Thu, 30 May 2024 18:17:35 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/using-hugo-variables-to-help-with-mailto-links-in-hugo/</guid><description>&lt;p&gt;The feedback email address seems to be getting traction and I’m getting more mail every week.&lt;/p&gt;
&lt;p&gt;I wanted to make it easier on myself and for the kind folks who write in, by including the title of the post in the subject of the email.&lt;br&gt;
Right now, every one tells me what post they are talking about, which as I said in exceedingly kind of the folks who write in. My posts seem to be reaching really considerate people :)&lt;/p&gt;
&lt;p&gt;So a teensy bit of head-scratching later, I remembered I use shortcodes to inject custom HTML into my pages. I remembered Hugo has variables I could access. And I remembered &lt;code&gt;mailto&lt;/code&gt; links let me add a subject parameter to the link.&lt;/p&gt;
&lt;p&gt;So, 1+2+3=Sucess! (Or so I hoped)&lt;/p&gt;
&lt;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;'/&gt;


&lt;h3 class="relative group"&gt;The How
 &lt;div id="the-how" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-how" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;I looked up the variable, I needed to get at the post’s title. It’s called &lt;code&gt;.Page.Title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I created a &lt;code&gt;hpt.html&lt;/code&gt; in my Hugo’s &lt;code&gt;layouts/shortcodes&lt;/code&gt; directory to hold the little snippet that’d get typed in the email’s subject field. This is all it contains:&lt;br&gt;
&lt;code&gt;Feedback on post: {{ .Page.Title }}&lt;/code&gt;&lt;br&gt;
Hugo will grab this snippet whenever it runs and put in the post’s title in place of the placeholder.&lt;/li&gt;
&lt;li&gt;And then I can use that in a &lt;code&gt;mailto&lt;/code&gt; link like so, &lt;code&gt;[feedback at this domain](dummyemail@dummydomain.local?subject=&amp;quot;{{&amp;lt; hpt &amp;gt;}}&amp;quot;)&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And tada! 1+2+3 does indeed equal success! You can see in action, by clicking on the link below to send me feedback 🙂&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: Using Hugo Variables to Help With Mailto Links in Hugo
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;This is a markdown formatted link. You can ofcourse use HTML&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>My Experience With the Kinesis Advantage 360 After a Day of Use</title><link>https://janusworx.com/work/kinesis-advantage-360/</link><pubDate>Wed, 29 May 2024 20:02:51 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/kinesis-advantage-360/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href="https://janusworx.com/work/kinesis-advantage-360/#updates" &gt;Updates&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;I’ll update this post periodically as I get more familiar with the keyboard&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;

&lt;a href="https://janusworx.com/images/2024/kinesis-advantage-360.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/kinesis-advantage-360s.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;I find the curvy, ungainly shape really beautiful. Click to enlarge&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;If you follow me on the fediverse, you’ve already read most of this.&lt;/p&gt;
&lt;p&gt;Long story short, my wrists (and now, my elbows and arms) are killing me.&lt;br&gt;
So, I saved up and got me a new, split, ergonomic keyboard: &lt;a href="https://kinesis-ergo.com/shop/adv360/" target="_blank" rel="noreferrer"&gt;The Kinesis Advantage 360&lt;/a&gt;&lt;br&gt;
It’s available in the US at around 500USD. I paid close to twice that to import it home, to India (via a seller on the Amazon India site)&lt;br&gt;
Lots of bullet points after a day of use.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All of its ergonomic and software power is QWERTY first and Windows/Mac first. A Dvorak, Linux user like me, will need to adjust quite a bit&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Everything’s slowed to a crawl as I get used to the new key placements.&lt;/li&gt;
&lt;li&gt;The Dvorak layout seems to work better on this than on my old keyboard&lt;/li&gt;
&lt;li&gt;The key layout and spacing is throwing everything off&lt;/li&gt;
&lt;li&gt;Realised some of my keyboard shortcuts were that way, because of the old keyboard layout. They are terrible on the new keyboard. Need to find new shortcuts for ulauncher, minimising windows, and the gpaste clipboard manager&lt;/li&gt;
&lt;li&gt;My caps lock is the compose key and i need to see if the new position will help or hinder me&lt;/li&gt;
&lt;li&gt;totally gotten used to the new space, return and backspace keys&lt;/li&gt;
&lt;li&gt;totally not used to the placement of esc. will try a week to see if i can get used to it.&lt;/li&gt;
&lt;li&gt;new ways of chording keys in emacs. seem to be easier on the wrists. (because of the new place for the ctrl and alt keys)&lt;/li&gt;
&lt;li&gt;my wrists feel much better. no idea how much of this is placebo. will know for sure only after a while&lt;/li&gt;
&lt;li&gt;bottom row keys are tough right now&lt;/li&gt;
&lt;li&gt;got used to the compose key&lt;/li&gt;
&lt;li&gt;the question mark and slash has moved below and to the right (dvorak), so will need to see if i adjust&lt;/li&gt;
&lt;li&gt;i miss my numpad so much!&lt;/li&gt;
&lt;li&gt;learned how to mount the onboard flash storage and eject it properly&lt;/li&gt;
&lt;li&gt;updated firmware to the latest version.&lt;/li&gt;
&lt;li&gt;also note to self, switch to querty before you do this. status reports are typed out wonky other wise&lt;/li&gt;
&lt;li&gt;I have brown switches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The one thing I confidently say, even after a single day of use, is that this is a lovely keyboard.&lt;br&gt;
I will get used to all its quirks, because the scalloped, split design suits me really well.&lt;br&gt;
Most of it, is just changing muscle memory, not learning new painful maneuvers.&lt;br&gt;
And the design also ensures, &lt;em&gt;every single key&lt;/em&gt; is in reach of my fingers. This is the magical part for me.&lt;br&gt;
If it lasts me five years, I’ll consider it money well spent.&lt;/p&gt;
&lt;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;'/&gt;


&lt;h2 class="relative group"&gt;Updates
 &lt;div id="updates" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#updates" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;2024-07-02
 &lt;div id="2024-07-02" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2024-07-02" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Gotten used to the layout for the most part. The arrow keys are still very troublesome and trip me up all the time. Realise how deep muscle memory actually is.&lt;br&gt;
The only reason I don’t want to change them, is that they (the new keys) are easy on my fingers and when I’m intentional about them, are easy to use.&lt;br&gt;
The Compose key and the &lt;code&gt;:&lt;/code&gt; keys will still take a while getting used to.&lt;br&gt;
Have gotten the hang of /, ?, = and + though.&lt;br&gt;
Have gotten back to my old speed. My error rate is still &lt;em&gt;really&lt;/em&gt; high. Most of my friends have now gotten used to my typos 😂&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;?subject=%22Feedback on post: My Experience With the Kinesis Advantage 360 After a Day of Use
%22" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;for e.g., the [ key finds itself at the top right, while the ] key finds itself top left 😂&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Ignoring Syncthing Conflict Files in the Org Agenda Folder</title><link>https://janusworx.com/work/ignoring-syncthing-conflict-files-in-org-agenda-folder/</link><pubDate>Sun, 26 May 2024 16:03:01 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/ignoring-syncthing-conflict-files-in-org-agenda-folder/</guid><description>&lt;p&gt;Now that I have &lt;a href="https://janusworx.com/blog/org-mode-clocking-in-and-out-of-tasks-on-task-state-changes/" &gt;the power of large language models&lt;/a&gt;, in the palm of my hand …&lt;br&gt;
&lt;br&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/he-man-i-have-the-power.gif" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;You just had to be there, to really appreciate this 😂&lt;br&gt;
Image, courtesy user &lt;a href="https://makeagif.com/i/Mz4AjF" target="_blank" rel="noreferrer"&gt;straiven on makeagif&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;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;'/&gt;

I decided to see, if it could help me solve one of my real pain points with Org Mode.&lt;br&gt;
I had asked for help &lt;a href="https://toots.dgplug.org/@jason/112483224007964606" target="_blank" rel="noreferrer"&gt;over on the fediverse&lt;/a&gt;, after months of trial and error, on just how to fix this.&lt;br&gt;
The issue being, I needed a way to tell my Org Agenda, to ignore files with a certain pattern.&lt;/p&gt;
&lt;p&gt;I have a folder (called &lt;code&gt;syncbox&lt;/code&gt;) full of files, that Org Mode looks at to generate the agenda for me.&lt;br&gt;
Now these files are also synced via &lt;a href="https://syncthing.net/" target="_blank" rel="noreferrer"&gt;Syncthing&lt;/a&gt; over to my phone, where another program called &lt;a href="https://www.beorgapp.com/" target="_blank" rel="noreferrer"&gt;Beorg&lt;/a&gt; looks at them too and shows them as entries in my calendar, so that I don’t miss the really important things I need to do.&lt;/p&gt;
&lt;p&gt;Functionally, all is well with this setup, except for one teensy thing.&lt;br&gt;
Every once in a while, when certain files are in use on both, my desktop and my phone, Syncthing will create conflicting copies of said files in use.&lt;br&gt;
This happens most often, with my &lt;code&gt;tasks.org&lt;/code&gt; file.&lt;br&gt;
Once it conflicts, my &lt;code&gt;syncbox&lt;/code&gt; gets full with files like,&lt;br&gt;
&lt;code&gt;tasks.sync-conflict-20240408-041556-2TQWENY.org&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;tasks.sync-conflict-20240516-101335-2TQWENY.org&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;tasks.sync-conflict-20240520-053451-2TQWENY.org&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What happens &lt;em&gt;then,&lt;/em&gt; is that Org Agenda happily reads those files too, and I end up with lots of duplicated tasks.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;As usual, tackling it by writing lisp, was an idea fraught with terror for me. I tried quite a bit and failed.&lt;br&gt;
My next plan of attack was that Org Agenda had a regex&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;, that it would process. My regex is better than my lisp, but even that was to no avail.&lt;br&gt;
Emacs regex does not support lookaheads / lookbehinds and I did not want to have some complicated pattern, that even I would not recognise, a few months down the line.&lt;br&gt;
In the meanwhile, Ihor told me to stop faffing about and &lt;a href="https://emacs.ch/@yantar92/112484511603174787" target="_blank" rel="noreferrer"&gt;just write&lt;/a&gt; a function&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;So I asked Claude to go do the work for me and I ended up with …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;mjb/set-org-agenda-files-from-syncbox-directory&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Set &lt;/span&gt;&lt;span class="ss"&gt;`org-agenda-files&amp;#39;&lt;/span&gt;&lt;span class="s"&gt; to all Org files in the &amp;#39;syncbox&amp;#39; directory, excluding files with &amp;#39;.sync-conflict&amp;#39; in the name.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;let&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;syncbox-dir&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;expand-file-name&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;syncbox&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;my-org-directory&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;file-directory-p&lt;/span&gt; &lt;span class="nv"&gt;syncbox-dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;org-agenda-files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mapcar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;expand-file-name&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt; &lt;span class="nv"&gt;syncbox-dir&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;seq-filter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;string-match-p&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;\\.sync-conflict&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;directory-files&lt;/span&gt; &lt;span class="nv"&gt;syncbox-dir&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;\.org$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)))))))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;mjb/set-org-agenda-files-from-syncbox-directory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;which I dutifully dumped into my &lt;code&gt;init&lt;/code&gt; file.&lt;br&gt;
And that did the trick!&lt;/p&gt;
&lt;p&gt;What did strike me, is that now that I am using this approach, my chicken and egg struggle is finally at an end. I don’t have to struggle to learn lisp to hack emacs which needs me to learn lisp.&lt;br&gt;
I realise it takes only a short time of dedicated effort. But right now, it is time I don’t have, and don’t know when I’ll get.&lt;br&gt;
So the new fangled LLM AIs can help me sort my Emacs pain points and I can learn Lisp at leisure.&lt;br&gt;
And I’ll use, &lt;a href="https://framapiaf.org/@vindarel" target="_blank" rel="noreferrer"&gt;friend on the fediverse&lt;/a&gt;, Vincent Dardel’s &lt;a href="https://www.udemy.com/course/common-lisp-programming/?couponCode=NVDPRODIN35" target="_blank" rel="noreferrer"&gt;excellent course to do just that&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;It drove me nuts in the beginning, when I did not know what was happening. I was like, I /just/ finished this task. And it’s popping up again?! Is my computer haunted?&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;defined in &lt;code&gt;org-agenda-file-regexp&lt;/code&gt; with a default value of &lt;code&gt;&amp;quot;\\`[^.].*\\.org\\'&amp;quot;&lt;/code&gt;&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;He did not quite put it that way. He was much kinder, obviously :)&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Org Mode Clocking in and Out of Tasks on Task State Changes</title><link>https://janusworx.com/work/org-mode-clocking-in-and-out-of-tasks-on-task-state-changes/</link><pubDate>Thu, 23 May 2024 19:03:13 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/org-mode-clocking-in-and-out-of-tasks-on-task-state-changes/</guid><description>
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/org-mode-unicorn.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Logo courtesy, the &lt;a href="https://orgmode.org/" target="_blank" rel="noreferrer"&gt;Org Mode Website&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;Lisp is on the list of things to learn someday.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
And in the meanwhile, I need to be able to hack Emacs to do the stuff I want.&lt;br&gt;
But also, there are a ton of other things, that are currently much, much higher on my list of priorities.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
And while the community is &lt;em&gt;&lt;strong&gt;extremely&lt;/strong&gt;&lt;/em&gt; kind and generous, the expectation is that you need to put in the time and the work.&lt;br&gt;
Which I currently don’t have and can’t do.&lt;/p&gt;
&lt;p&gt;And so, it finally happened.&lt;br&gt;
I signed up for a Claude account and told it to write me some lisp.&lt;/p&gt;
&lt;p&gt;I am heavily Org Mode task driven, these days and I have a manual workflow that I need a teensy bit of help with.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I start work on a task&lt;/li&gt;
&lt;li&gt;I mark it as WORKING (and clock in manually)&lt;/li&gt;
&lt;li&gt;I want to switch to another task&lt;/li&gt;
&lt;li&gt;I mark my original task as WAITING (and clock out manually)&lt;/li&gt;
&lt;li&gt;I then mark my new task as WORKING (and clock in manually)&lt;/li&gt;
&lt;li&gt;After a while I switch to the original task, and clock in manually (after marking the current task as WAITING and clocking out there manually)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What bugs me, is the clocking in and out, because …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I tend to forget it, messing up all my clock times and …&lt;/li&gt;
&lt;li&gt;because it is now becoming painful on my middle aged fingers&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;,&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, like I said, I prompted Claude to give me code that would clock me in automatically, whenever I changed state to WORKING and clock me out when I switched to WAITING&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
It spat out some code.&lt;br&gt;
I tried to reasonably guess and verify what it did.&lt;br&gt;
It looked ok.&lt;br&gt;
I tried it.&lt;br&gt;
It worked!&lt;br&gt;
And that’s that.&lt;br&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;mjb/org-clock-in-when-task-state-changes-to-working&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Clock in an Org mode task when the status is changed to &amp;#39;WORKING&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;eq&lt;/span&gt; &lt;span class="nv"&gt;major-mode&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;member&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;downcase&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;or&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;org-get-todo-state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;working&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;org-clock-in&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;mjb/org-clock-out-when-task-state-changes-to-waiting&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Clock out an Org mode task when the status is changed to &amp;#39;WAITING&amp;#39;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;eq&lt;/span&gt; &lt;span class="nv"&gt;major-mode&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;org-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;member&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;downcase&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;or&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;org-get-todo-state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;waiting&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;org-clock-out&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;; These lines make the functions above, hook to Org’s state change mechanism.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;; So that everytime a task’s state changes, these functions are called&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;org-after-todo-state-change-hook&lt;/span&gt; &lt;span class="nf"&gt;#&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;mjb/org-clock-in-when-task-state-changes-to-working&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;org-after-todo-state-change-hook&lt;/span&gt; &lt;span class="nf"&gt;#&amp;#39;&lt;/span&gt;&lt;span class="nv"&gt;mjb/org-clock-out-when-task-state-changes-to-waiting&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;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;'/&gt;

Reminds me of the old adages about humans and bicycles being the fastest and humans and chess programs&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;, being the best players.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
All of it is good, if it aids me, and hopefully does not get in my way.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;soon&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;getting up to speed with the current devops/cloud landscape, for instance&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Yes, I could reassign them to easier keys, but just having it done automatically is better&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;the task state switches are second nature and don’t bother me much&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;Centaurs, I think, the combination is called&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;and of course, the pilots and giant mechas in Pacific Rim&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Rust</title><link>https://janusworx.com/work/rust/</link><pubDate>Wed, 22 May 2024 16:32:40 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/rust/</guid><description>&lt;p&gt;Alright!&lt;br&gt;
Trying to get back to writing. (attempt no. 87,245)&lt;/p&gt;
&lt;p&gt;And trying to learn Rust and document the journey at the same time.&lt;/p&gt;
&lt;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;'/&gt;


&lt;h3 class="relative group"&gt;Why?
 &lt;div id="why" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I want to learn a language that can give me free standing executables to distribute.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;I want a &lt;em&gt;fast&lt;/em&gt; language. (rather a language that generates fast programs.)&lt;/li&gt;
&lt;li&gt;The little that I’ve learnt of C (which fascinates me), has convinced me that I am one of those folks, who will definitely shoot myself in the foot with it. And most stuff is manual. I’m willing to do the work, but not &lt;em&gt;all&lt;/em&gt; the work. Lazy and all that :)&lt;/li&gt;
&lt;li&gt;That boils it down to C++ &amp;amp; Rust.&lt;/li&gt;
&lt;li&gt;To my mind, it’s an easier path from Python to Rust. The shapes of things are similar. Like Fred Ross would put it, it’s &lt;em&gt;not&lt;/em&gt; an &lt;a href="https://madhadron.com/programming/seven_ur_languages.html" target="_blank" rel="noreferrer"&gt;ur-language&lt;/a&gt; for me.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;And at this point, it was just looking at a Rust error message that did it for me. Short. Sane. Sensible.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;The Plan
 &lt;div id="the-plan" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-plan" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;There’s no grand plan here, unlike Python where I just had to know everything&lt;/li&gt;
&lt;li&gt;Just do a tiny bit daily and write about it. That’s it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;It’s hard with Python.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Lisp is! :)&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;I hope the documentation is as good. I haven’t read much. The little that I have befuddled me. But that is just because of the new, new thing.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Note to Self Footnotes Using Littlefoot.js</title><link>https://janusworx.com/work/note-to-self-footnotes-using-littlefoot.js/</link><pubDate>Wed, 28 Feb 2024 08:10:36 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/note-to-self-footnotes-using-littlefoot.js/</guid><description>&lt;p&gt;&lt;br&gt;

&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/footnotes.png" alt="Two feet side by side, with a marker illustration on them. theres a figure 1 on one foot. a small cartoon lion on the other. and a dashed path drawn across one foot to the other, linking them." /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Courtesy &lt;a href="https://flickr.com/photos/dothegreenthing/7401372664/" target="_blank" rel="noreferrer"&gt;dothegreenthing&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/by-nc/2.0/" target="_blank" rel="noreferrer"&gt;CC BY-NC 2.0&lt;/a&gt;, on Flickr&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;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;'/&gt;

I have this amazing urge never to leave well enough alone.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
The blog uses an amazing theme, called &lt;a href="https://adityatelange.github.io/hugo-PaperMod/" target="_blank" rel="noreferrer"&gt;PaperMod&lt;/a&gt;.&lt;br&gt;
And ofcourse, like I said, because I can’t leave well enough alone, I’ve customised it heavily.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
The fonts are different, there are various kinds of slight colour changes, I bullied &lt;a href="https://github.com/adityatelange" target="_blank" rel="noreferrer"&gt;Aditya&lt;/a&gt; into showing me how to &lt;a href="https://github.com/adityatelange/hugo-PaperMod/issues/62#issuecomment-1375160640" target="_blank" rel="noreferrer"&gt;build a Menu&lt;/a&gt;, there are lots of custom &lt;a href="https://gohugo.io/content-management/shortcodes/" target="_blank" rel="noreferrer"&gt;Hugo shortcodes&lt;/a&gt; and there were footnotes powered by a nifty little Javascript library called &lt;a href="https://littlefoot.js.org/" target="_blank" rel="noreferrer"&gt;littlefoot.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now everything &lt;em&gt;was&lt;/em&gt; fine and dandy.&lt;br&gt;
There are folks who &lt;em&gt;do&lt;/em&gt; leave well enough alone. Their blogs stay up and running for years on end, held together with nothing more than spit and baling wire.&lt;br&gt;
Those folks aren’t me, sadly. Aditya keeps improving the theme and I really wanted the new shiny. &lt;a href="https://github.com/adityatelange/hugo-PaperMod/releases/tag/v7.0" target="_blank" rel="noreferrer"&gt;So I went and got it.&lt;/a&gt;&lt;br&gt;
And everything broke!&lt;br&gt;
I got weird artifacts. RSS broke. Fonts broke. Footnotes broke.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;I’ve managed to put everything back together, over the past week, and I &lt;em&gt;just&lt;/em&gt; got footnotes working again yesterday.&lt;br&gt;
So a few notes to myself, on what to do, when I break it again.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
Footnotes today, and the rest later …&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

So here goes,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The litlefoot.js repo has &lt;a href="https://github.com/goblindegook/littlefoot#usage" target="_blank" rel="noreferrer"&gt;excellent documentation&lt;/a&gt;. That’s where you pulled everything from (for when you wonder, just &lt;em&gt;how&lt;/em&gt; you figured all the CSS out)&lt;/li&gt;
&lt;li&gt;You download a static copy with a &lt;code&gt;npm install --save littlefoot&lt;/code&gt; and then stick it into Hugo’s static folder&lt;/li&gt;
&lt;li&gt;Copy the &lt;code&gt;extend_head.html&lt;/code&gt; from the theme’s &lt;code&gt;layout/partials&lt;/code&gt; into your own. You should already have an &lt;code&gt;extend_footer.html&lt;/code&gt; since you put in PaperMod’s hamburger stuff in there.&lt;/li&gt;
&lt;li&gt;Adapt the &lt;a href="https://github.com/goblindegook/littlefoot#usage-from-a-cdn" target="_blank" rel="noreferrer"&gt;Usage from a CDN&lt;/a&gt; step to directly access it from &lt;code&gt;/littlefoot/dist/…&lt;/code&gt; instead of &lt;a href="https://unpkg.com/" target="_blank" rel="noreferrer"&gt;UNPKG&lt;/a&gt;. Put the CSS link into your &lt;code&gt;extend_head.html&lt;/code&gt; and the JS into &lt;code&gt;extend_footer.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;We want the footnotes to be numbers, rather than floating ellipses. So modify the default (blank) script call in &lt;code&gt;extend_footer.html&lt;/code&gt;, to the stuff below. This is verbatim from the docs.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;application/javascript&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;littlefoot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;littlefoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;buttonTemplate&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;button
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; aria-label=&amp;#34;Footnote &amp;lt;% number %&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; class=&amp;#34;littlefoot__button&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; id=&amp;#34;&amp;lt;% reference %&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; title=&amp;#34;See Footnote &amp;lt;% number %&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;% number %&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;lt;/button&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; `&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;We want to style it a teensy bit, so those styles go into &lt;code&gt;extend_head.html&lt;/code&gt;. For some reason, it does not pick the footnote styling correctly when you put stuff into your normal &lt;code&gt;assets/css/extended/&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="nt"&gt;--Custom&lt;/span&gt; &lt;span class="nt"&gt;littlefoot&lt;/span&gt; &lt;span class="nt"&gt;styles--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;littlefoot&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*the --attributes come from the littlefoot.js docs*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*Change button background to something that works in both modes*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--button-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#666&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*Change padding to make the button rounder*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--button-padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*The footnote ought to be italicised*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--popover-font-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;italic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*Make the popover work with my theme’s colour scheme*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--popover-background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;--popover-text-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/*the oldstyle numerals used everywhere else, don’t look good here
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;		Neither do they align properly in the box.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;		So switch them to normal*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;font-variant-numeric&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*Italic numerals for the footnotes*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;font-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;italic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;littlefoot__button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c"&gt;/*very subjective. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;		try to get the numerals centred as much as I can.*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;middle&lt;/span&gt;&lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;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;'/&gt;

&lt;p&gt;Et voilà! Footnotes galore!&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/footnotes-2.png" alt="screenshot of a blogpost, with footnotes" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;It looks a little weird, a little like a billie goat walked across my post, pooping pellets across the page.&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
But it is my kind of weird now.&lt;br&gt;
And I love it :)&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;what we in the Mumbaiyya vulgar, would call, “Gaand mein keeda”.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Please for the love of God, don’t look that up. Very not safe.&lt;/strong&gt;&lt;/em&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Heavily, as in heavily for a guy who doesn’t quite know what he’s doing.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;All my fault obviously, with all the custom stuff. Nothing to do with the theme proper.&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;in the &lt;em&gt;&lt;strong&gt;far, far, far, future&lt;/strong&gt;&lt;/em&gt;; future Jason! Not any time soon, you hear!&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;“Pooping pellets on the posted page”, Now there’s a tongue twister 😂&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Org Mode Narrowing and Widening Buffers</title><link>https://janusworx.com/work/org-mode-narrowing-and-widening-buffers/</link><pubDate>Mon, 26 Feb 2024 09:40:17 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/org-mode-narrowing-and-widening-buffers/</guid><description>&lt;p&gt;tldr: &lt;code&gt;C-x n s&lt;/code&gt; to narrow, &lt;code&gt;C-x n w&lt;/code&gt; to widen&lt;/p&gt;
&lt;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;'/&gt;

&lt;p&gt;Now that life’s getting busier and busier, with lots more things on my plate, ye olde system of writing the day’s tasks down on paper does not work any more. Specially since, I’ve begun logging clock times&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. Writing them down by hand is a giant pain.&lt;br&gt;
This is what the plan’s begun to look like.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

&lt;a href="https://janusworx.com/images/2024/om-orgmode-narrow-widen-1.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/om-orgmode-narrow-widen-1.png" alt="a plan of tasks for a mediumish range of time" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;An unwieldy plan.&lt;br&gt;
Click this image or any below, for larger versions&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;I wanted to see, if Org would let me replicate what I did my hand, natively.&lt;br&gt;
Which in a nutshell was to look at the day sheet (on paper) for the nitty gritty and my organiser (currently my tasks.org file) for the big picture view.&lt;br&gt;
I bounce between the two often. And discrete focus is something I wanted to keep.&lt;/p&gt;
&lt;p&gt;The focus from wide …
&lt;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;'/&gt;

&lt;a href="https://janusworx.com/images/2024/om-narrow-wide-2.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/om-narrow-wide-2-s.jpg" alt="wide shot of Himalayan range. a valley with a tree line with the mountains in the back and the wide blue sky overheard" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;to narrow. And back …
&lt;a href="https://janusworx.com/images/2024/om-narrow-wide-1.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/om-narrow-wide-1-s.jpg" alt="a yellow Moss Rose" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://orgmode.org/worg/orgcard.html" target="_blank" rel="noreferrer"&gt;A bit of searching&lt;/a&gt; and this is the result! Woohoo!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://janusworx.com/images/2024/om-orgmode-narrow-widen-2.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/om-orgmode-narrow-widen-2.png" alt="the plan is now scoped to just today" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;Like I mentioned above, I hit &lt;code&gt;C-x n s&lt;/code&gt; next to my day’s headline to narrow the scope to just today. And a &lt;code&gt;C-x n w&lt;/code&gt; gets me back to the thirty thousand foot view.&lt;br&gt;
I think of them as, &lt;em&gt;s&lt;/em&gt; for slim and &lt;em&gt;w&lt;/em&gt; for wide, to keep them straight in my head.&lt;br&gt;
I’m intuiting this is Org’s &lt;a href="https://orgmode.org/manual/Sparse-Trees.html" target="_blank" rel="noreferrer"&gt;Sparse Tree&lt;/a&gt; Magic at play here. But learning that wizardry is a thing for another day.&lt;/p&gt;
&lt;p&gt;The important bit for me, is that I can focus when I working, without getting distracted.&lt;br&gt;
And then when I need to, zoom out to review what progress looks like and make changes, if I need to.&lt;/p&gt;
&lt;p&gt;I feel a bit sad though. I’ve given up &lt;a href="https://janusworx.com/blog/the-kobo-elipsa-2e-six-months-later/" &gt;book notes&lt;/a&gt; on paper. I’m giving up planning my day on paper. It feels like I’m losing something tangible. I miss paper.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;I hope to use these, to objectively measure where my time is &lt;em&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/em&gt; going&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Note to Self, Bookmark Your Work, Coda</title><link>https://janusworx.com/work/bookmark-your-work-coda/</link><pubDate>Sun, 25 Feb 2024 10:24:45 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/bookmark-your-work-coda/</guid><description>&lt;br&gt;

&lt;p&gt;&lt;a href="https://janusworx.com/images/2024/bookmark-coda-important-day-liniers.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/bookmark-coda-important-day-liniers.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;courtesy &lt;a href="https://comicskingdom.com/Macanudo/about" target="_blank" rel="noreferrer"&gt;Liniers&lt;/a&gt;, &lt;a href="https://comicskingdom.com/Macanudo/2024-02-24" target="_blank" rel="noreferrer"&gt;Comics Kingdom&lt;/a&gt;&lt;br&gt;
click to enlarge&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;&lt;a href="https://janusworx.com/blog/bookmark-your-work/" &gt;With all the hullabaloo yesterday&lt;/a&gt;, on how you’d go about organising your day, and things to let go of, and marking your place, I forgot the overarching &lt;a href="https://janusworx.com/tags/notetoself/" &gt;Note To Self.&lt;/a&gt;&lt;br&gt;
Please remember. &lt;em&gt;Never lose sight of what’s important.&lt;/em&gt;&lt;br&gt;
Never forget &lt;em&gt;why&lt;/em&gt; you’re doing all of this.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Note to Self, Bookmark Your Work</title><link>https://janusworx.com/work/bookmark-your-work/</link><pubDate>Sat, 24 Feb 2024 08:34:05 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/bookmark-your-work/</guid><description>&lt;div style="font-size: 85%; "&gt;
&lt;p&gt;&lt;em&gt;This started with a note to self on leaving breadcrumbs, and ended with a stream of consciousness journey on how I reached this conclusion. So what I’m trying to say, in a slightly rambling manner, is that this is a slightly incoherent, rambling post.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/bookmark.jpg" alt="A bookmark with the text on it, jocularly warning the reader, “The next page might be odd”" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;Courtesy, &lt;a href="https://flic.kr/p/A5WU35" target="_blank" rel="noreferrer"&gt;Delgrosso&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/by-nc-nd/2.0/" target="_blank" rel="noreferrer"&gt;CC BY-NC-ND 2.0&lt;/a&gt;, on Flickr&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;I’m running my days now to slow, daily, consistent tiny amounts of progress.&lt;br&gt;
And I am seeing results. When there are so many demands on my time, prioritising them and then doing them slowly yet consistently is yielding fruit.&lt;br&gt;
While I certainly enjoy the deep dive, full of focus, lost in work sessions a lot more, I have too much life happening to allocate that kind of time and attention to everything.&lt;br&gt;
The first thing I did, when I kinda-sorta revamped the way I went about my days&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, was to &lt;a href="https://www.artofmanliness.com/character/advice/via-negativa-adding-to-your-life-by-subtracting/" target="_blank" rel="noreferrer"&gt;drop as many hot potatoes&lt;/a&gt; as I could, and then &lt;a href="https://www.linkedin.com/learning/getting-things-done/do-delegate-defer" target="_blank" rel="noreferrer"&gt;d-d-d&lt;/a&gt;-ed all the small yet important things in my life.&lt;br&gt;
And then came to the sobering realisation that the rest of life just &lt;em&gt;had&lt;/em&gt; to be done and dealt with. Even things I don’t like.&lt;/p&gt;
&lt;p&gt;A couple of pieces then had to fall into place, before I gained some semblance of sanity and progress.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I can’t do it all. Some things, important things even, will fall through the cracks. Somethings that I &lt;em&gt;really&lt;/em&gt; want to do, will get pushed to someday/maybe and some will just never get done. I have to make my peace with it.&lt;/li&gt;
&lt;li&gt;Knowing what I am giving up, the things that I &lt;em&gt;am&lt;/em&gt; doing? They better be worth it.&lt;/li&gt;
&lt;li&gt;Making the time to think this through, and having mental muscle to &lt;em&gt;do&lt;/em&gt; the thinking&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; helped.&lt;/li&gt;
&lt;li&gt;Everything does not have to be good and perfect. Good enough, is good enough.&lt;/li&gt;
&lt;li&gt;Yes, stuff is hard and unpleasant, but then you have a blessed life. There are so many people with hard lives. Suck it up. And go do something about it. Deal with it. Leaving stuff unattended in the recesses of your mind, is a sure way to rust and ruin.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;. At the same time, while you are hard and focussed on the work, be kind to yourself. Find that balance.&lt;/li&gt;
&lt;li&gt;Alright, mentally set. Now how do I go about the &lt;em&gt;doing?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;By doing as much or as little as you can, depending on how you prioritise it.&lt;/li&gt;
&lt;li&gt;By doing it &lt;em&gt;consistently&lt;/em&gt;. Set a schedule. Hit it.&lt;/li&gt;
&lt;li&gt;If you think you don’t want to do it, do 10m regardless.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt; And then move on.&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;If interrupted, deal with the interruption. Come back. And continue.&lt;/li&gt;
&lt;li&gt;Dealing with interruptions does not mean giving in to it. It means figuring out just what it is, and figuring out what to do about it. Most stuff can be jotted down and scheduled for later. Make sure the significant folk in your life know what you are up to, so that they know when they can expect you to be present and when you are off doing your own thing.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Doing stuff this way is &lt;em&gt;slow&lt;/em&gt;. And that’s ok. If your life permitted focussed deep work, you’d be doing it. But that’s not how it is. So find islands of focus. And do the best you can.&lt;/li&gt;
&lt;li&gt;Do the best you can, does not mean going all out. Slow, sure, steady. That is your drumbeat. Slow, sure, steady. Unflustered. Calm. Measured.&lt;/li&gt;
&lt;/ol&gt;
&lt;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;'/&gt;

&lt;p&gt;So what happens once you do this? And what hiccoughs did you run into? And what do you do about it?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stuff gets done! It doesn’t look like this ought to work, but it does.&lt;/li&gt;
&lt;li&gt;Leaving stuff undone, putting things down for the day, causes lots of mental turmoil.&lt;/li&gt;
&lt;li&gt;Also whenever you go back to stuff, there’s a lot of going back before your minds grasps where it was at, and only then does it go forth.&lt;/li&gt;
&lt;li&gt;And that brings me to the crux of why I began writing this dastardly note in the first place.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Log. Summarise. Review!&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
1. Log how long you take for your tasks. Don’t judge yourself. Just dispassionately do it.&lt;br&gt;
2. Every time you think you’re done with something for the time being and are putting it down? Spend the time to write down what you did and what future you needs to be doing. Create bookmarks. Give directions. Do this no matter how tired you are. No matter how shitty the note.&lt;br&gt;
3. Review. This is the most important bit. Review at regular intervals and at various depths.&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt; And only then make your plans accordingly. Daily time logging &amp;amp; summarising leads to daily review leads to a better sense of what is done, how far you’ve come, what to change, where to swerve, what to do next, and where to go. Review, gosh darn it. Review!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It’s been working well the past three months. It’s reduced a lot of friction, and quite a bit of time. It makes it easy to get into the swing of things.&lt;br&gt;
I’ll come back in six months and write about how it went.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;it was a slow, gradual process.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Thank you, meditation practice!&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;oft used phrase in the &lt;a href="https://en.wikipedia.org/wiki/Brandon_Sanderson#Cosmere" target="_blank" rel="noreferrer"&gt;Cosmere&lt;/a&gt;&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;be as foul minded and potty mouthed and grumpy as you want. But &lt;em&gt;&lt;strong&gt;do&lt;/strong&gt;&lt;/em&gt; it.&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;unless you get into the groove.&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;if you are busy doing work all day, then that’s a sign. You need to get your life back into some semblance of balance. It’s ok doing this shit for a measure of time. This cannot be your whole life&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;I’m good at the nitty gritty and the big picture (daily / quarterly reviews). I struggle with the medium term (weekly)&amp;#160;&lt;a href="#fnref:7" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Note to Self: Less Research, Less Rabbit Holes</title><link>https://janusworx.com/work/note-to-self-less-research-less-rabbit-holes/</link><pubDate>Sat, 17 Feb 2024 09:56:11 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/note-to-self-less-research-less-rabbit-holes/</guid><description>&lt;p&gt;&lt;br&gt;

&lt;a href="https://janusworx.com/images/2024/rabbit-hole-1-alice.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/rabbit-hole-1-alice-s.jpg" alt="A block and white illstraction of a cross section of topsoil and then underground. There is grass and flowers on top and stones and ropelike rock and starfish-like fossils under the earch." /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;&lt;a href="https://flic.kr/p/97bGsq" target="_blank" rel="noreferrer"&gt;Alice’s Rabbit Hole&lt;/a&gt;, &lt;a href="https://flickr.com/photos/aceo/" target="_blank" rel="noreferrer"&gt;Sandra Strait&lt;/a&gt; / &lt;a href="https://creativecommons.org/licenses/by-nc-nd/2.0/" target="_blank" rel="noreferrer"&gt;CC BY-NC-ND 2.0&lt;/a&gt;&lt;br&gt;
Click on the image for the larger original.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;Big realisation, I am procrastinating on my other, bigger priorities, with the &lt;a href="https://janusworx.com/tags/100wordhabit/" &gt;100WordHabit&lt;/a&gt; project.&lt;br&gt;
Bigger realisation, if not this, I’d find something else.&lt;br&gt;
Biggest revelation, even if life sucks donkey balls, I need to focus, be disciplined and do what needs doing.&lt;/p&gt;
&lt;p&gt;So here’s a few stream-of-consciousness observations &amp;amp; suggestions, to future Jason, when doing the project.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The writing almost never takes you that long. You write at a fairly decent clip.&lt;/li&gt;
&lt;li&gt;What does take you a lot of time, is that while you do know what to say, you take an inordinately long time, trying to figure out just the right way to say it, to present it.&lt;/li&gt;
&lt;li&gt;It’s the rabbit holes that you get into.&lt;br&gt;
a. You take too long researching, finding &lt;a href="https://flickr.com/search/?text=rabbit%20hole&amp;amp;license=2%2C3%2C4%2C5%2C6%2C9" target="_blank" rel="noreferrer"&gt;just the right image&lt;/a&gt; and the right words.&lt;br&gt;
b. You just spent half an hour trying to figure out the right way, to attribute an image.&lt;br&gt;
c. You spent another trying to find out how to jump to a specific column in Emacs (&lt;code&gt;M-g&lt;/code&gt; followed by &lt;code&gt;tab&lt;/code&gt; followed by the column number and return)&lt;br&gt;
d. You started curating and tagging some mp3s that have being lying around for years now.&lt;br&gt;
e. then you went and forked the music jukebox library you used on Github&lt;/li&gt;
&lt;li&gt;You hate doing the hard stuff.&lt;br&gt;
a. It makes you really uncomfortable&lt;br&gt;
b. It makes you want to take breaks&lt;br&gt;
c. You keep switching to obssessively checking all your feeds.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br&gt;
d. You then find something that you just have to learn more about and that leads you into another rabbit hole.&lt;br&gt;
e. Besides you’re a completionist. All those tabs and notes to self, just have to be read and squirreled away&lt;/li&gt;
&lt;li&gt;All of this is taking time away from stuff you really &lt;em&gt;have&lt;/em&gt; to do considering your age.&lt;br&gt;
a. You hardly get time to exercise. Yes life is busy, but you don’t have to make it worse.&lt;br&gt;
b. The career pivot is going slower due to this.&lt;br&gt;
c. You don’t have time to execute your diet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here’s a few things you could do …&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remember, this is only during your deep work hours. We need to make the most of them. Go nuts when you aren’t working.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Figure out what your process is. I realise you’re a pantser, but a little bit of outlining will do you no harm.
You already have a running list of topics to prevent writer’s block and time waste. You’ve already lowered the bar, to become more consistent. So see what else, you do in your writing process that takes the longest. In fact, what &lt;em&gt;do&lt;/em&gt; you do? Will recording yourself help?&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(Added, 2024-02-18,)&lt;/em&gt; Don’t check your feeds in the mornings. This one’s a &lt;em&gt;&lt;strong&gt;huge&lt;/strong&gt;&lt;/em&gt; timesink. You find issues that interest you. Then you go to find someone who speaks with a nuanced voice. &lt;em&gt;&lt;strong&gt;Nuanced voices are rare. They’re hard to find!&lt;/strong&gt;&lt;/em&gt; And if you decide to listen to Munger, and &lt;a href="https://fs.blog/the-work-required-to-have-an-opinion/" target="_blank" rel="noreferrer"&gt;go do the work to have an opinion&lt;/a&gt;, by trying to find an opposing nuanced voice? &lt;em&gt;&lt;strong&gt;That’ll take you even longer. Just STOP!&lt;/strong&gt;&lt;/em&gt; Now is not the time to get better informed. Do it later.&lt;/li&gt;
&lt;li&gt;Start clocking times with Org. You want to get a better idea of where the time goes.&lt;br&gt;
&lt;em&gt;Don’t spend too long reading the manual. Just figure out how to clock in, clock out, get a summary&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Set a time block? Posts just have to be published once you hit a hundred words or a hour, whichever is longer? If you still want to continue, do it the next day. The posts could be part one / two / three / blah?&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;IT DOES NOT HAVE TO BE PERFECT!&lt;/strong&gt;&lt;/em&gt; Be ok with “mediocre”, unstructured posts. This phase will not last long.&lt;/li&gt;
&lt;li&gt;Don’t let this take over your life. &lt;a href="https://janusworx.com/reading/" &gt;You &lt;em&gt;already&lt;/em&gt; have one vice.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;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;'/&gt;

&lt;p&gt;&lt;em&gt;The most important thing though? Kudos to you!&lt;br&gt;
The meditation practice is really paying off in spades. You notice things. And you try and do something about it. You don’t let it bother your present. Most importantly, you don’t let it devolve into self loathing. You’re a lot less stressed, a lot more peaceful and a lot more resilient than you used to be.&lt;/em&gt;&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/rabbit-hole-2-i-will-survive.jpg" alt="a cartoon penguin shaking his fist at a large oncoming wave. the speech bubble quotes Gloria Gaynor,“I will survive!”" /&gt;
 
 
 &lt;/figure&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;courtesy &lt;a href="https://comicskingdom.com/Macanudo/about" target="_blank" rel="noreferrer"&gt;Liniers&lt;/a&gt; / &lt;a href="https://comicskingdom.com/Macanudo/2024-02-17" target="_blank" rel="noreferrer"&gt;Comics Kingdom&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;There’s nothing new there, since the last time you checked, you twit!&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;The point is also to &lt;em&gt;make&lt;/em&gt; the time&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>The Kobo Elipsa 2e, Six Months Later</title><link>https://janusworx.com/work/the-kobo-elipsa-2e-six-months-later/</link><pubDate>Fri, 16 Feb 2024 09:28:55 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/the-kobo-elipsa-2e-six-months-later/</guid><description>&lt;br&gt;

&lt;p&gt;&lt;a href="https://janusworx.com/images/2024/elipsa-updated.jpg" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/elipsa-updated-s.jpg" alt="A Kobo Elipsa 2e. The screen is cracked. " /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figcaption style="font-style: italic; text-align: center; font-size: 85%; color: var(--secondary)"&gt;
&lt;p&gt;My beloved, battered, Elipsa 2e. Click the image for a larger image.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;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;'/&gt;

&lt;p&gt;It’s been close to &lt;del&gt;six&lt;/del&gt; seven months, since I &lt;a href="https://janusworx.com/blog/a-new-hole-hawg-the-kobo-elipsa-2e/" target="_blank" rel="noreferrer"&gt;moved over from the Oasis to the Elipsa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here’s my list of things / experiences with the Elipsa 2e, positive and negative, in no order whatsever. Also this is not representative of a typical ebook reader&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. I, umm … have a &lt;em&gt;lot&lt;/em&gt; of books, and the Elipsa carries most of them. So every action that it does, it does with that number of books (either physically or with its database) …&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I love it!&lt;/li&gt;
&lt;li&gt;It’s &lt;em&gt;very&lt;/em&gt; light for its size. I don’t feel the weight of this 10″ device as much as I felt the old 7″ Oasis.&lt;/li&gt;
&lt;li&gt;It’s &lt;em&gt;very&lt;/em&gt; fast.&lt;/li&gt;
&lt;li&gt;I use it just like a book. It lends itself to such use as well. Part of it is the weight, part of it, is its responsiveness.&lt;/li&gt;
&lt;li&gt;This is also how I broke it. I threw it on the bed and then it slipped right over the edge, and cracked the screen 😂 You can see the big chonky part that is permanantly dead, as well as the thin, dead, vertical and horizontal lines. Since I read with fat margins, the chonky part does not get in my way&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; and the lines are mostly invisible.&lt;/li&gt;
&lt;li&gt;&lt;del&gt;I cannot enlarge images in a book. I tap, I double tap, I pinch to zoom … nothing. This is the &lt;em&gt;&lt;strong&gt;one&lt;/strong&gt;&lt;/em&gt; thing I miss from the Oasis.&lt;/del&gt;
&lt;em&gt;A few hours later:&lt;/em&gt; Of course, now it works! 😂 Double tapping an image, opens up the image where I can zoom and pan around! My fault for not noticing this earlier.&lt;/li&gt;
&lt;li&gt;I love it!&lt;/li&gt;
&lt;li&gt;It hangs loading complicated books or large pdfs, but it recovers quickly. This does not happen that often.&lt;/li&gt;
&lt;li&gt;It randomly hangs and/or crashes. This happens quite often. But I’ve learnt to reboot it with the power button, and it comes right back up, quickly. It reminds me of the Am386 machines, I’d assemble for use as Netware thin clients in my youth. They would run hot and crash ofen, but we didn’t mind, because they rebooted right back so darned fast 😂&lt;/li&gt;
&lt;li&gt;Not that the Elipsa runs hot. It just runs fast and crashes. And then comes back on and carries on as if nothing ever happened.&lt;/li&gt;
&lt;li&gt;Did I tell you, I love it?&lt;/li&gt;
&lt;li&gt;On paper, the screen specs look inferior to the Oasis. In practice, it made no difference to these old eyes.&lt;/li&gt;
&lt;li&gt;The user experience is not as good is it could be, but it’s &lt;em&gt;miles better&lt;/em&gt; than anything else I’ve used. I figured out most of it intuitively. I love just running my finger along the left edge to adjust the brightness. Helps a lot when I’m reading in bed, so that the better half does not get disturbed (or grumble at me much.)&lt;/li&gt;
&lt;li&gt;Books on the Kobo store are a bit more expensive than the Amazon store. (New releases tend to cost the same.)&lt;/li&gt;
&lt;li&gt;The database that it uses, gets corrupted quite often, which then leads to it no longer being able to talk to my PC or not showing the books in the device&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;. I doubt, I’d love the Elipsa as much as I do, if the &lt;a href="https://www.mobileread.com/forums/forumdisplay.php?f=234" target="_blank" rel="noreferrer"&gt;Calibre ecosystem&lt;/a&gt; didn’t support it so well.&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;ul&gt;
&lt;li&gt;I can backup and restore the database at will, thanks to the awesome &lt;a href="https://www.mobileread.com/forums/showthread.php?t=215339" target="_blank" rel="noreferrer"&gt;Kobo Utilities&lt;/a&gt; plugin.&lt;/li&gt;
&lt;li&gt;I’m getting old and impatient and want to read a lot more. So I’ve given up on taking notes by hand and moved over to highlighting and making notes in the Elipsa. I wouldn’t do this if not for the lovely &lt;a href="https://www.mobileread.com/forums/showthread.php?t=241206" target="_blank" rel="noreferrer"&gt;Annotations&lt;/a&gt; plugin, which lets me get all my notes and highlights out of the Elipsa and into Calibre. &lt;em&gt;(pic below, click to embiggen)&lt;/em&gt; The jury’s still out on this one.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I love it so much, that when I heard a friend was going to the USA, I bullied them into buying me &lt;em&gt;another&lt;/em&gt; one to replace this one when it dies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

&lt;a href="https://janusworx.com/images/2024/elipsa-kobo-update-annotations.png" &gt;
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/elipsa-kobo-update-annotations-s.png" alt="A screenshot of a book in Calbre, showing book notes and highlights as part of its metadata" /&gt;
 
 
 &lt;/figure&gt;&lt;/a&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;To conclude, the Elipsa 2e is wonderful.&lt;br&gt;
It has flaws that I can live with.&lt;br&gt;
It serves me well.&lt;br&gt;
I love it!&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;the person, not the device&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;much&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;This point I think, is more a me problem, than a device problem&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;Note to the Kobo folk, please care about your device software a smidgen. Please! At least at as much, if not more than these lovely open source folk do!&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Note to Self, Emacs Help Stuff</title><link>https://janusworx.com/work/note-to-self-emacs-help-stuff/</link><pubDate>Thu, 15 Feb 2024 08:03:24 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/note-to-self-emacs-help-stuff/</guid><description>
&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/emacs-logo.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;

&lt;p&gt;Collection of various little things I find handy when I am lost in Emacs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Truly lost and need help &lt;em&gt;about&lt;/em&gt; help itself? &lt;code&gt;C-h C-h&lt;/code&gt; or &lt;code&gt;C-h ?&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-h m&lt;/code&gt; should bring up a list of all the shortcuts available to that mode.&lt;/li&gt;
&lt;li&gt;Want to find out what the docs mean when they refer to something? &lt;code&gt;C-h o&lt;/code&gt; and then type in that name.&lt;br&gt;
For e.g. when the Org Mode docs refer to &lt;code&gt;org-hide-leading-stars&lt;/code&gt;, a &lt;code&gt;C-h o&lt;/code&gt; =&amp;gt; &lt;code&gt;Return&lt;/code&gt; =&amp;gt; &lt;code&gt;org-hide-leading-stars&lt;/code&gt; will give me details about what it is. (According to the docs: &lt;code&gt;org-hide-leading-stars&lt;/code&gt; &lt;em&gt;is a variable defined in ‘org.el’. Its value is nil.&lt;/em&gt;) Alternatively if you know the &lt;em&gt;type&lt;/em&gt; of object, you’re looking at, &lt;code&gt;C-h f&lt;/code&gt; will give you help on a function and &lt;code&gt;C-h v&lt;/code&gt; will do the same with a variable.&lt;/li&gt;
&lt;li&gt;If you want to know what function is behind this crazy shortcut you’re typing, a &lt;code&gt;C-h k&lt;/code&gt; followed by giving it the shortcut your typing will lead you to the &lt;del&gt;culprit&lt;/del&gt; command that powers it.&lt;br&gt;
For e.g. I blanked out on how to toggle multiple checkboxes in Org Mode today and I was hitting &lt;code&gt;C-c C-x b&lt;/code&gt; to on avail. Running &lt;code&gt;C-h k&lt;/code&gt; told me that it was bound to &lt;code&gt;org-tree-to-indirect-buffer&lt;/code&gt;. So I was madly mashing the wrong keys. A little digging (with &lt;code&gt;C-h m&lt;/code&gt;) revealed that what I needed was &lt;code&gt;C-c C-x C-b&lt;/code&gt; which ran &lt;code&gt;org-toggle-checkbox&lt;/code&gt; which indeed did what I wanted! :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>My Raspberry Pi 5 Ran Hot</title><link>https://janusworx.com/work/my-raspberry-pi-5-ran-hot/</link><pubDate>Tue, 13 Feb 2024 13:52:09 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/my-raspberry-pi-5-ran-hot/</guid><description>&lt;p&gt;I got my greedy paws on a Raspberry Pi 5 last month.&lt;br&gt;
Probably the Pi after this, will be the one at which I will say these are good enough and stop my “get ’em as soon as they are available” manic buying spree over the past few years.&lt;/p&gt;
&lt;p&gt;I use it as a music jukebox (with &lt;a href="https://jellyfin.org/" target="_blank" rel="noreferrer"&gt;Jellyfin&lt;/a&gt;), as a place to host &lt;a href="https://janusworx.com/blog/derb/" &gt;my audiobooks/files&lt;/a&gt;, as well as a &lt;a href="https://syncthing.net/" target="_blank" rel="noreferrer"&gt;syncthing&lt;/a&gt; node.
Occasionally I will download and transcode &lt;a href="https://www.youtube.com/playlist?list=PLUiMfS6qzIMxiHu2N2Px1ISp5vxCm3PMo" target="_blank" rel="noreferrer"&gt;videos I find interesting&lt;/a&gt;, with &lt;a href="https://github.com/yt-dlp/yt-dlp" target="_blank" rel="noreferrer"&gt;yt-dlp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Pi is blazingly fast at these tasks. Stuff gets done in a third to half the time, they would take on the old Pi.&lt;br&gt;
It also gets blazingly hot apparently.&lt;br&gt;
Which reminds me of my time assembling 486 desktops in the late 90s. The DX2s needed only heatsinks (like the Pi 4) whilst the DX4 needed fans as well (like the Pi 5)&lt;br&gt;
Like they say, everything old is new again.&lt;br&gt;
It also reminds me of the time the fans would just up and die, after which the machine would then heat up and just go off.&lt;br&gt;
The exact same thing is happening with my Pi 5. The fan in the official case is close to useless. It started whining loudly after only a week of use. But even when it did come on, the Pi would heat up and die.&lt;br&gt;
I thought this was because of the power adapter I was using. Official chargers are not available here in India, for love or money. Which is why I was using the highest rated mobile charger I could lay my hands on. To eliminate this as a cause, I switched to a &lt;a href="https://www.anker.com/products/a2046?variant=42448630612118" target="_blank" rel="noreferrer"&gt;65W Anker adapter&lt;/a&gt;. No dice.&lt;br&gt;
I installed the &lt;a href="https://manpages.debian.org/bookworm/lm-sensors/sensors.1.en.html" target="_blank" rel="noreferrer"&gt;&lt;code&gt;sensors&lt;/code&gt;&lt;/a&gt; package, to get an idea of what was happening. The cores were spiking to 80°C plus. No wonder!&lt;br&gt;
Went looking for heatsinks or fans that could assuage this issue and found an all metal &lt;a href="https://www.amazon.in/Verilux%C2%AE-Aluminum-Alloy-Raspberry-Cooling/dp/B0CMQJQNK6" target="_blank" rel="noreferrer"&gt;Verilux Aluminium Alloy Case&lt;/a&gt;. Though calling it a case would be a slight misnomer. What it is, is sheets of aluminium, separated by spacers, topped with a fan.&lt;br&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/rpi5-hs-2.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;It seemed overkill, but at the time, I had no other option available.&lt;br&gt;
I got it, screwed everthing in, praying all the time, that I wouldn’t lose a spacer or screw. (They give &lt;em&gt;one&lt;/em&gt; extra screw, nut and spacer)&lt;br&gt;
That did the trick. Temperatures are in the high 40s to low 50s. And everything is zipping along and hunky dory again.&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/rpi5-hs-1.jpg" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Get Hugo to Show Images in Links When Shared on Social Networks</title><link>https://janusworx.com/work/hugo-show-images-in-links-when-shared-on-social-networks/</link><pubDate>Sun, 11 Feb 2024 19:45:52 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/hugo-show-images-in-links-when-shared-on-social-networks/</guid><description>&lt;p&gt;Whenever I post a link to one of my posts on the fediverse or share it with my friends on Signal, I just get a plain vanilla link box
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/op-image-on-link-1.png" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;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;'/&gt;
&lt;/p&gt;
&lt;p&gt;I wanted those rich embeds, other folk seemed to have, on the same mediums, that I would share my links on.&lt;br&gt;
Looking around for how to go about doing this, led me to &lt;a href="https://ogp.me/" target="_blank" rel="noreferrer"&gt;ogp.me&lt;/a&gt;, which taught me the whys and wherefores.&lt;br&gt;
Looking around, a bit more for how to do this with Hugo, led me to &lt;a href="https://discourse.gohugo.io/t/display-first-image-in-post-in-link-preview/10541/2" target="_blank" rel="noreferrer"&gt;this thread&lt;/a&gt;, which had &lt;a href="https://discourse.gohugo.io/t/display-first-image-in-post-in-link-preview/10541/5" target="_blank" rel="noreferrer"&gt;this helpful comment&lt;/a&gt; by Kaushal Modi, which made be search the Hugo documentation which finally &lt;a href="https://gohugo.io/templates/internal/" target="_blank" rel="noreferrer"&gt;led me here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I figured all I needed to do then was just to link to the image&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; I wanted in the metadata section of my post, like I did for this one.&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Get Hugo to Show Images in Links When Shared on Social Networks&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2024-02-11T19:45:52&lt;/span&gt;&lt;span class="m"&gt;+05&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;work&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hugo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;/images/2024/op-image-on-link-2.png&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;br&gt;

&lt;p&gt;Et voilà! Rich image previews on links!&lt;br&gt;
&lt;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;'/&gt;


&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://janusworx.com/images/2024/op-image-on-link-2.png" alt="" /&gt;
 
 
 &lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;or a list of images, if you so choose&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;I use &lt;code&gt;yaml&lt;/code&gt;. The docs have examples for &lt;code&gt;toml&lt;/code&gt; and &lt;code&gt;json&lt;/code&gt; formats as well&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>Note to Self, Switch to Manjaro “Unstable”</title><link>https://janusworx.com/work/note-to-self-switch-to-manjaro-unstable/</link><pubDate>Tue, 06 Feb 2024 09:01:31 +0530</pubDate><author>feedback@janusworx.com (Mario Jason Braganza)</author><guid>https://janusworx.com/work/note-to-self-switch-to-manjaro-unstable/</guid><description>&lt;p&gt;I kept wondering why Syncthing releases on one of my Pis would lag behind my other one.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; The big difference between the two is that one runs Raspbian and the other, Manjaro&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;. This wouldn’t happen earlier when they ran Arch and Manjaro.&lt;br&gt;
And today, I head-slappingly remembered, that it &lt;em&gt;did&lt;/em&gt; lag and I had to do stuff to get at the latest software stuff.&lt;/p&gt;
&lt;p&gt;What I had to do, was to switch Manjaro’s software branch to &lt;code&gt;unstable&lt;/code&gt; (as opposed to the default &lt;code&gt;stable&lt;/code&gt;. &lt;a href="https://wiki.manjaro.org/index.php?title=Switching_Branches" target="_blank" rel="noreferrer"&gt;Read more here&lt;/a&gt;.)&lt;br&gt;
The only reason I use Manjaro, instead of Arch&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;, is that the Arch kernel does not boot on this Pi and I want the latest Arch stuff, which is what the &lt;code&gt;unstable&lt;/code&gt; Manjaro software branch offers.&lt;/p&gt;
&lt;p&gt;So a …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo pacman-mirrors --api --set-branch unstable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;switches me to the &lt;code&gt;unstable&lt;/code&gt; branch and …&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo pacman-mirrors --fasttrack &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo pacman -Syu &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;will resync all the software with what’s available on that branch.&lt;/p&gt;
&lt;p&gt;Tada, I have &lt;code&gt;syncthing v1.27.2 &amp;quot;Gold Grasshopper&amp;quot;&lt;/code&gt; on all my machines :)&lt;/p&gt;
&lt;p&gt;&lt;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;'/&gt;

Feedback on this post? Mail me at &lt;a href="mailto:&amp;amp;#102;&amp;amp;%23101;&amp;amp;%23101;&amp;amp;%23100;&amp;amp;%2398;&amp;amp;%2397;&amp;amp;%2399;&amp;amp;%23107;&amp;amp;%2364;&amp;amp;%23106;&amp;amp;%2397;&amp;amp;%23110;&amp;amp;%23117;&amp;amp;%23115;&amp;amp;%23119;&amp;amp;%23111;&amp;amp;%23114;&amp;amp;%23120;&amp;amp;%2346;&amp;amp;%2399;&amp;amp;%23111;&amp;amp;%23109;" &gt;feedback at this domain&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;

P.S. Subscribe to my &lt;a href="https://janusworx.com/subscribe/" target="_blank" rel="noreferrer"&gt;mailing list!&lt;/a&gt;&lt;br&gt;
Forward these posts and letters to your friends and get them to subscribe!&lt;br&gt;
P.P.S. Feed my &lt;a href="https://www.amazon.in/hz/wishlist/ls/2QAUKHHAMOOVS?ref_=wl_share" target="_blank" rel="noreferrer"&gt;insatiable reading habit.&lt;/a&gt;&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;as well as other software in general&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;because, reasons. and a long chain of upgrade and experimentation and moves from Pis 3 to 4 to 5&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;It’s the Manjaro Pi that lags. And yes, I know you can already guess why&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;with apologies to Manjaro&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item></channel></rss>