<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>grop.dev</title><id>https://grop.dev/feeds/tags/meta.xml</id><subtitle>Tag: meta</subtitle><updated>2026-10-03T11:42:51Z</updated><link href="https://grop.dev/feeds/tags/meta.xml" rel="self" /><link href="https://grop.dev" /><entry><title>This Blog Is Now Haunted 👻</title><id>https://grop.dev/posts/this-blog-is-now-haunted-.html</id><author><name>Gunnar Grop</name><email>gunnar.grop@protonmail.com</email></author><updated>2026-10-03T13:23:00Z</updated><link href="https://grop.dev/posts/this-blog-is-now-haunted-.html" rel="alternate" /><content type="html">&lt;p&gt;&lt;a href=&quot;https://dthompson.us/projects/haunt.html&quot;&gt;&lt;img src=&quot;https://dthompson.us/images/haunt/logo.png&quot; alt=&quot;image&quot; title=&quot;Haunt logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;And perfect timing for October! 🎃&lt;/p&gt;&lt;p&gt;Since I've started this blog I've been more and more intrigued by &lt;a href=&quot;https://guix.gnu.org/&quot;&gt;GNU Guix&lt;/a&gt;,
&lt;a href=&quot;https://www.gnu.org/software/guile/&quot;&gt;Guile Scheme&lt;/a&gt; and LISP dialects in general. It then seemed only
fitting that when I found the awesome looking project, &lt;a href=&quot;https://dthompson.us/projects/haunt.html&quot;&gt;Haunt&lt;/a&gt;, I had to try it out.&lt;/p&gt;&lt;p&gt;Haunt is a static website generator, just like &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt; (that I used previously),
but written entirely in Guile Scheme. You define your entire website just as you would a scheme program.
For example, this blog is defined (partly) like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;use-modules&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;asset&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;blog&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;atom&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;assets&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;flat-pages&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;redirects&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;reader&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;commonmark&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;haunt&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grop.dev&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;theme&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grop.dev&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;redirects&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax-keyword&quot;&gt;#:prefix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grop:&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
             &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;grop.dev&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;commonmark&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;post-prefix&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;/posts&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-special&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;collections&lt;/span&gt;
  &lt;span class=&quot;syntax-symbol&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;Posts&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;posts.html&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;,posts/reverse-chronological&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;site&lt;/span&gt; &lt;span class=&quot;syntax-keyword&quot;&gt;#:title&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;grop.dev&amp;quot;&lt;/span&gt;
      &lt;span class=&quot;syntax-keyword&quot;&gt;#:domain&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;grop.dev&amp;quot;&lt;/span&gt;
      &lt;span class=&quot;syntax-keyword&quot;&gt;#:default-metadata&lt;/span&gt;
      &lt;span class=&quot;syntax-symbol&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;Gunnar Grop&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;email&lt;/span&gt;  &lt;span class=&quot;syntax-symbol&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;gunnar.grop@protonmail.com&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-keyword&quot;&gt;#:readers&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;commonmark-reader*&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;syntax-keyword&quot;&gt;#:builders&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;blog&lt;/span&gt; &lt;span class=&quot;syntax-keyword&quot;&gt;#:theme&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grop-theme&lt;/span&gt;
                             &lt;span class=&quot;syntax-keyword&quot;&gt;#:collections&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;collections&lt;/span&gt;
                             &lt;span class=&quot;syntax-keyword&quot;&gt;#:post-prefix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;post-prefix&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;redirects&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;grop:redirects&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;atom-feed&lt;/span&gt; &lt;span class=&quot;syntax-keyword&quot;&gt;#:blog-prefix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;post-prefix&lt;/span&gt;
                                  &lt;span class=&quot;syntax-keyword&quot;&gt;#:file-name&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;posts/index.xml&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;atom-feeds-by-tag&lt;/span&gt; &lt;span class=&quot;syntax-keyword&quot;&gt;#:blog-prefix&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;post-prefix&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;flat-pages&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;pages&amp;quot;&lt;/span&gt;
                                   &lt;span class=&quot;syntax-keyword&quot;&gt;#:template&lt;/span&gt; &lt;span class=&quot;syntax-symbol&quot;&gt;flat-page-template&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;static-directory&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;css&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;static-directory&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;assets/images&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;
                       &lt;span class=&quot;syntax-open&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax-symbol&quot;&gt;static-directory&lt;/span&gt; &lt;span class=&quot;syntax-string&quot;&gt;&amp;quot;assets/text&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax-close&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Thus far I really like it. It's much harder to get started with, compared to Hugo, if you don't already have experience
with Guile Scheme. But, at the same time it's much simpler. I also really like that you can define HTML (really XML) with
&lt;a href=&quot;https://en.wikipedia.org/wiki/S-expression&quot;&gt;S-expressions&lt;/a&gt; using &lt;a href=&quot;https://doc.guix.gnu.org/guile/latest/en/html_node/SXML.html&quot;&gt;SXML&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Unfortunately I've had to sacrifice some things, like a nice &lt;a href=&quot;/feeds/tags&quot;&gt;Tags&lt;/a&gt; page, and syntax highlighting for YAML snippets.
But I'm sure I'll even out these drawbacks in the near future. I'm here mostly to learn scheme anyway.&lt;/p&gt;&lt;p&gt;So, for the foreseeable future I'll keep using Haunt. I recommend you do to, if you're looking for a simple but very cool
static website generator.&lt;/p&gt;&lt;p&gt;Big thanks to &lt;a href=&quot;https://dthompson.dev/about.html&quot;&gt;David Thompson&lt;/a&gt; for creating Haunt.&lt;/p&gt;</content></entry><entry><title>New Hugo Theme</title><id>https://grop.dev/posts/new-hugo-theme.html</id><author><name>Gunnar Grop</name><email>gunnar.grop@protonmail.com</email></author><updated>2026-08-23T22:47:00Z</updated><link href="https://grop.dev/posts/new-hugo-theme.html" rel="alternate" /><content type="html">&lt;p&gt;Just a PSA. I've been building this website with &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt; since the beginning, and
ever since then I've used the theme &lt;a href=&quot;https://github.com/lukeorth/poison&quot;&gt;poison&lt;/a&gt;. It's a good theme, but I just grew bored of it.
I wanted something a bit cleaner, that didn't have as much &amp;quot;wasted&amp;quot; whitespace.&lt;/p&gt;&lt;p&gt;So I replaced it with &lt;a href=&quot;https://gitlab.com/andy.sb/nojs&quot;&gt;noJS&lt;/a&gt;. Thus far I'm happy with it. It seems easier to navigate than
my previous theme, so I think I'll be using this for the unforeseeable future. 🙂&lt;/p&gt;</content></entry><entry><title>Full RSS Feed</title><id>https://grop.dev/posts/full-rss-feed.html</id><author><name>Gunnar Grop</name><email>gunnar.grop@protonmail.com</email></author><updated>2026-05-14T15:57:00Z</updated><link href="https://grop.dev/posts/full-rss-feed.html" rel="alternate" /><content type="html">&lt;p&gt;When I started this blog I didn't know that Hugo just shows the summary of each post
in the default posts RSS feed.&lt;/p&gt;&lt;p&gt;That has now been corrected, so if you subscribe to &lt;a href=&quot;https://grop.dev/posts/index.xml&quot;&gt;my RSS feed&lt;/a&gt; you now see the full posts in your
RSS client.&lt;/p&gt;&lt;p&gt;Thank you to Junian for their post &amp;quot;&lt;a href=&quot;https://www.junian.dev/tech/hugo-full-text-rss/&quot;&gt;Full-Text RSS in Hugo&lt;/a&gt;&amp;quot; that showed me how to do this. Please read
their blog post if you're looking to do this for your own blog.&lt;/p&gt;</content></entry><entry><title>Publishing Static Sites on sourcehut pages</title><id>https://grop.dev/posts/publishing-static-sites-on-sourcehut-pages.html</id><author><name>Gunnar Grop</name><email>gunnar.grop@protonmail.com</email></author><updated>2025-10-22T10:16:00Z</updated><link href="https://grop.dev/posts/publishing-static-sites-on-sourcehut-pages.html" rel="alternate" /><content type="html">&lt;h2&gt;Abstract&lt;/h2&gt;&lt;p&gt;I mentioned in a previous post that I use Kubernetes to deploy my blog.
Since my professional work (and my homelab) consists primarily of managing Kubernetes deployments,
this didn't seem like a bad idea. Albeit a bit overkill. But I had all the infrastructure in place,
so I went with it.&lt;/p&gt;&lt;p&gt;I've also mentioned that I've migrated all my personal git repositories over to &lt;a href=&quot;https://sr.ht/&quot;&gt;sourcehut&lt;/a&gt; recently,
but it wasn't until yesterday that my brain registered that sourcehut has another component, &lt;a href=&quot;https://srht.site/&quot;&gt;pages&lt;/a&gt;,
that allow you to publish static websites... This is way easier!&lt;/p&gt;&lt;p&gt;Not only is it super easy to use, and integrates well with other sourcehut components (git/hg, builds),
but every user even gets their own domain, in the form of &lt;code&gt;username.srht.site&lt;/code&gt;. It's also very easy to
use your own &lt;a href=&quot;https://srht.site/custom-domains/&quot;&gt;custom domains&lt;/a&gt;! This can be done at your domain registrar, by pointing you DNS records to the
following IPv4 (A record) and IPv6 (AAAA record) addresses.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;@ IN A    46.23.81.157&lt;/p&gt;&lt;p&gt;@ IN AAAA 2a03:6000:1813:1337::157&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: These IP addresses might be subject to changes. Please always refer to the &lt;a href=&quot;https://srht.site/custom-domains/&quot;&gt;official documentation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Anyhow, I thought I might do a little write-up on how to use sourcehut pages, and just to tell you that I've
migrated this blog over to it.&lt;/p&gt;&lt;h2&gt;Publishing your Site&lt;/h2&gt;&lt;p&gt;You'll only need a few things for this to work.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A &lt;a href=&quot;https://meta.sr.ht/&quot;&gt;sourcehut account&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A sourcehut git repository containing you static site (I'm using &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;A &lt;a href=&quot;https://srht.site/automating-deployments/&quot;&gt;sourcehut build manifest&lt;/a&gt; to publish your site.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can take a log at the source code for this blog, if you want a reference on what such a git repo might
look like: &lt;a href=&quot;https://git.sr.ht/~gunnargrop/grop.dev&quot;&gt;https://git.sr.ht/~gunnargrop/grop.dev&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The name of the git repository should preferably be the name of the site. In my case, the repo is called &amp;quot;grop.dev&amp;quot;.
In your case it might be called &amp;quot;username.srht.site&amp;quot;.&lt;/p&gt;&lt;p&gt;After you have your git repository, we just have to create a build manifest. This is done by
creating a file called &lt;code&gt;.build&lt;/code&gt; in the root of the repository. The file will look something like this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;---
image: alpine/latest

oauth: pages.sr.ht/PAGES:RW

packages:
  - hut
  - hugo

environment:
  site: username.srht.site

tasks:
  - package: |
      cd $site
      hugo
      tar -C public -cvz . &amp;gt; ../site.tar.gz

  - upload: |
      hut pages publish -d $site site.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And that's it! After you've created this build manifest, whenever you push changes a commit to your repository,
this build manifest will trigger and publish your Hugo site to your sourcehut page. Which you can then visit at
&lt;a href=&quot;https://username.srht.site&quot;&gt;https://username.srht.site&lt;/a&gt;. 🙂&lt;/p&gt;&lt;p&gt;Of note here is that we're using a tool called &lt;a href=&quot;https://sr.ht/~xenrox/hut/&quot;&gt;hut&lt;/a&gt;, a CLI tool to interact with sourcehut. It authenticates to
sourcehut using &lt;a href=&quot;https://man.sr.ht/meta.sr.ht/oauth.md&quot;&gt;OAuth2 token&lt;/a&gt;, which the build system has a handy keyword for. The &lt;code&gt;oauth&lt;/code&gt; keyword takes
care of generating a token for us, that the CLI tool will use in our build.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;# In this case, we generate a token that grants us read/write
# permissions to the sourcehut pages API
oauth: pages.sr.ht/PAGES:RW&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But is this CI good enough? I don't think so, since I don't want changes to get published every time I push something
to my repo. This can be solved by just not triggering the CI when we push something, like so:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git push --push-option skip-ci&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's what I do normally, to not unnecessarily waste sourcehut resources, but I also added another part to the build
manifest, so it just publishes my page when I push a new git tag to the repo.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;---
image: alpine/latest

oauth: pages.sr.ht/PAGES:RW

packages:
  - hut
  - hugo

environment:
  site: grop.dev

tasks:
  - setup: |
      # Exit pipeline if NOT triggered by tag
      if [[ &amp;quot;$GIT_REF&amp;quot; != refs/tags/* ]]; then
          complete-build
      fi

  - package: |
      cd $site
      hugo
      tar -C public -cvz . &amp;gt; ../site.tar.gz

  - upload: |
      hut pages publish -d $site site.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;As you can see, it's in fact very easy to publish your own static site to sourcehut pages. I would recommend
giving it a go if you want an easy place to host you blog, or whatever else!&lt;/p&gt;&lt;h2&gt;Related Reads&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://srht.site/&quot;&gt;https://srht.site/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://man.sr.ht/meta.sr.ht/oauth.md&quot;&gt;https://man.sr.ht/meta.sr.ht/oauth.md&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content></entry><entry><title>Introductions</title><id>https://grop.dev/posts/introductions.html</id><author><name>Gunnar Grop</name><email>gunnar.grop@protonmail.com</email></author><updated>2025-09-16T17:29:00Z</updated><link href="https://grop.dev/posts/introductions.html" rel="alternate" /><content type="html">&lt;p&gt;My first blog post!&lt;/p&gt;&lt;p&gt;Greetings to everyone and anyone who might be reading this.
My name is Gunnar Andersson, also known as my internet nickname, GunnarGrop.&lt;/p&gt;&lt;p&gt;I guess I'm just a typical nerd with an interest in Linux, Emacs and Kubernetes.
But if you want to know more about me you can just read my &lt;a href=&quot;/&quot;&gt;home&lt;/a&gt; page.&lt;/p&gt;&lt;p&gt;The reason I wanted to start this blog is because I often stumble upon, to me, interesting
facts and solutions to Linux or Kubernetes problems that I've wished I'd write down somewhere.
So not only is the purpose of this blog to share my thoughts and finding with other people, but also
just to share my thought with my future self.&lt;/p&gt;&lt;p&gt;Another reason I wanted to start this blog is simply because I thought it would be fun. I've seen this
static website generator being mentioned everywhere online, &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt; (which I'm using to generate this blog), and
I wanted to try it out. Not only that, but I also wanted to try out a popular Emacs package, &lt;a href=&quot;https://ox-hugo.scripter.co/&quot;&gt;ox-hugo&lt;/a&gt;.
This is of course my first blog post, but being able to write posts at all in &lt;a href=&quot;https://orgmode.org/&quot;&gt;org-mode&lt;/a&gt; is just so cool!&lt;/p&gt;&lt;p&gt;I've experimented a little bit with my setup before taking this blog online, so I've also tried the
&lt;a href=&quot;https://github.com/masasam/emacs-easy-hugo&quot;&gt;easy-hugo&lt;/a&gt; Emacs package. But, to be honest, I think I like ox-hugo way more. Easy-hugo seems like a good project,
but it assumes that you'll be writing Hugo files in Markdown, which is of course fully reasonable (it is the native langauge of Hugo, after all), but it feels like
a wasted opportunity to &lt;em&gt;not&lt;/em&gt; write in org-mode, when you're already using Emacs.&lt;/p&gt;&lt;p&gt;Anyway, I'll try this out for a while and see how I like it. If you're interested in the stuff I post about, please
consider subscribing to my &lt;a href=&quot;/posts/index.xml&quot;&gt;RSS feed&lt;/a&gt; or throw me an e-mail! You can find my contact information in the left sidebar. 🙂&lt;/p&gt;</content></entry></feed>