<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>tty ☕</title><id>https://tty.cafe/feed.xml</id><subtitle>Recent Posts</subtitle><updated>2026-10-19T14:22:18Z</updated><link href="https://tty.cafe/feed.xml" rel="self" /><link href="https://tty.cafe" /><entry><title>run certbot through uvx</title><id>https://tty.cafe/blog/uvx-certbot/</id><author><name>thierry</name></author><updated>2026-10-17T23:26:00Z</updated><category term="" /><link href="https://tty.cafe/blog/uvx-certbot/" rel="alternate" /><content type="html">&lt;p&gt;I wasn't happy with &lt;code class=&quot;command&quot;&gt;certbot&lt;/code&gt;'s install alternatives:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;I did not want to use Snap; I'd like to avoid Ubuntu-specific tech.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I did not want to use Pip; I don't want to install &lt;code class=&quot;command&quot;&gt;gcc&lt;/code&gt; on my machine hosting websites.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The container image might have been nice, but none were packed with the Infomaniak DNS module I needed.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Since I've been really enjoying uv to manage Python dependencies, I thought &lt;code class=&quot;command&quot;&gt;uvx&lt;/code&gt; could handle the setup for me. However, I did not want to run the install setup as root, so I went with the following:&lt;/p&gt;&lt;pre lang=&quot;bash&quot;&gt;&lt;code&gt;# I won't install gcc, but I'll pipe your install script into a shell…
$ curl -LsSf https://astral.sh/uv/install.sh | sh

# Install certbot with the Infomaniak auth module
$ uvx --with certbot-dns-infomaniak certbot --help

# Run certbot as root
$ sudo .local/bin/uvx 
    --offline --cache-dir .cache/uv \
    --with certbot-dns-infomaniak \
      certbot certonly \
        --authenticator dns-infomaniak \
        --dns-infomaniak-credentials /path/to/secret.creds \
        -d 'tty.cafe' -d '*.tty.cafe'&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I still had to troubleshoot some authentication error. My previous token was for Infomaniak API v1, but the current auth module uses the API v2. After surfacing the scope issue, issuing a new token solved the problem. The error message I got was unrelated to authentication, so I had to dig to find the root of the problem.&lt;/p&gt;&lt;p&gt;It's like I really like finding the most convoluted way of doing things, but I'm happy with the result!&lt;/p&gt;&lt;p&gt;GCC would have take about 200 MiB, but uvx only uses 69 MiB and was much faster.&lt;/p&gt;&lt;pre lang=&quot;bash&quot;&gt;&lt;code&gt;$ &lt;code&gt;apt-cache show $(apt-cache depends --recurse --important gcc | grep -v '^ ') \
  | awk '/Installed-Size:/ { sum += $2 } END { print (1000*sum/2**20), &amp;quot;MiB&amp;quot; }'&lt;/code&gt; &lt;samp&gt;
208.504 MiB&lt;/samp&gt;

$ &lt;code&gt;du -csh .cache/ .config/ .local/&lt;/code&gt; &lt;samp&gt;
32M	.cache
37M	.local
32K	.config
69M	total
&lt;/samp&gt;&lt;/code&gt;&lt;/pre&gt;</content></entry><entry><title>haunt: how to hotreload the theme</title><id>https://tty.cafe/blog/haunt-theme-hotreload/</id><author><name>thierry</name></author><updated>2026-01-29T23:10:00Z</updated><category term="guile" /><category term="haunt" /><link href="https://tty.cafe/blog/haunt-theme-hotreload/" rel="alternate" /><content type="html">&lt;p&gt;Haunt can automatically rebuild the site whenever it detects a change. However, I had the issue where changes to my theme, which is its own &lt;code&gt;theme&lt;/code&gt; module in &lt;code&gt;&amp;quot;theme.scm&amp;quot;&lt;/code&gt;, would not get picked up during the rebuild. Haunt would detect the theme changed and trigger a rebuild, but the changes would not be applied, until I completely restart &lt;code class=&quot;command&quot;&gt;haunt serve --watch&lt;/code&gt;. This made iterating on the layout quite unfun, having to switch back and forth between my editor, terminal and web browser.&lt;/p&gt;&lt;p&gt;The issue happened to come from the language itself: &lt;a href=&quot;https://www.gnu.org/software/guile/manual/html_node/General-Information-about-Modules.html#:~:text=When%20Guile%20goes%20to%20use%20an%20interface%20from%20a%20module&quot;&gt;Guile will not reload modules that are already loaded&lt;/a&gt;. This is a perfectly reasonable optimisation, but it got in my way of editting my site's layout. I couldn't make it work using &lt;a href=&quot;https://www.gnu.org/software/guile/manual/html_node/Module-System-Reflection.html#index-reload_002dmodule&quot;&gt;&lt;code&gt;reload-module&lt;/code&gt;&lt;/a&gt;, so I used &lt;a href=&quot;https://www.gnu.org/software/guile/manual/html_node/Loading.html#index-load-2&quot;&gt;&lt;code&gt;load&lt;/code&gt;&lt;/a&gt; instead. I had to remove the bits declaring &lt;code&gt;&amp;quot;theme.scm&amp;quot;&lt;/code&gt; as a module and directly &lt;a href=&quot;https://www.gnu.org/software/guile/manual/html_node/Loading.html#index-load-2&quot;&gt;&lt;code&gt;load&lt;/code&gt;&lt;/a&gt; the file in my Haunt config. This way, the theme would not be memoized at startup and I could hotreload changes to my layout without restarting &lt;code&gt;haunt&lt;/code&gt;!&lt;/p&gt;</content></entry><entry><title>build guile-reader on macos</title><id>https://tty.cafe/blog/macos-guile-reader/</id><author><name>thierry</name></author><updated>2026-01-27T04:25:00Z</updated><category term="macos" /><category term="guile" /><link href="https://tty.cafe/blog/macos-guile-reader/" rel="alternate" /><content type="html">&lt;pre lang=&quot;bash&quot;&gt;&lt;code&gt;# Download guile-reader's release tarball:
curl -LOC - 'https://download.savannah.nongnu.org/releases/guile-reader/guile-reader-0.6.4.tar.gz'
tar xavf guile-reader-0.6.4.tar.gz; rm guile-reader-0.6.4.tar.gz
cd guile-reader-0.6.4/

# Build guile-reader
./configure CFLAGS=&amp;quot;-O3 -march=native&amp;quot; CPPFLAGS=&amp;quot;-O3 -march=native&amp;quot; --with-guilemoduledir=/usr/local/Cellar/guile/3.0.11/share/guile/site/3.0
make
[...]
# We get an error related to reader flags not being defined...
# sed doesn't apply the '+' correctly?, so replace is with a bound (re_format(7)).
sed -i s/\\\+/{1,}/g src/*.sh
make
[...]
# Version information is missing to build guile-reader.info.
# Have `make` regen them:
rm doc/stamp-vti
make
[...]
make install&lt;/code&gt;&lt;/pre&gt;</content></entry></feed>