[{"content":"Huhu, ich hab mir in den Kopf gesetzt, dass es doch eine gute Idee wäre, einen Blog zu haben. Also los geht\u0026rsquo;s\u0026hellip; ähm, aber wie? Wie soll ich den Blog bereitstellen? Wie wird aus einem Text eine ansehnliche Internetseite? In diesem ersten Beitrag geht\u0026rsquo;s also darum, wie ich diesen Blog aufgesetzt habe. Zuerst einmal die Anforderungen:\nWie möchte ich Beiträge schreiben? In einem Git Repository In Markdown Wenn ich Pushe soll automatisch veröffentlicht werden Was soll der Blog dem Leser (technisch) bieten Kommentare Einigermaßen ansehnlich sein RSS Feed Wie man offensichtlich schon erkennt hab ich mich für Hugo als Framework und PaperMod als Theme entschieden. Das war soweit problemlos, abgesehen davon, dass PaperMod oft .Permalink anstatt .RelPermalink verwendet, aber dazu später mehr. Für die Kommentare habe ich einfach mastodon-comments benutzt.\nUm möglichst wenig Überraschungen zu erfahren wenn plötzlich in einer CI Pipeline gebaut wird, wird hugo in einer Nix Derivation aufgerufen anstatt in der Pipeline direkt.\nblog = pkgs.stdenv.mkDerivation { name = \u0026#34;blog\u0026#34;; src = ./.; nativeBuildInputs = [pkgs.hugo]; buildPhase = \u0026#39;\u0026#39; mkdir -p themes/Theme cp -r ${theme}/* themes/Theme/ hugo --minify \u0026#39;\u0026#39;; installPhase = \u0026#39;\u0026#39; mkdir -p $out cp -r public/* $out sed \u0026#39;/prefers-color-scheme: dark/{n; s/:root {/html:not([data-theme=\u0026#34;light\u0026#34;]) {/}\u0026#39; ${mastodon-comments}/mastodon-comments.js \u0026gt; $out/mastodon-comments.js cp ${dompurify}/dist/purify.min.js $out mkdir -p $out/font-awesome cp -r ${font-awesome}/{css,webfonts} $out/font-awesome \u0026#39;\u0026#39;; }; So sieht das dann ungefähr aus. Die ganze Nix Flake gibt\u0026rsquo;s übrigens auf Radicle\nDas ist ziemlich cool, jetzt kann ich einfach nix build aufrufen und bekomme die exakt selbe version die auch eine CI Pipeline bauen würde. Aber was ist jetzt mit der CI Pipeline? Die soll natürlich auch in der Lage sein den gebauten Blog zu veröffentlichen. Wie eigentlich fast jedes Problem lässt sich dieses auch durch eine Nix Derivation lösen :)\npublish = pkgs.writeShellScriptBin \u0026#34;publish\u0026#34; \u0026#39;\u0026#39; if ! cid=$(${pkgs.kubo}/bin/ipfs add --cid-version=1 $IPFS_FLAGS -r --quiet ${self.packages.${system}.blog} | tail -n1); then echo \u0026#34;IPFS upload failed\u0026#34; exit 1 fi echo \u0026#34;Blog online on https://\u0026#39;\u0026#39;${cid}\u0026#34;.ipfs.menzel.lol ${pkgs.kubo}/bin/ipfs name publish -k blog \u0026#39;\u0026#39;${cid} \u0026#39;\u0026#39;; Dieses kleine Skript lädt den blog auf IPFS hoch und veröffentlicht ihn anschließend auf IPNS. Das geht aber nur wenn in der Umgebung in der das Skript läuft auch ein IPFS Knoten zur Verfügung steht. Auch dieses Problem löst Nix, bzw. genauer gesagt NixOS. Einfach den Kubo Service aktivieren services.kubo.enable = true und los geht\u0026rsquo;s.\nAber wie wird das Skript denn jetzt überhaupt ausgeführt? Dazu hab ich einfach den Radicle CI-Broker und den Native CI-Adapter installiert:\nservices.radicle = { ci = { broker = { enable = true; enableHardening = false; settings = { triggers = [ { adapter = \u0026#34;default\u0026#34;; filters = [ { And = [ {HasFile = \u0026#34;.radicle/native.yaml\u0026#34;;} {Node = \u0026#34;z6MkvyWEEW8wNFmkp7cnTuSsQ4YFHf1gb7FM6DeBGVgxeVSo\u0026#34;;} { Or = [ \u0026#34;DefaultBranch\u0026#34; \u0026#34;PatchCreated\u0026#34; \u0026#34;PatchUpdated\u0026#34; ]; } ]; } ]; } ]; }; }; adapters.native.instances.default = { enable = true; settings.base_url = \u0026#34;rad.menzel.lol\u0026#34;; runtimePackages = with pkgs; [ nix git ]; }; }; }; und im Repository die datei .radicle/native.yaml angelegt\nshell: \u0026#34;nix run .#publish\u0026#34; wenn ich jetzt also git push ausführe, kann man den blog bereits auf ipns://k51qzi5uqu5dkfgg4vy759ui3xogdttd8gmn31bn9w8om9obvjh3b24fkrj4kf oder auf jedem beliebigen IPFS Gateway aufrufen.\nDas Ganze bis jetzt ohne Server :) :) :) ok die Aussage ist etwas gemogelt, weil ich den CI-Broker auf meinem Server ausführe, aber es würde auch problemlos auf jedem anderen NixOS gerät gehen, also auch auf meinem Laptop, aber es ist schon praktisch wenn der CI-Broker 24/7 läuft.\nJetzt habe ich auch das Problem mit den Absoluten vs. Relativen Links im PaperMod theme entdeckt, als baseURL hab ich (weil schlussendlich dort auch der Blog aufrufbar sein soll) blog.menzel.lol eingetragen, jetzt ist das aber noch nicht eingerichtet, also alle Navigations-Links führten immer zu https://blog.menzel.lol\u0026hellip; was die Seite echt unbrauchbar macht. Ist aber nichts das sich nicht reparieren lässt.\nFehlt nur noch die Domain. DNS Link macht es schonmal möglich ipns://blog.menzel.lol aufzurufen, aber das ist immer noch nicht das Wahre. Jetzt kommt also die einzige stelle an der ich leider wirklich einen Server brauche. Auf dem Server habe ich Nginx so konfiguriert dass blog.menzel.lol zu blog-menzel-lol.ipns.menzel.lol geproxied wird.\n","permalink":"/posts/publishing_a_blog/","summary":"\u003cp\u003eHuhu, ich hab mir in den Kopf gesetzt, dass es doch eine gute Idee wäre, einen Blog zu haben. Also los geht\u0026rsquo;s\u0026hellip; ähm, aber wie? Wie soll ich den Blog bereitstellen? Wie wird aus einem Text eine ansehnliche Internetseite? In diesem ersten Beitrag geht\u0026rsquo;s also darum, wie ich diesen Blog aufgesetzt habe. Zuerst einmal die Anforderungen:\u003c/p\u003e\n\u003ch2 id=\"wie-möchte-ich-beiträge-schreiben\"\u003eWie möchte ich Beiträge schreiben?\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eIn einem Git Repository\u003c/li\u003e\n\u003cli\u003eIn Markdown\u003c/li\u003e\n\u003cli\u003eWenn ich Pushe soll automatisch veröffentlicht werden\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"was-soll-der-blog-dem-leser-technisch-bieten\"\u003eWas soll der Blog dem Leser (technisch) bieten\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKommentare\u003c/li\u003e\n\u003cli\u003eEinigermaßen ansehnlich sein\u003c/li\u003e\n\u003cli\u003eRSS Feed\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWie man offensichtlich schon erkennt hab ich mich für \u003ca href=\"https://gohugo.io\"\u003eHugo\u003c/a\u003e als Framework und \u003ca href=\"https://adityatelange.github.io/hugo-PaperMod/\"\u003ePaperMod\u003c/a\u003e als Theme entschieden. Das war soweit problemlos, abgesehen davon, dass PaperMod oft \u003ccode\u003e.Permalink\u003c/code\u003e anstatt \u003ccode\u003e.RelPermalink\u003c/code\u003e verwendet, aber dazu später mehr. Für die Kommentare habe ich einfach \u003ca href=\"https://github.com/dpecos/mastodon-comments\"\u003emastodon-comments\u003c/a\u003e benutzt.\u003c/p\u003e","title":"Ich habe jetzt also einen Blog..."}]