diff --git a/content/posts/restic-nixos-hetzner.md b/content/posts/restic-nixos-hetzner.md new file mode 100644 index 0000000..94cb92e --- /dev/null +++ b/content/posts/restic-nixos-hetzner.md @@ -0,0 +1,40 @@ +--- +title: Backing up nixos state with restic +date: 2026-02-16 +tags: + - nixos + - restic +draft: true +--- + +I'm writing this so I can hopefully remember what I did in six months. + +As hard as you try to eliminate all state from your computing life with nixos, the fact remains that you can't get rid of all of it. +For example, I run forgejo on my VPS. +Now I have my config which means I could set up a forgejo instance just how I like it if everything went to pot. +But that wouldn't bring back any of the repos I had there previously. + +This is the method I cooked up for backing up some of those important bits and bob on my VPS. + +```nix +{ config, ... }: { + services.restic = { + backups."hetzner-storage-box" = { + initialize = true; + user = "root"; + passwordFile = "/etc/nixos/secrets/restic"; + paths = [ + "${config.services.forgejo.stateDir}" + ]; + repository = "sftp:user@storagebox:/remotelab"; + extraOptions = [ + "sftp.command='ssh user@storagebox -i /root/.ssh/id_ed25519 -s sftp'" + ]; + timerConfig = { + OnCalendar = "daily"; + Persistent = true; + }; + }; + }; +} +``` diff --git a/content/posts/template.md b/content/posts/template.md new file mode 100644 index 0000000..d6c92a5 --- /dev/null +++ b/content/posts/template.md @@ -0,0 +1,8 @@ +--- +title: placeholder +date: 2023-03-13 +tags: + - thing + - wotsit +draft: true +--- diff --git a/content/posts/wuthering-heights.md b/content/posts/wuthering-heights.md new file mode 100644 index 0000000..fab7e62 --- /dev/null +++ b/content/posts/wuthering-heights.md @@ -0,0 +1,32 @@ +--- +title: 'Wuthering Heights (2026)' +date: 2026-02-13 +tags: + - film +draft: false +--- + +### Things I enjoyed + +- Though not particularly 'dark skinned', Jacob Elordi is well suited to the role of surly sweaty gigahunk. +- An unashamed fanfic quality which I found amusing. +It honestly felt as if it had been dreamt up by a horny teenager on tumblr at points. + +### Things I didn't enjoy + +- The whole thing had a music video gloss which made the landscape feel incidental. +It felt like a set not something the characters actually inahbited. +Even when they were banging on the moors they didn't seem to get muddy. +This was a problem for me. +- Fundamentally, once you got past the visual glitz and knowingly executed tropes it felt completely emotionally empty. +Given that it's a film about the enduring power of passionate undying love this was also a major problem. + +### Things that intrigued me + +- Jacob Elordi doing the same accent as Christian Bale in The Prestige. + +### Verdict + +48 heaving bosoms out of 100 + +![Grassy fingers in mouth](https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fkeithlovesmovies.com%2Fwp-content%2Fuploads%2F2025%2F09%2FBE_OPT3_clean.jpg&f=1&nofb=1&ipt=a17c1ba002ea1418f85d9cc735fdb258b633a98800e16e2fc9f82f0772ec93e7) diff --git a/public/adventures-in-running-headscale-on-nixos/index.html b/public/adventures-in-running-headscale-on-nixos/index.html new file mode 100644 index 0000000..29e445b --- /dev/null +++ b/public/adventures-in-running-headscale-on-nixos/index.html @@ -0,0 +1,49 @@ + + + + + + + + + + adventures in running headscale on nixos + + +
+
+
+

adventures in running headscale on nixos

+
+

June 25, 2024

+
+
+
+ + + + diff --git a/public/backing-up-nixos-state-with-restic/index.html b/public/backing-up-nixos-state-with-restic/index.html new file mode 100644 index 0000000..879097f --- /dev/null +++ b/public/backing-up-nixos-state-with-restic/index.html @@ -0,0 +1,75 @@ + + + + + + + + + + Backing up nixos state with restic + + +
+
+
+

Backing up nixos state with restic

+
+

February 16, 2026

+
+

I’m writing this so I can hopefully remember what I did in six months.

+

As hard as you try to eliminate all state from your computing life with nixos, the fact remains that you can’t get rid of all of it. +For example, I run forgejo on my VPS. +Now I have my config which means I could set up a forgejo instance just how I like it if everything went to pot. +But that wouldn’t bring back any of the repos I had there previously.

+

This is the method I cooked up for backing up some of those important bits and bob on my VPS.

+
{ config, ... }: {
+  services.restic = {
+    backups."hetzner-storage-box" = {
+      initialize = true;
+      user = "root";
+      passwordFile = "/etc/nixos/secrets/restic";
+      paths = [
+        "${config.services.forgejo.stateDir}"
+      ];
+      repository = "sftp:user@storagebox:/remotelab";
+      extraOptions = [
+        "sftp.command='ssh user@storagebox -i /root/.ssh/id_ed25519 -s sftp'"
+      ];
+      timerConfig = {
+        OnCalendar = "daily";
+        Persistent = true;
+      };
+    };
+  };
+}
+
+
+ + + + diff --git a/public/categories/index.html b/public/categories/index.html index adc039b..3600ffa 100644 --- a/public/categories/index.html +++ b/public/categories/index.html @@ -29,6 +29,8 @@
+Wuthering Heights (2026) + Handy script for a more zen twitch experience Over-engineered (?) nixos blog deployment setup diff --git a/public/categories/index.xml b/public/categories/index.xml index 74e5829..5529707 100644 --- a/public/categories/index.xml +++ b/public/categories/index.xml @@ -11,6 +11,39 @@ + + Wuthering Heights (2026) + https://nonsense.dymc.win/wuthering-heights-2026/ + Fri, 13 Feb 2026 00:00:00 +0000 + + https://nonsense.dymc.win/wuthering-heights-2026/ + <h3 id="things-i-enjoyed">Things I enjoyed</h3> +<ul> +<li>Though not particularly &lsquo;dark skinned&rsquo;, Jacob Elordi is well suited to the role of surly sweaty gigahunk.</li> +<li>An unashamed fanfic quality which I found amusing. +It honestly felt as if it had been dreamt up by a horny teenager on tumblr at points.</li> +</ul> +<h3 id="things-i-didnt-enjoy">Things I didn&rsquo;t enjoy</h3> +<ul> +<li>The whole thing had a music video gloss which made the landscape feel incidental. +It felt like a set not something the characters actually inahbited. +Even when they were banging on the moors they didn&rsquo;t seem to get muddy. +This was a problem for me.</li> +<li>Fundamentally, once you got past the visual glitz and knowingly executed tropes it felt completely emotionally empty. +Given that it&rsquo;s a film about the enduring power of passionate undying love this was also a major problem.</li> +</ul> +<h3 id="things-that-intrigued-me">Things that intrigued me</h3> +<ul> +<li>Jacob Elordi doing the same accent as Christian Bale in The Prestige.</li> +</ul> +<h3 id="verdict">Verdict</h3> +<p>48 heaving bosoms out of 100</p> +<p><img src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fkeithlovesmovies.com%2Fwp-content%2Fuploads%2F2025%2F09%2FBE_OPT3_clean.jpg&amp;f=1&amp;nofb=1&amp;ipt=a17c1ba002ea1418f85d9cc735fdb258b633a98800e16e2fc9f82f0772ec93e7" alt="Grassy fingers in mouth"></p> + + + + + Handy script for a more zen twitch experience https://nonsense.dymc.win/handy-script-for-a-more-zen-twitch-experience/ @@ -49,11 +82,11 @@ Here it is:</p> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># get auth token from twitch</span> </span></span><span class="line"><span class="cl"><span class="nv">ACCESS_TOKEN</span><span class="o">=</span><span class="k">$(</span>curl -s -X POST <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="s2">&#34;https://id.twitch.tv/oauth2/token&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -d <span class="s2">&#34;client_id=</span><span class="nv">$CLIENT_ID</span><span class="s2">&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -d <span class="s2">&#34;client_secret=</span><span class="nv">$CLIENT_SECRET</span><span class="s2">&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -d <span class="s2">&#34;grant_type=client_credentials&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="p">|</span> jq -r <span class="s1">&#39;.access_token&#39;</span><span class="k">)</span> +</span></span></span><span class="line"><span class="cl"> <span class="s2">&#34;https://id.twitch.tv/oauth2/token&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -d <span class="s2">&#34;client_id=</span><span class="nv">$CLIENT_ID</span><span class="s2">&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -d <span class="s2">&#34;client_secret=</span><span class="nv">$CLIENT_SECRET</span><span class="s2">&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -d <span class="s2">&#34;grant_type=client_credentials&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> <span class="p">|</span> jq -r <span class="s1">&#39;.access_token&#39;</span><span class="k">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># define empty list</span> </span></span><span class="line"><span class="cl"><span class="nv">LIVE</span><span class="o">=()</span> @@ -61,8 +94,8 @@ Here it is:</p> </span></span><span class="line"><span class="cl"><span class="c1"># loop through streams, check if live and append info to list</span> </span></span><span class="line"><span class="cl"><span class="k">for</span> STREAM in <span class="s2">&#34;</span><span class="si">${</span><span class="nv">STREAMS</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">do</span> </span></span><span class="line"><span class="cl"> <span class="nv">RESPONSE</span><span class="o">=</span><span class="k">$(</span>curl -s -H <span class="s2">&#34;Client-ID: </span><span class="nv">$CLIENT_ID</span><span class="s2">&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -H <span class="s2">&#34;Authorization: Bearer </span><span class="nv">$ACCESS_TOKEN</span><span class="s2">&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="s2">&#34;https://api.twitch.tv/helix/streams?user_login=</span><span class="nv">$STREAM</span><span class="s2">&#34;</span><span class="k">)</span> +</span></span></span><span class="line"><span class="cl"> -H <span class="s2">&#34;Authorization: Bearer </span><span class="nv">$ACCESS_TOKEN</span><span class="s2">&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> <span class="s2">&#34;https://api.twitch.tv/helix/streams?user_login=</span><span class="nv">$STREAM</span><span class="s2">&#34;</span><span class="k">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nv">LIVE_STATUS</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$RESPONSE</span><span class="s2">&#34;</span> <span class="p">|</span> jq <span class="s1">&#39;.data | length&#39;</span><span class="k">)</span> </span></span><span class="line"><span class="cl"> @@ -375,12 +408,12 @@ After moving across most of my stuff I came across the problem of how to hook th </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">stylesheet</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">)</span> <span class="o">===</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// update stylesheet -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// update stylesheet -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> @@ -393,16 +426,16 @@ After moving across most of my stuff I came across the problem of how to hook th </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">stylesheet</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">)</span> <span class="o">===</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// update stylesheet -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="c1">// store theme -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">setItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">setItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">,</span> <span class="s1">&#39;/light.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// update stylesheet -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="c1">// store theme -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">setItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">setItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">,</span> <span class="s1">&#39;/dark.css&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> @@ -410,11 +443,11 @@ After moving across most of my stuff I came across the problem of how to hook th <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s1">&#39;load&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// get stored style -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kd">var</span> <span class="nx">storedStyle</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">getItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">);</span> +</span></span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">storedStyle</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">getItem</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">stylesheet</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;stylesheet&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1">// set stored style if it exists -</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">if</span> <span class="p">(</span><span class="nx">storedStyle</span><span class="p">)</span> <span class="p">{</span> +</span></span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nx">storedStyle</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">stylesheet</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">&#39;href&#39;</span><span class="p">,</span> <span class="nx">storedStyle</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">});</span> @@ -741,11 +774,11 @@ After moving across most of my stuff I came across the problem of how to hook th </span></span></span></code></pre></div><p>Also, this is what it would look like as a simple old <code>docker run</code>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">$ docker pull searxng/searxng </span></span><span class="line"><span class="cl">$ docker run --rm <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -d -p 8080:8080 <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -v <span class="s2">&#34;/srv/searxng:/etc/searxng&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -e <span class="s2">&#34;BASE_URL=http://searx.jdysmcl.xyz/&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> -e <span class="s2">&#34;INSTANCE_NAME=go on big boy dont be shy&#34;</span> <span class="se">\ -</span></span></span><span class="line"><span class="cl"><span class="se"></span> searxng/searxng +</span></span></span><span class="line"><span class="cl"> -d -p 8080:8080 <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -v <span class="s2">&#34;/srv/searxng:/etc/searxng&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -e <span class="s2">&#34;BASE_URL=http://searx.jdysmcl.xyz/&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> -e <span class="s2">&#34;INSTANCE_NAME=go on big boy dont be shy&#34;</span> <span class="se">\ +</span></span></span><span class="line"><span class="cl"> searxng/searxng </span></span></code></pre></div><h3 id="bits-and-bobs">bits and bobs</h3> <p>As you can see, nix very kindly provides you with convenient options for the most essential tasks: mounting volumes, exposing ports, passing environment variables etc. But what about some more niche configurations that aren&rsquo;t exposed in <a href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/oci-containers.nix">oci-containers.nix</a>. As far as I can tell, your best bet in these scenarios is <code>virtualisation.oci-containers.containers.&lt;name&gt;.extraOptions</code>; this lets you pass a list of command line arguments to your docker run command. For example, I had this in my config for a vpn container.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="n">virtualisation</span><span class="o">.</span><span class="n">oci-containers</span><span class="o">.</span><span class="n">containers</span><span class="o">.</span><span class="s2">&#34;vpn&#34;</span><span class="o">.</span><span class="n">extraOptions</span> <span class="o">=</span> <span class="p">[</span> diff --git a/public/configuring-a-dynamic-modern-and-minimal-diy-wayland-desktop-environment-with-home-manager/index.html b/public/configuring-a-dynamic-modern-and-minimal-diy-wayland-desktop-environment-with-home-manager/index.html new file mode 100644 index 0000000..02b6ead --- /dev/null +++ b/public/configuring-a-dynamic-modern-and-minimal-diy-wayland-desktop-environment-with-home-manager/index.html @@ -0,0 +1,56 @@ + + + + + + + + + + configuring a dynamic, modern, and minimal DIY wayland desktop environment with home-manager + + +
+
+
+

configuring a dynamic, modern, and minimal DIY wayland desktop environment with home-manager

+
+

June 25, 2023

+
+

components

+
    +
  • hyprland (window manager)
  • +
  • waybar (bar)
  • +
  • wofi (application launcher)
  • +
  • mako (notification daemon)
  • +
+
+
+
+ + made with hugo + + + + +
+ + + diff --git a/public/handy-script-for-a-more-zen-twitch-experience/index.html b/public/handy-script-for-a-more-zen-twitch-experience/index.html index db7de82..8aabbf8 100644 --- a/public/handy-script-for-a-more-zen-twitch-experience/index.html +++ b/public/handy-script-for-a-more-zen-twitch-experience/index.html @@ -66,11 +66,11 @@ Here it is:

# get auth token from twitch ACCESS_TOKEN=$(curl -s -X POST \ - "https://id.twitch.tv/oauth2/token" \ - -d "client_id=$CLIENT_ID" \ - -d "client_secret=$CLIENT_SECRET" \ - -d "grant_type=client_credentials" \ - | jq -r '.access_token') + "https://id.twitch.tv/oauth2/token" \ + -d "client_id=$CLIENT_ID" \ + -d "client_secret=$CLIENT_SECRET" \ + -d "grant_type=client_credentials" \ + | jq -r '.access_token') # define empty list LIVE=() @@ -78,8 +78,8 @@ Here it is:

# loop through streams, check if live and append info to list for STREAM in "${STREAMS[@]}"; do RESPONSE=$(curl -s -H "Client-ID: $CLIENT_ID" \ - -H "Authorization: Bearer $ACCESS_TOKEN" \ - "https://api.twitch.tv/helix/streams?user_login=$STREAM") + -H "Authorization: Bearer $ACCESS_TOKEN" \ + "https://api.twitch.tv/helix/streams?user_login=$STREAM") LIVE_STATUS=$(echo "$RESPONSE" | jq '.data | length') diff --git a/public/index.html b/public/index.html index 2cc1a47..084e1da 100644 --- a/public/index.html +++ b/public/index.html @@ -1,6 +1,6 @@ - + @@ -30,6 +30,32 @@
+
+

Wuthering Heights (2026)

+

Feb 13, 2026

+

Things I enjoyed

+
    +
  • Though not particularly ‘dark skinned’, Jacob Elordi is well suited to the role of surly sweaty gigahunk.
  • +
  • An unashamed fanfic quality which I found amusing. +It honestly felt as if it had been dreamt up by a horny teenager on tumblr at points.
  • +
+

Things I didn’t enjoy

+
    +
  • The whole thing had a music video gloss which made the landscape feel incidental. +It felt like a set not something the characters actually inahbited. +Even when they were banging on the moors they didn’t seem to get muddy. +This was a problem for me.
  • +
  • Fundamentally, once you got past the visual glitz and knowingly executed tropes it felt completely emotionally empty. +Given that it’s a film about the enduring power of passionate undying love this was also a major problem.
  • +
+

Things that intrigued me

+
    +
  • Jacob Elordi doing the same accent as Christian Bale in The Prestige.
  • +
+

Verdict

+

48 heaving bosoms out of 100

+
+

Handy script for a more zen twitch experience

Aug 13, 2025

@@ -67,12 +93,6 @@ I would recommend sticking to plugins with a smaller scope though.

After moving across most of my stuff I came across the problem of how to hook things up with with nix-colors so that my neovim theme would follow color changes in home-manager.

-
-

Vanilla javascript theme toggle for simpletons

-

Jun 26, 2023

-

Sometimes when I’m trawling the internet and happen upon a particularly nice looking website, I develop css and javascript FOMO. The thing I’ve been lusting after above all else is one of those fancy little dark theme toggle buttons. As you can probably tell from the website you’re looking at my web dev skills are limited. As a result of this I had assumed such niceties were out of reach.

-
-