<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Suckless on Linux Maxxing dot com</title>
    <link>https://linuxmaxxing.com/tags/suckless/</link>
    <description>Recent content in Suckless on Linux Maxxing dot com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>No Copyright</copyright>
    <lastBuildDate>Wed, 15 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://linuxmaxxing.com/tags/suckless/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Emacs is perfect for the suckless LARP</title>
      <link>https://linuxmaxxing.com/posts/07_emacs/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://linuxmaxxing.com/posts/07_emacs/</guid>
      <description>&lt;p&gt;Recently a reader brought to my attention that I had not made any&#xA;poasts in a little while.&#xA;I have no choice but to give the people what they want.&#xA;Fortunately I already had a couple poasts in the queue, this being&#xA;one of them.&lt;/p&gt;&#xA;&lt;p&gt;I have been a GNU/Linux power user for about 6 years now.&#xA;Most of work is done in the terminal and I have used all the LARPy&#xA;suckless or suckless-adjacent software.&#xA;It&amp;rsquo;s both a preference and a hobby.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Recently a reader brought to my attention that I had not made any
poasts in a little while.
I have no choice but to give the people what they want.
Fortunately I already had a couple poasts in the queue, this being
one of them.</p>
<p>I have been a GNU/Linux power user for about 6 years now.
Most of work is done in the terminal and I have used all the LARPy
suckless or suckless-adjacent software.
It&rsquo;s both a preference and a hobby.</p>
<p>Likewise I fell for the meme takes of this or that software being
bloat, most notably emacs and systemd.
I&rsquo;ll save the latter for another poast, stay tuned avid reader.</p>
<p>Whilst I won&rsquo;t directly address whether emacs is bloat or not, I will
address the fact that most terminal/suckless cosplayers - like
myself - are actually
be better suited using emacs over the <a href="https://lukesmith.xyz/programs/">Luke
Smith</a> starter pack.</p>
<p>In general, I think most terminal or power users care less about
whether the program is strictly suckless - meaning lacking features
but having some way to be extended via patching or separate programs -
and more about the functionality and quality of the software.
Whether something is suckless or bloat is ultimately a goal-posted
opinion where there goal-posts are free to move. Vim is bloat, use
vi. Vi is bloat, use ex. Ex is bloat, use ed. Ed is bloat, use cat,
sed, and awk. Sed and awk are bloat, just don&rsquo;t make mistakes.</p>
<p>There&rsquo;s no real standard, except that in the end software quality will
play the biggest role in our decision to use one thing or the other.
Vim is full of features that are inspired from heckin-bloated
emacs, but because it is so nice to use and the features can stay out
of the way, nobody cares. I&rsquo;ll save the bloat rant for another post.</p>
<h3 id="key-features-of-emacs">Key Features of Emacs</h3>
<ol>
<li>Unified &ldquo;Terminal&rdquo; System</li>
<li>Daemon/Client - tmux not required. Quitting the editor does not kill the buffer, unlike vim.</li>
<li>Documentation (info pages) and help system.</li>
</ol>
<p>I&rsquo;ll cover points 1 and 2 in this post, and save the documentation for
another post.</p>
<h3 id="inconsistent-system-experience">Inconsistent System Experience</h3>
<p>One of the problems I have after falling for the minimal software meme is remembering and deconflicting all the terminal bindings.
Bash and other shells use the readline library with emacs bindings by
default (I prefer this over vi even before using emacs), tmux has its own bindings mostly using ctrl-b (this
conflicts with readline/emacs),
weechat has its own bindings using alt/ctrl, vim has its bindings for
splits, profanity, newsboat, lynx, etc etc.
Plus your window manager keybindings.
You really have to think about all of those and be strategic about how
you lay out the bindings for your entire system.</p>
<p>Regardless of which window manager or DE (LXDE if anything) I am
running, I use sxhkd to launch all programs.
The sxhkdrc file is my master-list of all keybindings on my system.
Everything is arranged by prefix keys, and I keep everything used by
various programs commented out so I don&rsquo;t override them with sxhkd
bindings.
For most programs, I think there&rsquo;s a lot of wisdom in sticking with
default keybindings because chances are they won&rsquo;t conflict as much with other terminal/program bindings.</p>
<h3 id="consistent-and-unified-system-ui-and-experience">Consistent and Unified System UI and Experience</h3>
<p>Emacs simplifies a ton of this. Everything in Emacs is an Emacs
buffer, so Emacs keybindings - whether those keybindings are emacs,
vi/evil, meow, or some other editing system - work on every program.
There&rsquo;s no mucking around trying to get scroll support in a terminal
or program, or a way to copy text into your clipboard, or having different keybindings for vim splits and tmux splits.
It&rsquo;s all the same.</p>
<p>Likewise because everything is run in an Emacs buffer, all editor
commands perform the same operation whether it&rsquo;s a text file, web
browser, irc client, or email message.
You can create functions to manipulate text in one type of file/buffer that will work on other buffers.
Tsoding had a <a href="https://youtu.be/DMbrNhx2zWQ">recent video</a> on the usefulness of emacs, and
one of the key points was that emacs unifies programs that were never
designed to work together.
So trve, king.</p>
<p>Here&rsquo;s an extremely useful but simple example: scanning for urls.
Luke Smith&rsquo;s <a href="https://github.com/LukeSmithxyz/st">st</a> has series of
combined patches that allow you scan the terminal window for
urls, pipe them to dmenu, and then launch the selected url in the default system browser.
Super handy.
It doesn&rsquo;t necessarily work with all terminal programs, though.</p>
<p>But in emacs, this is a very easy function to write that can be easily
extended.
It&rsquo;s all done in about 20 lines.
I&rsquo;ve bound this function to <code>C-c g g</code> (for go).
A minibuffer pops up with a list of all url&rsquo;s in the
buffer, similar to st/dmenu.
I select the url I&rsquo;m looking for with <code>C-n/C-p</code>, hit enter, and the link opens in my default browser.
If I press <code>C-c g e</code>, it opens in <code>eww</code> (emacs built-in browser).
If I press <code>C-c g c</code>, the same base function is used to show all urls in a minibuffer, hitting return just copies the url to clipboard instead of opening in a browser.
No scrolling through the articles or text (which is also easier than most apps because of unified emacs keybindings).
No highlighting and pressing a copy keybinding.
I can use that url copy function in any buffer - irc, webpage, text file.
It&rsquo;s all the same in Emacs.</p>
<p>These functions scan for urls in the entire buffer.
But what if I just want to select the urls that are shown on screen?
Easy modification.
No patching sauce code or anything like that.</p>
<h3 id="programs-ive-replaced-with-emacs">Programs I&rsquo;ve replaced with Emacs</h3>
<table>
  <thead>
      <tr>
          <th>Function</th>
          <th>Terminal (old)</th>
          <th>Emacs (new)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>terminal</td>
          <td>st</td>
          <td>vterm</td>
      </tr>
      <tr>
          <td>editor</td>
          <td>vim</td>
          <td>emacs</td>
      </tr>
      <tr>
          <td>multiplexer</td>
          <td>tmux</td>
          <td>daemon/client + TRAMP</td>
      </tr>
      <tr>
          <td>file manager</td>
          <td>vifm</td>
          <td>dired</td>
      </tr>
      <tr>
          <td>web browser (text)</td>
          <td>lynx</td>
          <td>eww</td>
      </tr>
      <tr>
          <td>email</td>
          <td>mutt</td>
          <td>mu4e</td>
      </tr>
      <tr>
          <td>irc</td>
          <td>weechat</td>
          <td>erc</td>
      </tr>
      <tr>
          <td>xmpp</td>
          <td>profanity</td>
          <td>jabber.el</td>
      </tr>
      <tr>
          <td>matrix</td>
          <td>gomuks</td>
          <td>ement</td>
      </tr>
      <tr>
          <td>git</td>
          <td>cli</td>
          <td>magit / vc</td>
      </tr>
      <tr>
          <td>rss</td>
          <td>newsboat</td>
          <td>elfeed</td>
      </tr>
      <tr>
          <td>image viewer</td>
          <td>nsxiv</td>
          <td>image-mode</td>
      </tr>
      <tr>
          <td>pdf</td>
          <td>zathura</td>
          <td>doc-view</td>
      </tr>
  </tbody>
</table>
<p>Most of these are very easy to set up. <code>Elfeed</code> is definitely the
exception if you&rsquo;re coming from newsboat, and I haven&rsquo;t taken the time
to completely replicate my newsboat setup which used mpv for podcasts
and youtube vidyo, plus has a number of browser keybindings so I can
open articles in text browsers (assuming a full-feed isn&rsquo;t provided)
and graphical browsers.
So for now I am still mostly using newsboat.</p>
<p>Which of these are &ldquo;killer apps&rdquo;? For my uses, I&rsquo;m not sure I would
call any of them killer apps on their own, though I don&rsquo;t even view org-mode as a killer emacs app.
I can survive just fine without them.</p>
<p>They become killer apps by virtue of being a part of emacs.</p>
<p>I&rsquo;ve never been a huge terminal file-manager user, cli has always just
worked.
<code>Dired</code> on its own is a good file manager, no better or worse than
vifm, ranger, yazi, lf - they&rsquo;re all kind of the same in my book.
Where it is extremely powerful is that it integrates with everything
else in emacs, including <code>TRAMP</code> which is EXTREMELY useful when editing
on remote machines.
Not going to cover it here in detail, but <code>TRAMP</code> allows you to edit
remote files in your current emacs environment. Before using emacs I
had in my head that in order to use emacs on a server, you needed to
install emacs on the server (which could add a bit of gbs). Not the
case.</p>
<p>My favourite <code>dired</code> feature is the ability to open two <code>dired</code> buffers in
a split window, and any command done in one buffer is assumed to end
in the other buffer.
I.e. if I copy a file/files or make symbolic link/links in one <code>dired</code> buffer, emacs assumes the target is the other <code>dired</code> buffer.
Very handy.
You can also change the target directory if that isn&rsquo;t the case.</p>
<p><code>erc</code> is the best irc client I&rsquo;ve used.</p>
<p><code>ement</code> is a very good matrix client, not that the competition is great.</p>
<p><code>jabber.el</code> has seen recent improvements, it works fine.</p>
<p><code>magit</code> is the closest to a killer app on its own, not for me, but for anyone who
heavily uses git.
Your git workflow becomes extremely fast with magit and the ability to
quickly do partial commits is a huge qol feature.</p>
<h3 id="key-difference-gui-vs-terminal-features">Key Difference: GUI vs terminal features</h3>
<p>For most of these programs, a big difference is that when run as a
graphical emacs session (normally the case), they are gui programs.
They do not have the limitations of terminal text.
Fonts can vary in size and are not limited to monospace.
Images render just fine.</p>
<p>So whilst <code>mu4e</code> and <code>eww</code> are good programs, they are much better than
terminal variants because they render text and images as designed.
So with emacs you get the best of both worlds: minimal and hackable
terminal interface with gui quality of life features.</p>
<h3 id="edit-note-on-documentation">Edit: Note on Documentation</h3>
<p>Whilst I will cover emacs documentation in another post, it&rsquo;s a key
feature to mention here because all the features and keybindings for a
given program are easily accessible with emacs built-in documentation, usually with simple popup-menus.
Can&rsquo;t remember how to do a certain operation in <code>dired</code>? <code>C-h m</code> shows
you all of the <code>dired</code> keybindings and mode information. Curious what a keybinding does? <code>C-h k</code>
will show you what the next keybinding you press does. Want to see all your
bindings tied to <code>C-c</code>? <code>which-key</code> makes that a breeze in the
minibuffer.
Recently added <code>help-quick-toggle</code> with <code>C-h C-q</code> is probably
the easiest of the bunch I&rsquo;ve listed.</p>
<p>No man pages, no creating keybinding tables to track everything.</p>
<h3 id="conclusion">Conclusion</h3>
<p>The suckless/terminal mindset is aimed at simplicity. Use simple
programs that generally do one thing well, and stay in the terminal to
avoid bloat, distraction, slow, feature creep, etc.
Making all this happen can be a complex process though.</p>
<p>In my opinion, you&rsquo;re better of accepting the &ldquo;bloat&rdquo; and &ldquo;complexity&rdquo;
of emacs - I put complexity in quotes because emacs itself is actually
a simple program - in order for simplicity of configuration, less mental
taxation, and easier/better extensibility.
Admittedly this will come at the expense of an extra gb or
two of storage if you can spare it.</p>
<p>We all have fallen for the suckless LARP, why not fall for the
emacs meme as well?</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
