<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Thomas Letan's Blog - spatial-shell</title>
    <link>https://soap.coffee/~lthms/tags/spatial-shell.html</link>
    <description>Posts tagged "spatial-shell"</description>
    <atom:link href="https://soap.coffee/~lthms/tags/spatial-shell.xml" rel="self"
               type="application/rss+xml" />
    
    
    <item>
      <title>Spatial Shell 6th Release Might Be the Charm</title>
      <link>https://soap.coffee/~lthms/posts/SpatialShell6.html</link>
      <guid>https://soap.coffee/~lthms/posts/SpatialShell6.html</guid>
      <pubDate>December 30, 2023</pubDate>
      <description>
        
        &lt;h1&gt;Spatial Shell 6th Release Might Be the Charm&lt;/h1&gt;&lt;div id=&quot;tags-list&quot;&gt;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/spatial-shell.html&quot; class=&quot;tag hover-lavender&quot; marked=&quot;&quot;&gt;spatial-shell&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/releases.html&quot; class=&quot;tag hover-periwinkle&quot; marked=&quot;&quot;&gt;releases&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;After a first &lt;a href=&quot;/~lthms/posts/CFTSpatialShell.html&quot; class=&quot;hover-sky&quot; marked=&quot;&quot;&gt;call for testers&lt;/a&gt; that &lt;a href=&quot;https://github.com/lthms/spatial-shell/issues/2#issuecomment-1527193430&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;could have
been more effective if only the building instructions listed in the README were
correct&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;,
I am quite happy to announce the 6th release for Spatial Shell that, I believe,
is pretty usable for someone who &lt;em&gt;isn’t me&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;What’s Spatial Shell Already?&lt;/h2&gt;
&lt;p&gt;In a nutshell, Spatial Shell implements a &lt;em&gt;spatial model&lt;/em&gt; inspired by &lt;a href=&quot;https://material-shell.com&quot; class=&quot;hover-sky&quot; marked=&quot;&quot;&gt;Material
Shell&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; for i3 and sway. Windows are organized in a
grid whose rows are your workspace, and you can navigate this grid (by focusing
neighbors windows), move the focused window around, decide how many window you
want to see at most in every workspace, etc.&lt;/p&gt;
&lt;p&gt;When I first discovered Material Shell in August 2022, I was pretty excited,
but the fact that it is a GNOME extension prevented me from switching
completely (besides, it was pretty unstable on my laptop for reasons. So when I
discovered that Sway (my personal favorite window manager) could be controlled
by &lt;a href=&quot;https://man.archlinux.org/man/sway-ipc.7.en&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;a third-party program through a Unix
socket&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, I started experimenting.
&lt;a href=&quot;https://twitter.com/_lthms_/status/1561034295501897730&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;It didn’t take long before I had a working prototype that fit most of my
need&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, but it took a
significant amount of time to turn this prototype into something really usable
by anyone who isn’t me.&lt;/p&gt;
&lt;p&gt;Here is a clunky showcase of what Spatial Shell can do&lt;label for=&quot;fn1&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn1&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Yes, &lt;em&gt;Scott Pilgrim Takes Off&lt;/em&gt; is an awesome show that you definitely
need to watch. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;video controls=&quot;&quot;&gt;&lt;source src=&quot;https://spatial-shell.app/demo.mp4&quot;&gt;&lt;/video&gt;
&lt;p&gt;For the interested viewers, I am using a forked version of sway called
&lt;a href=&quot;https://github.com/WillPower3309/swayfx&quot; class=&quot;hover-sky&quot; marked=&quot;&quot;&gt;SwayFX&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; to get these rounded corners
and the dim effects on unfocused windows. The status bar is Waybar with &lt;a href=&quot;https://github.com/lthms/spatial-shell/tree/main/contrib/waybar&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;a
config you can try yourself if you are
interested&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;!
There is also &lt;a href=&quot;https://github.com/lthms/spatial-shell/tree/main/contrib/i3blocks&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;a minimal &lt;code class=&quot;hljs&quot;&gt;i3blocks&lt;/code&gt;
config&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;
available if you cannot use Waybar&lt;label for=&quot;fn2&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn2&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;I fully intend to provide an example config as visually pleasing as the
one for Waybar, but compatible with i3. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To be clear, the UI part of Spatial Shell remains lacking to this day. My
Waybar configuration works, but is pretty verbose and statically limited. For
instance, it will only display the 8th first windows of a workspace. This is
because Waybar does not allow one widget to generate multiple blocks. The same
goes for the &lt;code class=&quot;hljs&quot;&gt;i3blocks&lt;/code&gt; configuration example. Also, they assume the
availability of a font with icons&lt;label for=&quot;fn3&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn3&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;On that matter, I love the &lt;a href=&quot;https://www.nerdfonts.com/&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;Nerd
Fonts&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; project. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Try It Yourself!&lt;/h2&gt;
&lt;p&gt;As of today, you can install Spatial Shell using the following methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;By fetching the official binary builds for Linux x86_64 from the &lt;a href=&quot;https://github.com/lthms/spatial-shell/releases&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;GitHub
releases page&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;By installing the &lt;a href=&quot;https://aur.archlinux.org/packages/spatial-shell&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;AUR package for
Archlinux&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;By building directly from source&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/lthms/spatial-shell#spatial-shell&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;&lt;code class=&quot;hljs&quot;&gt;README&lt;/code&gt;&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; should be
a good starting point. If it is lacking key pieces of information, do not
hesitate to open an issue. At this point, I am willing to deal with
documentation issue as bugs.&lt;/p&gt;
&lt;p&gt;Besides its &lt;code class=&quot;hljs&quot;&gt;README&lt;/code&gt;, Spatial Shell is documented via manpages. For a list of
available manpages, you can refer to &lt;code class=&quot;hljs&quot;&gt;man -k spatial&lt;/code&gt;. Spatial Shell definitely
works with sway, and should work with i3 since the former is basically a
drop-in replacement for the latter.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The journey from the initial idea up to this moment has definitely been an
interesting one. At this point, Spatial Shell provides every feature I need.
That being said, it does not mean there is nothing more to tell! I certainly
hope this project will catch the eyes of some of you, and soon be used on
computers I do not own by folks who are not me.&lt;/p&gt;
&lt;p&gt;Contributions are obviously welcome! Typically, if you happen to piece together
a neat status bar configuration, I am &lt;em&gt;very&lt;/em&gt; interested.&lt;/p&gt;
        
      </description>
    </item>
    
    
    
    <item>
      <title>What happened since December 2022?</title>
      <link>https://soap.coffee/~lthms/posts/May2023.html</link>
      <guid>https://soap.coffee/~lthms/posts/May2023.html</guid>
      <pubDate>May 18, 2023</pubDate>
      <description>
        
        &lt;h1&gt;What happened since December 2022?&lt;/h1&gt;&lt;div id=&quot;tags-list&quot;&gt;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/emacs.html&quot; class=&quot;tag hover-lavender&quot; marked=&quot;&quot;&gt;emacs&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/meta.html&quot; class=&quot;tag hover-lemon&quot; marked=&quot;&quot;&gt;meta&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/neovim.html&quot; class=&quot;tag hover-sky&quot; marked=&quot;&quot;&gt;neovim&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/releases.html&quot; class=&quot;tag hover-mint&quot; marked=&quot;&quot;&gt;releases&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/spatial-shell.html&quot; class=&quot;tag hover-sky&quot; marked=&quot;&quot;&gt;spatial-shell&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;Initially, I started this “What happened” series as an exercise to publish
more regularly on this website. Suffice to say, I haven’t done a particularly
impressive job in that regard, which only means I have a lot of room for
improvement.&lt;/p&gt;
&lt;p&gt;Anyway, if the first few months of 2023 has been mostly &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$WORK&lt;/span&gt;&lt;/code&gt; focus,
the same cannot be said for April and May. For one, I have started
&lt;a href=&quot;/~lthms/running.html&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;running&lt;/a&gt; again. But this is only the tip of the iceberg.&lt;/p&gt;
&lt;h2&gt;Spatial Shell got its first releases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/lthms/spatial-shell&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;Spatial Shell&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; is probably my hobby
project I am most excited about. The &lt;a href=&quot;/~lthms/posts/CFTSpatialShell.html&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;“call for testers”
article&lt;/a&gt; I have published recently managed to
catch the attention of a few folks&lt;label for=&quot;fn1&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn1&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;You want to hear a lesson I learned the hard way just after publishing
it? Before calling for testers, it is better to &lt;a href=&quot;https://github.com/lthms/spatial-shell/issues/2#issuecomment-1527193430&quot; class=&quot;hover-coral&quot; marked=&quot;&quot;&gt;be sure your project can
actually be compiled easily by the potential
volunteers&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. &lt;/span&gt;
&lt;/span&gt;. The perspective to publish such a
write-up was a very strong source of motivation for me to clean up a project I
was using daily for several months now, and I am very satisfied with the
result.&lt;/p&gt;
&lt;p&gt;Mass adoption is still a distant horizon, but still, the project is now
mainstream enough that it has already been mentioned in &lt;a href=&quot;https://discuss.ocaml.org/t/window-manager-xmonad-in-ocaml/12048/4&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;a random topic on the
OCaml discourse by someone who isn’t
me&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. 🎉&lt;/p&gt;
&lt;p&gt;This led me to formally release a first version of Spatial Shell in the end of
April, and a second today. For the first time, I have also published &lt;a href=&quot;https://aur.archlinux.org/packages/spatial-shell&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;an
Archlinux package&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, to make
the life of potential early adopters even easier. Do not hesitate to upvote it
so that it can find its way to the &lt;code class=&quot;hljs&quot;&gt;extra&lt;/code&gt; repository some day.&lt;/p&gt;
&lt;h2&gt;Goodbye Emacs! Remember me, Neovim?&lt;/h2&gt;
&lt;p&gt;In 2015, I started using Coq for my PhD thesis and at the time, there was no
real support for (Neo)vim&lt;label for=&quot;fn2&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn2&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;The situation later improved. Nowadays, you can implement your theories
using &lt;a href=&quot;https://github.com/whonore/Coqtail&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;Coqtail&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, and &lt;a href=&quot;https://github.com/ejgallego/coq-lsp&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;Coq
LSP&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; will probably become a viable
and interesting setup in a near future. &lt;/span&gt;
&lt;/span&gt;. Everyone was using &lt;a href=&quot;https://proofgeneral.github.io/&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;Proof
General&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; and Emacs, so I was left with little
choice but to follow through. With only my courage and the &lt;a href=&quot;https://juanjoalvarez.net/posts/2014/vim-emacsevil-chaotic-migration-guide/&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;good advice of a
fellow “vimer” who had also made a similar
journey&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;,
I started using Emacs.&lt;/p&gt;
&lt;p&gt;Fast forward 8 years later, and my &lt;a href=&quot;https://src.soap.coffee/dotfiles/emacs.d&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;Emacs
configuration&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; has become a project
of its own. Overall, I was pretty happy with my setup, but in the same time, I
always remained a bit nostalgic of my Neovim days. This is probably why I
decided to give this old friend a try when my company bought me a new laptop. I
also used this as an opportunity to try out this LSP-thing everyone was talking
about.&lt;/p&gt;
&lt;p&gt;It has been a month now, and I do not plan to come back to my previous habits.
There are still some few edges here and there, I still need to get my head
around lua, but LSP is nice, and plugins like
&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;telescope&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; are simply too
beautiful.&lt;/p&gt;
&lt;p&gt;That being said, there was one aspect of moving from Emacs to Neovim I had not
anticipated: Org mode. Which constitutes a perfect transition to the next
session.&lt;/p&gt;
&lt;h2&gt;Website redesign, again&lt;/h2&gt;
&lt;p&gt;Did you notice this website has been revamping recently? The changes are
actually deeper than “just” a redesign, to a point where I had to port &lt;em&gt;all&lt;/em&gt; my
write-ups to a different markup language&lt;label for=&quot;fn3&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn3&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Are you starting to understand why “Org mode” was the perfect
transition to move on to this section? &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Why, you ask? Well, it’s actually pretty simple: as time goes, I’ve grown
lazier.&lt;/p&gt;
&lt;p&gt;Let me give you some context. Until very recently, my website was built around
the idea to have literate programming as a first-class citizen of my author
tools. For instance, you can have a look at &lt;a href=&quot;/~lthms/posts/CleopatraV1.html&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;what used to be the literate
program which was responsible for generating the
website&lt;/a&gt;. Similarly, most of &lt;a href=&quot;/~lthms/tags/coq.html&quot; class=&quot;hover-coral&quot; marked=&quot;&quot;&gt;my write-ups about
Coq&lt;/a&gt; were actually Coq documents. Literate programming is
actually a very nice paradigm for authoring technical contents, because it
gives you the tools to keep said contents accurate and up-to-date. In a
nutshell, you cannot have a typo in one of your code snippets which would
prevent it from compiling, because you actually
compile the snippet and catch the typo when you try to generate your website.
Or at least, it is what I used to do.&lt;/p&gt;
&lt;p&gt;I decided to stop because, for all its benefits, this approach has one major
drawback: it is hard to maintain. I had invested quite some time and efforts to
keep my website sources under control, but it really was an everyday fight.
There are some strange things which start happening when you fully commit to
this, as I think I did. For instance, software dependencies tie your article
together. Suddenly, you cannot talk about this new fancy feature of the latest
Coq release without upgrading &lt;em&gt;all&lt;/em&gt; your write-ups implemented as Coq
documents&lt;label for=&quot;fn4&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn4&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Well, in theory you can. Just have each Coq document specifies the
Coq version it requires, and support this level of customization in your
build toolchain. But then, your blog takes forever to build from a cold
repository. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;That being said, most of the work had already been done. This website &lt;em&gt;was&lt;/em&gt; a
collection of literate programs, and I was pretty proud of the state of things.
I could deal with the annoyances&lt;label for=&quot;fn5&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn5&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Like using Coqdoc syntax to write my articles, for instance. I could
write about how the Coqdoc syntax irks me for ages. &lt;/span&gt;
&lt;/span&gt;. But then, as I explained in the
previous section, I decided to move away from Emacs. The first time I tried to
start a new write-up, it hit me.&lt;/p&gt;
&lt;p&gt;I used to write most of my contents using Org mode. Org mode, also known as
&lt;em&gt;the&lt;/em&gt; Emacs markup language.&lt;/p&gt;
&lt;p&gt;I know of at least &lt;a href=&quot;https://github.com/nvim-orgmode/orgmode&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;one “Org plugin” for
Neovim&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, but instead of giving it a
try, I decided to use this opportunity to tackle my “maintenance problem” once
and for all. &lt;em&gt;I gave up on literate programming for this website.&lt;/em&gt; As a result,
this website is now generated from Markdown files only (using
&lt;a href=&quot;https://github.com/markdown-it/markdown-it&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;markdown-it&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; with many plugins).
As a consequence, the generated HTML is way more “predictable.” This was enough
to motivate me at giving a try at &lt;a href=&quot;https://soupault.app/reference-manual/#metadata-extraction-and-rendering&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;Soupault’s
indexes&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;,
which are way more powerful than I anticipated. Now, this website has&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tags. Each write-up can be labeled with as many tags as I want, there is &lt;a href=&quot;/~lthms/tags&quot; class=&quot;hover-coral&quot; marked=&quot;&quot;&gt;a
page which lists all the tags used in the website&lt;/a&gt;, and each tag has
its own page (for instance, the &lt;a href=&quot;/~lthms/tags/coq.html&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;&lt;code class=&quot;hljs&quot;&gt;coq&lt;/code&gt; tag&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&quot;/~lthms/posts/index.xml&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;RSS feed&lt;/a&gt;. It was actually one of the main features I
really wanted to get with this revamp.&lt;/li&gt;
&lt;li&gt;Automatically generated list of articles in the &lt;a href=&quot;/~lthms/&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;home page&lt;/a&gt;, for each
series (see the &lt;a href=&quot;/~lthms/series/Ltac.html&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;Ltac series&lt;/a&gt; for instance). Before, I was
publishing “curated indexes,” or put in other words: I was writing these
indexes myself, by hand. And again, I’ve grown lazier.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It took me a week to go through this rework. Translating manually every write-up
was tedious, to say the least, as was implementing the Lua plugins for Soupault
since I have neither proficiency nor tooling to help me write Lua code. But I
am very glad for the final result.&lt;/p&gt;
&lt;p&gt;Also, I have invested in an Antidote license, so hopefully, this website will
have fewer typos and English butchering as of now. A clean text, delivered with
a nice and simple design, from a sane and maintainable &lt;a href=&quot;https://src.soap.coffee/soap.coffee/lthms.git/&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;Git
repository&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
        
      </description>
    </item>
    
    
    
    <item>
      <title>Spatial Shell: Call For Testers</title>
      <link>https://soap.coffee/~lthms/posts/CFTSpatialShell.html</link>
      <guid>https://soap.coffee/~lthms/posts/CFTSpatialShell.html</guid>
      <pubDate>April 27, 2023</pubDate>
      <description>
        
        &lt;h1&gt;Spatial Shell: Call For Testers&lt;/h1&gt;&lt;div id=&quot;tags-list&quot;&gt;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/spatial-shell.html&quot; class=&quot;tag hover-rose&quot; marked=&quot;&quot;&gt;spatial-shell&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;In August 2022, I have discovered &lt;a href=&quot;https://material-shell.com&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;Material
Shell&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. A few weeks later, I had pieced together a
working prototype of a dynamic tiling management “a la Material Shell” for
&lt;a href=&quot;https://swaywm.org&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;sway&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. By October, the project was basically fulfilling my
needs, and I had already started to use it on my workstation&lt;label for=&quot;fn1&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn1&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;I tried so you do not have to: having my graphical session going crazy
during a work meeting because of a software I had written. &lt;/span&gt;
&lt;/span&gt;. The project
sat there for a while until I rediscovered this thing called &lt;em&gt;holidays&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For a short week, I tried to address at many of the remaining issues and
missing features that I was aware of. Then, I started to write
&lt;a href=&quot;https://lthms.github.io/spatial-shell/spatial.1.html&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;man pages&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, which
turned out to be the perfect opportunity to clean up every clunkiness I could
possibly find.&lt;/p&gt;
&lt;p&gt;I can’t help but find the result rather nice and satisfying, and I hope you
will enjoy it too! &lt;a href=&quot;https://github.com/lthms/spatial-shell&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;Spatial Shell&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;
works on my machine, which means it will definitely break on yours. But this is
where the fun lies, right? At this point, I definitely think the project is
ready to fall into the hands of (motivated) alpha testers.&lt;/p&gt;
&lt;p&gt;Anyway, let me give you a tour!&lt;/p&gt;
&lt;h2&gt;Spatial Model&lt;/h2&gt;
&lt;p&gt;At its core, Spatial Shell allows you to navigate a grid of windows.
Workspace are rows which can be individually configured to determine how many
windows (cells) you can see at once. More precisely, workspaces in Spatial
Shell can use two layouts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Maximize:&lt;/strong&gt; One window is displayed at a time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Column:&lt;/strong&gt; Several windows are displayed side by side, to your convenience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reason &lt;strong&gt;Maximize&lt;/strong&gt; is not a particular case of &lt;strong&gt;Column&lt;/strong&gt;, but instead a
layout on its own, is to easily allow you to switch to and back from maximizing
the focused window. The following picture&lt;label for=&quot;fn2&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn2&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Created using &lt;a href=&quot;https://excalidraw.com/&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;Excalidraw&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. &lt;/span&gt;
&lt;/span&gt; summarizes one particular setup with
tree workspaces, each configured differently.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/~lthms/img/spatial-shell-example.png&quot;&gt;&lt;figcaption&gt;&lt;p&gt;Spatial Shell allows users to configure the layout of each workspace individually.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workspace 1 contains three windows, and uses the &lt;strong&gt;Column&lt;/strong&gt; layout to display
at most three windows, so each window is visible, with the focus being on
the leftmost one.&lt;/li&gt;
&lt;li&gt;Workspace 2 contains four windows, and uses the &lt;strong&gt;Column&lt;/strong&gt; layout to display at
most two windows. As a consequence, two windows are not visible.&lt;/li&gt;
&lt;li&gt;Workspace 3 contains two windows, and uses the &lt;strong&gt;Maximize&lt;/strong&gt; layout so only the
focused window is visible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To help users know which window is currently holding the focus, Spatial Shell
slightly reduces the opacity of unfocused windows (as poorly hinted by the gray
backgrounds in the figure). Finally, Spatial Shell can also set a background
for empty workspaces (using &lt;code class=&quot;hljs language-bash&quot;&gt;swaybg&lt;/code&gt; under the hood).&lt;/p&gt;
&lt;p&gt;And this is basically it. There is not much more to say about Spatial Shell
features.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;From an implementation and user experience perspective, Spatial Shell is taking
inspiration from i3 and sway.&lt;/p&gt;
&lt;p&gt;More precisely, Spatial Shell comprises two executables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lthms.github.io/spatial-shell/spatial.1.html&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;&lt;strong&gt;spatial&lt;/strong&gt;(1)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, the
daemon implementing the spatial model described in the previous section, and&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lthms.github.io/spatial-shell/spatialmsg.1.html&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;&lt;strong&gt;spatialmsg&lt;/strong&gt;(1)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, a
client used to control the current instance of spatial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assuming &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$spatial&lt;/span&gt;&lt;/code&gt; and &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt;&lt;/code&gt; contains the paths to
spatial and spatialmsg binaries respectively, then the simplest sway
configuration to start using Spatial Shell is the following&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatial&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# moving the focus&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+h &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;focus left&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+l &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;focus right&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+k &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;focus up&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+j &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;focus down&quot;&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# moving the focused window&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+Shift+h &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;move left&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+Shift+l &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;move right&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+Shift+k &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;move up&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+Shift+j &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;move down&quot;&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# toggle between Maximize and Column layout&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+space &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;toggle layout&quot;&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# modify the number of windows to display in the Column layout&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+i &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;column count decrement&quot;&lt;/span&gt;
bindsym &lt;span class=&quot;hljs-variable&quot;&gt;$mod&lt;/span&gt;+o &lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$spatialmsg&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;column count increment&quot;&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot;&gt;# start waybar, spatial will take care of the rest&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; waybar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By default, Spatial Shell sets the initial configuration of a workspace to
the Column layout with two columns at most, and sets the opacity of the
unfocused windows to 75%. This can be customized, either globally or per
workspace, by creating a configuration file in
&lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$XDG_CONFIG_HOME&lt;/span&gt;/spatial/config&lt;/code&gt;&lt;label for=&quot;fn3&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn3&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;If unset, &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$XDG_CONFIG_HOME&lt;/span&gt;&lt;/code&gt; defaults to
&lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$HOME&lt;/span&gt;/.config&lt;/code&gt;. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;For instance, my config file looks like that.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-bash&quot;&gt;[workspace=3] default layout maximize
background &lt;span class=&quot;hljs-string&quot;&gt;&quot;~/.config/spatial/wallpaper.jpg&quot;&lt;/span&gt;
unfocus opacity 85
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See &lt;a href=&quot;https://lthms.github.io/spatial-shell/spatial.5.html&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;&lt;strong&gt;spatial&lt;/strong&gt;(5)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; for
the list of commands supported by Spatial Shell.&lt;/p&gt;
&lt;p&gt;As a side note, readers familiar with sway will definitely pick the resemblance
with sway and swaymsg, and it actually goes pretty deep. In a nutshell, swaymsg
connects to a UNIX socket created by sway at startup time, to send it commands
(see &lt;a href=&quot;https://lthms.github.io/spatial-shell/spatial.5.html&quot; class=&quot;hover-rose&quot; marked=&quot;&quot;&gt;&lt;strong&gt;spatial&lt;/strong&gt;(5)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;)
using a dedicated IPC protocol inherited from i3 (see
&lt;a href=&quot;https://lthms.github.io/spatial-shell/sway-ipc.7.html&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;&lt;strong&gt;sway-ipc&lt;/strong&gt;(7)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;). Not
only spatial also relies on sway IPC protocol to interact with sway and
implement its spatial model, it creates a UNIX of its own, and supports its own
protocol
(&lt;a href=&quot;https://lthms.github.io/spatial-shell/spatial-ipc.7.html%5D%5Bspatial-ipc.7.html&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;&lt;strong&gt;spatial-ipc&lt;/strong&gt;(7)&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Waybar Integration&lt;/h2&gt;
&lt;p&gt;It is a common practice to use a so-called “bar” with sway, to display some
useful information about the current state of the system. In the &lt;code class=&quot;hljs&quot;&gt;contrib/&lt;/code&gt;
directory of &lt;a href=&quot;https://github.com/lthms/spatial-shell&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;Spatial Shell repository&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;,
interested readers will find a configuration for
&lt;a href=&quot;https://github.com/Alexays/Waybar&quot; class=&quot;hover-sky&quot; marked=&quot;&quot;&gt;Waybar&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;label for=&quot;fn4&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn4&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Readers familiar with Material Shell design will not be surprised by
the general look and feel of the screenshot below. &lt;/span&gt;
&lt;/span&gt;. This configuration is
somewhat clunky at the moment, due to the limitations of the custom widget of
Waybar which does not allow to have one widget defines several “buttons.” I am
interested in investing a bit of time to see if I could write a native widget,
similarly to sway’s one.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/~lthms/img/spatial-shell.png&quot;&gt;&lt;figcaption&gt;&lt;p&gt;Mandatory screenshot of Spatial Shell, with the Waybar configuration.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That being said, the user experience with this integration is already pretty
neat. As long as you don’t need more than 6 workspaces and 8 windows per
workspaces&lt;label for=&quot;fn5&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn5&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;These constants are totally arbitrary and can be increased by
modifying the Waybar config, but the issue will remain that a
limit will exist. &lt;/span&gt;
&lt;/span&gt;, you are good to go!&lt;/p&gt;
&lt;h2&gt;Building from Source&lt;/h2&gt;
&lt;p&gt;As of April 2023, the only way to get Spatial Shell is to build it from source.&lt;/p&gt;
&lt;p&gt;You will need the following runtime dependencies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sway (i3 might be supported at some point)&lt;/li&gt;
&lt;li&gt;gmp (for bad reasons, fortunalety this will be removed at some point)&lt;/li&gt;
&lt;li&gt;swaybg&lt;/li&gt;
&lt;li&gt;waybar (if you want the full experience)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will need the following build dependencies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;opam&lt;/li&gt;
&lt;li&gt;scdoc (for the man pages)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, building and installing Spatial Shell is as simple as using the two
following commands.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-bash&quot;&gt;make build-deps
make install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The latter command will install Spatial Shell’s binaries in
&lt;code class=&quot;hljs language-bash&quot;&gt;/usr/local/bin&lt;/code&gt;, and the man pages in &lt;code class=&quot;hljs language-bash&quot;&gt;/usr/local/man&lt;/code&gt;. You can
remove them with &lt;code class=&quot;hljs language-bash&quot;&gt;make uninstall&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To install Waybar theme, copy &lt;code class=&quot;hljs language-bash&quot;&gt;contrib/waybar/spatialbar.py&lt;/code&gt; to
&lt;code class=&quot;hljs language-bash&quot;&gt;/usr/local/bin/spatialbar&lt;/code&gt; for instance, and the Waybar style and
config file to &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$HOME&lt;/span&gt;/.config/waybar&lt;/code&gt;.&lt;/p&gt;
        
      </description>
    </item>
    
    
    
    <item>
      <title>What happened in October and November 2022?</title>
      <link>https://soap.coffee/~lthms/posts/November2022.html</link>
      <guid>https://soap.coffee/~lthms/posts/November2022.html</guid>
      <pubDate>November 19, 2022</pubDate>
      <description>
        
        &lt;h1&gt;What happened in October and November 2022?&lt;/h1&gt;&lt;div id=&quot;tags-list&quot;&gt;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/spatial-shell.html&quot; class=&quot;tag hover-periwinkle&quot; marked=&quot;&quot;&gt;spatial-shell&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/nanowrimo.html&quot; class=&quot;tag hover-peach&quot; marked=&quot;&quot;&gt;nanowrimo&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/coqffi.html&quot; class=&quot;tag hover-coral&quot; marked=&quot;&quot;&gt;coqffi&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;It is November 19 today, and I’m one month and 4 days late for the October
Retrospective! Truth is, &lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$WORK&lt;/span&gt;&lt;/code&gt; has been intense lately, to a point
where I have not made much progress on my side projects. Anyway.&lt;/p&gt;
&lt;p&gt;I have implemented the last feature I was really missing in my daily
use of Spatial Sway: moving windows to adjacent workspaces. As a
result, I think I can say that Spatial Sway has really reached the
“Minimum Viable Product” stage, with a convenient UX, and a nice
enough UI. It is still lacking when it comes to configurability,
though. It is the next item of my TODO list, but I have no idea when I
will implement the support for a configuration file.&lt;/p&gt;
&lt;p&gt;Another highlight of the past two months was the
&lt;a href=&quot;https://nanowrimo.org&quot; class=&quot;hover-sky&quot; marked=&quot;&quot;&gt;NaNoWriMo&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. I took the last week of October and the
first week of November off to plan and start writing a fiction project for it.
Writing again was really nice, and I even gave writing fiction in English a
shot. That made me uncover a bug in the English support of
&lt;a href=&quot;https://crates.io/crates/ogam&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;ogam&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, my markup language for fiction writers,
which led me to publish a fix on Crates.io. However, as soon as I came back to
&lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$WORK&lt;/span&gt;&lt;/code&gt;, my writing spree ended. That’s okay, though. It gave me plenty
of ideas for future sessions. Thanks, NaNoWriMo! Sorry to quit so soon, and see
you next year, maybe.&lt;/p&gt;
&lt;p&gt;Finally, a nice surprise of the past month is that &lt;a href=&quot;https://github.com/ocaml/dune/pull/6489&quot; class=&quot;hover-periwinkle&quot; marked=&quot;&quot;&gt;someone has started working
on adding proper support for &lt;code class=&quot;hljs&quot;&gt;coqffi&lt;/code&gt; to
&lt;code class=&quot;hljs&quot;&gt;dune&lt;/code&gt;&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, the build system for OCaml
and Coq! I’m thrilled by this. Thanks,
&lt;a href=&quot;https://github.com/Alizter&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;&lt;strong&gt;@Alizter&lt;/strong&gt;&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This wraps up this retrospective. I hope I will have more interesting,
concrete news to share next month.&lt;/p&gt;
        
      </description>
    </item>
    
    
    
    <item>
      <title>What happened in September 2022?</title>
      <link>https://soap.coffee/~lthms/posts/September2022.html</link>
      <guid>https://soap.coffee/~lthms/posts/September2022.html</guid>
      <pubDate>September 18, 2022</pubDate>
      <description>
        
        &lt;h1&gt;What happened in September 2022?&lt;/h1&gt;&lt;div id=&quot;tags-list&quot;&gt;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/spatial-shell.html&quot; class=&quot;tag hover-peach&quot; marked=&quot;&quot;&gt;spatial-shell&lt;/a&gt; &lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#tag&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;/~lthms/tags/meta.html&quot; class=&quot;tag hover-lemon&quot; marked=&quot;&quot;&gt;meta&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;It is September 18 today, and it has already been a month since I
decided to start these retrospectives. This means it is time to take a
step back and reflect of what happened these past few thirty days or
so&lt;label for=&quot;fn1&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn1&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;There is the shocking news that I have started to use syntax
highlighting again. But let’s not linger too much into it just yet. &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Spatial Sway&lt;/h2&gt;
&lt;p&gt;A few days after publishing my August Retrospective, I have learned
the existence of &lt;a href=&quot;https://material-shell.com&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;Material Shell&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, an extension for
GNOME 3 that provides a very interesting user experience.&lt;/p&gt;
&lt;p&gt;I tried it for a few hours, but the thing kept crashing (it’s
probably on me, I did not even remember I had Gnome installed on my
machine, and I would not be surprised the culprit was my dusty setup
rather than Material Shell itself). The experience remained very
promising, though. Their “spatial model” especially felt like a very
good fit for me. Basically, the main idea is that you have a grid of
windows, with your workspaces acting as the rows. You can navigate
horizontally (from one workspace to another), or horizontally, and
you choose how many windows you want to see at once on your screen.&lt;/p&gt;
&lt;p&gt;And so for a few hours, I was a bit frustrated by the situation…
until I learned about how one can actually manage and extend Sway
(the Wayland compositor I use for several years now) thanks to its IPC
protocol.  I spend like three days experimenting, first in Rust, then in
OCaml&lt;label for=&quot;fn2&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn2&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;This was actually an interesting thought process. I am using OCaml at
&lt;code class=&quot;hljs language-bash&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$WORK&lt;/span&gt;&lt;/code&gt; for about more than a year now.&lt;/span&gt;
&lt;span class=&quot;footnote-p&quot;&gt;I have curated a setup that works pretty well, and I am familiar with the
development tools. On the contrary, I had not written a line of Rust for at
least a year, my Emacs configuration for this language was broken, and I
had lost all my fluency in this language. Still, I was not expecting to
pick OCaml when I started this project. &lt;/span&gt;
&lt;/span&gt;, and by the end of the week, I had a first working prototype I
called &lt;a href=&quot;https://github.com/lthms/spatial-shell&quot; class=&quot;hover-peach&quot; marked=&quot;&quot;&gt;Spatial Sway&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. It works pretty
well; well enough that I am using it daily for several weeks now. It feels
clunky at times, but it works well, and I have been able to write a
&lt;a href=&quot;https://github.com/Alexays/Waybar&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;Waybar&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; configuration heavily inspired on
Material Shell UI.&lt;/p&gt;
&lt;p&gt;Overall, I am pretty satisfied with this turnout. Writing a hobbyist
software project is always nice, but the ones you can integrate in
your daily workflow are the best one. The last time I did that was
&lt;a href=&quot;https://sr.ht/~lthms/keyrd&quot; class=&quot;hover-lavender&quot; marked=&quot;&quot;&gt;&lt;strong&gt;keyrd&lt;/strong&gt;&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;, my little keystrokes counting
daemon&lt;label for=&quot;fn3&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn3&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-right sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;19,970,965 since I started using it at the time of writing this
article &lt;/span&gt;
&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Anyway, lots remains to be said about Spatial Sway, but I might save
it for a bit later. I still have some key features to implement
(notably, moving a window to another workspace), then I will
probably try to advertise it a bit. I am under the impression this
project could be of interest for others, and I would love to see it
used by folks willing to give a Material Shell-like experience a
try, without having to deal with Gnome Shell. By the way,
considering Sway is a drop-in replacement for i3, and that it
implements the exact same IPC protocol, there is no reason why
Spatial Sway is actually Sway specific, and I will rename it Spatial
Shell at some point.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/~lthms/img/spatial-sway-preview.png&quot;&gt;&lt;figcaption&gt;&lt;p&gt;Mandatory screenshot of Spatial Sway.&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;This Website&lt;/h2&gt;
&lt;p&gt;On a side note, I have started to refine the layout of this website
a bit. Similarly, I have written a new, curated home page where I
want to highlight the most recent things I have published on the
Internet.&lt;/p&gt;
&lt;p&gt;I have been experimenting with
&lt;a href=&quot;https://github.com/cpitclaudel/alectryon/&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;Alectryon&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; as a way to replace
&lt;code class=&quot;hljs&quot;&gt;coqdoc&lt;/code&gt;, to improve the readability of my Coq-related articles. Unfortunately,
it looks like this tool is missing &lt;a href=&quot;https://github.com/cpitclaudel/alectryon/issues/86&quot; class=&quot;hover-lemon&quot; marked=&quot;&quot;&gt;a key feature I
need&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#github&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;. I might try to get
my hand dirty and implement it myself if I find the time and the motivation
in the following weeks.&lt;/p&gt;
&lt;p&gt;Finally, reading about how &lt;a href=&quot;https://xeiaso.net/talks/how-my-website-works&quot; class=&quot;hover-mint&quot; marked=&quot;&quot;&gt;Xe Iaso’s talk about how she generates her
blog&amp;nbsp;&lt;span class=&quot;icon&quot;&gt;&lt;svg&gt;&lt;use href=&quot;/~lthms/img/icons.svg#external-link&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt; was very inspiring to me.
I can only suggest that you have a look.&lt;/p&gt;
&lt;p&gt;Though not to the same extent, I also think I have spent way too much effort in
my website. Most of my Coq-related articles are actual Coq program, expect the
articles about &lt;code class=&quot;hljs&quot;&gt;coqffi&lt;/code&gt; which are Org mode literate programs. Hell, this website
itself used to be a literate program of the sort, until I stopped using my
homegrown literate programming toolchain &lt;strong&gt;&lt;code class=&quot;hljs&quot;&gt;cleopatra&lt;/code&gt;&lt;/strong&gt; last month. At some
point, I have even spent a bit of time to ensure most of the pages of this
website were granted a 100/100 on websites like PageSpeed Insight&lt;label for=&quot;fn4&quot; class=&quot;sidenote-number margin-toggle&quot;&gt;&lt;/label&gt;&lt;input id=&quot;fn4&quot; type=&quot;checkbox&quot; class=&quot;margin-toggle&quot;&gt;&lt;span class=&quot;note-left sidenote note&quot;&gt;&lt;span class=&quot;footnote-p&quot;&gt;Good news, I’ve just checked, and it still is! &lt;/span&gt;
&lt;/span&gt;. I
had almost forgotten.&lt;/p&gt;
&lt;p&gt;A lot remains to be done, but watching this talk made me reflect on
the job done. And opened my eyes to a new perspective, too. We will
see what translates into reality.&lt;/p&gt;
        
      </description>
    </item>
    
    
  </channel>
</rss>
