<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Daudix - Codeberg</title>
      <link>https://daudix.one</link>
      <description>Silly little goober with a creative mind.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://daudix.one/tags/codeberg/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Wed, 27 Aug 2025 00:00:00 +0000</lastBuildDate>
      <item>
          <title>New Era</title>
          <pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate>
          <author>Daudix</author>
          <link>https://daudix.one/blog/new-era/</link>
          <guid>https://daudix.one/blog/new-era/</guid>
          <description xml:base="https://daudix.one/blog/new-era/">&lt;p&gt;Time to talk a bit about my recent changes to this website, plans for this blog, and One More Thing™.&lt;&#x2F;p&gt;
&lt;blockquote
  class=&quot;markdown-alert&quot;
  style=&quot;
    --alert-title: &#x27;Edit&#x27;;
    --alert-icon: url(&#x27;data:image&#x2F;svg+xml,%3Csvg%20role%3D%22img%22%20xmlns%3D%22http%3A&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg%22%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22currentColor%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20d%3D%22M230.14%2C70.54%2C185.46%2C25.85a20%2C20%2C0%2C0%2C0-28.29%2C0L33.86%2C149.17A19.85%2C19.85%2C0%2C0%2C0%2C28%2C163.31V208a20%2C20%2C0%2C0%2C0%2C20%2C20H92.69a19.86%2C19.86%2C0%2C0%2C0%2C14.14-5.86L230.14%2C98.82a20%2C20%2C0%2C0%2C0%2C0-28.28ZM91%2C204H52V165l84-84%2C39%2C39ZM192%2C103%2C153%2C64l18.34-18.34%2C39%2C39Z%22&#x2F;%3E%3C&#x2F;svg%3E&#x27;);
  &quot;&gt;
  &lt;p&gt;One of the recent edits introduced a couple of additional images and an entirely new section. See &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;daudix&#x2F;daudix.one&#x2F;commit&#x2F;637bd7ef6f7acd53f5346104e5cc291ed5cc7968&quot;&gt;this commit&lt;&#x2F;a&gt; for a detailed overview.&lt;&#x2F;p&gt;

&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;website-changes&quot;&gt;Website Changes&lt;&#x2F;h2&gt;
&lt;p&gt;This website has undergone numerous changes in the past… &lt;em&gt;looks at wall calendar&lt;&#x2F;em&gt; …half a year (dear God how did it pass by this fast I’m gonna cry), though most of this time I’ve been working on Ametrine, and a bit more so procrastinating (nothing new haha).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ametrine&quot;&gt;Ametrine&lt;&#x2F;h3&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ametrine.daudix.one&quot;&gt;Ametrine&lt;&#x2F;a&gt; is a new theme of mine. It’s the successor to Duckquill, with a new look, some features added, and some removed. Its goal is to be more flexible and modular than Duckquill.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Two months ago I have got Ametrine to a state when it has all the features I need, and so I have &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;daudix&#x2F;daudix.one&#x2F;pull&#x2F;1&quot;&gt;ported this site to it&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;One might ask, “hold on, didn’t you &lt;em&gt;just&lt;&#x2F;em&gt; &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;decoupling-from-duckquill&#x2F;&quot;&gt;switch away from Duckquill&lt;&#x2F;a&gt; to an in-house solution?” And the answer would be… yes.&lt;&#x2F;p&gt;
&lt;p&gt;Actual answer: yes — and that in-house solution was later frozen, moved into a separate “ametrine” repository, ironed out, wrinkled, ironed again, and finally covered in a fresh coat of compatibility with older browsers (looking at you, Safari).&lt;&#x2F;p&gt;
&lt;p&gt;Now another question arises: why do all this exactly? And well… I don’t really have an answer. Making themes to help people build their websites more easily is just something I seem to enjoy.&lt;&#x2F;p&gt;
&lt;p&gt;Yet another question raises its hand: doesn’t that limit my creativity or make design changes harder? Yes, it does — but realistically, Ametrine hasn’t changed its look drastically in the past half a year. And since it’s a direct continuation of Duckquill, which had a similar design, one could say things haven’t changed much in the past… two years? More or less. It’s still evolving and gradually improving, but the premise remains the same.&lt;&#x2F;p&gt;
&lt;p&gt;Now that Ametrine is more modular than Duckquill, and since I now know more Zola tricks, it means I can customize a lot without touching the internals too much, in fact, that’s exactly what I did; at some point during the long process of writing this post, this website had an Aero-like styling, but since it wasn’t good enough I have scrapped it a couple days ago.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;aero-dark.png&quot;  media=&quot;(prefers-color-scheme: dark)&quot; &#x2F;&gt;
  &lt;img alt=&quot;Homepage, but with Aero-like styling (but far from looking genuine) and green color scheme. &quot; src=&quot;aero.png&quot; &#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;p&gt;Fuzzy, I know, but I’ll talk more about Ametrine itself in a follow-up post soon (hopefully, unless depression kicks in again).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;small&gt;One could say that &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;winter-cleanup&#x2F;&quot;&gt;winter cleanup&lt;&#x2F;a&gt; went on for a &lt;em&gt;bit&lt;&#x2F;em&gt; longer xD&lt;&#x2F;small&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pages&quot;&gt;Pages&lt;&#x2F;h3&gt;
&lt;p&gt;We have quite some changes on this front:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;100daystooffload&#x2F;&quot;&gt;100DaysToOffload&lt;&#x2F;a&gt; page has been removed — now it redirects to the tag with the same name, under which all posts with it are listed, essentially serving the same purpose.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;badges&#x2F;&quot;&gt;Badges&lt;&#x2F;a&gt; page has been introduced, it contains all the badges and stamps (aka Bumps) from my Neocities site, from which these might soon be removed.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;about&#x2F;&quot;&gt;About&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;online&#x2F;&quot;&gt;online&lt;&#x2F;a&gt; pages have been merged with &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;&quot;&gt;home&lt;&#x2F;a&gt;. Useless information has been removed in process, keeping only the essentials. This is to make sure homepage provides all the useful info at a glance. This decision has been made after looking at statistics, which suggest that subpages get times less visitors than the homepage, and as the purpose of this website is to be a central hub of me on the web, it should fulfill this purpose.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;commissions&#x2F;&quot;&gt;Commissions&lt;&#x2F;a&gt; have lost most of the services except for a few. Only services that I’m certain I can complete in the best manner have remained.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;snug-nook&#x2F;&quot;&gt;Snug Nook&lt;&#x2F;a&gt; was completely redone. Essential info is now presented via a fully dynamic widget, which by the way uses an interesting Discord widget API hack&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that I couldn’t find any mentions of online, so we might be the first to use it?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;design&#x2F;&quot;&gt;Design&lt;&#x2F;a&gt; styling was adjusted to better fit the new design. It now also follows the light&#x2F;dark mode preference like the rest of the site, instead of being hardcoded to dark mode.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;&quot;&gt;Home&lt;&#x2F;a&gt;, besides inheriting “about” and “online” pages’ info also got a brand new widget: “Now Playing” powered by Last.fm. Not only it displays currently playing track live, but it also switches to “Last Played” if nothing is playing or playback is paused, accompanied by a nice CD (which is taken from elementary OS icon theme :P) animation. I have experimented with using Discord Rich Presence (RPC) to display not only this but also other activities, but it didn’t expose last played song and was much, much more complex, so it was scrapped.&lt;br &#x2F;&gt;
&lt;a href=&quot;&#x2F;#player&quot;&gt;
&lt;picture id=&quot;now-playing&quot;&gt;
&lt;source srcset=&quot;now-playing-dark.png&quot;  media=&quot;(prefers-color-scheme: dark)&quot; &#x2F;&gt;
&lt;img alt=&#x27;Now playing widget, with &quot;The Carrion Child&quot; song by &quot;Vylet Pony&quot; displayed as last played.&#x27; src=&quot;now-playing.png&quot; class=&quot;has-alpha no-hover&quot; &#x2F;&gt;
&lt;&#x2F;picture&gt;
&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;source-code&quot;&gt;Source Code&lt;&#x2F;h3&gt;
&lt;p&gt;Throughout the site’s existence, it was always completely open (not necessarily FOSS) — nothing was developed behind closed doors, and deployment always matched the source code at any period in time.&lt;&#x2F;p&gt;
&lt;p&gt;Ever since I &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;&quot;&gt;moved away from GitHub&lt;&#x2F;a&gt; it was hosted on Codeberg, I enjoyed it this entire time despite occasional, sometimes unconventional, downtimes. Recently however they introduced new size limits for, and I quote &lt;q&gt;repositories that are for personal use (e.g. ‘my website’, ‘my dotfiles’&lt;&#x2F;q&gt;. And as you could guess, my website falls into that category. The new limit for such repositories is 100MB compared to the old 500MB limit. Mine was 200MB+, so I had to move it to GitHub — first as a private repository to prevent Copilot from training its code on it, but then I gave up and chose continuing being open over integrity of my code’s originality&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I have considered moving to my &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.rootsource.cc&quot;&gt;friend’s Forgejo instance&lt;&#x2F;a&gt;, but it doesn’t have any sort of CI, so it’s not an option at the moment.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;branding&quot;&gt;Branding&lt;&#x2F;h3&gt;
&lt;p&gt;I’m planning to design a new profile picture in the near future, but at the moment I don’t have anything at hand, so in the meantime I have slightly deemphasized my official “branding” and now combine it with things like Discord profile picture. Other badge&#x2F;88x31 variants have been added as part of this initiative, they’re not new, simply older versions and ones from other sites (Neocities).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vercel-no-more&quot;&gt;Vercel No More&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;moving-to-vercel&#x2F;&quot;&gt;Vercel was good&lt;&#x2F;a&gt;, but with release of Zola v0.20.0 I couldn’t update to it, and was always welcomed with an error. Analytics are very restrictive, and integration with Codeberg is absent.&lt;&#x2F;p&gt;
&lt;p&gt;For this reason I have recently switched to Netlify, which has much better integration with Zola (getzola.org uses it), and overall is more oriented towards SSGs such as Jekyll and Hugo, rather than Node.js sites.&lt;&#x2F;p&gt;
&lt;p&gt;It also exposes preview URL in the workflow, so that preview deployments can use a proper base URL. Technical details aside, it means I can actually utilize Git branches to work on features before making them accessible to everyone.&lt;&#x2F;p&gt;
&lt;p&gt;As part of this, I switched to Umami for analytics; they provide six-month frame for free, which is 6x better than a one-month frame Vercel provided.&lt;&#x2F;p&gt;
&lt;p&gt;Duckquill and Ametrine were also moved to Netlify because why not.&lt;&#x2F;p&gt;
&lt;p&gt;TL;DR: I like Netlify and Umami as opposed to Vercel and its built-in analytics so far, we’ll see how it goes. I still like Vercel by the way, it’s just that it doesn’t play well with my current setup.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;100daystooffload-no-more&quot;&gt;100DaysToOffload No More&lt;&#x2F;h2&gt;
&lt;p&gt;For the past year I’ve been &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;100daystooffload&#x2F;&quot;&gt;participating&lt;&#x2F;a&gt; in a challenge called &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;100daystooffload.com&quot;&gt;100DaysToOffload&lt;&#x2F;a&gt;, and now it is officially over with 31 questionable posts and severe burnout. A bit sad but honestly it’s such a relief; this challenge messed up my mental health quite a bit — even if I didn’t write much, the feeling of always being under the pressure and forcing myself to come up with post ideas was exhausting. &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;taking-a-break&#x2F;&quot;&gt;Taking breaks&lt;&#x2F;a&gt; did not help; it took me half a year of not writing anything&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; to get back in shape.&lt;&#x2F;p&gt;
&lt;p&gt;I wanted to quit it multiple times, but I have set myself a goal to &lt;em&gt;not&lt;&#x2F;em&gt; quit it, no matter what, and finish it even if I don’t complete it. And so I did, yay. Proving to myself that I am capable of not quitting something prematurely, despite all kinds of obstacles, is valuable to me &lt;span class=&quot;spoiler solid&quot;&gt;(it’s not just about 100DaysToOffload, is it?)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;new-era&#x2F;100daystooffload.jpg&quot; alt=&quot;A4-sized wall calendar for the period from June 4th 2024 to June 4th 2025, some dates are marked with orange. February, March, April, May, June, and July are crossed out.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now that the results are documented, I can blog at my own pace, with “quality over quantity” approach and…&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reissue-old-articles&quot;&gt;Reissue Old Articles&lt;&#x2F;h2&gt;
&lt;p&gt;It’s no surprise that a big chunk of 100DaysToOffload posts lack quality; they were rushed, are badly written, and don’t effectively get the point across. Because of this, I will gradually rewrite such posts, add&#x2F;remake banners, re-tag them, and replace them with reissues. Title&#x2F;permalink might change, but I’ll try to minimize link rot by utilizing redirects, if possible. Some other posts will be unpublished without ever being reissued, but there aren’t much such posts, if any.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-blog-of-my-own&quot;&gt;A Blog of My Own&lt;&#x2F;h2&gt;
&lt;p&gt;Type of promise presidents make during inauguration: “I’ll try to blog about whatever I want”.&lt;&#x2F;p&gt;
&lt;p&gt;Because, at the end of the day, it really is my blog, on my own domain, made piece by piece by me.&lt;&#x2F;p&gt;
&lt;p&gt;…That sounded way to narcissist isn’t it? That wasn’t the intent, but whatever. There was this thing with me trying to keep this site somewhat down to earth, which is the reason I started a “journal” on Neocities, but now thinking about it more, there’s no point in it, and I’d rather keep everything here and be myself, because — after all — it’s my own platform, not someone’s social media.&lt;&#x2F;p&gt;
&lt;p&gt;And so, &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;daudix.neocities.org&#x2F;journal&#x2F;&quot;&gt;journal&lt;&#x2F;a&gt; will be discontinued and merged with this blog shortly. There is only one article worth preserving, so it won’t make much of a difference. I’ve been considering this for a while, and even ran a &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;poll.pollcode.com&#x2F;83144997_result_paused&quot;&gt;poll&lt;&#x2F;a&gt; asking readers whether this is a good idea half a year ago on January 9th.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;new-era&#x2F;poll.png&quot; alt=&quot;Small rectangular box titled “Merge Journal into This Blog”, text “Poll ends January 16”, and two poll options below: “Yup, why not”, and “Nope, why would you”.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Poll results suggest that majority is in favor of this.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;new-era&#x2F;poll-results.png&quot; alt=&quot;Poll results show that 80% are in favor. There were 10 voters in total.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yes, it’s only 10 votes, but look at it this way: It’s a whopping &lt;em&gt;10&lt;&#x2F;em&gt; votes!!1&lt;&#x2F;p&gt;
&lt;p&gt;In the end, I’m left uncertain as to what to do with Neocities after retiring the journal, all that is left is a homepage that provides no info and somewhat cool styling, and a fun 404. I don’t want it to go down the &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gmi.daudix.one&quot;&gt;gmi.daudix.one&lt;&#x2F;a&gt; path of dying silently, nor I want to have two nearly-identical sites in terms of content.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-sky-that-is-blue&quot;&gt;The Sky That Is Blue&lt;&#x2F;h2&gt;
&lt;p&gt;Lately, my focus has heavily shifted from Fedi to Bluesky. Fedi is great, but Bluesky suits me better; it doesn’t have the whole fedimeta thing, defederations that you have no control over, and such. I plan to add support for Bluesky-powered comments to Ametrine at some point, but I currently lack the required skills to do so. If you’ve been following me on the Fedi, you might want to follow my bridged Bluesky account as well (if your instance’s admin didn’t defederate Bridgy Fed :P).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;overorganization&quot;&gt;Overorganization&lt;&#x2F;h2&gt;
&lt;p&gt;I was, and still am, trying to reduce the unnecesairy overorganization of… everything; &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;merging-lanes&#x2F;&quot;&gt;my social presence&lt;&#x2F;a&gt;, my websites (as mentioned earlier I merged a couple of pages with homepage and will retire neocities as a place for journaling), and more that is yet to come. I don’t have a plan or anything, it’s just a direction I’m going in.&lt;&#x2F;p&gt;
&lt;p&gt;I have wrote a lot about this some time ago (file modification date says January 16th, 2025?) as a reply to questions someone (if you’re reading this, hi!) asked me in one group chat, which, while a bit outdated, still conveys the same message as it did back then. I have unfortunately left said group chat and don’t have original questions saved anywhere, but it maintains context even without them:&lt;&#x2F;p&gt;
&lt;details&gt;
&lt;summary&gt;Click to expand&lt;&#x2F;summary&gt;
&lt;p&gt;Okay, so, first things first (replying to each paragraph&#x2F;message)&lt;&#x2F;p&gt;
&lt;p&gt;I completely agree with the “formal&#x2F;informal personally issue” thing, just like you said it does a bit prevent from having fun and putting any serious effort into the informal stuff. Why it’s so hard to just be yourself man…&lt;&#x2F;p&gt;
&lt;p&gt;Over-organization is an issue for me as well, and again I fully agree with you; it’s annoying, time wasting, prevents just doing things, and most of the time there’s no benefit of doing so. I’m kinda trying to get rid of unnecessary categorization and organization, but being a perfectionist does’t help. I’ve been using two simple markdown to-dos, one for irl stuff and one for website ideas, and it’s a good workflow, you just make a new bullet point and call it a day, no need to separate stuff to separate notes, add tags, link all this from a central “hub” to-do, you know what I mean. Same for other things.&lt;&#x2F;p&gt;
&lt;p&gt;The Fediverse thing is complicated though. I am not a social media person per se, quite the opposite; I’m shy to the point I’m thinking it’s actually a social anxiety disorder, but I still use it for some reason. Thing is, I very rarely interact with people there and mostly just reblog stuff I like&#x2F;find funny and post boring stuff, with which no one interacts as well. I’ve been thinking off and on about minimizing my usage of Mastodon and instead condensing my thoughts into blog posts or nanologs, but the ability to e.g. attach an image&#x2F;video without having to rename, optimize, and link manually is pretty sweet. Otherwise there’s objectively no real point in using it indeed, I get two likes at best, even then it’s people that somewhat know me and we regularly interact. The main reason I’m using it however is talented people I follow, I like to get updates on things they do, and just so happens they mostly do so on Mastodon (because I found about them there). I follow just enough people for my timeline to be interesting, but not enough for it to be so active so I can doomscroll, and you know, Mastodon sucks in terms of showing posts from people you don’t follow, like there’s no “for you” tab and global timeline is an absolute garbage. I see your point and I could def survive without Mastodon account, and instead follow people I care about the most from an RSS reader.&lt;&#x2F;p&gt;
&lt;p&gt;Going back to over-organization… Yeah it’s not okay to have stuff this categorized, I ran a poll for about a week and results suggest that 80% of my readers would like the journal and blog to be merged. I’m still not certain on how I’d do so, but yeah this something that spins in my brain.&lt;&#x2F;p&gt;
&lt;p&gt;Yeah nanolog does have an RSS feed, in fact every category and tag does (&lt;em&gt;cough&lt;&#x2F;em&gt; over-organization &lt;em&gt;cough&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;I use microblogging mostly to share my web dev stuff and most short gags&#x2F;shitposts that in no way deserve a “nanopost”.&lt;&#x2F;p&gt;
&lt;p&gt;One thing I’d like to add to the Fediverse and overall microblogging thing, I would really like to be in charge of my posts, because instances regularly die and the experience of viewing Mastodon exports suck. Expanding nanolog somehow to make posting there easier would be cool, but I don’t see how I would do so.&lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
&lt;h2 id=&quot;new-era&quot;&gt;New Era&lt;&#x2F;h2&gt;
&lt;p&gt;Behold… the title of this article, at last!&lt;&#x2F;p&gt;
&lt;p&gt;So, what’s this all about?&lt;&#x2F;p&gt;
&lt;p&gt;I like to split my work and life into “eras”, each marking a new chapter. These eras are usually accompanied by a redesign of my profile picture and&#x2F;or website, although this tends to happen spontaneously.&lt;&#x2F;p&gt;
&lt;p&gt;My first era — titled “Cold Boot” — started back in late 2022, with a bunch of preparation prior to that. Eras were always a “behind the scenes” thing that wasn’t really public besides folder names in the &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;daudix&#x2F;assets&#x2F;tree&#x2F;main&#x2F;daudix&quot;&gt;“assets” repository&lt;&#x2F;a&gt;. I have considered expanding this concept &lt;abbr title=&quot;December 10th, 2024&quot;&gt;half a year ago&lt;&#x2F;abbr&gt;, but this idea didn’t go beyond this mockup as I deemed it too silly of an idea.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;new-era&#x2F;eras-old.png&quot; alt=&quot;Three eras: “Cold Boot”, “Déjà Vu” and “Rainbow”. Each era has a profile picture, an era title and a screenshot of the website from that period. The screenshot for the “Rainbow” era is missing, with a black rectangle containing three question marks taking its place.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Profile pictures continued to use this approach internally; for example, my previous era was titled “Prism”, which was a continuation of the “Rainbow” era.&lt;&#x2F;p&gt;
&lt;blockquote
  class=&quot;markdown-alert&quot;
  style=&quot;
    --alert-title: &#x27;Uninteresting Fact&#x27;;
    --alert-icon: url(&#x27;data:image&#x2F;svg+xml,%3Csvg%20role%3D%22img%22%20xmlns%3D%22http%3A&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg%22%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22currentColor%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20d%3D%22M216%2C48H180V36A28%2C28%2C0%2C0%2C0%2C152%2C8H104A28%2C28%2C0%2C0%2C0%2C76%2C36V48H40a12%2C12%2C0%2C0%2C0%2C0%2C24h4V208a20%2C20%2C0%2C0%2C0%2C20%2C20H192a20%2C20%2C0%2C0%2C0%2C20-20V72h4a12%2C12%2C0%2C0%2C0%2C0-24ZM100%2C36a4%2C4%2C0%2C0%2C1%2C4-4h48a4%2C4%2C0%2C0%2C1%2C4%2C4V48H100Zm88%2C168H68V72H188ZM116%2C104v64a12%2C12%2C0%2C0%2C1-24%2C0V104a12%2C12%2C0%2C0%2C1%2C24%2C0Zm48%2C0v64a12%2C12%2C0%2C0%2C1-24%2C0V104a12%2C12%2C0%2C0%2C1%2C24%2C0Z%22&#x2F;%3E%3C&#x2F;svg%3E&#x27;);
  &quot;&gt;
  &lt;p&gt;Prism era’s assets had a bit of a hidden meaning behind them; the texture they have is actually monochrome photos of a broken mirror and old book’s page, overlaid on top of each other with different opacity and blend modes. A bit cheesy, but it is what it is.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;prism-hd.png&quot;&gt;&lt;img src=&quot;prism.png&quot; alt=&quot;The “Prism” era’s profile picture diagram shows the broken glass and paper images first overlaid as they are in the actual profile picture, then separately and without the black-and-white filter.&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;&#x2F;blockquote&gt;
&lt;p&gt;Recently however, I came across Vylet’s video explaining her eras, which is relatable in so many ways and is pretty much what I was aiming for, it’s just crazy. It have inspired me to push this idea further, and whilst I won’t maintain a spreadsheet of each era like she does, I too will have a more public era separation, and will be naming eras retroactively from now on.&lt;&#x2F;p&gt;
&lt;iframe
  class=&quot;youtube-embed&quot;
  src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;7rZsiF2nckA?start=257&quot;
  allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
  referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;
&lt;&#x2F;iframe&gt;
&lt;p&gt;Excerpt from the video:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Each era represents a substantial time in my life, defined by paradigm shifts, life changes, and overall project direction. I intend to name these with retrospect, so every new era will simply begin as three question marks, and then will be named when it becomes apparent when to find that part of my life in work.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And so, here is my current “era timeline”.&lt;&#x2F;p&gt;
&lt;div id=&quot;eras-timeline&quot;&gt;
  &lt;div class=&quot;overshoot-row&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;eras-dark.png&quot;  media=&quot;(prefers-color-scheme: dark)&quot; &#x2F;&gt;
      &lt;img alt=&#x27;Interactive timeline of the past few eras, starting from late 2022 up to present. The eras are as follows: &quot;Cold Boot&quot;, &quot;Déjà vu&quot;, &quot;Rainbow &#x2F; Prism&quot;, and an untitled, upcomming one.&#x27; src=&quot;eras.png&quot; class=&quot;has-alpha no-hover&quot; &#x2F;&gt;
    &lt;&#x2F;picture&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;buttons&quot;&gt;
  &lt;a href=&quot;eras-hd.png&quot;&gt;View in Full Resolution&lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Current era is blurred and untitled, as this era is still ongoing, the screenshot is not final, and as I already mentioned, era cannot be titled yet as they’re titled retroactively. Visually changes between eras aren’t huge, but it’s not just about website visuals, isn’t it?&lt;&#x2F;p&gt;
&lt;p&gt;I’m so excited about this, and I can’t wait to see how it all works out!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mental-health&quot;&gt;Mental Health&lt;&#x2F;h2&gt;
&lt;p&gt;It was rough. I survived, however.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;This blog post is a little summary of what I was doing and planning to do for a long time, and I hope that this will mark a new, more hopeful chapter in my life and this blog. Thanks for reading, caring, and just being here. Can’t wait to see you in the next one!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;small&gt;Interesting how the phrase “half a year” was used a whopping 6 times in this blog post.&lt;&#x2F;small&gt;&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Discord widget API (&lt;code&gt;https:&#x2F;&#x2F;discord.com&#x2F;api&#x2F;guilds&#x2F;&amp;lt;GUILD_ID&amp;gt;&#x2F;widget.json&lt;&#x2F;code&gt;) doesn’t expose server icon, description, total member count, and basically any other useful info about the server, however, it does expose an automatically generated invite link (that’s being regenerated every now and then), which &lt;em&gt;does&lt;&#x2F;em&gt; expose said info via the &lt;code&gt;https:&#x2F;&#x2F;discord.com&#x2F;api&#x2F;invites&#x2F;&amp;lt;INVITE_CODE&amp;gt;?with_counts=true&lt;&#x2F;code&gt; endpoint. And so by trimming the &lt;code&gt;https:&#x2F;&#x2F;discord.com&#x2F;invite&#x2F;&lt;&#x2F;code&gt; bit of the auto-generated invite link we get said invite code. Two API calls, yes, but we get all the info without any additional services or hardcoding anything. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;It’s not very original, rather a compilation of StackOverflow answers, CSS Tricks, and code from random Git repositories. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;Okay, I &lt;em&gt;did&lt;&#x2F;em&gt; write one detailed blog post about me moving from Firefox to Vivaldi, but before I could finish it I have already moved to vanilla Chrome. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>On Move to Vercel</title>
          <pubDate>Sat, 07 Dec 2024 00:00:00 +0000</pubDate>
          <author>Daudix</author>
          <link>https://daudix.one/blog/moving-to-vercel/</link>
          <guid>https://daudix.one/blog/moving-to-vercel/</guid>
          <description xml:base="https://daudix.one/blog/moving-to-vercel/">&lt;p&gt;&lt;em&gt;Sigh&lt;&#x2F;em&gt; I know, yet another devlog after almost a month of radio silence (heh, if only). I could turn this into a long rant&#x2F;vent, but let’s rather not, and instead let me tell you how I moved this site from &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.page&quot;&gt;Codeberg Pages&lt;&#x2F;a&gt; to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&quot;&gt;Vercel&lt;&#x2F;a&gt; for no reason :P&lt;&#x2F;p&gt;
&lt;h2 id=&quot;backstory&quot;&gt;Backstory&lt;&#x2F;h2&gt;
&lt;p&gt;There were actually some reasons why I switched:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bad uptime.&lt;&#x2F;strong&gt; Lately it became much better, but it’s still not perfect.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Slow builds.&lt;&#x2F;strong&gt; Plus I feel guilty using it for such silly thing as this site.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Slow page loading.&lt;&#x2F;strong&gt; Subjective, but it felt pretty slow to me.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Lacks some security headers.&lt;&#x2F;strong&gt; &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;observatory&quot;&gt;Mozilla Observatory&lt;&#x2F;a&gt; yells that it’s unsecure. Doesn’t really mean anything for static sites, but still.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Regarding the speed issues; I thought that I will move back to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;exozy.me&quot;&gt;exozyme&lt;&#x2F;a&gt; after its “Great November Downtime” caused by the fatal SSD failure, but shortly after its revival it was deprecated and is due to shut down soon… So yeah, no way back. &lt;small&gt;(Sadge :&amp;lt;)&lt;&#x2F;small&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-move&quot;&gt;The Move&lt;&#x2F;h2&gt;
&lt;p&gt;To my surprise, it was really very easy and smooth. Since I already had an account (I have accounts everywhere) I’ve gone right to the setup, essentially:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Followed &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.markpitblado.me&#x2F;blog&#x2F;deploying-to-vercel-from-codeberg&quot;&gt;this&lt;&#x2F;a&gt; guide; It used an out-of-date syntax for secrets, so I had to change it, plus I added a separate “check” step for pull requests:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Based on https:&#x2F;&#x2F;www.markpitblado.me&#x2F;blog&#x2F;deploying-to-vercel-from-codeberg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;teps&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  p&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;review&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;nvironment&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_TOKEN&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_token&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_ORG_ID&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_org_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_PROJECT_ID&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_project_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ommands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;pm install --global vercel@latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel deploy --token=$VERCEL_TOKEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    w&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;hen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;vent&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ull_request&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  d&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;eploy&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;nvironment&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_TOKEN&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_token&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_ORG_ID&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_org_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      V&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ERCEL_PROJECT_ID&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;        f&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;rom_secret&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel_project_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ommands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;pm install --global vercel@latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; v&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ercel deploy --prod --token=$VERCEL_TOKEN&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    w&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;hen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;vent&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ush&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;anual&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Got a Vercel access &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&#x2F;account&#x2F;tokens&quot;&gt;token&lt;&#x2F;a&gt; to be used in the CI. Keep in mind that you won’t be able to reveal it once you create it, so save it somewhere, e.g. in password manager.&lt;&#x2F;li&gt;
&lt;li&gt;Installed &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vercel.com&#x2F;docs&#x2F;cli&quot;&gt;Vercel CLI&lt;&#x2F;a&gt; using NPM and initialized the project using:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vercel&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; login&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;PROJECT&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; FOLDE&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;R&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;vercel&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; link&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I was nicely surprised that it automatically detected that I use Zola and set everything up for me.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Opened &lt;code&gt;.vercel&#x2F;project.json&lt;&#x2F;code&gt; and kept the window around.&lt;&#x2F;li&gt;
&lt;li&gt;Added respective secrets in &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ci.codeberg.org&quot;&gt;Codeberg CI&lt;&#x2F;a&gt; with &lt;code&gt;push&lt;&#x2F;code&gt; and &lt;code&gt;manual&lt;&#x2F;code&gt; events enabled:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VERCEL_TOKEN&lt;&#x2F;code&gt; with the access token we got earlier.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;VERCEL_ORG_ID&lt;&#x2F;code&gt; from &lt;code&gt;project.json&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;VERCEL_PROJECT_ID&lt;&#x2F;code&gt; from the same file.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Added &lt;code&gt;daudix.one&lt;&#x2F;code&gt; as a domain. This has to be the smoothest domain setup I’ve seen.&lt;&#x2F;li&gt;
&lt;li&gt;Deleted &lt;code&gt;pages&lt;&#x2F;code&gt; branch and &lt;code&gt;.domains&lt;&#x2F;code&gt; file.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;After all this I tried pushing and seeing if it works and… It didn’t. After short search I &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;orgs&#x2F;vercel&#x2F;discussions&#x2F;3181&quot;&gt;found&lt;&#x2F;a&gt; that Zola builds are currently broken in Vercel, and to fix it you need to either set &lt;code&gt;ZOLA_VERSION&lt;&#x2F;code&gt; environment variable to needed Zola version, or change Node.js version to 20.x. I used the Zola version approach and set it latest version. After this everything worked as expected. Weird issue…&lt;&#x2F;p&gt;
&lt;p&gt;Being excited that it all worked, I moved Duckquill to it as well :3c&lt;&#x2F;p&gt;
&lt;p&gt;But wait, I’ve gone even further and replaced &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.goatcounter.com&quot;&gt;GoatCounter&lt;&#x2F;a&gt; analytics with Vercel’s, it doesn’t change much, but it’s nice to have everything in a single place, I like its UI more, and the latest version gets added to the deployment automatically. I also added speed insights while there. It’s blocked by AdBlockers just like GoatCounter, but it’s still useful to have at least some metrics.&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;moving-to-vercel&#x2F;vercel-overview.png&quot; alt=&quot;Vercel overview page&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;moving-to-vercel&#x2F;vercel-speed-insights.png&quot; alt=&quot;Vercel Speed Insights page&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;figcaption&gt;Looks like some sort of spaceship control panel haha.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Turns out there’s also something called Vercel Toolbar, which is basically spaceship controls injected into the site if you’re the owner. Craaazy stuff!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;moving-to-vercel&#x2F;vercel-toolbar.png&quot; alt=&quot;Vercel toolbar&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;moving-to-vercel&#x2F;vercel-comment.png&quot; alt=&quot;Vercel comment&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;All in all, I’m very happy with it so far. I have some weird feeling about it, as, you know, &lt;q&gt;the only free cheese is in the mousetrap&lt;&#x2F;q&gt;. But that’s just me, I haven’t heard anything bad about it yet.&lt;&#x2F;p&gt;
&lt;p&gt;There’s one thing that I couldn’t setup and that is preview deployments, as Vercel need to know from which branch to deploy, and since Codeberg isn’t yet supported, we can’t do that.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;So, were these reasons sufficient enough for me to switch? No.&lt;&#x2F;p&gt;
&lt;p&gt;Did I switch mostly for funnies? Yup.&lt;&#x2F;p&gt;
&lt;p&gt;Can I still recommend Codeberg Pages? Yes.&lt;&#x2F;p&gt;
&lt;p&gt;And that’s it for now, see you in the next one! (hopefully soon)&lt;&#x2F;p&gt;
&lt;p&gt;P.S. &lt;abbr title=&quot;Members of the Snug Nook chat&quot;&gt;Snug Nookers&lt;&#x2F;abbr&gt; knew about this all along. If you want to too, &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;snug-nook&#x2F;&quot;&gt;feel free to join&lt;&#x2F;a&gt;! We don’t bite :3&lt;&#x2F;p&gt;
&lt;p&gt;P.P.S. The color for the banner was chosen there too xD&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Deploying a Zola Website to Codeberg Pages</title>
          <pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate>
          <author>Daudix</author>
          <link>https://daudix.one/blog/deploying-to-codeberg-pages/</link>
          <guid>https://daudix.one/blog/deploying-to-codeberg-pages/</guid>
          <description xml:base="https://daudix.one/blog/deploying-to-codeberg-pages/">&lt;p&gt;&lt;small&gt;Photo by &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.lubomirminar.com&quot;&gt;Lubomir Minar&lt;&#x2F;a&gt; on &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20210124002804&#x2F;https:&#x2F;&#x2F;unsplash.com&#x2F;photos&#x2F;3K6ZkYBj2Xo&quot;&gt;Unsplash (archived)&lt;&#x2F;a&gt;.&lt;&#x2F;small&gt;&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;This guide focuses on the Zola &lt;abbr title=&quot;Static site generator&quot;&gt;SSG&lt;&#x2F;abbr&gt;, but other SSGs like Hugo and Jekyll should work with this guide as well.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This guide is intended to help with the process of getting a Zola website up and running using Codeberg and Codeberg pages; some of the steps are confusing, so this article tries to clear them up.&lt;&#x2F;p&gt;
&lt;p&gt;It assumes that you have Git set up and Zola installed already. If not, check the following &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;get-started&#x2F;getting-started-with-git&#x2F;set-up-git&quot;&gt;guide by GitHub&lt;&#x2F;a&gt; on setting up Git and &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;getting-started&#x2F;installation&#x2F;&quot;&gt;Zola’s documentation&lt;&#x2F;a&gt; on installing it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-codeberg&quot;&gt;What Is Codeberg?&lt;&#x2F;h2&gt;
&lt;p&gt;Codeberg is a free forge for free and open source projects. A forge is a web-based collaborative software platform for both developing and sharing various software projects.&lt;&#x2F;p&gt;
&lt;p&gt;You may be familiar with GitHub, and well, it’s pretty much the same thing, except it doesn’t compromise user privacy, it doesn’t violate license agreements, and it doesn’t train its AI on code that users host there. I &lt;a href=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;&quot;&gt;moved away from GitHub&lt;&#x2F;a&gt; myself some time ago, and have no regrets.&lt;&#x2F;p&gt;
&lt;p&gt;See &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sfconservancy.org&#x2F;GiveUpGitHub&#x2F;&quot;&gt;Give Up GitHub!&lt;&#x2F;a&gt; and &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nogithub.codeberg.page&quot;&gt;Please don’t upload my code to GitHub&lt;&#x2F;a&gt; to get a better understanding of why GitHub is bad.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sign-up-on-codeberg&quot;&gt;Sign up on Codeberg&lt;&#x2F;h2&gt;
&lt;p&gt;This one is pretty straightforward, you just go to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&quot;&gt;codeberg.org&lt;&#x2F;a&gt; and press that big “Register now.” button. The rest is self-explanatory.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;landing-page.png&quot; alt=&quot;Codeberg website’s landing page.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;create-the-repository&quot;&gt;Create the Repository&lt;&#x2F;h2&gt;
&lt;p&gt;Now you can create a repository for your website. A repository is like a public folder with your project that you and others can work on.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;new-repository.png&quot; alt=&quot;Dropdown with the item “New repository”.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now name the repository &lt;code&gt;pages&lt;&#x2F;code&gt; if you don’t plan on using custom domain, otherwise you need to choose a different name, e.g. &lt;code&gt;website&lt;&#x2F;code&gt;. That’s because Codeberg pages don’t work well with custom domains and &lt;code&gt;pages&lt;&#x2F;code&gt; repository with the &lt;code&gt;pages&lt;&#x2F;code&gt; branch. It’s confusing so just know that such combo won’t work.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;new-repository-2.png&quot; alt=&quot;Repository creation UI.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I also recommend checking this “Initialize repository” box to save some time later.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;initialize-repository.png&quot; alt=&quot;“Initialize repository” checkbox.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now you can go and smash that “Create repository” button and proceed to the next step.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;initializing-zola-website&quot;&gt;Initializing Zola Website&lt;&#x2F;h2&gt;
&lt;p&gt;To be completely unbiased, I will use my own &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;duckquill.daudix.one&quot;&gt;Duckquill&lt;&#x2F;a&gt; Zola theme in this example &lt;img
    class=&quot;emoji&quot;
    src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;troll.png&quot;
    title=&quot;troll&quot;
    width=&quot;24&quot;
    height=&quot;24&quot;
  &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Jokes aside, you can use any theme from &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;&quot;&gt;getzola.org&#x2F;themes&lt;&#x2F;a&gt;, but to make sure we’re on the same page we’ll use Duckquill.&lt;&#x2F;p&gt;
&lt;p&gt;First, clone the newly created repository and then &lt;code&gt;cd&lt;&#x2F;code&gt; into it.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; clone&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;repository_ur&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;l&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;repository_nam&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, initialize a new Zola site with &lt;code&gt;zola init --force&lt;&#x2F;code&gt;. You can simply spam &lt;kbd&gt;Enter ↵&lt;&#x2F;kbd&gt; since we’ll use our own configuration anyway. (The reason why the &lt;code&gt;--force&lt;&#x2F;code&gt; flag is used is that Zola doesn’t like the presence of Git files in the folder and doesn’t want to proceed otherwise)&lt;&#x2F;p&gt;
&lt;p&gt;Now you’ll need to add the Duckquill theme as a Git submodule:&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;A Git submodule is a repository inside another repository. When you add a submodule, Git adds it to a special &lt;code&gt;.gitmodules&lt;&#x2F;code&gt; file, which can then be read by Git somewhere else and clone the needed repository in place, which will be helpful later when we set up the &lt;abbr title=&quot;Contineventuous integration&quot;&gt;CI&lt;&#x2F;abbr&gt; workflow.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; submodule&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; submodule&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; https:&#x2F;&#x2F;codeberg.org&#x2F;daudix&#x2F;duckquill.git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; themes&#x2F;duckquill&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now we need to switch to the latest release instead of the unstable &lt;code&gt;main&lt;&#x2F;code&gt; branch:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; themes&#x2F;duckquill&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; tags&#x2F;v4.2.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote class=&quot;markdown-alert-tip&quot;&gt;
&lt;p&gt;You can check the latest release here: &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;daudix&#x2F;duckquill&#x2F;releases&quot;&gt;https:&#x2F;&#x2F;codeberg.org&#x2F;daudix&#x2F;duckquill&#x2F;releases&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Now you can try serving the site locally:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;zola&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; serve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;empty.png#has-alpha&quot; alt=&quot;Empty website.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hm, doesn’t look quite right…&lt;&#x2F;p&gt;
&lt;p&gt;That’s because we first need to add some bare-bones configuration to &lt;code&gt;config.toml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;title&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Demo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;base_url&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;pages-demo.daudix.codeberg.page&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;description&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Demo site for a blog post.&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;theme&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;duckquill&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And let’s create a homepage by creating an &lt;code&gt;_index.md&lt;&#x2F;code&gt; file under &lt;code&gt;content&lt;&#x2F;code&gt; with the following contents:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;+++&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;+++&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And we get…&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;empty-duckquill.png#has-alpha&quot; alt=&quot;Empty Duckquill website.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Alright, perhaps our config is too bare-bones, let’s enable navbar and a footer:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;extra&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;nav&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;links&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;  {&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; url&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;example.org&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Example&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; }&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;extra&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt;footer&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;show_copyright&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;show_powered_by&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;show_source&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And add something to the homepage:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;+++&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;title = &amp;quot;I&amp;#39;m a homepage, look at me!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;+++&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-section&quot;&gt; Hello There!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-text&quot;&gt;I&amp;#39;m just a demo, I like to &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;demo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;nstrate stuff, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;demo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;lish stuff, and I&amp;#39;m a &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;demo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;**&lt;&#x2F;span&gt;&lt;span class=&quot;z-text&quot;&gt;crat (no actually, I&amp;#39;m just a silly demo)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;not-empty.png#has-alpha&quot; alt=&quot;Duckquill website with some content.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Much better. You can customize it further by looking at &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;daudix&#x2F;duckquill&#x2F;src&#x2F;branch&#x2F;main&#x2F;config.toml&quot;&gt;Duckquill’s config&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now we can push the changes to Codeberg and set up the CI to build and deploy our site to Codeberg pages.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setting-up-the-ci&quot;&gt;Setting up the CI&lt;&#x2F;h2&gt;
&lt;blockquote class=&quot;markdown-alert-important&quot;&gt;
&lt;p&gt;Before we get to setting up the CI, we first need to get access to it. You’ll need to fill &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-e.V.&#x2F;requests&#x2F;issues&#x2F;new?template=ISSUE_TEMPLATE%2fWoodpecker-CI.yaml&quot;&gt;the following form&lt;&#x2F;a&gt; at &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-e.V.&#x2F;requests&quot;&gt;Codeberg-e.V.&#x2F;requests&lt;&#x2F;a&gt; repository and wait for approval. After your request been approved, we can proceed further.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Copy &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-CI&#x2F;examples&#x2F;src&#x2F;branch&#x2F;main&#x2F;Zola&#x2F;.woodpecker.yaml&quot;&gt;the following Woodpecker workflow&lt;&#x2F;a&gt; example from &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-CI&#x2F;examples&quot;&gt;Codeberg-CI&#x2F;examples&lt;&#x2F;a&gt; and put it in the &lt;code&gt;.woodpecker.yaml&lt;&#x2F;code&gt; file in the root of your project. If you want the CI to be able to run manually, add &lt;code&gt;manual&lt;&#x2F;code&gt; to steps that have the &lt;code&gt;push&lt;&#x2F;code&gt; events in them.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Takes a repository with Zola source, generates the static site and&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; pushes the result to the pages branch of the same repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Must be set in Woodpecker configuration:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; mail: Your email address used by Codeberg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; codeberg_token: Codeberg access token with &amp;quot;write:repository&amp;quot; permission&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; .domains file can be put inside static folder in Zola source&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Exclude the pipeline to run on the pages branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;w&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;hen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  b&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ranch&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;xclude&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ages&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Clone recursively to fully clone the themes given as Git submodules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;lone&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  g&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;it&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; w&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;oodpeckerci&#x2F;plugin-git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ettings&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      r&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ecursive&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;teps&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Build Zola static files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  b&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;uild&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; a&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;lpine:edge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ommands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; a&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;pk add zola&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; z&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ola build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    w&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;hen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;vent&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ush&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ull_request&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;anual&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  p&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ublish&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;itnami&#x2F;git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ecrets&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;odeberg_token&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ommands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Configure Git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global user.email $MAIL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global user.name &amp;quot;Woodpecker CI&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Clone the output branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it clone --branch pages https:&#x2F;&#x2F;$CODEBERG_TOKEN@codeberg.org&#x2F;$CI_REPO.git $CI_REPO_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Enter the output branch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;d $CI_REPO_NAME&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Remove old files&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it rm -r &amp;quot;*&amp;quot; || true&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Don&amp;#39;t fail if there&amp;#39;s nothing to remove&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Copy the output of the build step&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p -ar ..&#x2F;public&#x2F;. .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Commit and push all static files with the source commit hash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it add --all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it commit -m &amp;quot;Woodpecker CI ${CI_COMMIT_SHA} [SKIP CI]&amp;quot; --allow-empty&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it push&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    w&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;hen&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;      e&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;vent&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ush&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;anual&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Push the changes and go to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ci.codeberg.org&quot;&gt;ci.codeberg.org&lt;&#x2F;a&gt;. There, add the &lt;code&gt;pages&lt;&#x2F;code&gt; repository we created earlier:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other&quot;&gt;-all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other&quot;&gt;-message&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Initial commit&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;add-repository.png&quot; alt=&quot;“Add repository” button.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;enable-repository.png&quot; alt=&quot;Repository with the “Enable” button next to it.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;user&#x2F;settings&#x2F;applications&quot;&gt;create a secret&lt;&#x2F;a&gt; on Codeberg so CI can push the changes. You need to set the &lt;code&gt;repository&lt;&#x2F;code&gt; scope to &lt;code&gt;Read and write&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;token-generation.png&quot; alt=&quot;Token generation page.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Copy and paste the resulting token somewhere, since it couldn’t be seen after the page reload.&lt;&#x2F;p&gt;
&lt;p&gt;Now add the needed secrets in the Woodpecker repository settings by clicking on the repository in the list:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;repository-settings.png&quot; alt=&quot;Repository settings button.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Navigate to the “Secrets” tab:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;repository-settings-secrets.png&quot; alt=&quot;Repository settings with the “Secrets” tab open.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Add secret with the name &lt;code&gt;mail&lt;&#x2F;code&gt; with email you used for Codeberg as the value, with the &lt;code&gt;Push&lt;&#x2F;code&gt; and &lt;code&gt;Manual&lt;&#x2F;code&gt; events selected (the later is only needed if you added &lt;code&gt;manual&lt;&#x2F;code&gt; event in the CI file):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;mail-secret.png&quot; alt=&quot;Mail secret.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;events.png&quot; alt=&quot;Event selection.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Do the same for the &lt;code&gt;codeberg_token&lt;&#x2F;code&gt;, use the token we generated earlier as the value.&lt;&#x2F;p&gt;
&lt;p&gt;We’re almost there! now we just need to create the &lt;code&gt;pages&lt;&#x2F;code&gt; branch on Codeberg where the build result will be pushed:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;deploying-to-codeberg-pages&#x2F;pages-branch.png&quot; alt=&quot;“pages” branch creation.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now we can run the first build by pressing the “Run pipeline” button in Woodpecker.&lt;&#x2F;p&gt;
&lt;p&gt;If everything is done properly, the build should succeed and site be available on &lt;code&gt;&amp;lt;username&amp;gt;.codeberg.page&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;button class=&quot;audio&quot; data-audio=&quot;party-horn.mp3&quot;&gt;Congrats!&lt;i class=&quot;icon speaker-high&quot; style=&quot;--icon: url(&#x27;data:image&#x2F;svg+xml,%3Csvg%20role%3D%22img%22%20xmlns%3D%22http%3A&amp;#x2F;&amp;#x2F;www.w3.org&amp;#x2F;2000&amp;#x2F;svg%22%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22currentColor%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20d%3D%22M157.27%2C21.22a12%2C12%2C0%2C0%2C0-12.64%2C1.31L75.88%2C76H32A20%2C20%2C0%2C0%2C0%2C12%2C96v64a20%2C20%2C0%2C0%2C0%2C20%2C20H75.88l68.75%2C53.47A12%2C12%2C0%2C0%2C0%2C164%2C224V32A12%2C12%2C0%2C0%2C0%2C157.27%2C21.22ZM36%2C100H68v56H36Zm104%2C99.46L92%2C162.13V93.87l48-37.33ZM212%2C128a44%2C44%2C0%2C0%2C1-11%2C29.11%2C12%2C12%2C0%2C1%2C1-18-15.88%2C20%2C20%2C0%2C0%2C0%2C0-26.43%2C12%2C12%2C0%2C0%2C1%2C18-15.86A43.94%2C43.94%2C0%2C0%2C1%2C212%2C128Zm40%2C0a83.87%2C83.87%2C0%2C0%2C1-21.39%2C56%2C12%2C12%2C0%2C0%2C1-17.89-16%2C60%2C60%2C0%2C0%2C0%2C0-80%2C12%2C12%2C0%2C1%2C1%2C17.88-16A83.87%2C83.87%2C0%2C0%2C1%2C252%2C128Z%22&amp;#x2F;%3E%3C&amp;#x2F;svg%3E&#x27;);&quot;&gt;&lt;&#x2F;i&gt;&lt;&#x2F;button&gt;
 You are now officially a web citizen! Show off your new site to the world; it’s something to be proud of! Since it’s yours and yours alone, you can do whatever you want with it; add silly gags all over the place, write serious or not-so-serious articles, let it rot for eternity, you name it!&lt;&#x2F;p&gt;
&lt;p&gt;If you run into problems or need help with any of the steps, feel free to &lt;a href=&quot;&#x2F;#contacts&quot;&gt;reach out&lt;&#x2F;a&gt;, I will try my best to help ^^&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Migration from GitHub to Codeberg</title>
          <pubDate>Sat, 15 Jul 2023 00:00:00 +0000</pubDate>
          <author>Daudix</author>
          <link>https://daudix.one/blog/migration-from-github-to-codeberg/</link>
          <guid>https://daudix.one/blog/migration-from-github-to-codeberg/</guid>
          <description xml:base="https://daudix.one/blog/migration-from-github-to-codeberg/">&lt;h2 id=&quot;backstory&quot;&gt;Backstory&lt;&#x2F;h2&gt;
&lt;p&gt;On January 8, 2021, I have joined GitHub, back then I knew very little about FOSS and how it works, haven’t done design &lt;em&gt;ever&lt;&#x2F;em&gt; and had awful knowledge of English, to point that I used Google Translate to understand the text.&lt;&#x2F;p&gt;
&lt;p&gt;Things have changed since then, but this post is not about this (or is it).&lt;&#x2F;p&gt;
&lt;p&gt;GitHub is the biggest Git service that every developer knows about, a lot of open source projects use it because it provides free Git hosting and very convenient tools such as Actions and Pages, but not everything is perfect, and where there’s Microsoft there’s bad stuff.&lt;&#x2F;p&gt;
&lt;p&gt;It is owned by Microsoft for a long time, which is the first red sign. &lt;del&gt;When &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Russo-Ukrainian_War&quot;&gt;Russo-Ukrainian War&lt;&#x2F;a&gt; began, GitHub started &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.jessesquires.com&#x2F;blog&#x2F;2022&#x2F;04&#x2F;19&#x2F;github-suspending-russian-accounts&quot;&gt;suspending accounts and deleting repositories&lt;&#x2F;a&gt; of Russian developers who has nothing to do with war but the fact that they were in Russia&lt;&#x2F;del&gt; (info varies). Last year they launched &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;features&#x2F;copilot&quot;&gt;Copilot&lt;&#x2F;a&gt; - an AI code completion and suggestion software &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;githubcopilotinvestigation.com&quot;&gt;trained on FOSS projects&lt;&#x2F;a&gt;, violating the GPL license. Microsoft itself has not the cleanest history with FOSS and Linux, but listing every incident here would take a lot of time.&lt;&#x2F;p&gt;
&lt;p&gt;Recently I were contributing to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Bavarder&#x2F;Bavarder&quot;&gt;some&lt;&#x2F;a&gt; &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Imaginer&#x2F;Imaginer&quot;&gt;projects&lt;&#x2F;a&gt; hosted on Codeberg, and I had to create an account and use it for some time, and… I liked it! The UI of Codeberg; the workflow and the overall &lt;em&gt;vibe&lt;&#x2F;em&gt; were really nice, the fact that Codeberg is very open with its Community helped a lot too.&lt;&#x2F;p&gt;
&lt;blockquote
  class=&quot;markdown-alert&quot;
  style=&quot;
    --alert-title: &#x27;Edit&#x27;;
    --alert-icon: url(&#x27;data:image&#x2F;svg+xml,%3Csvg%20role%3D%22img%22%20xmlns%3D%22http%3A&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg%22%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22currentColor%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20d%3D%22M230.14%2C70.54%2C185.46%2C25.85a20%2C20%2C0%2C0%2C0-28.29%2C0L33.86%2C149.17A19.85%2C19.85%2C0%2C0%2C0%2C28%2C163.31V208a20%2C20%2C0%2C0%2C0%2C20%2C20H92.69a19.86%2C19.86%2C0%2C0%2C0%2C14.14-5.86L230.14%2C98.82a20%2C20%2C0%2C0%2C0%2C0-28.28ZM91%2C204H52V165l84-84%2C39%2C39ZM192%2C103%2C153%2C64l18.34-18.34%2C39%2C39Z%22&#x2F;%3E%3C&#x2F;svg%3E&#x27;);
  &quot;&gt;
  &lt;p&gt;Apparently I have &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;foreverxml&#x2F;random&#x2F;pulls&#x2F;41&quot;&gt;contributed to one project&lt;&#x2F;a&gt; earlier, so I already had a Codeberg account xD&lt;&#x2F;p&gt;

&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Codeberg is non-profit powered by &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;forgejo.org&quot;&gt;Forgejo&lt;&#x2F;a&gt; - a soft-fork of &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;about.gitea.com&quot;&gt;Gitea&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;(…) We started Forgejo in reaction to control of Gitea being taken away from the community by the newly-formed for-profit company Gitea Ltd without prior community consultation, and after an &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gitea-open-letter.coding.social&quot;&gt;Open Letter&lt;&#x2F;a&gt; to the Gitea project owners remained unanswered.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And I started thinking of and preparing for migration.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Why not GitLab?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Good question, I honestly don’t know. As a matter of fact, GitLab is a bit confusing for me (especially after recent sidebar redesign) and I just liked Codeberg so much, it’s small and cute :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;migration&quot;&gt;Migration&lt;&#x2F;h2&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;I have found about that &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.erat.org&quot;&gt;Dan Erat&lt;&#x2F;a&gt; have published an article about his migration from GitHub to Codeberg before this one, &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.erat.org&#x2F;codeberg.html&quot;&gt;check it out&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;After final decision that I will migrate my personal repositories to Codeberg I have created a &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mstdn.social&#x2F;@Daudix&#x2F;110680533037666405&quot;&gt;poll&lt;&#x2F;a&gt; on Mastodon, in which asked what to do with repositories on GitHub, people decided that adding small note in README that tells about migration and gives a link to repository on Codeberg, and then archiving were the best approach, &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mstdn.social&#x2F;@Daudix&#x2F;110685982530642051&quot;&gt;and so I did it!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;repositories&quot;&gt;Repositories&lt;&#x2F;h3&gt;
&lt;p&gt;The &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.codeberg.org&#x2F;advanced&#x2F;migrating-repos&quot;&gt;migration of repositories&lt;&#x2F;a&gt; were very simple - I have created GitHub &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;settings&#x2F;tokens?type=beta&quot;&gt;Fine-grained personal access token&lt;&#x2F;a&gt; which I used to give Codeberg access to GitHub repositories&lt;&#x2F;p&gt;
&lt;p&gt;You can fine-tune the migration - enable migration of pull requests, issues, labels, releases, milestones and wiki, all by simply checking a box.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;redirect&quot;&gt;Redirect&lt;&#x2F;h3&gt;
&lt;p&gt;To make the migration as smooth as possible for everyone, I have &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mstdn.social&#x2F;@Daudix&#x2F;110682189578914151&quot;&gt;added redirect&lt;&#x2F;a&gt; from GitHub pages to Codeberg pages right before archiving, so all the links will continue work just like before.&lt;&#x2F;p&gt;
&lt;p&gt;To do so, I have added this two lines to &lt;code&gt;&amp;lt;head&amp;gt;&lt;&#x2F;code&gt; of HTML&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;meta&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; http-equiv&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;refresh&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; content&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;0; URL=https:&#x2F;&#x2F;daudix.codeberg.page&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;link&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; rel&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;canonical&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; href&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;daudix.codeberg.page&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;github-pages-codeberg-pages&quot;&gt;GitHub Pages → Codeberg Pages&lt;&#x2F;h3&gt;
&lt;p&gt;Speaking of Codeberg pages, I have successfully recreated the workflow of GitHub pages with said Codeberg pages and Woodpecker - CI service that Codeberg provides (you need to request access), which allows running various jobs on changes. Тhe one I needed were Jekyll - Static site generator from Markdown (and not only) that are used by GitHub pages and this blog is powered by.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;woodpecker&quot;&gt;Woodpecker&lt;&#x2F;h4&gt;
&lt;blockquote class=&quot;markdown-alert-tip&quot;&gt;
&lt;p&gt;See &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jan.wildeboer.net&#x2F;2022&#x2F;07&#x2F;Woodpecker-CI-Jekyll&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt; by Jan Wildeboer for better understanding how the CI works, since this guy created the workflow used here.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;First, I have requested and waited for manual approval to access to Woodpecker CI by opening an issue &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-e.V.&#x2F;requests&#x2F;issues&#x2F;new&#x2F;choose&quot;&gt;here&lt;&#x2F;a&gt; and selecting &lt;em&gt;Woodpecker CI Access&lt;&#x2F;em&gt;, it took a few hours, so when I woke up I already had access.&lt;&#x2F;p&gt;
&lt;p&gt;After approval, I have created &lt;code&gt;blog-source&lt;&#x2F;code&gt; and &lt;code&gt;blog&lt;&#x2F;code&gt; repositories (names can be whatever you want), the later will contain the generated static site, and should only have &lt;code&gt;pages&lt;&#x2F;code&gt; branch in it, and created &lt;code&gt;.woodpecker.yml&lt;&#x2F;code&gt; file in the &lt;code&gt;blog-source&lt;&#x2F;code&gt; repository.&lt;&#x2F;p&gt;
&lt;p&gt;Then copy and paste the contents of &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;Codeberg-CI&#x2F;examples&#x2F;src&#x2F;branch&#x2F;main&#x2F;Jekyll&#x2F;.woodpecker&#x2F;jekyll.yaml&quot;&gt;Jekyll workflow example&lt;&#x2F;a&gt; in &lt;code&gt;.woodpecker.yml&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;teps&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;  b&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;uild&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Use the official jekyll build container&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    i&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;mage&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; j&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;ekyll&#x2F;jekyll&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    s&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ecrets&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; [&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;btoken&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;bmail&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;    c&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;ommands&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Avoid permission denied errors&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;hmod -R a+w .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Set up git in a working way&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global --add safe.directory &#x2F;woodpecker&#x2F;src&#x2F;codeberg.org&#x2F;CBUSER&#x2F;CBIN&#x2F;_site&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global user.email &amp;quot;$CBMAIL&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global user.name &amp;quot;CI Builder&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it config --global init.defaultBranch pages&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; clone and move the target repo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it clone -b pages https:&#x2F;&#x2F;codeberg.org&#x2F;CBUSER&#x2F;CBOUT.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;v CBOUT _site&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;hmod -R a+w _site&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;d _site&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Prepare for push&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it remote set-url origin https:&#x2F;&#x2F;$CBTOKEN@codeberg.org&#x2F;CBUSER&#x2F;CBOUT.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;d ..&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Run Jekyll build stage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;undle install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;undle exec jekyll build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Only needed for custom domains&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p domains _site&#x2F;.domains&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;      #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Push to target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;d _site&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it add --all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it commit -m &amp;quot;Woodpecker CI Jekyll Build at $( env TZ=Europe&#x2F;Berlin date +&amp;quot;%Y-%m-%d %X %Z&amp;quot; )&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; g&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;it push&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After that, open it in your favorite text editor and replace:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CBIN&lt;&#x2F;code&gt; with source repository (&lt;code&gt;blog-source&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;CBOUT&lt;&#x2F;code&gt; with output repository (&lt;code&gt;blog&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;CBUSER&lt;&#x2F;code&gt; with your Codeberg username&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;em&gt;Personally I use &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vscodium.com&quot;&gt;VSCodium&lt;&#x2F;a&gt;, fork of VSCode with Microsoft telemetry removed.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Push all the changes and &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.codeberg.org&#x2F;advanced&#x2F;access-token&quot;&gt;Generate an Access Token&lt;&#x2F;a&gt;, you need to generate token named &lt;code&gt;cbtoken&lt;&#x2F;code&gt; with the &lt;code&gt;repo&lt;&#x2F;code&gt; scope selected&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;scopes-repo.png&quot; alt=&quot;scopes repo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Then copy the resulted token and save it to a safe place, as it won’t be shown again.&lt;&#x2F;p&gt;
&lt;p&gt;Go to &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ci.codeberg.org&quot;&gt;Woodpecker&lt;&#x2F;a&gt; and navigate to &lt;em&gt;Repositories&lt;&#x2F;em&gt; tab and add a new repository (&lt;code&gt;blog-source&lt;&#x2F;code&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;add-repository-button.png&quot; alt=&quot;add repository button&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Navigate to &lt;em&gt;Settings&lt;&#x2F;em&gt; and go to &lt;em&gt;Secrets&lt;&#x2F;em&gt; tab&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;settings-button.png&quot; alt=&quot;settings button&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;secrets-tab.png&quot; alt=&quot;secrets tab&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here create two secrets, &lt;code&gt;cbmail&lt;&#x2F;code&gt; and &lt;code&gt;cbtoken&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;cbmail&lt;&#x2F;code&gt; should contain your Codeberg account email&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;cbmail-secret.png&quot; alt=&quot;cbmail secret&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And &lt;code&gt;cbtoken&lt;&#x2F;code&gt; should contain the secret we saved earlier&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;cbtoken-secret.png&quot; alt=&quot;cbtoken secret&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Make sure these two secrets have successfully created and make some changes in &lt;code&gt;blog-source&lt;&#x2F;code&gt; to trigger the CI, it should finish successfully.&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-tip&quot;&gt;
&lt;p&gt;If you don’t want to trigger the CI (the change doesn’t affect content for example) you can add &lt;code&gt;[CI SKIP]&lt;&#x2F;code&gt; to your commit message to skip the CI.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;daudix.one&#x2F;blog&#x2F;migration-from-github-to-codeberg&#x2F;ci-successful.png&quot; alt=&quot;ci successful&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now it’s up to you to choose Jekyll theme and write something ;)&lt;&#x2F;p&gt;
&lt;p&gt;In my case I already had blog based on &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jimmac&#x2F;os-component-website&quot;&gt;jimmac&#x2F;os-component-website&lt;&#x2F;a&gt; (this blog) so it were all I needed to do.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;The migration from GitHub to Codeberg were simple and smooth, but not without issues, I had difficulties understanding how to make Woodpecker secrets work and how to create them in first place, this is why I wrote this post in first place.&lt;&#x2F;p&gt;
&lt;blockquote
  class=&quot;markdown-alert&quot;
  style=&quot;
    --alert-title: &#x27;Edit&#x27;;
    --alert-icon: url(&#x27;data:image&#x2F;svg+xml,%3Csvg%20role%3D%22img%22%20xmlns%3D%22http%3A&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg%22%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22currentColor%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20d%3D%22M230.14%2C70.54%2C185.46%2C25.85a20%2C20%2C0%2C0%2C0-28.29%2C0L33.86%2C149.17A19.85%2C19.85%2C0%2C0%2C0%2C28%2C163.31V208a20%2C20%2C0%2C0%2C0%2C20%2C20H92.69a19.86%2C19.86%2C0%2C0%2C0%2C14.14-5.86L230.14%2C98.82a20%2C20%2C0%2C0%2C0%2C0-28.28ZM91%2C204H52V165l84-84%2C39%2C39ZM192%2C103%2C153%2C64l18.34-18.34%2C39%2C39Z%22&#x2F;%3E%3C&#x2F;svg%3E&#x27;);
  &quot;&gt;
  &lt;p&gt;In Gitea and consequently in Forgejo v1.20 the secret creation UI have been completely changed, and it’s more clear than current one&lt;&#x2F;p&gt;

&lt;&#x2F;blockquote&gt;
&lt;p&gt;Guys over Codeberg seem to be very nice so if you value your code then you may want to do the same :)&lt;&#x2F;p&gt;
&lt;p&gt;This is all for now, take &lt;del&gt;cake&lt;&#x2F;del&gt; care!&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
