<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>DS-blog - nixos</title>
    <subtitle>Hello this is my blog. I made this to document the projects i make.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.errornoslash.be/tags/nixos/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.errornoslash.be"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-24T00:00:00+00:00</updated>
    <id>https://blog.errornoslash.be/tags/nixos/atom.xml</id>
    <entry xml:lang="en">
        <title>How I built this blog</title>
        <published>2026-07-24T00:00:00+00:00</published>
        <updated>2026-07-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Dias Stas
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.errornoslash.be/blog/how-i-built-this-blog/"/>
        <id>https://blog.errornoslash.be/blog/how-i-built-this-blog/</id>
        
        <content type="html" xml:base="https://blog.errornoslash.be/blog/how-i-built-this-blog/">&lt;p&gt;Every blog needs a first post, and the least original — but most honest — thing I can write about is the blog itself. So: here&#x27;s what&#x27;s holding this page up, and the one thing that fought me the whole way.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-stack&quot;&gt;The stack&lt;a class=&quot;post-anchor&quot; href=&quot;#the-stack&quot; aria-label=&quot;Anchor link for: the-stack&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s a &lt;a href=&quot;https:&#x2F;&#x2F;blog.errornoslash.be&#x2F;blog&#x2F;how-i-built-this-blog&#x2F;%5Bhttps:&#x2F;&#x2F;www.getzola.org&#x2F;%5D(https:&#x2F;&#x2F;www.getzola.org&#x2F;)&quot;&gt;Zola&lt;&#x2F;a&gt; site. One static-site-generator binary, no Node, no 400-package &lt;code&gt;node_modules&lt;&#x2F;code&gt; to audit. I write Markdown, Zola spits out HTML, and that&#x27;s the whole content pipeline.&lt;&#x2F;p&gt;
&lt;p&gt;On top of it sits the &lt;a href=&quot;https:&#x2F;&#x2F;blog.errornoslash.be&#x2F;blog&#x2F;how-i-built-this-blog&#x2F;%5Bhttps:&#x2F;&#x2F;github.com&#x2F;klritunu&#x2F;terminus%5D(https:&#x2F;&#x2F;github.com&#x2F;klritunu&#x2F;terminus)&quot;&gt;Terminus&lt;&#x2F;a&gt; theme, which gives me the &lt;code&gt;dias@stas:~&#x2F;blog $&lt;&#x2F;code&gt; terminal look for basically free. I swapped in my own &lt;code&gt;errorno-dark&lt;&#x2F;code&gt; palette and a custom stylesheet so it feels like mine and not a demo, but the bones are all Terminus.&lt;&#x2F;p&gt;
&lt;p&gt;Deploy is a GitHub Actions workflow: push to &lt;code&gt;main&lt;&#x2F;code&gt;, it builds the site and publishes it to &lt;code&gt;blog.errornoslash.be&lt;&#x2F;code&gt;. No server to babysit — the output is just files.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;editing-without-touching-the-terminal&quot;&gt;Editing without touching the terminal&lt;a class=&quot;post-anchor&quot; href=&quot;#editing-without-touching-the-terminal&quot; aria-label=&quot;Anchor link for: editing-without-touching-the-terminal&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;The part I actually wanted was to write posts &lt;em&gt;without&lt;&#x2F;em&gt; opening an editor and hand-writing TOML front-matter every time. That&#x27;s where &lt;a href=&quot;https:&#x2F;&#x2F;blog.errornoslash.be&#x2F;blog&#x2F;how-i-built-this-blog&#x2F;%5Bhttps:&#x2F;&#x2F;pagescms.org&#x2F;%5D(https:&#x2F;&#x2F;pagescms.org&#x2F;)&quot;&gt;Pages CMS&lt;&#x2F;a&gt; comes in. It reads a &lt;code&gt;.pages.yml&lt;&#x2F;code&gt; schema straight out of the repo, then gives me a proper form — title, slug, date, tags, a rich-text body — and commits the resulting Markdown back to GitHub for me. The post you&#x27;re reading was written through that form.&lt;&#x2F;p&gt;
&lt;p&gt;The nice bit is that the CMS is &lt;em&gt;just a view&lt;&#x2F;em&gt; onto the repo. If it ever disappears, my posts are still plain &lt;code&gt;.md&lt;&#x2F;code&gt; files sitting in &lt;code&gt;content&#x2F;blog&#x2F;&lt;&#x2F;code&gt;. No lock-in, no export dance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-broke&quot;&gt;What broke&lt;a class=&quot;post-anchor&quot; href=&quot;#what-broke&quot; aria-label=&quot;Anchor link for: what-broke&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Naturally, the friction wasn&#x27;t the CMS or Zola — it was &lt;em&gt;logging in&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Getting into Pages CMS means authenticating with GitHub, and I use a passkey stored in Proton Pass. On a Firefox-based browser (I&#x27;m on Zen), that handoff isn&#x27;t automatic: Firefox routes the WebAuthn request straight to the OS platform authenticator, so instead of a nice Proton Pass popup I got the system&#x27;s &lt;em&gt;&quot;Touch your security key&quot;&lt;&#x2F;em&gt; dialog and GitHub grumbling about &quot;partial passkey support.&quot; The extension never got a look in.&lt;&#x2F;p&gt;
&lt;p&gt;The fix lives in &lt;code&gt;about:config&lt;&#x2F;code&gt;, and the annoying part on a declarative NixOS setup is making sure the pref survives a rebuild instead of getting reset the next time I &lt;code&gt;switch&lt;&#x2F;code&gt;. Lesson filed under &lt;em&gt;&quot;the login page is always harder than the app.&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-next&quot;&gt;What&#x27;s next&lt;a class=&quot;post-anchor&quot; href=&quot;#what-s-next&quot; aria-label=&quot;Anchor link for: what-s-next&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Now that the pipeline works end to end, the plan is to actually use it: write-ups of the projects I&#x27;ve been building and the NixOS config I keep poking at more than is strictly necessary.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this, the deploy worked. See you in the next one.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
