
<feed xmlns="http://www.w3.org/2005/Atom">
    <generator>Hugo -- gohugo.io</generator>
    <title>
                irc on
            
        
        The Neo-Babbage Files</title>
        <link href="https://babbagefiles.xyz/categories/irc/atom.xml" rel="self" type="application/atom+xml" /><link href="https://babbagefiles.xyz/categories/irc/"/>
    <updated>2025-12-29T11:00:32+00:00</updated>
    <author>
            <name>Benjamin Slade</name>
            
                <email>slade@lambda-y.net</email>
            </author>
    <id>https://babbagefiles.xyz/categories/irc/</id>
        
        <entry>
            <title type="html"><![CDATA[Trials and Visions of Internet Relay Chat]]></title>
            <link href="https://babbagefiles.xyz/no-one-can-be-told-what-irc-is-you-have-to-logon-for-yourself/"/>
            <id>https://babbagefiles.xyz/no-one-can-be-told-what-irc-is-you-have-to-logon-for-yourself/</id>
            
                    <author>
                        <name>Benjamin Slade</name>
                    </author>
            <published>2025-03-28T13:15:00-05:00</published>
            <updated>2025-04-02T17:35:21-05:00</updated>
            
            
            <content type="html"><![CDATA[<p>This was meant to be a shortish bit on a couple of points on a decent
<a href="https://en.wikipedia.org/wiki/IRC">IRC (Internet Relay Chat)</a> set-up, including:</p>
<ul>
<li>some sort of persistence (a &ldquo;<a href="https://en.wikipedia.org/wiki/BNC_(software)#IRC">bouncer</a>&rdquo; or the always-connected server)</li>
<li>use with some sort of IRC client in Emacs</li>
<li>some sort of reasonable mobile phone client</li>
</ul>
<p>It ended up longer than I intended.</p>
<h2 id="tldr">tldr</h2>
<ul>
<li>Using some of the more <a href="https://ircv3.net">IRCv3</a> tools, particularly the cluster of
things by <a href="https://emersion.fr">Simon Ser</a> and co (soju, goguma, gamja - see below) makes
for a much better IRC experience, and easily supports synchronised
access across multiple devices (e.g., desktop, laptops, mobile).
<ul>
<li>soju provides a very capable bouncer</li>
<li>goguma provides an excellent mobile client</li>
<li>gamja is a very user-friendly web-client front-end</li>
<li>and these three things can complement each other in a complete IRC
setup system</li>
</ul>
</li>
<li>we can make such a soju-based set-up work well with Emacs IRC clients</li>
<li>soju and gamja can be self-hosted; but there are also two
paid/hosted instances currently available:
<ul>
<li><a href="https://chat.sr.ht">SourceHut&rsquo;s chat.sr.ht</a> (on a fork of soju with a different feature-set)</li>
<li><a href="https://irctoday.com">IRC Today&rsquo;s service</a> (I think closer to mainline soju, but not certain)</li>
</ul>
</li>
<li>we can leverage some of the IRCv3 functions nicely in Emacs</li>
</ul>
<p>The most useful bits here may be notes on how to set up clients to
work with <a href="https://sourcehut.org/blog/2021-11-29-announcing-the-chat.sr.ht-public-beta">SourceHut&rsquo;s chat.sr.ht</a>, particularly Goguma and Emacs/ERC,
and some of the cool features of IRCv3 things [modernising IRC], like
the soju bouncer (which is used by chat.sr.ht), for which see the
section below &ldquo;<a href="https://babbagefiles.xyz/no-one-can-be-told-what-irc-is-you-have-to-logon-for-yourself/#smooth-and-modern-irc-implementation-and-practice--mobile-emacs">Smooth &amp; Modern IRC Implementation &amp; Practice
(mobile, Emacs)</a>&quot;, which you might jump to if you don&rsquo;t want to read a
bunch of preamble.</p>
<h2 id="history-theory-background">History, theory, background</h2>
<h3 id="pre-history-wee-chats-in-musl-pies">Pre-history: wee chats in musl pies</h3>
<p>Long ago now I spent a while setting up a RaspberryPi 3b (running <a href="https://docs.voidlinux.org/installation/musl.html">musl
flavoured Void Linux</a>) as a <a href="https://weechat.org/">Weechat</a> Server/Bouncer in order to make
using IRC less painful. This involved a lot of steps, including
setting up a <a href="https://www.noip.com/">NoIP</a> script and SSL certs with <a href="https://letsencrypt.org/">Let&rsquo;s Encrypt</a>, and setting
up scripts to auto-fetch new certs. But once up, it worked well
(unless my home internet went out), and Weechat had a nice mobile app,
so I could connect both on desktop/laptop with an <a href="https://github.com/the-kenny/weechat.el">Emacs IRC client</a> and
also had a pocket connection via my mobile
phone <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. This gave me a persistent connection and
log history and all that.</p>
<p>Then I started using <a href="https://matrix.org">Matrix</a> (=a modern, but heavy, &ldquo;IRC replacement&rdquo;,
itself theoretically a Slack, Discord, &amp;c. competitor) more, (in part) since some projects have
chosen it as a more modern/capable alternative to IRC, and, soon
after, it was the case that most of the IRC rooms I was in were
bridged to Matrix anyway. And then it seemed perhaps more convenient
just to access everything in one place, since some things were only
Matrix and not on IRC, it made sense for that to be Matrix.</p>
<p><a href="https://libera.chat/news/matrix-bridge-disabled-retrospective">And then the Matrix bridges mostly shut down.</a></p>
<h3 id="path-of-the-prodircal-son">Path of the prodIRCal son</h3>
<p>I toyed off and on with getting re-set up on IRC, but there has been a
lot of other things going on in life, and I didn&rsquo;t feel like trying to
set up my rpi mini-server IRC bouncer again.</p>
<p>I tried some other hosted IRC bouncer services. But some of these
wouldn&rsquo;t let me connect with on a VPN.</p>
<p>I found one good free (as in freedom and free as in no paisa) <a href="https://en.wikipedia.org/wiki/ZNC">ZNC</a>
bouncer service, which is FreeIRC.org <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>The ZNC bouncer worked fine on Emacs (with <a href="https://www.gnu.org/software/emacs/erc.html">ERC</a>; I&rsquo;ve gone back and
forth between ERC and <a href="https://www.nongnu.org/circe/">Circe</a>, but this time I was trying ERC
again).<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> And I eventually figured out how to connect to multiple
networks through the ZNC bouncer.</p>
<p>But the best thing I could find on mobile was the <a href="https://github.com/MCMrARM/revolution-irc">Revolution IRC
client</a>, and, while it&rsquo;s a nice enough front-end, it struggled with
maintaining a connection to the ZNC bouncer I was using. (I asked
about this in an IRC room, and the general consensus was that mobile&rsquo;s
just not a good place to try to do IRC, but I remembered that via the
<a href="https://github.com/ubergeek42/weechat-android">Weechat android app</a> or through <a href="https://glowing-bear.org/">Glowing Bear</a> I&rsquo;d had a good mobile IRC
experience years ago.)</p>
<h3 id="ircv3-and-other-korean-tubers">IRCv3, and other Korean tubers</h3>
<p>I also came across another IRC mobile app, <a href="https://codeberg.org/emersion/goguma">Goguma</a>, but couldn&rsquo;t get it
work. But, frustrated with the situation, I wanted to see if, assuming
I <em>could</em> somehow get it work, Goguma might be a better mobile
solution.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>I ultimately ended up stumbling across an <a href="https://lobste.rs/s/wy2jgl/goguma_irc_client_for_mobile_devices">interesting lobste.rs
discussion of Goguma</a> which pointed to it being part of a set of
<a href="https://ircv3.net">IRCv3</a>-aware software, including an IRC bouncer <a href="https://soju.im">soju</a>, which a number of
the commenters on the lobste.rs thread comparing the experience
favourably against using ZNC.</p>
<p>A cluster of IRCv3 things:<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<ul>
<li><a href="https://codeberg.org/emersion/goguma">Goguma</a> (Korean 고구마 <em>goguma</em> &ldquo;sweet potato&rdquo;): IRC mobile client written in Flutter by Simon Ser</li>
<li><a href="https://codeberg.org/emersion/gamja">Gamja</a> (Korean 감자 <em>gamja</em> &ldquo;potato&rdquo;): simple IRC web client written in Javascript by Simon Ser</li>
<li><a href="https://soju.im">Soju</a> (Korean 소주 <em>soju</em> &ldquo;a distilled alcoholic beverage&rdquo;): IRC bouncer written in Go by Simon Ser</li>
<li><a href="https://git.sr.ht/~delthas/senpai/">Senpai</a> (Japanese 先輩 <em>sèńpáí</em> &ldquo;senior in social standing or level of education/skill; an elder&rdquo;): a modern terminal IRC written in Go, started by &lsquo;<a href="https://sr.ht/~taiite/">taiite</a>', who handed development over to &lsquo;<a href="https://delthas.fr">delthas</a>'.</li>
<li><a href="https://github.com/ergochat/ergo">Ergo</a> (a play on ergonomic [and &ldquo;<a href="https://github.com/jlatt/ergonomadic">ergonomadic</a>&quot;] and Go(lang), so I suppose ultimately from Ancient Greek ἔργον <em>érgon</em> &ldquo;work&rdquo;, but not sure that&rsquo;s relevant): a modern IRC server written in Go [<a href="https://github.com/jlatt">Jeremy Latt</a>, <a href="https://danieloaks.net">Daniel Oaks</a>, <a href="https://cs.stanford.edu/people/slingamn">Shivaram Lingamneni</a>] implementing bleeding-edge IRCv3 features/support</li>
</ul>
<p>The first three things are the most relevant for us (well, me). Ergo
sounds great, but I&rsquo;m not <em>running</em> an IRC server myself at the moment;
and I&rsquo;ve got a whole wealth of choices of Emacs IRC clients if I&rsquo;m on
desktop/laptop, so Senpai doesn&rsquo;t seem relevant either for my use
case.</p>
<h3 id="trains-wayland-and-things-that-go">Trains, Wayland, and Things that Go</h3>
<p>The first three of the IRCv3-looking things are all by <a href="https://emersion.fr">Simon Ser</a>, who
was lately at <a href="https://drewdevault.com">Drew DeVault</a>&lsquo;s <a href="https://sourcehut.org">SourceHut</a>, but seems to have left
sometime in 2024<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> and now works at <a href="https://osrd.fr/">Open
Source Railway Designer</a> (something to do with making tools for railway
infrastructure simulation, which sounds quite cool: open source
trains). Ser obviously works a good bit on IRC-related software, and
also a lot of things in Go, and has been involved with <a href="https://wayland.freedesktop.org/">Wayland</a>-related
projected (taking over maintainership of <a href="https://swaywm.org">Sway</a> (a Wayland window
manager) and <a href="https://gitlab.freedesktop.org/wlroots/wlroots/">wlroots</a> (Wayland general purpose compositor underlying
Sway and other things) from DeVault <a href="https://drewdevault.com/2020/10/23/Im-handing-wlroots-and-sway-to-Simon.html">some years back</a>).</p>
<p>Here&rsquo;s Thomas Flament &amp; Simon Ser talking about IRCv3 and soju,
senpai, gamja, goguma at FOSDEM &lsquo;25 in Brussels:</p>
<p><strong><a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6407-chatting-on-irc-in-2025-grandpa-what-s-up-/">Chatting on IRC in 2025: grandpa, what&rsquo;s up?</a> [video link with captions]</strong></p>
<p>In any case, one of the paid-only features that SourceHut offers is
via <a href="https://man.sr.ht/chat.sr.ht/">chat.sr.ht</a>, an IRC bouncer, which is running on a <a href="https://git.sr.ht/~bitfehler/soju">fork of soju</a>,
with a web-client based on gamja.</p>
<p>As far as I can tell, Sourcehut&rsquo;s servers are now (all? mainly?) in
Amsterdam.<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup></p>
<p>chat.sr.ht isn&rsquo;t the only hosted IRC bouncer service which runs some
version of the soju bouncer, there is also <a href="https://irctoday.com">IRC Today</a> [<a href="https://lobste.rs/s/zc0xh7/irc_today_hosted_irc_bouncer">discussed also
on lobste.rs</a>], which is hosted in Paris on <a href="https://www.scaleway.com">Scaleway</a>
servers.<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup></p>
<p>So, there are at least two apparently EU-based hosted &ldquo;IRCv3-forward&rdquo;
bouncers.</p>
<h2 id="smooth-and-modern-irc-implementation-and-practice--mobile-emacs">Smooth &amp; Modern IRC Implementation &amp; Practice (mobile, Emacs)</h2>
<h3 id="how-to-manage-to-drink-rice-liquor-in-a-hut-preliminaries">How to manage to drink rice liquor in a hut: preliminaries</h3>
<p>In any case, I signed up for the SourceHut offering at chat.sr.ht,
which uses their fork of soju.</p>
<p>Here&rsquo;s what I did to get it set up for mobile and in Emacs (it seemed
worth documenting, in what was meant to be a short post&hellip;.):</p>
<p>The main things one needs to know are in the <a href="https://man.sr.ht/chat.sr.ht/">chat.sr.hut &lsquo;manpages&rsquo;</a>,
especially the <a href="https://man.sr.ht/chat.sr.ht/quickstart.md">&lsquo;quickstart guide&rsquo;</a>. But here are a few more notes for
specific set-up on Goguma and Emacs.</p>
<p>The first thing one needs to do for any &ldquo;third-party&rdquo; client (this
includes Goguma or any Emacs IRC client) is <a href="https://meta.sr.ht/oauth2/personal-token?grants=meta.sr.ht/PROFILE:RO">generate an OAuth 2.0
personal access token in your SourceHut account</a>. This will be
effectively your &ldquo;password&rdquo; (with your SourceHut login name as your
username).</p>
<p><strong>Nb</strong>: on mobile, you have to be careful to actually manage to copy the
entire token with &ldquo;Select all&rdquo; or the like - I was stuck for a long
time not being able to make Goguma work because I&rsquo;d not managed to
copy the entire token, and this wasn&rsquo;t at all obvious in a mobile
browser. On desktop, it&rsquo;s not an issue.</p>
<h3 id="goguma--mobile--one-potato-two-potato-sweet-potato">Goguma (mobile): One potato, two potato, sweet potato</h3>
<p>For Goguma, you&rsquo;re just going to put in:</p>
<ul>
<li>Server: <code>chat.sr.ht</code></li>
<li>Nickname: &lt;your SourceHut username&gt;</li>
<li>Password: &lt;an OAuth2.0 token you generated as above&gt;</li>
</ul>
<p>And you&rsquo;re in. And here&rsquo;s what it looks like:</p>



<figure>
    <a href="/ox-hugo/goguma-sr.ht.png">
        <img src="https://babbagefiles.xyz/ox-hugo/goguma-sr.ht.png" alt="Figure 1: Goguma with normal &ldquo;bubble&rdquo; display mode in #sr.ht@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 1: </span>Goguma with normal &ldquo;bubble&rdquo; display mode in #sr.ht@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>And there&rsquo;s a setting in Goguma (&ldquo;Compact message list&rdquo;) to make it
look less like a mobile messaging app and just have plain text if you
prefer that:</p>



<figure>
    <a href="/ox-hugo/goguma-sr.ht_compact.png">
        <img src="https://babbagefiles.xyz/ox-hugo/goguma-sr.ht_compact.png" alt="Figure 2: Goguma in &ldquo;compact message list&rdquo; display mode in #sr.ht@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 2: </span>Goguma in &ldquo;compact message list&rdquo; display mode in #sr.ht@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>And you can have Goguma show you notifications if someone mentions
your nick. Here is an example showing on a Pebble watch:</p>



<figure>
    <a href="/ox-hugo/goguma-pebble-notification.jpg">
        <img src="https://babbagefiles.xyz/ox-hugo/goguma-pebble-notification.jpg" alt="Figure 3: Goguma nick mention notification displaying on Pebble watch"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 3: </span>Goguma nick mention notification displaying on Pebble watch
                    
                        
                        </p>
                
            </figcaption></figure>

<p>(IRC on one&rsquo;s wrist; it truly is 2025.)</p>
<h3 id="emacs-machines-and-authority-tokens-what-to-put-in-your-authinfo-dot-gpg-and-init-dot-el">Emacs machines and authority tokens: what to put in your authinfo.gpg and init.el</h3>
<p>In your <code>~/.authinfo.gpg</code> file, add a line like this (with &lt;&gt;&lsquo;ed items
to be replaced fully; don&rsquo;t actually include any <code>&lt;&gt;</code>'s here or above or
elsewhere; where <code>&quot;my-sourcehut-id&quot;</code> is your actual sourcehut login id
in quotes):</p>
<p><code>machine chat.sr.ht login &quot;my-sourcehut-id&quot; password &quot;&lt;one of your OAuth 2.0 tokens generated at SourceHut meta&gt;&quot;</code></p>
<p>And then in your <code>~.emacs.d/init.el</code>, assuming you&rsquo;re using ERC and have
that configured otherwise to your liking, make a user-function for
each actual IRC server you want to connect with via chat.sr.ht/soju,
like this (assuming your user-id is <code>&quot;my-sourcehut-id&quot;</code>: replace
appropriately— and you might have different <code>:nick</code>'s (&ldquo;nicknames&rdquo; ≈
user-handles/user-names/identities) on different servers, of course,
so adjust those as well; but your <code>:username</code> is going to be
consistently your SourceHut username followed by
&ldquo;/&lt;the-particular-irc-server-address&gt;&quot;):</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp">
<span class="c1">;; just so we don&#39;t have to type it each time, a wrapping `let&#39;,</span>
<span class="c1">;; and so after this our `server&#39;, `port&#39;, &amp; `passwd&#39; will be thus defined</span>
<span class="c1">;; (you could do `:nick&#39; like this too if it&#39;s the same everywhere)</span>
<span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">server</span> <span class="s">&#34;chat.sr.ht&#34;</span><span class="p">)</span>
      <span class="p">(</span><span class="nv">port</span> <span class="mi">6697</span><span class="p">)</span>
      <span class="p">(</span><span class="nv">passwd</span>
       <span class="p">(</span><span class="nv">cadr</span>
        <span class="p">(</span><span class="nv">auth-source-user-and-password</span> <span class="s">&#34;chat.sr.ht&#34;</span> <span class="s">&#34;my-sourcehut-id&#34;</span><span class="p">))))</span>
  <span class="c1">;; `auth-source-user-and-password&#39; returns a list of `login&#39; and `password&#39;</span>
  <span class="c1">;; from your .authinfo.gpg; but we just need the second, so `cadr&#39; (= return</span>
  <span class="c1">;; the `car&#39; of the `cdr&#39;), because since the list is going to be something</span>
  <span class="c1">;; like `(mylogin mypassword)&#39;, will give us just the atomic `mypassword&#39;,</span>
  <span class="c1">;; which is what we want [because the `cdr&#39; of `(mylogin mypassword)&#39; will be</span>
  <span class="c1">;; `(mypassword)&#39; and the `car&#39; of `(mypassword)&#39; will be just `mypassword&#39;].)</span>

  <span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-libera</span> <span class="p">()</span>
    <span class="s">&#34;Connect to Libera.Chat IRC server.&#34;</span>
    <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
    <span class="p">(</span><span class="nv">erc-tls</span>
     <span class="nb">:nick</span> <span class="s">&#34;emacsuser007&#34;</span>
     <span class="nb">:server</span> <span class="nv">server</span>
     <span class="nb">:port</span> <span class="nv">port</span>
     <span class="nb">:user</span> <span class="s">&#34;my-sourcehut-id/irc.libera.chat&#34;</span>
     <span class="nb">:password</span> <span class="nv">passwd</span><span class="p">))</span>

  <span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-oftc</span> <span class="p">()</span>
    <span class="s">&#34;Connect to OFTC IRC server.&#34;</span>
    <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
    <span class="p">(</span><span class="nv">erc-tls</span>
     <span class="nb">:nick</span> <span class="s">&#34;emacsuser007&#34;</span>
     <span class="nb">:server</span> <span class="nv">server</span>
     <span class="nb">:port</span> <span class="nv">port</span>
     <span class="nb">:user</span> <span class="s">&#34;my-sourcehut-id/irc.oftc.net&#34;</span>
     <span class="nb">:password</span> <span class="nv">passwd</span><span class="p">))</span>

  <span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-ircnow</span> <span class="p">()</span>
    <span class="s">&#34;Connect to IRCNow IRC server.&#34;</span>
    <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
    <span class="p">(</span><span class="nv">erc-tls</span>
     <span class="nb">:nick</span> <span class="s">&#34;emacsuser007&#34;</span>
     <span class="nb">:server</span> <span class="nv">server</span>
     <span class="nb">:port</span> <span class="nv">port</span>
     <span class="nb">:user</span> <span class="s">&#34;my-sourcehut-id/irc6.ircnow.org&#34;</span>
     <span class="nb">:password</span> <span class="nv">passwd</span><span class="p">))</span>

  <span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-ergo</span> <span class="p">()</span>
    <span class="s">&#34;Connect to IRCv3-forward Ergo IRC server.&#34;</span>
    <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
    <span class="p">(</span><span class="nv">erc-tls</span>
     <span class="nb">:nick</span> <span class="s">&#34;emacsuser007&#34;</span>
     <span class="nb">:server</span> <span class="nv">server</span>
     <span class="nb">:port</span> <span class="nv">port</span>
     <span class="nb">:user</span> <span class="s">&#34;my-sourcehut-id/irc.ergo.chat&#34;</span>
     <span class="nb">:password</span> <span class="nv">passwd</span><span class="p">)))</span>
</code></pre></div><p>Here we&rsquo;re making connections for <a href="https://libera.chat">Libera</a>, <a href="https://www.oftc.net/">OFTC</a>, <a href="https://ircnow.org">IRCNow</a>, and <a href="https://ergo.chat/about-network">Ergo</a>, the
IRCv3-forward server implemented in Go we mentioned above.<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup></p>
<p>But you can add lots of different servers to your bouncer, and both in
Goguma and Emacs/ERC (just make a new <code>erc-&lt;server&gt;</code> function as above),
you&rsquo;ll just be able to get to all of the different rooms in one place
and don&rsquo;t necessary need to worry about which server a particular
thing is on after getting it set up.</p>
<p>And then you can make a &ldquo;connect to all the things function&rdquo; like this:</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp"><span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-connect-all</span> <span class="p">()</span>
  <span class="s">&#34;Connect to all IRC servers above.&#34;</span>
  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
  <span class="c1">;; we&#39;re just calling all of the functions we defined above here:</span>
  <span class="p">(</span><span class="nv">erc-libera</span><span class="p">)</span>
  <span class="p">(</span><span class="nv">erc-oftc</span><span class="p">)</span>
  <span class="p">(</span><span class="nv">erc-ircnow</span><span class="p">)</span>
  <span class="p">(</span><span class="nv">erc-ergo</span><span class="p">))</span>
</code></pre></div><p>And what it looks like (well, it looks like however you&rsquo;ve configured
ERC or whatever Emacs IRC client you&rsquo;re using, but, in case you want
to see a possible way it could look):</p>



<figure>
    <a href="/ox-hugo/erc-sr.ht.png">
        <img src="https://babbagefiles.xyz/ox-hugo/erc-sr.ht.png" alt="Figure 4: in ERC on chat.sr.ht visiting #sr.ht@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 4: </span>in ERC on chat.sr.ht visiting #sr.ht@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>If you get knocked offline momentarily, ERC will try to reconnect to
the bouncer. If you are knocked off or close Emacs for a while, you
might want to catch up on what you missed recently. And there&rsquo;s a nice
IRCv3 feature implemented in soju (and in chat.sr.ht) for this, as
discussed in the next section.</p>
<h3 id="leveraging-ircv3-features-in-emacs">Leveraging IRCv3 features in Emacs</h3>
<p>We can also do another convenient thing for our Emacs IRC
configuration now. IRCv3 defines a &ldquo;chathistory&rdquo; extension, as an easy
way of retrieving earlier IRC room content. This doesn&rsquo;t work most
places, but it works on any bouncers based on soju (see notes below),
the syntax being <code>/quote CHATHISTORY LATEST &lt;channelname&gt; * &lt;number-of-lines-to-fetch&gt;</code>.</p>
<p>We can make this more user-friendly in Emacs with something like
this, an interactive command that fetches history for whatever IRC
room it&rsquo;s called in (a 100 lines by default; prefix <code>C-u</code> to enter a
different number):</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp"><span class="p">(</span><span class="nb">defun</span> <span class="nv">erc-chatsrht-give-me-more-irc-history</span> <span class="p">()</span>
  <span class="s">&#34;Get more history for current IRC buffer (IRCv3 only).
</span><span class="s">
</span><span class="s">Defaults to 100 lines of history; when C-u prefixed, asks user for
</span><span class="s">number of lines to fetch.
</span><span class="s">
</span><span class="s">If using an IRCv3 capable server/bouncer (like chat.sr.ht), fetch the
</span><span class="s">chat history via the IRCv3 chathistory extension. (Currently, only
</span><span class="s">soju-based servers implement this feature; see:
</span><span class="s">https://ircv3.net/software/clients)
</span><span class="s">
</span><span class="s">For more on chathistory, see:
</span><span class="s"> - https://man.sr.ht/chat.sr.ht/bouncer-usage.md#chat-history-logs
</span><span class="s"> - https://ircv3.net/specs/extensions/chathistory
</span><span class="s"> - https://soju.im/doc/soju.1.html&#34;</span>
  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
  <span class="p">(</span><span class="nb">if</span> <span class="p">(</span><span class="nv">not</span> <span class="p">(</span><span class="nf">member</span>
            <span class="p">(</span><span class="nb">with-current-buffer</span> <span class="p">(</span><span class="nf">current-buffer</span><span class="p">)</span>
              <span class="nv">major-mode</span><span class="p">)</span>
            <span class="o">&#39;</span><span class="p">(</span><span class="nv">erc-mode</span>
              <span class="nv">circe-mode</span>
              <span class="nv">rcirc-mode</span><span class="p">)))</span>
      <span class="p">(</span><span class="nf">message</span> <span class="s">&#34;not an IRC buffer; ignoring&#34;</span><span class="p">)</span>
    <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">lines</span> <span class="mi">100</span><span class="p">)</span>
          <span class="p">(</span><span class="nv">channel</span> <span class="p">(</span><span class="nf">buffer-name</span><span class="p">)))</span>
      <span class="p">(</span><span class="nb">when</span> <span class="nv">current-prefix-arg</span>
        <span class="p">(</span><span class="nb">progn</span>
          <span class="p">(</span><span class="nb">setq</span> <span class="nv">lines</span>
                <span class="p">(</span><span class="nv">read-number</span> <span class="p">(</span><span class="nf">format</span> <span class="s">&#34;How many lines to fetch: &#34;</span><span class="p">)</span> <span class="nv">lines</span><span class="p">))))</span>
      <span class="p">(</span><span class="nv">erc-send-input</span>
       <span class="p">(</span><span class="nf">concat</span> <span class="s">&#34;/quote CHATHISTORY LATEST &#34;</span> <span class="nv">channel</span> <span class="s">&#34; * &#34;</span> <span class="p">(</span><span class="nf">number-to-string</span> <span class="nv">lines</span><span class="p">))</span>
       <span class="no">t</span><span class="p">))))</span>
</code></pre></div><p>Then you can just call <code>erc-chatsrht-give-me-more-irc-history</code> in an IRC
buffer (you might find a convenient keybinding for it) to get prior
IRC chat in that buffer.</p>
<p>This sort of thing makes Emacs a very pleasant environment to manage
IRC in.</p>
<p>Now, for actually adding servers to your chat.sr.ht bouncer in the
first place, you might try out the gamja web client (see <a href="https://babbagefiles.xyz/no-one-can-be-told-what-irc-is-you-have-to-logon-for-yourself/#web-client-the-sweetness-of-non-sweet-potatoes-on-the-web">below</a>).</p>
<h3 id="inline-images-and-files-in-goguma-and-emacs">Inline images and files in Goguma and Emacs</h3>
<p>Oh. Gamja (as least as implemented by chat.sr.ht) doesn&rsquo;t seem to do it, but
Goguma fetches image links and displays a preview:</p>



<figure>
    <a href="/ox-hugo/irc-df-image-goguma.jpg">
        <img src="https://babbagefiles.xyz/ox-hugo/irc-df-image-goguma.jpg" alt="Figure 5: in the goguma mobile client, an image preview in #dwarffortress@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 5: </span>in the goguma mobile client, an image preview in #dwarffortress@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>[Note: chat.sr.ht&rsquo;s soju fork doesn&rsquo;t currently offer direct
file-upload and is perhaps unlikely to, but this seems to be
implemented in upstream soju and maybe on IRC Today.]</p>
<p>Additional note: Goguma doesn&rsquo;t do this by default; you need to go
into the main &ldquo;Settings&rdquo; menu and enable &ldquo;Display link previews&rdquo;. (I
also have &ldquo;Send &amp; display typing indicators&rdquo; turned on here.)</p>
<p>And you can make ERC do similarly, with respect to fetching posted
image links, with the <a href="https://melpa.org/#/erc-image">erc-image package from MELPA</a>. I have a
<code>use-package</code> definition like this:</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">erc-image</span>
  <span class="nb">:ensure</span> <span class="no">t</span>
  <span class="nb">:after</span> <span class="nv">erc</span>
  <span class="nb">:config</span>
  <span class="p">(</span><span class="nb">setq</span> <span class="nv">erc-image-inline-rescale</span> <span class="mi">300</span><span class="p">)</span> <span class="c1">; maybe set bigger</span>
  <span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;erc-modules</span> <span class="ss">&#39;image</span><span class="p">))</span>
</code></pre></div><p>And then you&rsquo;ll see something like this if you post an image link in ERC:</p>



<figure>
    <a href="/ox-hugo/irc-df-image-erc.png">
        <img src="https://babbagefiles.xyz/ox-hugo/irc-df-image-erc.png" alt="Figure 6: in ERC, an image preview in #dwarffortress@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 6: </span>in ERC, an image preview in #dwarffortress@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>I&rsquo;d like to figure out how one might better manage it, but — in terms
of handling posting local files — there&rsquo;s a (not-on-MELPA) package
<a href="https://github.com/ecraven/imgbb.el/">imgbb.el</a> which will upload images in Emacs (when passed a file-path or
interactively from a file-chooser) to <a href="https://imgbb.com/">ImgBB</a>, and then put the link in
the clipboard.<sup id="fnref:10"><a href="#fn:10" class="footnote-ref" role="doc-noteref">10</a></sup></p>
<p>[Note: For better or worse, <code>erc-image</code> will pull images from http as
well as https addresses; while Goguma seems only to do the latter.]</p>
<h3 id="web-client-the-sweetness-of-non-sweet-potatoes-on-the-web">Web-client: The sweetness of non-sweet potatoes on the web</h3>
<p>The web interface for chat.sr.ht (at <a href="https://chat.sr.ht">https://chat.sr.ht</a>) is, again,
based on gamja (&ldquo;potato&rdquo;) (discussed above) and gamja is a nice
interface indeed.</p>



<figure>
    <a href="/ox-hugo/gamja-sr.ht.png">
        <img src="https://babbagefiles.xyz/ox-hugo/gamja-sr.ht.png" alt="Figure 7: in the gamja web-client at chat.sr.ht visiting #sr.ht@libera.chat"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 7: </span>in the gamja web-client at chat.sr.ht visiting #sr.ht@libera.chat
                    
                        
                        </p>
                
            </figcaption></figure>

<p>And, for making your initial connections to different IRC servers, it
may be easier just to use this web interface, especially if you&rsquo;ve
already got accounts set up on any of the servers, as for most of them
you&rsquo;ll be able to enter your username and password and so on in the
&ldquo;Add server&rdquo; interface and not have to do all of the <code>/msg NickServ ....</code> stuff one usually does. (If you don&rsquo;t have an account already,
you&rsquo;ll have to register in someway, maybe by messaging Nick).</p>
<p>Looks like this:</p>



<figure>
    <a href="/ox-hugo/gamja-add-network.png">
        <img src="https://babbagefiles.xyz/ox-hugo/gamja-add-network.png" alt="Figure 8: in the gamja web-client at chat.sr.ht in the server-add menu"/> </a><figcaption>
                
                <p>
                    <span class="figure-number">Figure 8: </span>in the gamja web-client at chat.sr.ht in the server-add menu
                    
                        
                        </p>
                
            </figcaption></figure>

<p>In fact, even for signing in/up on a brand new server, at least on some
servers, gamja lets you click on &ldquo;login&rdquo; or &ldquo;register&rdquo; and pulls up a
pop-up box to fill in password, email, &amp;c. So it&rsquo;s quite convenient
(and you may not have to message Nick manually).</p>
<h2 id="wrap-up-and-evaluation">Wrap-up &amp; evaluation</h2>
<p>There are interesting IRC things still going on, both in terms of
active IRC communities (though this varies; #emacs is quite active,
#dwarffortress isn&rsquo;t; Discord has eaten into some spaces), and
innovations in IRC technologies and tools.</p>
<p>I&rsquo;m not sure what the best thing is terms of choice of a soju/gajma
ecosystem. chat.sr.ht seems to be the cheapest hosted option; IRC
Today is more expensive but may currently be more
featureful. SourceHut has had trouble with being DDOS&rsquo;ed/going
off-line (see, e.g., <a href="https://sourcehut.org/blog/2024-01-19-outage-post-mortem/">SourceHut network outage
post-mortem</a>).</p>
<p>Self-hosted set-ups are another option, but are likely to be more
fiddly/effort to run/maintain than a &ldquo;professional&rdquo; service. But here
are a few links to descriptions of people&rsquo;s self-hosted soju setups:</p>
<ul>
<li>self-hosting on <a href="#d41d8c">Alpine Linux</a>: <a href="https://wiredspace.de/blog/self-hosting-soju/">Self-Hosting Soju</a></li>
<li>self-hosting on <a href="#d41d8c">OpenBSD</a>: <a href="https://whynothugo.nl/journal/2024/01/12/setting-up-an-irc-bouncer-soju-on-openbsd/">Setting up an IRC bouncer (soju) on OpenBSD · Hugo&rsquo;s weblog</a></li>
<li>more self-hosting on <a href="#d41d8c">Alpine Linux</a>: <a href="https://isaacganoung.com/posts/2024/03/setting-up-self-hosted-soju/">Self-Hosted IRC with Soju &amp; Senpai | Isaac Ganoung&rsquo;s Website</a></li>
<li>self-hosting on <a href="#d41d8c">IRCNow</a>: <a href="https://wiki.ircnow.org/pmwiki.php?n=Soju.Guide">IRCNow | Soju / Guide</a></li>
</ul>
<p>Currently, chat.sr.ht is working well for me, even if it may be behind
on some mainline soju features.</p>
<h2 id="appendix-etymologies">Appendix: etymologies</h2>
<p>You probably don&rsquo;t need to know any of this. It&rsquo;s not going to help
you log into Goguma or make your Emacs config work.</p>
<p>But the naming of a lot of the IRC things above is strange and I&rsquo;m a
linguist by trade and it&rsquo;s hard for me to avoid paying a lot of
attention to words and meanings of words and connections of words.</p>
<p>(While on the topic of mostly irrelevant things: I have some
other-language interference (Hindi here) with the Korean names of some
of the software discussed here. Specifically, <em>gamja</em> makes me think
either गंजा <em>ganjā</em> &ldquo;bald&rdquo; or गाँजा <em>gā̃jā</em> &ldquo;ganja, cannabis&rdquo;; and <em>soju</em> keeps
making me think of an elided version of सो जाऊं <em>so jāū̃</em> &ldquo;shall I go to
sleep?&rdquo; [&ldquo;नहीं! आप आई॰आर॰सी॰ बाउंसर हैं, आपको सो नहीं जाना चाहिए! No!
You&rsquo;re an IRC bouncer: you should not go to sleep!&quot;])</p>
<p>At any rate, here are, unasked for, etymological notes on the four IRCv3
things with Korean or Japanese names, largely sourced from Wiktionary,
as indicated, with some connecting text:</p>
<h3 id="goguma">Goguma</h3>
<p>[mainly sourced from:
<a href="https://en.wiktionary.org/wiki/%EA%B3%A0%EA%B5%AC%EB%A7%88">https://en.wiktionary.org/wiki/%EA%B3%A0%EA%B5%AC%EB%A7%88</a>]</p>
<p>Named apparently after Korean 고구마 <em>goguma</em> &ldquo;sweet potato&rdquo; (cp. the
web client by the same team, gamja &ldquo;potato&rdquo;). First attested in the
<em>Mulmyeonggo</em> (물명고 / 物名考), 1824, as Early Modern Korean <em>고금아</em>
(Yale: <em>kokuma</em>), borrowed from Japanese <em>孝行芋</em> (<em>kōkō imo</em>), a term used
in the Tsushima dialect. Some earlier attestations are known, but they
are in the context of quoting the dialectal Japanese word, not in a
Korean context.</p>
<p>There&rsquo;s also apparently a recent &ldquo;Internet slang&rdquo; sense: &ldquo;a plot
development which frustrates the reader (e.g. the protagonist fails to
achieve their goal)&rdquo; [from c. 2012].</p>
<p>The Japanese word <em>孝行芋</em> (<em>kōkō imo</em>) from which Korean 고구마 <em>goguma</em> is
borrowed is apparently 孝行 (<em>kōkō</em>) [? &ldquo;dutiful&rdquo;??] + 芋 (<em>imo</em>) from Old
Japanese, attested in the Nihon Shoki of 720, referring to &ldquo;edible
tubers&rdquo;. May be a shift from older form うも (<em>umo</em>), ultimately from
Proto-Japonic *umo. Cognate with Okinawan 芋 (<em>&lsquo;nmu</em>). [see:
<a href="https://en.wiktionary.org/wiki/%E5%AD%9D%E8%A1%8C%E8%8A%8B#Japanese">https://en.wiktionary.org/wiki/%E5%AD%9D%E8%A1%8C%E8%8A%8B#Japanese</a>
<a href="https://en.wiktionary.org/wiki/%E8%8A%8B#Japanese">https://en.wiktionary.org/wiki/%E8%8A%8B#Japanese</a> ]</p>
<p>The Japanese word 芋 (<em>imo</em>) is connected to Chinese 芋 [Old <em>*ɢʷas</em>,
Modern Mandarin <em>yù</em> ] &ldquo;taro&rdquo;.</p>
<p>Seemingly a phono-semantic compound (形聲 / 形声, OC *ɢʷa, *ɢʷas):
semantic 艸 (“grass; plant”) + phonetic 于 (OC *ɢʷa) – &ldquo;taro&rdquo;.</p>
<p>Compare Proto-Hmong-Mien <em>*wouH</em> (“taro”), Burmese <em>ဝ</em> (<em>wa.</em>, “elephant
foot yam”), Tibetan གྲོ་མ (<em>gro ma</em>, “ <em>Argentina anserina</em> (syn. <em>Potentilla
anserina</em>), a plant with small edible tubers”).</p>
<p>There are various theories on how all these words are related:</p>
<ul>
<li>
<p>Schuessler (2007) considers it to be an areal word, comparing it to
the Hmong-Mien and Burmese words. Schuessler (2015) does not
consider the Tibetan word to be cognate.</p>
</li>
<li>
<p>Blench (2012) suggests that the Chinese word is borrowed from
Proto-Hmong-Mien and that the Burmese word may be a late loan from
Old Chinese.</p>
</li>
<li>
<p>STEDT reconstructs Proto-Sino-Tibetan <em>*g/s-rwa</em> (“taro; yam; tuber”),
whence the Tibetan word. This etymon is regarded as allofamically
related this word and 薯 (<em>OC *djas</em>).</p>
</li>
<li>
<p>Gong Hwang-cherng (2002) and Baxter and Sagart (2017) also suggest
that this word is related to the Tibetan word.</p>
<p>[on the Chinese, see: <a href="https://en.wiktionary.org/wiki/%E8%8A%8B">https://en.wiktionary.org/wiki/%E8%8A%8B</a>]</p>
</li>
</ul>
<h3 id="gamja">Gamja</h3>
<p>[sourced from: <a href="https://en.wiktionary.org/wiki/%EA%B0%90%EC%9E%90">https://en.wiktionary.org/wiki/%EA%B0%90%EC%9E%90</a>]</p>
<p>Seemingly named from Korean 감자 <em>gamja</em> &ldquo;potato&rdquo;, which is a
nativisation of the Sino-Korean term 감저 (甘藷, <em>gamjeo</em>, “lesser yam
(<em>Dioscorea esculenta</em>)”). First attested 1766 in Korea, then referring
to the sweet potato (<em>Ipomoea batatas</em>). The word came to refer to both
&ldquo;potato&rdquo; and &ldquo;sweet potato&rdquo; in the nineteenth century, and later lost
its original meaning. (So <em>gamja</em> meant &ldquo;sweet potato&rdquo; first; but
partially supplanted by <em>goguma</em>.)</p>
<p>With 甘藷, <em>gamjeo</em> apparently borrowed from Early Modern Korean 감져
(<em>kamcye</em>), itself from 甘藷
[<a href="https://en.wiktionary.org/wiki/%E7%94%98%E8%97%B7">https://en.wiktionary.org/wiki/%E7%94%98%E8%97%B7</a>].</p>
<p>[There&rsquo;s also homophonous verbal form: 감자 (gamja) (<em>plain hortative of</em> 감다)</p>
<ol>
<li>
<p>let&rsquo;s close (our eyes)</p>
</li>
<li>
<p>let&rsquo;s wash</p>
<p>which is presumably unrelated.]</p>
</li>
</ol>
<h3 id="soju">Soju</h3>
<p>[source: <a href="https://en.wikipedia.org/wiki/Soju">https://en.wikipedia.org/wiki/Soju</a>]</p>
<p>Seemingly named for Korean <em>Soju</em> (소주; 燒酒), which means &ldquo;burned
liquor&rdquo;: with the first syllable, <em>so</em> (소; 燒; &ldquo;burn&rdquo;), referring to
the heat of distillation and the second syllable, <em>ju</em> (주; 酒), meaning
&ldquo;alcoholic drink&rdquo;. Etymological dictionaries record that China&rsquo;s
<em>shaozhou</em> (<em>shāojiǔ</em>, 烧酒), Japan&rsquo;s <em>shochu</em> (<em>shōchū</em>, 焼酎), and Korea&rsquo;s
<em>soju</em> (<em>soju</em>, 燒酒) have the same etymology. [A Wikipedian has here
added a note about unreliable sources(?).]</p>
<p>Another name for soju is <em>noju</em> (노주; 露酒; &ldquo;dew liquor&rdquo;), with its
first syllable, <em>no/ro</em> (노/로; 露; &ldquo;dew&rdquo;), likening the droplets of the
collected alcohol during the distilling process to dewdrops.</p>
<p>The origin of soju dates back to 13th-century Goryeo. The <a href="https://en.wikipedia.org/wiki/Yuan_dynasty">Yuan Mongols</a>
[the imperial dynasty of China founded by Kublai Khan, grandson of
Genghis Khan] acquired the technique of distilling <em>arak</em> from the
Persians during their invasions of the Levant, Anatolia, and Persia,
and in turn introduced it to the Korean Peninsula during the Mongol
invasions of Korea (1231–1259). Distilleries were set up around the
city of Gaegyeong, the then-capital (current Kaesong). In the areas
surrounding Kaesong, soju is still called <em>arak-ju</em> (아락주). <em>Andong</em>
soju, the direct root of modern South Korean soju varieties, started
as the home-brewed liquor developed in the city of Andong, where the
Yuan Mongols&rsquo; logistics base was located during this era.</p>
<h3 id="senpai">Senpai</h3>
<p>[source: <a href="https://en.wiktionary.org/wiki/%E5%85%88%E8%BC%A9#Japanese">https://en.wiktionary.org/wiki/%E5%85%88%E8%BC%A9#Japanese</a>]</p>
<p>Obviously named for Japanese 先輩 <em>senpai</em> &ldquo;senior/superior in social
standing or education or skill; an elder&rdquo; (the homepage has a tagline
&ldquo;Your everyday IRC student&rdquo; and also &ldquo;Welcome home, desune~&rdquo; and also a smiling anime-ish cat-ish logo).</p>
<p>The Japanese word was borrowed from the Middle Chinese 先輩 (<em>sen
pwojH</em>). A doublet of ソンベ (<em>sonbe</em>) [With Japanese <em>sonbe</em> being itself
borrowed from Korean 선배(先輩) (<em>seonbae</em>), which means &ldquo;(chiefly in
Korean media) <em>sunbae</em> (upperclassman or senior, in the context of
Korea)&quot;].</p>
<p>Both ultimately from Chinese 先輩 [ <em>xiānbèi</em> ] &ldquo;older generation;
senior; elder; ancestor; predecessor&rdquo;.</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>See: <a href="https://weechat.org/about/interfaces/">https://weechat.org/about/interfaces/</a> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>See <a href="https://wiki.ircnow.org/index.php?n=FreeIRC.About">https://wiki.ircnow.org/index.php?n=FreeIRC.About</a>;
freeirc.org is part of the <a href="https://ircnow.org">IRCNow network</a>:— a group/community with a
lot of useful free and paid services of various sorts, including shell
accounts and VPSes and such, and a lot of freely accessible
Unix/OpenBSD <a href="https://wiki.ircnow.org/index.php?n=Adminforces.Training">server admin tutorials</a>.</p>
<p>I also thought about the <a href="http://sdf.org">SDF Public Access Unix System[sdf.org]​</a>, which
has shell accounts and an IRC bouncer, but didn&rsquo;t end up trying their
bouncer. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>Alongside of <a href="https://en.wikipedia.org/wiki/ERC_(software)">ERC</a> and <a href="https://github.com/emacs-circe/circe">Circe</a>, another popular Emacs
IRC client is <a href="https://en.wikipedia.org/wiki/Rcirc">rcirc</a>. But the Emacswiki <a href="https://www.emacswiki.org/emacs?action=browse;oldid=IRC;id=InternetRelayChat">lists at least nine different
Emacs IRC clients</a>. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p>Goguma exists in an official version for Android
on F-Droid [on the <a href="https://f-droid.org/packages/fr.emersion.goguma/">official F-Droid respository</a>; and a &lsquo;nightly&rsquo;
version on <a href="https://fdroid.emersion.fr/#goguma-nightly">Goguma&rsquo;s own F-Droid repository</a>]; with unofficial/community
versions on <a href="https://play.google.com/store/apps/details?id=fr.emersion.goguma.play">Google Play for Android</a> and on the <a href="https://apps.apple.com/us/app/goguma-irc/id6470394620">App Store for iOS</a>. At
the moment I&rsquo;d recommend the official F-Droid version; I had some
issues with missing messages on the &lsquo;nightly&rsquo; version. <a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5" role="doc-endnote">
<p>I&rsquo;m not entirely sure why Goguma is named after the
Korean word for &ldquo;sweet potato&rdquo;. Though <a href="https://en.wiktionary.org/wiki/%EA%B3%A0%EA%B5%AC%EB%A7%88">Wiktionary does report</a> there&rsquo;s
also apparently a recent &ldquo;Internet slang&rdquo; sense of the word: &ldquo;a plot
development which frustrates the reader (e.g. the protagonist fails to
achieve their goal)&rdquo; [from c. 2012]; that may be a red herring.</p>
<p>It&rsquo;s obviously connected to one of Ser&rsquo;s other IRC applications,
gamja, and maybe it&rsquo;s just wanting to name things after Korean words
for root vegetables for some reason. I would have said it was a play
on Go, but Goguma isn&rsquo;t written in Go.</p>
<p>Though soju (which is written in Go), while also a Korean word,
doesn&rsquo;t fit quite the root vegetable pattern. (Nor does <em>senpai</em>, but
that&rsquo;s by different authors [though Korean 先輩 (in hangeul 선배)
<em>seonbae</em> &ldquo;upperclassman, senior&rdquo; exists too, and is cognate with
<em>senpai</em>, both ultimately borrowed from Middle Chinese 先輩(<em>sen pwojH</em>)
&ldquo;elder, senior, ancestor&rdquo;]. Well, see more of this <a href="https://babbagefiles.xyz/no-one-can-be-told-what-irc-is-you-have-to-logon-for-yourself/#appendix-etymologies">in the appendix</a>, if
it&rsquo;s your sort of thing. <a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6" role="doc-endnote">
<p>I think this is what is referred to in the <a href="https://sourcehut.org/blog/2024-06-04-status-and-plans/">June 2024
SourceHut blog post</a>, &ldquo;&hellip;You may have heard that we also had to part
ways with one of our staff members recently. This reduces our
headcount to two. For the time being we will not be hiring a
replacement, but our near-future plans are achievable with our current
headcount. Though we usually aim for transparency to the maximum
extent possible, we will not be sharing further details about this
departure, as a matter of reasonable privacy.&rdquo; <a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7" role="doc-endnote">
<p>see <a href="https://sourcehut.org/blog/2024-06-04-status-and-plans">2024-06-04 blog report &ldquo;The state of SourceHut and our
plans for the future&rdquo;</a>, where DeVault says &ldquo;Also, as a happy
side-effect of our surprise move to Amsterdam, SourceHut’s datacenter
installation is now entirely powered by renewable energy sources. We
have also finally rolled out IPv6 support for most SourceHut services
as part of our migration!&rdquo; <a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8" role="doc-endnote">
<p>In the &ldquo;Who is behind IRC Today&rdquo; <a href="https://web.archive.org/web/20250114235137/https://irctoday.com/faq">FAQ</a>, they say &ldquo;We have
co-developed the open source piece of software used in our service,
soju.&rdquo; I suspect this &ldquo;we&rdquo; includes at least, <a href="https://github.com/delthas">delthas</a> (the current
developer of senpai mentioned above, who also has a number of commits
to the soju repo, and who is in France), and Thomas Flament.</p>
<p>(For whatever reason, there seem to be at least two open source
developers who are both (a) French, and with interests in (b) IRCv3
and (c) Golang and (d) Korean or Japanese foodstuffs/culture.) <a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9" role="doc-endnote">
<p>If you&rsquo;re on IRC at all, you probably want to be on
Libera (which is where the main body of <a href="https://en.wikipedia.org/wiki/Freenode">Freenode</a> went after Freenode
was bought by the founder of <a href="https://en.wikipedia.org/wiki/Private_Internet_Access">Private Internet Access VPN</a>, <a href="https://en.wikipedia.org/wiki/Andrew_Lee_(entrepreneur)">Andrew Lee</a>,
<a href="https://en.wikipedia.org/wiki/Pretender">pretender</a> to the defunct throne of <a href="https://en.wikipedia.org/wiki/Joseon">Joseon</a> and the <a href="https://en.wikipedia.org/wiki/Korean_Empire">Korean Empire</a>; Korea
seems tied up in strange ways to IRC), and lots of free software
projects which aren&rsquo;t on Libera are on OFTC [=Open and Free Technology
Community] (e.g., <a href="https://irclogs.alpinelinux.org/">Alpine Linux</a>). <a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:10" role="doc-endnote">
<p>With Elpaca I use the following:</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">imgbb</span>
  <span class="nb">:ensure</span> <span class="p">(</span><span class="nb">:host</span> <span class="nv">github</span> <span class="nb">:repo</span> <span class="s">&#34;ecraven/imgbb.el&#34;</span><span class="p">))</span>
</code></pre></div><p>With Emacs 30+'s vc-package you should be able to do something like:</p>
<div class="highlight"><pre class="chroma"><code class="language-elisp" data-lang="elisp"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">imgbb</span>
  <span class="nb">:vc</span> <span class="p">(</span><span class="nv">imgbb</span> <span class="nb">:url</span> <span class="s">&#34;https://github.com/ecraven/imgbb.el&#34;</span>
                    <span class="nb">:branch</span> <span class="s">&#34;master&#34;</span><span class="p">)</span>
  <span class="nb">:ensure</span> <span class="no">t</span><span class="p">)</span>
</code></pre></div><p>We might try to make something a bit better/more integrated, but it
works well enough for now. <a href="#fnref:10" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://babbagefiles.xyz/categories/emacs" term="emacs" label="emacs" />
                             
                                <category scheme="https://babbagefiles.xyz/categories/irc" term="irc" label="irc" />
                            
                        
                    
                 
                    
                 
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Social network platforms (IRC, Matrix, Discord, Slack, and others)]]></title>
            <link href="https://babbagefiles.xyz/tridactyl/"/>
            <id>https://babbagefiles.xyz/tridactyl/</id>
            
                    <author>
                        <name>Benjamin Slade</name>
                    </author>
            <published>2021-10-27T14:22:23-06:00</published>
            <updated>2025-03-29T22:05:05-05:00</updated>
            
            
            <content type="html"><![CDATA[<p>Following on the last post</p>
<h2 id="lisp">Lisp</h2>
<ul>
<li>Common Lisp:
<ul>
<li>&hellip;</li>
</ul>
</li>
<li></li>
</ul>
<!--listend-->
<ul>
<li>Clojure: slack
<ul>
<li>Racket: slack</li>
</ul>
</li>
</ul>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://babbagefiles.xyz/categories/emacs" term="emacs" label="emacs" />
                             
                                <category scheme="https://babbagefiles.xyz/categories/irc" term="irc" label="irc" />
                            
                        
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://babbagefiles.xyz/tags/socialmedia" term="socialmedia" label="socialmedia" />
                             
                                <category scheme="https://babbagefiles.xyz/tags/" term="" label="" />
                            
                        
                    
                
            
        </entry>
    
</feed>
