<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>I have a quest!</title>
    <link>https://ihavea.quest/</link>
    <description>Recent content on I have a quest!</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>txtsd@ihavea.quest (txtsd)</managingEditor>
    <webMaster>txtsd@ihavea.quest (txtsd)</webMaster>
    <lastBuildDate>Wed, 04 Sep 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://ihavea.quest/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Fixing DNS issues on the Arch cloud image on Digital Ocean</title>
      <link>https://ihavea.quest/blog/2024-09-04-digital-ocean-arch-dns/</link>
      <pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2024-09-04-digital-ocean-arch-dns/</guid>
      <description>&lt;h2 id=&#34;the-issue&#34;&gt;The issue&lt;/h2&gt;
&lt;p&gt;When running an &lt;a href=&#34;https://wiki.archlinux.org/title/Arch_Linux_on_a_VPS#Official_Arch_Linux_cloud_image&#34;&gt;Arch cloud image&lt;/a&gt; on Digital Ocean, DNS lookups frequently fail or take an unreasonably long time to resolve.&lt;/p&gt;
&lt;p&gt;Look at this insanely long query time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl query archlinux.org
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;archlinux.org: 95.217.163.246                  -- link: eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               2a01:4f9:c010:6b1f::1           -- link: eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Information acquired via protocol DNS in 13.3339s.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Data is authenticated: no; Data was acquired via local or encrypted transport: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Data from: network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And this query just fails:&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-issue&#34;&gt;The issue&lt;/h2&gt;
&lt;p&gt;When running an &lt;a href=&#34;https://wiki.archlinux.org/title/Arch_Linux_on_a_VPS#Official_Arch_Linux_cloud_image&#34;&gt;Arch cloud image&lt;/a&gt; on Digital Ocean, DNS lookups frequently fail or take an unreasonably long time to resolve.&lt;/p&gt;
&lt;p&gt;Look at this insanely long query time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl query archlinux.org
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;archlinux.org: 95.217.163.246                  -- link: eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               2a01:4f9:c010:6b1f::1           -- link: eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Information acquired via protocol DNS in 13.3339s.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Data is authenticated: no; Data was acquired via local or encrypted transport: yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-- Data from: network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And this query just fails:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl query badsig.go.dnscheck.tools
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;badsig.go.dnscheck.tools: resolve call failed: DNSSEC validation failed: failed-auxiliary
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;System updates are also slow due to mirrors taking long to resolve, and docker images don&amp;rsquo;t build correctly. I use run &lt;a href=&#34;https://www.linuxserver.io/&#34;&gt;linuxserver.io&lt;/a&gt;&amp;rsquo;s &lt;a href=&#34;https://github.com/linuxserver/docker-swag&#34;&gt;SWAG&lt;/a&gt; with the &lt;a href=&#34;https://github.com/linuxserver/docker-mods/tree/swag-imagemagick&#34;&gt;imagemagick mod&lt;/a&gt;, and this mod in particular was failing to download and get added to the image.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ sudo docker compose -f docker-compose.yml up -d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[+] Running 1/1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ✔ Container swag  Started                              0.7s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ sudo docker logs -f swag
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[mod-init] Running Docker Modification Logic
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[mod-init] Adding linuxserver/mods:swag-imagemagick to container
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[mod-init] Downloading linuxserver/mods:swag-imagemagick from lscr.io
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[mod-init] Installing linuxserver/mods:swag-imagemagick
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[mod-init] linuxserver/mods:swag-imagemagick applied to container
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[migrations] started
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[migrations] 01-nginx-site-confs-default: skipped
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[migrations] done
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ██╗     ███████╗██╗ ██████╗
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ██║     ██╔════╝██║██╔═══██╗
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ██║     ███████╗██║██║   ██║
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ██║     ╚════██║██║██║   ██║
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ███████╗███████║██║╚██████╔╝
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ╚══════╝╚══════╝╚═╝ ╚═════╝
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Brought to you by linuxserver.io
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To support the app dev(s) visit:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Certbot: https://supporters.eff.org/donate/support-work-on-certbot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To support LSIO projects visit:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;https://www.linuxserver.io/donate/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GID/UID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User UID:    1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User GID:    1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Linuxserver.io version: 2.11.0-ls322
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Build-date: 2024-09-02T20:57:08+00:00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;───────────────────────────────────────
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;using keys found in /config/keys
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Variables set:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PUID=1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PGID=1000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TZ=Etc/UTC
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;URL=&amp;lt;snip&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VALIDATION=http
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CERTPROVIDER=
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DNSPLUGIN=
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EMAIL=
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STAGING=false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Using Let&amp;#39;s Encrypt as the cert provider
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http validation is selected
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Certificate exists; parameters unchanged; starting nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The cert does not expire within the next day. Letting the cron script handle the renewal attempts overnight (2:08am).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;**** adding imagemagick to package install list ****
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[pkg-install-init] **** Installing all mod packages ****
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fetch http://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fetch http://dl-cdn.alpinelinux.org/alpine/v3.20/community/x86_64/APKINDEX.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WARNING: fetching http://dl-cdn.alpinelinux.org/alpine/v3.20/main: temporary error (try again later)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WARNING: fetching http://dl-cdn.alpinelinux.org/alpine/v3.20/community: temporary error (try again later)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ERROR: unable to select packages:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  imagemagick (no such package):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    required by: world[imagemagick]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  php83-pecl-imagick (no such package):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    required by: world[php83-pecl-imagick]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[custom-init] No custom files found, skipping...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[ls.io-init] done.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Server ready
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Welp! No imagemagick in the container means my clients won&amp;rsquo;t have imagick on their Wordpress servers.&lt;/p&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;When I first started to debug this, I asked on &lt;a href=&#34;ircs://irc.libera.chat:6697/archlinux&#34;&gt;#archlinux&lt;/a&gt; at &lt;a href=&#34;https://libera.chat/&#34;&gt;Libera&lt;/a&gt;, thinking it was a bug in the cloud image itself. It isn&amp;rsquo;t. I was told to disable DNSSEC, which technically solves the problem, but is not a viable solution as we&amp;rsquo;re lowering security.&lt;/p&gt;
&lt;p&gt;Arch uses systemd-resolved by default for network resolution. Running &lt;code&gt;resolvectl&lt;/code&gt; shows us:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Global
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resolv.conf mode: stub
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Current DNS Server: 1.1.1.1#cloudflare-dns.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         DNS Servers: 1.1.1.1#cloudflare-dns.com 67.207.67.3 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      2606:4700:4700::1111#cloudflare-dns.com 2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 2 (eth0)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Current DNS Server: 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       DNS Servers: 67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 3 (eth1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Current DNS Server: 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       DNS Servers: 67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It looks like Digital Ocean&amp;rsquo;s own DNS servers are being added to the list of DNS servers.&lt;/p&gt;
&lt;p&gt;The next step was to search the OS for any files containing those IP addresses to find out what config file it&amp;rsquo;s in to learn what might be causing it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ sudo rg -i &amp;#34;67\.207\.67\.2&amp;#34; /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/var/lib/cloud/instances/385249616/vendor-data.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;31:printf &amp;#34;[Resolve]\nDNS=67.207.67.3 67.207.67.2\n&amp;#34; &amp;gt; /etc/systemd/resolved.conf.d/DigitalOcean.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/var/lib/cloud/instances/385249616/vendor-data.txt.i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;32:printf &amp;#34;[Resolve]\nDNS=67.207.67.3 67.207.67.2\n&amp;#34; &amp;gt; /etc/systemd/resolved.conf.d/DigitalOcean.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/var/lib/cloud/instances/385249616/boothooks/resolver-fix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6:printf &amp;#34;[Resolve]\nDNS=67.207.67.3 67.207.67.2\n&amp;#34; &amp;gt; /etc/systemd/resolved.conf.d/DigitalOcean.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/var/log/cloud-init-output.log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20:ci-info: |   2   |  67.207.67.2  | 143.110.176.1 | 255.255.255.255 |    eth0   |  UGH  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;129:ci-info: |   2   |  67.207.67.2  | 143.110.176.1 | 255.255.255.255 |    eth0   |  UGH  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;167:ci-info: |   2   |  67.207.67.2  | 143.110.176.1 | 255.255.255.255 |    eth0   |  UGH  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;205:ci-info: |   2   |  67.207.67.2  | 143.110.176.1 | 255.255.255.255 |    eth0   |  UGH  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;243:ci-info: |   2   |  67.207.67.2  | 143.110.176.1 | 255.255.255.255 |    eth0   |  UGH  |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;262:+ printf &amp;#39;[Resolve]\nDNS=67.207.67.3 67.207.67.2\n&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/netif/links/2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;15:DNS=67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/netif/links/3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;15:DNS=67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/netif/leases/2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11:DNS=67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/netif/leases/3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11:DNS=67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/netif/state
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8:DNS=67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/run/systemd/resolve/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;18:nameserver 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;21:nameserver 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What in the world? What&amp;rsquo;s cloud-init?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ pacman -Ss cloud-init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;extra/cloud-init 24.2-1 [installed]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Cloud instance initialization
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Turns out &lt;a href=&#34;https://wiki.archlinux.org/title/Cloud-init&#34;&gt;it&amp;rsquo;s a package&lt;/a&gt; that contains utilities for early initialization of cloud instances, and is needed in Arch Linux images that are built with the intention of being launched in cloud environments.&lt;/p&gt;
&lt;p&gt;Okay, so there must be a way to have it not inject Digital Ocean&amp;rsquo;s DNS IPs, right?&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://docs.cloud-init.io/en/latest/reference/modules.html#resolv-conf&#34;&gt;cloud-init docs say&lt;/a&gt; setting &lt;code&gt;manage_resolv_conf&lt;/code&gt; must be set to true in order for a &lt;code&gt;resolv_conf&lt;/code&gt; section to be applied.&lt;/p&gt;
&lt;p&gt;Alright, let&amp;rsquo;s check the cloud-init config file.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ cat /etc/cloud/cloud.cfg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The top level settings are used as module
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# and base configuration.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# A set of users which may be applied and/or used by various modules
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# when a &amp;#39;default&amp;#39; entry is found it will reference the &amp;#39;default_user&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# from the distro configuration specified below
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;users:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# If this is set, &amp;#39;root&amp;#39; will not be able to ssh in and they
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# will get a message to login instead as the default $user
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disable_root: true
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# This will cause the set+update hostname module to not operate (if true)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;preserve_hostname: false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# If you use datasource_list array, keep array items in a single line.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# If you use multi line array, ds-identify script won&amp;#39;t read array items.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Example datasource config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# datasource:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#   Ec2:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#     metadata_urls: [ &amp;#39;blah.com&amp;#39; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#     timeout: 5 # (defaults to 50 seconds)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#     max_wait: 10 # (defaults to 120 seconds)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The modules that run in the &amp;#39;init&amp;#39; stage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cloud_init_modules:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - seed_random
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - bootcmd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - write_files
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - growpart
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - resizefs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - disk_setup
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - mounts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - set_hostname
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - update_hostname
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - update_etc_hosts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ca_certs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - users_groups
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ssh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - set_passwords
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The modules that run in the &amp;#39;config&amp;#39; stage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cloud_config_modules:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ssh_import_id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - keyboard
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - locale
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ntp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - timezone
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - disable_ec2_metadata
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - runcmd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# The modules that run in the &amp;#39;final&amp;#39; stage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cloud_final_modules:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - package_update_upgrade_install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - write_files_deferred
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - puppet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - chef
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ansible
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - mcollective
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - salt_minion
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - reset_rmc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - scripts_vendor
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - scripts_per_once
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - scripts_per_boot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - scripts_per_instance
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - scripts_user
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - ssh_authkey_fingerprints
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - keys_to_console
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - install_hotplug
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - phone_home
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - final_message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - power_state_change
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# System and/or distro specific settings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# (not accessible to handlers/transforms)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;system_info:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  # This will affect which distro class gets used
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  distro: arch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  # Default user name + that default users groups (if added/used)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  default_user:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name: arch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lock_passwd: True
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gecos: arch Cloud User
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    groups: [wheel, users]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sudo: [&amp;#34;ALL=(ALL) NOPASSWD:ALL&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shell: /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  # Other config here will be given to the distro class and/or path classes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  paths:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cloud_dir: /var/lib/cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    templates_dir: /etc/cloud/templates/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ssh_svcname: sshd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No &lt;code&gt;resolv_conf&lt;/code&gt; section in here. And sure enough, adding &lt;code&gt;manage_resolv_conf: false&lt;/code&gt; does nothing either.&lt;/p&gt;
&lt;p&gt;We saw this file earlier &lt;code&gt;/var/lib/cloud/instances/385249616/boothooks/resolver-fix&lt;/code&gt; in the search log earlier. Let&amp;rsquo;s see what it does.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ sudo cat /var/lib/cloud/instances/385249616/boothooks/resolver-fix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#!/bin/sh -x
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# DigitalOcean resolver fixup script
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[ -f /etc/systemd/resolved.conf ] || exit 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;logger -t DigitalOcean &amp;#39;writing resolvers  to /etc/systemd/resolved.conf.d/DigitalOcean.conf&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p /etc/systemd/resolved.conf.d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf &amp;#34;[Resolve]\nDNS=67.207.67.3 67.207.67.2\n&amp;#34; &amp;gt; /etc/systemd/resolved.conf.d/DigitalOcean.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl try-reload-or-restart systemd-resolved
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;JFC. It adds the DNS IPs as part of the cloud-init process at boot.&lt;/p&gt;
&lt;p&gt;Searching for this on DuckDuckGo led nowhere. So I *shudder* searched on Google, which surprisingly yielded a &lt;a href=&#34;https://blog.desmg.com/wp/1314.html&#34;&gt;Chinese blog post&lt;/a&gt; with what seemed like a solution. The author is impressed by the Digital Ocean Customer Support Staff&amp;rsquo;s confusion and inability to solve two support tickets about this.&lt;/p&gt;
&lt;p&gt;The blog post suggests creating a &lt;a href=&#34;https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html&#34;&gt;systemd service file&lt;/a&gt; to remove the offending config file before and whenever &lt;code&gt;systemd-resolved.service&lt;/code&gt; is started, stopped, or reloaded.&lt;/p&gt;
&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s create a file &lt;code&gt;/etc/systemd/system/remove-systemd-resolved-conf-d.service&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;[Unit]
Description=remove-systemd-resolved-conf-d.service

[Service]
Type=oneshot
ExecStartPre=rm -rf /etc/systemd/resolved.conf.d
ExecStart=rm -rf /etc/systemd/resolved.conf.d
ExecStop=rm -rf /etc/systemd/resolved.conf.d
ExecReload=rm -rf /etc/systemd/resolved.conf.d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then make &lt;code&gt;systemd-resolved.service&lt;/code&gt; want it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ systemctl add-wants systemd-resolved.service remove-systemd-resolved-conf-d.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ systemctl restart systemd-resolved.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now run &lt;code&gt;resolvectl&lt;/code&gt; to check.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Global
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resolv.conf mode: stub
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         DNS Servers: 1.1.1.1#cloudflare-dns.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      2606:4700:4700::1111#cloudflare-dns.com 2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 2 (eth0)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Current DNS Server: 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       DNS Servers: 67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 3 (eth1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: +DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Current DNS Server: 67.207.67.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       DNS Servers: 67.207.67.2 67.207.67.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Okay good. The offending DNS server IPs are gone from the &lt;code&gt;Global&lt;/code&gt; section, and it stays this way even after a reboot.&lt;/p&gt;
&lt;p&gt;The two network interfaces are still using those IPs though, and DNS resolution isn&amp;rsquo;t any better than before.&lt;/p&gt;
&lt;p&gt;There are no other relevant files with these IPs in them so this time they must be being pulled dynamically.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look in &lt;code&gt;/etc/systemd/network/&lt;/code&gt; to see if these interfaces are defined there.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ eza -gal /etc/systemd/network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.rw-r--r-- 110 systemd-network systemd-network  4 Sep 12:52 10-cloud-init-eth0.network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.rw-r--r-- 111 systemd-network systemd-network  4 Sep 12:52 10-cloud-init-eth1.network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yep!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see what&amp;rsquo;s inside them.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ cat /etc/systemd/network/10-cloud-init-eth0.network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Link]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MTUBytes=1500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Match]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MACAddress=c7:6a:4c:84:f1:d5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name=eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Network]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DHCP=ipv4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ cat /etc/systemd/network/10-cloud-init-eth1.network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Link]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MTUBytes=1500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Match]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MACAddress=da:e9:9c:92:74:3d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name=eth1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Network]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DHCP=ipv4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;They&amp;rsquo;re using DHCP, so the DHCP server must be providing the DNS addresses.&lt;/p&gt;
&lt;p&gt;This is an easy enough fix.&lt;/p&gt;
&lt;p&gt;Just add &lt;code&gt;UseDNS=no&lt;/code&gt; in both files.&lt;/p&gt;
&lt;p&gt;They should look like this now:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ cat /etc/systemd/network/10-cloud-init-eth0.network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Link]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MTUBytes=1500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Match]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MACAddress=c7:6a:4c:84:f1:d5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name=eth0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Network]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DHCP=ipv4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[DHCPv4]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UseDNS=no
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ cat /etc/systemd/network/10-cloud-init-eth1.network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Link]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MTUBytes=1500
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Match]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MACAddress=da:e9:9c:92:74:3d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name=eth1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Network]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DHCP=ipv4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[DHCPv4]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UseDNS=no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reload your network, and your DNS resolution woes should be yesterday&amp;rsquo;s news.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ systemctl reload systemd-resolved.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s check &lt;code&gt;resolvectl&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;λ resolvectl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Global
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Protocols: +LLMNR +mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resolv.conf mode: stub
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Current DNS Server: 1.1.1.1#cloudflare-dns.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         DNS Servers: 1.1.1.1#cloudflare-dns.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 9.9.9.9#dns.quad9.net 8.8.8.8#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      2606:4700:4700::1111#cloudflare-dns.com 2620:fe::9#dns.quad9.net 2001:4860:4860::8888#dns.google
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 2 (eth0)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: -DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Link 3 (eth1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Current Scopes: LLMNR/IPv4 LLMNR/IPv6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Protocols: -DefaultRoute +LLMNR -mDNS +DNSOverTLS DNSSEC=yes/supported
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Awesome!&lt;/p&gt;
&lt;p&gt;The linuxserver mod downloads and builds sucessfully now, and resolving domains takes milliseconds.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Imagine 💭</title>
      <link>https://ihavea.quest/blog/2023-30-12-imagine/</link>
      <pubDate>Sat, 30 Dec 2023 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2023-30-12-imagine/</guid>
      <description>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;
&lt;p&gt;Imagine you attain &lt;a href=&#34;https://en.wikipedia.org/wiki/Self-awareness&#34;&gt;self-awareness&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You are not your thoughts. You are not your feelings. You can consciously perceive yourself in your surroundings and within yourself.&lt;/p&gt;
&lt;p&gt;There is the you that is the personal narrative—objective facts, subjective details, social roles, gender roles.&lt;/p&gt;
&lt;p&gt;There is the you that is the inner monologue—actively assessing, questioning, judging, reasoning, and rationalizing any given moment, situation or behavior.&lt;/p&gt;
&lt;p&gt;There is the you that is the observational self—hearing your inner voice, seeing in your mind&amp;rsquo;s eye, perceiving emotions within their situational context, maintaining mental flexibility, committing to value congruent action.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;
&lt;p&gt;Imagine you attain &lt;a href=&#34;https://en.wikipedia.org/wiki/Self-awareness&#34;&gt;self-awareness&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You are not your thoughts. You are not your feelings. You can consciously perceive yourself in your surroundings and within yourself.&lt;/p&gt;
&lt;p&gt;There is the you that is the personal narrative—objective facts, subjective details, social roles, gender roles.&lt;/p&gt;
&lt;p&gt;There is the you that is the inner monologue—actively assessing, questioning, judging, reasoning, and rationalizing any given moment, situation or behavior.&lt;/p&gt;
&lt;p&gt;There is the you that is the observational self—hearing your inner voice, seeing in your mind&amp;rsquo;s eye, perceiving emotions within their situational context, maintaining mental flexibility, committing to value congruent action.&lt;/p&gt;
&lt;h2 id=&#34;paradigm-shift&#34;&gt;Paradigm Shift&lt;/h2&gt;
&lt;p&gt;Imagine.&lt;/p&gt;
&lt;p&gt;You are not a product of your environment, a dissociated husk of a human, maladapted to life since birth.&lt;/p&gt;
&lt;p&gt;You are not the choices you made, an anxiety-laden survival-mode zombie on autopilot, unable to stick to your ideals when it really mattered.&lt;/p&gt;
&lt;p&gt;You are not the delusions you lived, a fool—convinced that whatever you were feeling, your interpretations of those feelings, your mental gymnastics justifying your intended solution to those interpretations, and your subsequent actions, were absolute and grounded in reason &amp;amp; rationality—narcissistic enough to prioritize your own &lt;del&gt;needs&lt;/del&gt; wants over your child&amp;rsquo;s needs, unable to change despite wallowing in guilt over seeing your parents&amp;rsquo; worst qualities in yourself.&lt;/p&gt;
&lt;p&gt;You are not the pain you caused yourself and others, a prisoner in an eternal recurrence of sabotage and self-sabotage, unable to learn, grow, and exit the loop.&lt;/p&gt;
&lt;p&gt;You are not the labels you assigned yourself in order to try and understand yourself better, a relatively inflexible mélange, unable to grant yourself the liberty to do things differently.&lt;/p&gt;
&lt;p&gt;You are not the violent, belligerent, sexually aggressive, manipulative, sinister, oppressive monster you&amp;rsquo;ve always thought you were, a repressed neutron star of what-ifs, a &lt;a href=&#34;https://en.wikipedia.org/wiki/Shadow_(psychology)&#34;&gt;shadow&lt;/a&gt;, manifested from the fear of possibilities, unable to experience true happiness.&lt;/p&gt;
&lt;p&gt;You are not the victim you always thought you were, a poor soul, misunderstood and mistreated, debilitated and traumatized, miserable and worthless, unable to encourage yourself to try harder.&lt;/p&gt;
&lt;p&gt;Imagine.&lt;/p&gt;
&lt;h2 id=&#34;reify&#34;&gt;Reify&lt;/h2&gt;
&lt;p&gt;Imagine you are given a cosmic choice. You could return to your 6 year old self (the brain is 90% developed by then) with this newly attained self-awareness, or you could return to your 25 year old self (the prefrontal cortex is fully developed by then) instead. If you return to your 6 year old self, your brain will only be able to tap into as much self-awareness as it can from the available neurons at any given point in time, so your skill will grow with time until you have enough grey matter to tap into it completely. If, however, you return to your 25 year old self, your brain is already fully developed and equipped to utilize your temporally acquired skill-set. You will lose all your memories from after the point in time that you choose.&lt;/p&gt;
&lt;p&gt;Imagine you aren&amp;rsquo;t allowed to live your life any further than this point. It is considered a cosmic mercy—a reward for attaining self-awareness. You&amp;rsquo;ve been given the chance to live differently, able to cope with life adaptively. Which would you choose? Would you go 6 to live a longer fuller life? Or would you go 25 because you cherish the serendipitous connections you made, and you&amp;rsquo;d rather not live a life that is possibly devoid of them.&lt;/p&gt;
&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;
&lt;p&gt;Imagine you are 6. It is your first day of Grade 2. Your school has injudiciously transferred only you to a different section in your grade. Your day is spent navigating a dissonant plasma of betrayal, sadness, abandonment, loneliness, and pain. You go home and tell your parents. Your dad heroically shows up at school next day and intimidates the headmistress with his imposing demeanor. You are transferred back to your original section, reunited with your friends. Yet, amid the return to normalcy, your parents fail to address a single one of your feelings or teach you how to deal with them.&lt;/p&gt;
&lt;p&gt;Imagine you are 9. You have to move to a different country because of your dad&amp;rsquo;s work. You enjoy the idea—the excitement around new uncertainties, the new children you will get to meet, the change in environment. But your parents involve you in their worries about being able to get you into a school that&amp;rsquo;s at least as good enough as your current one. Not a single word is said about how to deal with these unnecessarily imparted anxious thoughts.&lt;/p&gt;
&lt;p&gt;Imagine you are 11. You are being terrorized by a new uncompromisingly stringent catholic nun, an English teacher. She punishes you in front of the entire class for your frightened defensive behavior. You run a stress fever for the first time in your life. But your parents do not show you how to navigate this agony, choosing instead to go with your suggestion of transferring you to a boarding school, which they have repeatedly used as a threat growing up.&lt;/p&gt;
&lt;p&gt;Imagine you are 14. Your hormones wreak havoc on your body.&lt;br&gt;
Boner? Harder than tungsten-carbide and perpetual.&lt;br&gt;
Face? You mean there&amp;rsquo;s a face under all that acne?&lt;br&gt;
Thoughts? 20% schoolwork. 80% mental gymnastics justifying sexual thoughts in a catholic context and then surfing them.&lt;br&gt;
Coping strategies? Cognitive dissonance and possibly unhealthy amounts of fapping.&lt;br&gt;
You like this girl at school. It&amp;rsquo;s a boys&amp;rsquo; boarding school. She&amp;rsquo;s the daughter of a teacher who lives on campus. She&amp;rsquo;s cute as fuck and you can&amp;rsquo;t stop thinking about her. You bravely approach her one day on the way to her school bus and tell her you like her. You don&amp;rsquo;t look at her during this conversation. You look at the ground. You&amp;rsquo;ve never had any self-esteem and you don&amp;rsquo;t know what it is. You don&amp;rsquo;t even remember what she says. You develop a stutter shortly after. You experience &lt;a href=&#34;https://neuro.psychiatryonline.org/doi/10.1176/jnp.13.3.380&#34;&gt;psychogenic hemifacial spasms&lt;/a&gt;—smiles that turn into uncontrollable rapid twitches—at the slightest signs of stress. Your undiagnosed sleep apnea has gotten so bad, your classmates tell you they insert a &lt;a href=&#34;https://en.wikipedia.org/wiki/Vicks_VapoRub&#34;&gt;mentholated topical ointment&lt;/a&gt; right up your nostrils at night to make you stop snoring so they can attempt to sleep. You tell your parents nothing, because in the 14 years you&amp;rsquo;ve been alive, they&amp;rsquo;ve vehemently disagreed with everything you&amp;rsquo;ve said that didn&amp;rsquo;t align with their worldview, taught you nothing of value, mocked you for not knowing what &lt;em&gt;they&lt;/em&gt; should&amp;rsquo;ve taught you in the first place, denied the possibility of any alternative thought, and made you want to run away &lt;em&gt;and&lt;/em&gt; kill yourself with their oppressive parenting styles.&lt;/p&gt;
&lt;p&gt;Imagine you are 16. Your relationship with your parents up to this point has just been one of emotional bankruptcy. The altercations are frequent. The beating isn&amp;rsquo;t uncommon. You&amp;rsquo;ve been hit with leather belts, switches, plastic rulers, wooden rulers, steel rulers, mom hands, ginormous dad hands, slippers, a cricket bat. You&amp;rsquo;ve had packs of frozen french fries thrown at you. You&amp;rsquo;ve had molten wax poured onto the backs of your hands. Your mom called you a bastard once, which you laughed off saying &amp;ldquo;pffft the joke&amp;rsquo;s on you&amp;rdquo; but the words did hurt more than sticks and stones ever could. You thought you could take your dad on this one time, but you were sent —instead— flying across the room and over a chair. There is no hope. There is only rage, anguish, and misery from the &lt;a href=&#34;https://en.wikipedia.org/wiki/Traumatic_bonding&#34;&gt;biological jailers&lt;/a&gt; that you live with.&lt;/p&gt;
&lt;p&gt;Imagine you are 21. You are a year away from completing the 5&lt;!-- raw HTML omitted --&gt;th&lt;!-- raw HTML omitted --&gt; year of your 4-year undergrad program. You&amp;rsquo;ve cruised through most of your classes because you learned most of it in high school, and regurgitating all of that was mostly easy. You cheated to get through the rest of your classes because how the flying fuck does anyone even discern methods to solve the problems provided to you on your exams? You&amp;rsquo;ve been failing several classes and it doesn&amp;rsquo;t look like a hurdle that can be crossed. You decide you will delete yourself from Earth after a few months of treating yourself to a good time that you&amp;rsquo;ve never had before in your life. &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Elder_Scrolls_V:_Skyrim&#34;&gt;Skyrim&lt;/a&gt; releases and you play the everloving shit out of it every single minute of every single day that you aren&amp;rsquo;t asleep. You&amp;rsquo;re devastated that you will never get to know how &lt;a href=&#34;https://en.wikipedia.org/wiki/One_Piece_(1999_TV_series)&#34;&gt;One Piece&lt;/a&gt; ends. But the time is near and you must now rage-quit life. You travel across the country and gut yourself à la &lt;a href=&#34;https://en.wikipedia.org/wiki/Seppuku&#34;&gt;harakiri&lt;/a&gt;. 30 minutes later you&amp;rsquo;re still sitting there like a numskull, wondering why you haven&amp;rsquo;t died from blood loss yet and end up calling 911 to come get you because you failed at the one thing that was supposed to liberate you from all your woes.&lt;/p&gt;
&lt;p&gt;Imagine you are 22. You&amp;rsquo;ve been back in your parents&amp;rsquo; prison since you couldn&amp;rsquo;t make it through university (read failed at life). Your dad can&amp;rsquo;t get over the fact that you wasted his money and won&amp;rsquo;t hesitate to tell you so. Your mom &lt;a href=&#34;https://en.wikipedia.org/wiki/Gaslighting&#34;&gt;gaslights&lt;/a&gt; you telling you that&amp;rsquo;s not what he said.&lt;/p&gt;
&lt;p&gt;Imagine you are 23. You mention you intend to attend the local &lt;a href=&#34;https://en.wikipedia.org/wiki/Queer_Azaadi_Mumbai&#34;&gt;Pride Parade&lt;/a&gt; next week. Your mom asks you in the most loathsome tone, &amp;ldquo;Are you LGBT‽&amp;rdquo;. The lack of understanding and associated distaste immediately makes your gut wrench. One expects their parents to at least be understanding of differing peoples, differing lifestyles, and the oppression faced by people for merely being different. But what you get instead is revulsion and disdain, agglomerated on top of the pitiful life you&amp;rsquo;ve lived so far.&lt;br&gt;
There&amp;rsquo;s a catholic priest from the parish doing house visits, as is common in catholic societies. Your mom tells you to stay hidden in your room with the lights out and pretend you don&amp;rsquo;t exist, so she doesn&amp;rsquo;t have to have a conversation with the priest about her son being an atheist. You go along with it because it was painful enough when she spewed &amp;ldquo;Where did we go wrong?&amp;rdquo; the first time you told her about your &lt;a href=&#34;https://en.wikipedia.org/wiki/Apostasy&#34;&gt;deconversion&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Atheism&#34;&gt;atheism&lt;/a&gt;, about &lt;a href=&#34;https://en.wikipedia.org/wiki/Rationality&#34;&gt;rational thought&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Curiosity&#34;&gt;curiosity&lt;/a&gt;, about &lt;a href=&#34;https://en.wikipedia.org/wiki/Dissent&#34;&gt;nonconformity&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Heterodoxy&#34;&gt;heterodoxy&lt;/a&gt;, about &lt;a href=&#34;https://en.wikipedia.org/wiki/Secularism&#34;&gt;secularism&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Cult&#34;&gt;cults&lt;/a&gt;, about the &lt;a href=&#34;https://en.wikipedia.org/wiki/Scientific_method&#34;&gt;scientific method&lt;/a&gt; as a way of life and &lt;a href=&#34;https://en.wikipedia.org/wiki/Critical_thinking&#34;&gt;critical thinking&lt;/a&gt;. There are no words to be had at this point. You&amp;rsquo;ve spent two entire decades expecting unconditional love. In vain. You realize your parents&amp;rsquo; image in their own &lt;a href=&#34;https://en.wikipedia.org/wiki/Roman_Catholic_Diocese_of_Vasai&#34;&gt;regressive backwater society&lt;/a&gt; matters more than your authenticity and mental health ever could.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Imagine you are 24. You&amp;rsquo;ve isolated yourself in your room because not one single person in your vicinity and extended family has anything of value to talk about. It&amp;rsquo;s always vehicles, abodes, wealth, and marriages, tainted with catholicism. Your parents —in their &lt;a href=&#34;https://en.wikipedia.org/wiki/Delusion&#34;&gt;infinite wisdom&lt;/a&gt;— deceptively decide to stick you in a slum of a rehab to make you snap out of your depression and asociality. You spend 3 entire months of your life, including your birthday, living with addicts and half-murderers (colloquial for felons charged with assault and battery) taking refuge in there. To this day, your parents think it was an excellent decision and regret absolutely nothing.&lt;/p&gt;
&lt;p&gt;Imagine. It gets progressively worse from here. Sure, there are good times, and perhaps even great times. All shadowed by ever being unable to remember the good times, by &lt;a href=&#34;https://en.wikipedia.org/wiki/Generalized_anxiety_disorder&#34;&gt;unceasing anxiety&lt;/a&gt;, by &lt;a href=&#34;https://en.wikipedia.org/wiki/Depression_(mood)&#34;&gt;never feeling the joy&lt;/a&gt; you once felt doing the things you love, by the &lt;a href=&#34;https://en.wikipedia.org/wiki/Alexithymia&#34;&gt;limited comprehension and expression of your emotions&lt;/a&gt;, by protective &lt;a href=&#34;https://en.wikipedia.org/wiki/Hypervigilance&#34;&gt;hypervigilance&lt;/a&gt;, by never being able to trust anyone because the kind of people you tend to attract in your life tend to be deceptive as shit, by being a jigsaw piece that fits other broken people perfectly. Imagine.&lt;/p&gt;
&lt;h2 id=&#34;excogitate&#34;&gt;Excogitate&lt;/h2&gt;
&lt;p&gt;Imagine.&lt;/p&gt;
&lt;p&gt;Imagine all of it. Pepper in your own traumas.&lt;br&gt;
Make it wackier, weirder, wickeder, wilder, whatever.&lt;/p&gt;
&lt;p&gt;Submerge yourself in it.&lt;/p&gt;
&lt;p&gt;Think the thoughts. Feel the feelings.&lt;br&gt;
Sit with thoughts. Sit with the feelings.&lt;/p&gt;
&lt;p&gt;Let them brew.&lt;br&gt;
Let them crescendo.&lt;br&gt;
Let them erupt.&lt;/p&gt;
&lt;p&gt;6 or 25?&lt;/p&gt;
&lt;p&gt;Imagine.&lt;/p&gt;
&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;
&lt;h3 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h3&gt;
&lt;p&gt;The intention here is to illustrate the shared experiences some of us endure and to envision the potential for different, more positive lives.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Status Update, December 2022</title>
      <link>https://ihavea.quest/blog/2022-12-28-status-update/</link>
      <pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2022-12-28-status-update/</guid>
      <description>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;A significant chunk of this month and the last were spent being sick. It took a lot out of me.&lt;/p&gt;
&lt;h2 id=&#34;aur-pkgbuild-linting&#34;&gt;AUR PKGBUILD linting&lt;/h2&gt;
&lt;p&gt;All the PKGBUILDs that I maintain and co-maintain on the AUR were linted this month. Bracing variables, using &lt;code&gt;sha256sum&lt;/code&gt;, adding &lt;code&gt;.gitignore&lt;/code&gt; files, and updating maintainer information, were among the things I did.&lt;/p&gt;
&lt;h2 id=&#34;media-library-space-savings&#34;&gt;Media Library Space Savings&lt;/h2&gt;
&lt;h3 id=&#34;videos&#34;&gt;Videos&lt;/h3&gt;
&lt;p&gt;I came across the &lt;a href=&#34;https://gitlab.com/AOMediaCodec/SVT-AV1&#34;&gt;SVT-AV1&lt;/a&gt; encoder earlier this month. It encodes AV1 fast and scales across logical processors.&lt;/p&gt;</description>
      <content>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;A significant chunk of this month and the last were spent being sick. It took a lot out of me.&lt;/p&gt;
&lt;h2 id=&#34;aur-pkgbuild-linting&#34;&gt;AUR PKGBUILD linting&lt;/h2&gt;
&lt;p&gt;All the PKGBUILDs that I maintain and co-maintain on the AUR were linted this month. Bracing variables, using &lt;code&gt;sha256sum&lt;/code&gt;, adding &lt;code&gt;.gitignore&lt;/code&gt; files, and updating maintainer information, were among the things I did.&lt;/p&gt;
&lt;h2 id=&#34;media-library-space-savings&#34;&gt;Media Library Space Savings&lt;/h2&gt;
&lt;h3 id=&#34;videos&#34;&gt;Videos&lt;/h3&gt;
&lt;p&gt;I came across the &lt;a href=&#34;https://gitlab.com/AOMediaCodec/SVT-AV1&#34;&gt;SVT-AV1&lt;/a&gt; encoder earlier this month. It encodes AV1 fast and scales across logical processors.&lt;/p&gt;
&lt;p&gt;I converted a few H.264 and HEVC videos from my library to AV1 to see the size difference, and it went as low as 20% of the original on some files, with the mean being around 55%. That&amp;rsquo;s absolutely mad!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve begun converting my entire media library to AV1 now. It plays well on the three devices that I watch my media on.&lt;/p&gt;
&lt;h3 id=&#34;images&#34;&gt;Images&lt;/h3&gt;
&lt;p&gt;I discovered &lt;a href=&#34;https://jpeg.org/jpegxl/&#34;&gt;JPEG XL&lt;/a&gt; when &lt;a href=&#34;https://www.youtube.com/watch?v=Jyk87VVfh9s&#34;&gt;Google decided to pull a Microsoft with their browser market share&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The savings from converting most of my randomly selected PNG and JPG files were significant, so I decided to convert all my photos and comicbook archives to JPEG XL too. With the space savings from converting to JXL, I can compress my comicbooks into CBR instead of CBZ, and use its recovery records feature!&lt;/p&gt;
&lt;p&gt;Unfortunately, I&amp;rsquo;ve come across some files that encode to a size larger than the originals though, so I&amp;rsquo;ve put the conversion on hold until I get to the bottom of it.&lt;/p&gt;
&lt;h2 id=&#34;sieve-filters&#34;&gt;Sieve Filters&lt;/h2&gt;
&lt;p&gt;I created my first sieve filter for my primary email this month. It took a bit of trial and error to get right, but emails from mailing-lists are now correctly sorted into specific folders as they come in.&lt;/p&gt;
&lt;h2 id=&#34;pacman---fancy-progress-bars&#34;&gt;Pacman - Fancy progress bars&lt;/h2&gt;
&lt;p&gt;A while ago, I switched my default system font to &lt;a href=&#34;https://github.com/tonsky/FiraCode&#34;&gt;Fira Code&lt;/a&gt; which comes with &lt;a href=&#34;https://github.com/tonsky/FiraCode/blob/master/extras/progress.png?raw=true&#34;&gt;these nice glyphs&lt;/a&gt; for progress bars and spinners.&lt;/p&gt;
&lt;p&gt;I forked pacman, implemented the ability to configure the progress bar characters, and &lt;a href=&#34;https://gitlab.archlinux.org/pacman/pacman/-/merge_requests/29&#34;&gt;submitted a MR&lt;/a&gt; to the pacman repo on the Arch Linux GitLab instance. Unfortunately, it was denied because it only counted as a cosmetic change, but that&amp;rsquo;s okay. I will possibly maintain a fork of pacman with these changes for the foreseeable future.&lt;/p&gt;
&lt;p&gt;It can actually read and display any Unicode character. The glyphs aren&amp;rsquo;t hardcoded in. I had to make a few additional changes so the &lt;code&gt;makepkg&lt;/code&gt; script wouldn&amp;rsquo;t fail when encountering multibyte characters in &lt;code&gt;/etc/pacman.conf&lt;/code&gt;. It was my first time hacking at C code, and while debugging the segfaults sucked, it was a good experience!&lt;/p&gt;
&lt;h2 id=&#34;other-things&#34;&gt;Other things&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve also slowly been swapping my emails on services that I haven&amp;rsquo;t changed them on yet, and adding configs to my &lt;a href=&#34;https://git.sr.ht/~txtsd/dotfiles&#34;&gt;dotfiles repo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it for December! See you next year!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Status Update, November 2022</title>
      <link>https://ihavea.quest/blog/2022-11-30-status-update/</link>
      <pubDate>Wed, 30 Nov 2022 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2022-11-30-status-update/</guid>
      <description>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;This month was basically a blur, but I got a lot of things done.&lt;/p&gt;
&lt;h2 id=&#34;website&#34;&gt;Website&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://ihavea.quest/projects/&#34;&gt;projects&lt;/a&gt; page used to be just a plaintext list. It is now fleshed out into cards with descriptions, along with website, repo, and mirror links. This was quite fun to do. I wrote little zsh functions to create git remotes, push to all remotes, and to print the links subsection for the projects&amp;rsquo; READMEs.&lt;/p&gt;</description>
      <content>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;This month was basically a blur, but I got a lot of things done.&lt;/p&gt;
&lt;h2 id=&#34;website&#34;&gt;Website&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://ihavea.quest/projects/&#34;&gt;projects&lt;/a&gt; page used to be just a plaintext list. It is now fleshed out into cards with descriptions, along with website, repo, and mirror links. This was quite fun to do. I wrote little zsh functions to create git remotes, push to all remotes, and to print the links subsection for the projects&amp;rsquo; READMEs.&lt;/p&gt;
&lt;p&gt;My &lt;a href=&#34;https://github.com/sponsors/txtsd/&#34;&gt;GitHub Sponsors profile&lt;/a&gt; was finally approved this month, so I added a link to that on my &lt;a href=&#34;https://ihavea.quest/about/&#34;&gt;about&lt;/a&gt; page.&lt;/p&gt;
&lt;h2 id=&#34;foss-development&#34;&gt;FOSS Development&lt;/h2&gt;
&lt;p&gt;I spent a lot of time contributing to FOSS projects this month.&lt;/p&gt;
&lt;h3 id=&#34;progress-quest&#34;&gt;Progress Quest&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://progressquest.com&#34;&gt;Progress Quest&lt;/a&gt; is a true &lt;!-- raw HTML omitted --&gt;ZPG&lt;!-- raw HTML omitted --&gt; that released in 2002. It is arguably the first &lt;a href=&#34;https://en.wikipedia.org/wiki/Zero-player_game&#34;&gt;ZPG&lt;/a&gt;, Idle RPG, and &lt;a href=&#34;https://en.wikipedia.org/wiki/Incremental_game&#34;&gt;Incremental Game&lt;/a&gt;, which spawned amazing games in these genres like &lt;a href=&#34;https://godvillegame.com&#34;&gt;Godville&lt;/a&gt;, &lt;a href=&#34;https://orteil.dashnet.org/cookieclicker/&#34;&gt;Cookie Clicker&lt;/a&gt;, &lt;a href=&#34;https://armorgames.com/progress-knight-game/19095&#34;&gt;Progress Knight&lt;/a&gt;, and &lt;a href=&#34;https://bethesda.net/en/game/falloutshelter&#34;&gt;Fallout Shelter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I picked some low-hanging fruit to tackle: (unashamedly) &lt;a href=&#34;https://bitbucket.org/grumdrig/pq/pull-requests/1&#34;&gt;grammar and typo corrections&lt;/a&gt;. Seemed fair since the codebase is &lt;a href=&#34;https://en.wikipedia.org/wiki/Delphi_(software)&#34;&gt;Delphi&lt;/a&gt;, which is a dialect of &lt;a href=&#34;https://en.wikipedia.org/wiki/Object_Pascal&#34;&gt;Object Pascal&lt;/a&gt;, neither of which I&amp;rsquo;m familiar with, except for having used Borland C++ in 2005-2006, which is only loosely related if at all. &lt;a href=&#34;https://bitbucket.org/grumdrig/&#34;&gt;Eric Fredricksen&lt;/a&gt; gladly accepted and merged my changes, so I made &lt;a href=&#34;https://bitbucket.org/grumdrig/pq-web/pull-requests/1&#34;&gt;similar fixes&lt;/a&gt; for the &lt;a href=&#34;http://progressquest.com/play/&#34;&gt;web version&lt;/a&gt; of Progress Quest, with added changes for accessibility, HTML/CSS, line-endings, and UTF-8 encoding.&lt;/p&gt;
&lt;p&gt;Once that was done, I contributed the &lt;a href=&#34;https://github.com/rr-/pq-cli/pull/20&#34;&gt;same changes&lt;/a&gt; to &lt;a href=&#34;https://github.com/rr-/pq-cli&#34;&gt;pq-cli&lt;/a&gt;, a CLI and TUI reimplementation of PQ in Python.&lt;/p&gt;
&lt;h3 id=&#34;prism-launcher&#34;&gt;Prism Launcher&lt;/h3&gt;
&lt;p&gt;I set up financial goals for the project on our &lt;a href=&#34;https://opencollective.com/prismlauncher&#34;&gt;Open Collective&lt;/a&gt;, and made a &lt;a href=&#34;https://opencollective.com/prismlauncher/updates/new-goals&#34;&gt;post&lt;/a&gt; about it.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&#34;https://github.com/PrismLauncher/PrismLauncher/pull/368&#34;&gt;minor change&lt;/a&gt; to credits that landed in &lt;a href=&#34;https://github.com/PrismLauncher/PrismLauncher/releases/tag/5.2&#34;&gt;5.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And another &lt;a href=&#34;https://github.com/PrismLauncher/PrismLauncher/pull/392&#34;&gt;minor change&lt;/a&gt; to cleverly assign Java max memory on systems with low total RAM, which will land in the next release.&lt;/p&gt;
&lt;h3 id=&#34;trackma&#34;&gt;Trackma&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/z411/trackma&#34;&gt;Trackma&lt;/a&gt; is a lightweight and simple but feature-rich program for fetching, updating and using data from personal lists hosted in several media tracking websites, like &lt;a href=&#34;https://myanimelist.net/&#34;&gt;MAL&lt;/a&gt;, &lt;a href=&#34;https://kitsu.io/&#34;&gt;Kitsu&lt;/a&gt;, &lt;a href=&#34;https://anilist.co/&#34;&gt;Anilist&lt;/a&gt;, &lt;a href=&#34;http://shikimori.org/&#34;&gt;Shikimori&lt;/a&gt;, and &lt;a href=&#34;https://vndb.org/&#34;&gt;VNDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My first contribution to Trackma was a &lt;a href=&#34;https://github.com/z411/trackma/pull/630&#34;&gt;bugfix&lt;/a&gt; in July 2022. I &lt;a href=&#34;https://github.com/z411/trackma/pull/629&#34;&gt;went to town&lt;/a&gt; on the codebase after that and made it adhere to Python and Markdown best practices, amongst other things. This was in August 2022. I had to rebase on master at one point, so that took an entire day of extra work in typical neurodivergent fashion.&lt;/p&gt;
&lt;p&gt;This month&amp;rsquo;s &lt;a href=&#34;https://github.com/z411/trackma/pull/653&#34;&gt;changes&lt;/a&gt; to Trackma included creating a virtual environment for development using &lt;a href=&#34;https://python-poetry.org/&#34;&gt;Poetry&lt;/a&gt; (a tool for dependency management and packaging in Python), and the dropping of Qt4 support since it has been EOL for several years. The change has been approved, and is awaiting one more approval to be merged.&lt;/p&gt;
&lt;h3 id=&#34;pydle&#34;&gt;pydle&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Shizmob/pydle&#34;&gt;pydle&lt;/a&gt; is a compact, flexible and standards-abiding IRCv3-compliant IRC library for Python. I&amp;rsquo;ve played with this in the past to create IRC bots for various purposes. A &lt;a href=&#34;https://github.com/Shizmob/pydle/pull/182&#34;&gt;minor bugfix&lt;/a&gt; was required to address a python version inequality string in Poetry, so I got that done.&lt;/p&gt;
&lt;h3 id=&#34;catppuccin-color-scheme-for-sublime-text&#34;&gt;Catppuccin Color Scheme for Sublime Text&lt;/h3&gt;
&lt;p&gt;After seeing a lot of my developer colleagues use and recommend &lt;a href=&#34;https://catppuccin.com&#34;&gt;Catppuccin&lt;/a&gt; over the past few months, I finally decided to see what the excitement was all about, and boy did I fall hard for it. I&amp;rsquo;ve been using &lt;a href=&#34;https://github.com/adapta-project/adapta-gtk-theme&#34;&gt;Adapta&lt;/a&gt;-like themes including &lt;a href=&#34;https://github.com/arc-design/arc-theme&#34;&gt;Arc&lt;/a&gt; since my X11 days on &lt;a href=&#34;http://openbox.org&#34;&gt;Openbox&lt;/a&gt;. These are primarily GTK themes, so making the rest of my system look and feel like the theme required a lot of additional work like configuring &lt;code&gt;qt5ct&lt;/code&gt; and &lt;code&gt;qt6ct&lt;/code&gt; to use GTK styles, manually implementing colors for &lt;code&gt;.XResources&lt;/code&gt; and &lt;code&gt;rxvt-unicode&lt;/code&gt; which is the terminal I used at the time, and also for editors like &lt;a href=&#34;https://www.sublimetext.com/&#34;&gt;Sublime Text&lt;/a&gt;, which can dynamically pull in a theme, but not a color scheme. These themes also only support GTK2 and GTK3, but not GTK4.&lt;/p&gt;
&lt;p&gt;Catppuccin is a pastel theme that aims to be the middle ground between low and high contrast themes. It is an amazing community-driven effort that offers themes for a ridiculous number of applications, including but not limited to, Code Editors, System Applications, Shells, Websites, Games, Music Players, Browsers, Search Engines, Messengers, Note-taking Applications, and Terminals. There are approximately &lt;a href=&#34;https://github.com/orgs/catppuccin/repositories&#34;&gt;160 repositories&lt;/a&gt; for these under the Catppuccin GitHub organization at the time of writing this post.&lt;/p&gt;
&lt;p&gt;I went down the rabbit hole of applying these themes to my &lt;!-- raw HTML omitted --&gt;DE&lt;!-- raw HTML omitted --&gt; for a system-wide unified look and feel a week or so ago, and it has been absolutely amazing!&lt;/p&gt;
&lt;p&gt;The color scheme for Sublime Text kept throwing an error every time ST was started or when the configuration was reloaded, so I decided to give it a look and found a file that only existed to create the color scheme files. It wasn&amp;rsquo;t an actually part of the color scheme for ST. I submitted a &lt;a href=&#34;https://github.com/catppuccin/sublime-text/pull/8&#34;&gt;pull request&lt;/a&gt; to have that file removed, so everyone else using the color scheme can benefit from it too.&lt;/p&gt;
&lt;h3 id=&#34;pylnp&#34;&gt;PyLNP&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Pidgeot/python-lnp&#34;&gt;PyLNP&lt;/a&gt; is a launcher for &lt;a href=&#34;https://www.bay12games.com/dwarves/&#34;&gt;Dwarf Fortress&lt;/a&gt;. It has a variety of useful features to manage settings and configure the base game. It can also manage, configure, install, and run a wide variety of related content - from graphics to color schemes, and utility programs to content-replacing mods.&lt;/p&gt;
&lt;p&gt;I used to play Dwarf Fortress a lot around 2014-2016, and I contributed &lt;a href=&#34;https://github.com/Pidgeot/python-lnp/commit/b644ef112f9e056b4c2dd2c92d4d10dde5252b65&#34;&gt;some&lt;/a&gt; &lt;a href=&#34;https://github.com/Pidgeot/python-lnp/commit/70fe6beacdc04489da30b57531c4a1242fb7d6c9&#34;&gt;changes&lt;/a&gt; to PyLNP at the time. The repo was on bitbucket at the time and used mercurial instead of git so it was kind of difficult to navigate then. It&amp;rsquo;s on GitHub now and uses git so I dived right in.&lt;/p&gt;
&lt;p&gt;This &lt;a href=&#34;https://github.com/Pidgeot/python-lnp/pull/191&#34;&gt;pull request&lt;/a&gt; focuses on adhering to Python standards (PEP8), upgrading &lt;code&gt;pylint&lt;/code&gt; and its config file, and dropping Python 2 support. It will also feature fixes suggested by &lt;code&gt;flake8&lt;/code&gt;, and I will submit another PR to manage dependencies, packaging, and a development virtual environment using Poetry, like I did for Trackma.&lt;/p&gt;
&lt;h2 id=&#34;project-animejouhou&#34;&gt;Project AnimeJouhou&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m planning to create an anime + TV shows + movies tracker à la &lt;a href=&#34;https://trakt.tv&#34;&gt;trakt.tv&lt;/a&gt; and &lt;a href=&#34;https://myanimelist.net&#34;&gt;MAL&lt;/a&gt;, but built on a FOSS database of metadata: &lt;a href=&#34;https://wikidata.org&#34;&gt;Wikidata&lt;/a&gt;. I did an initial grab of basic anime-related data from Wikidata using SparQL which is absolutely amazing! A single query to grab everything I need! I parsed it into basic html pages, and it&amp;rsquo;s up for display at &lt;a href=&#34;https://animejouhou.ihavea.quest/&#34;&gt;animejouhou.ihavea.quest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As you can see, there is a LOT of missing data, so before going any further I will be working on an easy way to populate all the Wikidata entries with info from high quality sites like MAL and &lt;a href=&#34;https://anidb.net&#34;&gt;AniDB&lt;/a&gt;. This part of the process might take the longest, but once it&amp;rsquo;s done, I will focus on creating a frontend for all of that data. It will be static initially, and the plan is to have user accounts to track things via lists like Watching, Completed, On-Hold, Dropped, Plan to Watch, Interested etc.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m really excited about this and I hope it&amp;rsquo;s something that people will find worth switching over to, to track their media.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for November. See you next month!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Status Update, October 2022</title>
      <link>https://ihavea.quest/blog/2022-10-31-status-update/</link>
      <pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2022-10-31-status-update/</guid>
      <description>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;This month went by relatively fast! Plenty of things happened, both planned and unexpected.&lt;/p&gt;
&lt;h2 id=&#34;emails&#34;&gt;Emails&lt;/h2&gt;
&lt;p&gt;I had my domain set up for emails earlier this year. I&amp;rsquo;ve slowly been replacing my primary email (unfortunately Gmail) across services with service specific emails. These service specific emails are going to help me find out which services are selling my information to spammers and cold-emailers, and where spammers tend to scrape my contact information from.&lt;/p&gt;</description>
      <content>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;This month went by relatively fast! Plenty of things happened, both planned and unexpected.&lt;/p&gt;
&lt;h2 id=&#34;emails&#34;&gt;Emails&lt;/h2&gt;
&lt;p&gt;I had my domain set up for emails earlier this year. I&amp;rsquo;ve slowly been replacing my primary email (unfortunately Gmail) across services with service specific emails. These service specific emails are going to help me find out which services are selling my information to spammers and cold-emailers, and where spammers tend to scrape my contact information from.&lt;/p&gt;
&lt;h3 id=&#34;password-management&#34;&gt;Password management&lt;/h3&gt;
&lt;p&gt;This is part of a &lt;a href=&#34;https://www.reddit.com/r/degoogle/&#34;&gt;larger&lt;/a&gt; &lt;a href=&#34;https://www.privacytools.io&#34;&gt;de-googling&lt;/a&gt; &lt;a href=&#34;https://www.privacyguides.org&#34;&gt;effort&lt;/a&gt; that started several years ago with the migration of my Chrome-saved passwords to a password manager. I first tried &lt;a href=&#34;https://www.lastpass.com&#34;&gt;LastPass&lt;/a&gt; in 2015, and it was okay for a first experience, however there wasn&amp;rsquo;t a Linux native client so I couldn&amp;rsquo;t access my passwords unless I had a browser open. My second choice was &lt;a href=&#34;https://bitwarden.com&#34;&gt;Bitwarden&lt;/a&gt; which I migrated to in 2017. Bitwarden was much better than LastPass and had a client for Linux, except it was Electron based so it used inexcusable amounts of RAM to run. In 2019, I finally switched to &lt;a href=&#34;https://keepassxc.org&#34;&gt;KeePassXC&lt;/a&gt; with &lt;a href=&#34;https://syncthing.net&#34;&gt;Syncthing&lt;/a&gt;. KeePassXC filled all the checkboxes I needed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native client on Linux&lt;/li&gt;
&lt;li&gt;Standard interoperable storage format, accessible and manipulable from other platforms.&lt;/li&gt;
&lt;li&gt;No paywalled features&lt;/li&gt;
&lt;li&gt;No need to self host a service (unlike &lt;a href=&#34;https://github.com/dani-garcia/vaultwarden&#34;&gt;Vaultwarden&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Syncing the password database(s) requires a daemon, but it is FOSS and can be used to sync files and folders for other purposes too.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve been using KeePassXC on Linux ever since, with &lt;a href=&#34;https://www.keepassdx.com&#34;&gt;KeePassDX&lt;/a&gt; on Android. It has been an excellent experience, and I recommend it to everyone!&lt;/p&gt;
&lt;h2 id=&#34;gpg-keys&#34;&gt;GPG Keys&lt;/h2&gt;
&lt;p&gt;With the introduction of multiple emails per service, came the need to update my GPG identity. My old GPG key was created in 2017, and was only used to sign git commits.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://meta.sr.ht/~txtsd.pgp&#34;&gt;new identity&lt;/a&gt; matches my emails across code forges, and has an expiry date so I will have no choice but to get into the cycle of revoking and updating GPG keys routinely. It is used to sign commits across forges, but also to sign and encrypt emails, and possibly for authentication in the future.&lt;/p&gt;
&lt;h2 id=&#34;prism-launcher&#34;&gt;Prism Launcher&lt;/h2&gt;
&lt;p&gt;There was unneeded drama that manifested itself this month and became popular within the Minecraft community. The PolyMC team was suddenly kicked from their positions in the GitHub Organization, Discord guild, Matrix spaces, OpenCollective collective, Reddit subreddit, Weblate project, and the domain registrar. This was done by a single maintainer —&lt;a href=&#34;https://github.com/LennyMcLennington&#34;&gt;LennyMcLenngington&lt;/a&gt;— of &lt;a href=&#34;https://github.com/PolyMC/PolyMC/pull/601&#34;&gt;Get to the point in the COC&lt;/a&gt; infamy who was a part of the initial fork from MultiMC, along with &lt;a href=&#34;https://github.com/binex-dsk&#34;&gt;swirl&lt;/a&gt; the original forker, also of &lt;a href=&#34;https://github.com/PolyMC/PolyMC/pull/181&#34;&gt;switch to NCoC (No Code of Conduct)&lt;/a&gt; infamy. The rest of the team was forced to create a new GitHub Organization —&lt;a href=&#34;https://github.com/PrismLauncher&#34;&gt;Prism Launcher&lt;/a&gt;— and after rebranding, development basically continued like nothing had changed.&lt;/p&gt;
&lt;p&gt;I will do a relatively detailed post about this in November.&lt;/p&gt;
&lt;h2 id=&#34;hacktoberfest-2022&#34;&gt;Hacktoberfest 2022&lt;/h2&gt;
&lt;p&gt;Like I said at the beginning of this post, this month went by pretty fast, so I wasn&amp;rsquo;t able to get any Hacktoberfest contributions in initially. However, I was able to get all my Prism Launcher contributions accepted for Hacktoberfest 2022! No prizes this year, since only the initial 40k participants who completed it were awarded, but that&amp;rsquo;s okay! This year&amp;rsquo;s contributions felt more worthwhile than previous years&#39;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for October. See you next month!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Status Update, September 2022</title>
      <link>https://ihavea.quest/blog/2022-09-30-status-update/</link>
      <pubDate>Fri, 30 Sep 2022 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2022-09-30-status-update/</guid>
      <description>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;This month has been an absolute shitshow of negative emotions and helplessness.&lt;/p&gt;
&lt;h2 id=&#34;lan-goodies&#34;&gt;LAN Goodies&lt;/h2&gt;
&lt;p&gt;Up until earlier this month, I had been using &lt;code&gt;localhost:&amp;lt;port&amp;gt;&lt;/code&gt; to access services on my desktop. While touching up my &lt;code&gt;unbound&lt;/code&gt; + &lt;code&gt;stubby&lt;/code&gt; configuration, I realized I could finally set up a domain to access local services and test servers.&lt;/p&gt;
&lt;h3 id=&#34;khazad-dûm&#34;&gt;Khazad-dûm&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Moria,_Middle-earth&#34;&gt;Moria&lt;/a&gt; is my favorite place in ALL of Tolkien&amp;rsquo;s works! I absolutely love the Dwarves, their lore, and Dwarven architecture. It should come as no surprise, then, that I named my local domain &lt;code&gt;khazad.dum&lt;/code&gt;. Navigating to it in the browser yields a list of local services which are reverse proxies to individual subdomains. There is &lt;a href=&#34;https://github.com/Jackett/Jackett&#34;&gt;Jackett&lt;/a&gt;, &lt;a href=&#34;https://github.com/FlareSolverr/FlareSolverr&#34;&gt;FlareSolverr&lt;/a&gt;, &lt;a href=&#34;https://github.com/syncthing/syncthing/&#34;&gt;Syncthing&lt;/a&gt;, and :8080, to name a few.&lt;/p&gt;</description>
      <content>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;This month has been an absolute shitshow of negative emotions and helplessness.&lt;/p&gt;
&lt;h2 id=&#34;lan-goodies&#34;&gt;LAN Goodies&lt;/h2&gt;
&lt;p&gt;Up until earlier this month, I had been using &lt;code&gt;localhost:&amp;lt;port&amp;gt;&lt;/code&gt; to access services on my desktop. While touching up my &lt;code&gt;unbound&lt;/code&gt; + &lt;code&gt;stubby&lt;/code&gt; configuration, I realized I could finally set up a domain to access local services and test servers.&lt;/p&gt;
&lt;h3 id=&#34;khazad-dûm&#34;&gt;Khazad-dûm&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Moria,_Middle-earth&#34;&gt;Moria&lt;/a&gt; is my favorite place in ALL of Tolkien&amp;rsquo;s works! I absolutely love the Dwarves, their lore, and Dwarven architecture. It should come as no surprise, then, that I named my local domain &lt;code&gt;khazad.dum&lt;/code&gt;. Navigating to it in the browser yields a list of local services which are reverse proxies to individual subdomains. There is &lt;a href=&#34;https://github.com/Jackett/Jackett&#34;&gt;Jackett&lt;/a&gt;, &lt;a href=&#34;https://github.com/FlareSolverr/FlareSolverr&#34;&gt;FlareSolverr&lt;/a&gt;, &lt;a href=&#34;https://github.com/syncthing/syncthing/&#34;&gt;Syncthing&lt;/a&gt;, and :8080, to name a few.&lt;/p&gt;
&lt;p&gt;This worked out of the box for everything except Firefox, which parsed the domain in the URL bar as a search query since .dum is not a TLD in the IANA Root Zone Database.&lt;/p&gt;
&lt;p&gt;Creating and setting this boolean value to &lt;code&gt;true&lt;/code&gt; in &lt;code&gt;about:config&lt;/code&gt; helped fix that behavior:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;browser.fixup.domainsuffixwhitelist.dum
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Setting all my internal services to use the new local domain instead of localhost felt great!&lt;/p&gt;
&lt;p&gt;As a bonus, I get to access these services across my home network. There&amp;rsquo;s no need to run to my desktop for everything, I can pull up &lt;code&gt;&amp;lt;service&amp;gt;.khazad.dum&lt;/code&gt; on my phone, and do the things from there.&lt;/p&gt;
&lt;h3 id=&#34;blocking-ads&#34;&gt;Blocking Ads&lt;/h3&gt;
&lt;p&gt;Ad blocking is relatively easy using &lt;code&gt;unbound&lt;/code&gt;. For the initial iteration, I used &lt;a href=&#34;https://someonewhocares.org/hosts/hosts&#34;&gt;Dan Pollock&amp;rsquo;s hosts file&lt;/a&gt; and grep-awk&amp;rsquo;d it into the &lt;code&gt;unbound.conf&lt;/code&gt; format. It seems to work well so far for everyone on WiFi. Not all ads are blocked, but most are. I&amp;rsquo;ll be adding more domains to block as I find suitable sources. I might have to maintain my own list too. Local ads here in India absolutely prey upon the mind, naïve or otherwise. And no one should have to deal with that while browsing the Internet.&lt;/p&gt;
&lt;h3 id=&#34;router-read-proprietary-hell&#34;&gt;Router (read: proprietary hell)&lt;/h3&gt;
&lt;p&gt;After this wondrous joyride, I decided it would be awesome if I could access these services from outside my home network too! I quickly set up a script to periodically keep updating the domain name pointing to my home with its dynamic IP.&lt;/p&gt;
&lt;p&gt;This is where the fun ended. Over the next several hours, I discovered my router has a firewall that cannot be turned off (drops ICMP packets etc), and it also does not forward ports despite an entire router settings page dedicated to it. I don&amp;rsquo;t know why I expected my sub-₹1000 router to be able to actually do things. Never again. The next time I buy a router, it will need to be compatible with OpenWRT, without any pitfalls.&lt;/p&gt;
&lt;h2 id=&#34;multi-factor-authentication&#34;&gt;Multi Factor Authentication&lt;/h2&gt;
&lt;p&gt;Up until this year, I hadn&amp;rsquo;t really cared about using 2FA/MFA on services I was signed up for. Mostly because I hadn&amp;rsquo;t looked at the underlying tech. I had no idea what was behind the QR code, and I never bothered to check either. Thanks brain. So when I looked it up and learned it&amp;rsquo;s just a URI with a token with optional arguments for non-default parameters to an algorithm that uses the current time as a source of uniqueness, I realized I didn&amp;rsquo;t have to rely on closed-source apps like Google Authenticator or Authy anymore.&lt;/p&gt;
&lt;p&gt;I use KeePassXC to manage my passwords and other credentials. I migrated all my existing services that use TOTP to my password database, and I keep adding more as and when I come across services that offer MFA. Not having to open yet another app during a login process is a win! Arguably, I should be putting my TOTP secrets in a separate database, but here&amp;rsquo;s how I see it (in increasing order of security):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No password management&lt;/li&gt;
&lt;li&gt;Use a password manager, but no MFA&lt;/li&gt;
&lt;li&gt;Use a password manager, and store MFA secrets in the same DB&lt;/li&gt;
&lt;li&gt;Use a password manager, but store MFA secrets in a different DB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t store all your eggs in one basket yada yada, but it&amp;rsquo;s still better than most of the alternatives.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for now. See you next month!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Hello, World!</title>
      <link>https://ihavea.quest/blog/2022-09-02-hello-world/</link>
      <pubDate>Fri, 02 Sep 2022 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/blog/2022-09-02-hello-world/</guid>
      <description>&lt;p&gt;I finally got around to creating this blog! It took me longer than I thought it would, even considering the parenting, house-spousing, depression, and curve balls in life.&lt;/p&gt;
&lt;h2 id=&#34;landing-page&#34;&gt;Landing page&lt;/h2&gt;
&lt;p&gt;The landing page for the website was ready around the beginning of July. The pixel art was initially actual images enlarged with &lt;code&gt;image-rendering: pixelated&lt;/code&gt; and &lt;code&gt;image-rendering: crisp-edges&lt;/code&gt;, which meant the HTML was smaller and cleaner, however, the sword hilt and tip had alignment issues with the navbar blade. My CSS-fu was too weak to fix it. Toward the end of the month I re-created the images with CSS Flex and one div per pixel. It made the HTML way longer, but there are no alignment issues, and I like it much better this way.&lt;/p&gt;</description>
      <content>&lt;p&gt;I finally got around to creating this blog! It took me longer than I thought it would, even considering the parenting, house-spousing, depression, and curve balls in life.&lt;/p&gt;
&lt;h2 id=&#34;landing-page&#34;&gt;Landing page&lt;/h2&gt;
&lt;p&gt;The landing page for the website was ready around the beginning of July. The pixel art was initially actual images enlarged with &lt;code&gt;image-rendering: pixelated&lt;/code&gt; and &lt;code&gt;image-rendering: crisp-edges&lt;/code&gt;, which meant the HTML was smaller and cleaner, however, the sword hilt and tip had alignment issues with the navbar blade. My CSS-fu was too weak to fix it. Toward the end of the month I re-created the images with CSS Flex and one div per pixel. It made the HTML way longer, but there are no alignment issues, and I like it much better this way.&lt;/p&gt;
&lt;p&gt;Here are the images I drew to plan my landing page:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;A drawing of the ihavea.quest landing page&#34; src=&#34;https://ihavea.quest/img/ihaveaquest_plan_800x483.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;The mobile view was initially supposed to change the sword to a shield to fit in however many nav elements I would have to add. I&amp;rsquo;ll probably do that in the future, since they seem to fit in the sword in all my tests so far.&lt;/p&gt;
&lt;h2 id=&#34;blog-page&#34;&gt;Blog page&lt;/h2&gt;
&lt;p&gt;I spent a very long time looking at &lt;a href=&#34;https://drewdevault.com/make-a-blog&#34;&gt;various blogs&lt;/a&gt; to find a design that I might like. It didn&amp;rsquo;t happen. My brain wasn&amp;rsquo;t cooperating with an original design either, so I did what I do whenever something like this happens. I looked at some tutorials to get &lt;a href=&#34;https://www.11ty.dev/&#34;&gt;eleventy&lt;/a&gt; set up, created some sample blog posts with different markdown elements, then got around to styling it by trial-and-error. Eventually, I ended up with something that I felt was good enough to publish. If you&amp;rsquo;re reading this post in September 2022, you&amp;rsquo;re probably seeing one of its first published iterations. It will definitely change over time as I get feedback about it, and I&amp;rsquo;m super excited about it!&lt;/p&gt;
&lt;h2 id=&#34;future-plans&#34;&gt;Future plans&lt;/h2&gt;
&lt;p&gt;As of this moment, only the &lt;a href=&#34;https://ihavea.quest/&#34;&gt;landing page&lt;/a&gt; and the &lt;a href=&#34;https://ihavea.quest/blog/&#34;&gt;blog page&lt;/a&gt; are implemented. The projects, miscellaneous, and about pages are next in line, and should be done by the end of the month!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>About Me</title>
      <link>https://ihavea.quest/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/about/</guid>
      <description>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m txtsd! You might know me as Raven, in meatspace.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a home-maker and a full-time parent.&lt;/p&gt;
&lt;p&gt;I spend my free time developing and packaging Free and Open Source Software &lt;a href=&#34;https://www.gnu.org/philosophy/free-sw.html&#34;&gt;(FOSS)&lt;/a&gt;.
I use FOSS in a myriad of manners to make my daily life rich and easy.
Most of my code is published under a &lt;a href=&#34;https://en.wikipedia.org/wiki/Copyleft&#34;&gt;copyleft license&lt;/a&gt; because software freedom is not negotiable. Proprietary lock-in, surveillance capitalism, the exploitation of open source labour, and the commodification of basic digital infrastructure are all symptoms of the same disease. I do not build software to feed that machine.&lt;/p&gt;</description>
      <content>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m txtsd! You might know me as Raven, in meatspace.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a home-maker and a full-time parent.&lt;/p&gt;
&lt;p&gt;I spend my free time developing and packaging Free and Open Source Software &lt;a href=&#34;https://www.gnu.org/philosophy/free-sw.html&#34;&gt;(FOSS)&lt;/a&gt;.
I use FOSS in a myriad of manners to make my daily life rich and easy.
Most of my code is published under a &lt;a href=&#34;https://en.wikipedia.org/wiki/Copyleft&#34;&gt;copyleft license&lt;/a&gt; because software freedom is not negotiable. Proprietary lock-in, surveillance capitalism, the exploitation of open source labour, and the commodification of basic digital infrastructure are all symptoms of the same disease. I do not build software to feed that machine.&lt;/p&gt;
&lt;p&gt;That said, the people I communicate with are on Discord, and I&amp;rsquo;m not going to pretend otherwise. Discord is a proprietary platform run by a company whose values I do not share, but it is where my communities live. Rather than suffer through their bloated Electron client every day, I&amp;rsquo;m building &lt;a href=&#34;https://kind.ihavea.quest&#34;&gt;kind&lt;/a&gt;, a native alternative in C++ and Qt 6 that respects your hardware and your time. It is not the ideal solution. It is the practical one, until something better replaces the need entirely.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using GNU/Linux since 2014, specifically &lt;a href=&#34;https://archlinux.org/&#34;&gt;Arch Linux&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I primarily code in C++, Python, Lua, and ShellScript, but I also work with Rust, C, C#/.NET, Java, JavaScript, PHP, and Go.
I&amp;rsquo;m well versed in a lot of other technologies that revolve around these ecosystems.&lt;/p&gt;
&lt;p&gt;Head over to my &lt;a href=&#34;https://ihavea.quest/projects/&#34;&gt;Projects&lt;/a&gt; and &lt;a href=&#34;https://github.com/txtsd&#34;&gt;GitHub&lt;/a&gt; pages to see what I&amp;rsquo;ve been working on.&lt;/p&gt;
&lt;h2 id=&#34;hire-me&#34;&gt;Hire Me&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a list of things I can do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Package your software for Arch Linux on the &lt;a href=&#34;https://aur.archlinux.org&#34;&gt;AUR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Setup the &lt;a href=&#34;https://wiki.servarr.com&#34;&gt;Servarr stack&lt;/a&gt; for you&lt;/li&gt;
&lt;li&gt;Bug fixes&lt;/li&gt;
&lt;li&gt;Codebase cleanups&lt;/li&gt;
&lt;li&gt;Bring codebases up to current standards&lt;/li&gt;
&lt;li&gt;Consult about code, infrastructure, and security&lt;/li&gt;
&lt;li&gt;Create and maintain a product&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contact-me&#34;&gt;Contact Me&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;d like to hire me or send an inquiry, feel free to &lt;a href=&#34;mailto:txtsd@ihavea.quest&#34;&gt;email me&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to talk about any of my blog posts that aren&amp;rsquo;t tech related, &lt;a href=&#34;mailto:dawson@ihavea.quest&#34;&gt;email me here&lt;/a&gt; instead.&lt;/p&gt;
&lt;h2 id=&#34;code-forges&#34;&gt;Code Forges&lt;/h2&gt;
&lt;p&gt;
  &lt;figure class=&#34;left&#34; style=&#34;display: inline-table; margin: 0;&#34;&gt;
    
    &lt;a href=&#34;https://sr.ht/projects/~txtsd/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
    
    &lt;img src=&#34;https://ihavea.quest/img/icons/sourcehut-white.svg&#34;  alt=&#34;Sourcehut logo&#34;   style=&#34;display:inline; border: none; width: 6em&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34;  style=&#34;width: 6em;&#34; &gt;Sourcehut&lt;/figcaption&gt;
    
    
    &lt;/a&gt;
    
  &lt;/figure&gt;



  &lt;figure class=&#34;left&#34; style=&#34;display: inline-table; margin: 0;&#34;&gt;
    
    &lt;a href=&#34;https://github.com/txtsd&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
    
    &lt;img src=&#34;https://ihavea.quest/img/icons/github-white.svg&#34;  alt=&#34;GitHub logo&#34;   style=&#34;display:inline; border: none; width: 6em&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34;  style=&#34;width: 6em;&#34; &gt;GitHub&lt;/figcaption&gt;
    
    
    &lt;/a&gt;
    
  &lt;/figure&gt;



  &lt;figure class=&#34;left&#34; style=&#34;display: inline-table; margin: 0;&#34;&gt;
    
    &lt;a href=&#34;https://aur.archlinux.org/packages?SeB=M&amp;amp;K=txtsd&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
    
    &lt;img src=&#34;https://ihavea.quest/img/icons/archlinux-white.svg&#34;  alt=&#34;Arch Linux User Repository logo&#34;   style=&#34;display:inline; border: none; width: 6em&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34;  style=&#34;width: 6em;&#34; &gt;Arch User Repository&lt;/figcaption&gt;
    
    
    &lt;/a&gt;
    
  &lt;/figure&gt;

&lt;/p&gt;
&lt;h2 id=&#34;donate&#34;&gt;Donate&lt;/h2&gt;
&lt;p&gt;
  &lt;figure class=&#34;left&#34; style=&#34;display: inline-table; margin: 0;&#34;&gt;
    
    &lt;a href=&#34;https://github.com/sponsors/txtsd/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
    
    &lt;img src=&#34;https://ihavea.quest/img/icons/githubsponsors-white.svg&#34;  alt=&#34;GitHub Sponsors logo&#34;   style=&#34;display:inline; border: none; width: 6em&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34;  style=&#34;width: 6em;&#34; &gt;GitHub Sponsors&lt;/figcaption&gt;
    
    
    &lt;/a&gt;
    
  &lt;/figure&gt;



  &lt;figure class=&#34;left&#34; style=&#34;display: inline-table; margin: 0;&#34;&gt;
    
    &lt;a href=&#34;https://ko-fi.com/txtsd&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;
    
    &lt;img src=&#34;https://ihavea.quest/img/icons/kofi-white.svg&#34;  alt=&#34;Ko-fi logo&#34;   style=&#34;display:inline; border: none; width: 6em&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34;  style=&#34;width: 6em;&#34; &gt;Ko-fi&lt;/figcaption&gt;
    
    
    &lt;/a&gt;
    
  &lt;/figure&gt;

&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Projects</title>
      <link>https://ihavea.quest/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/projects/</guid>
      <description>&lt;h2 id=&#34;performant-alternatives&#34;&gt;Performant Alternatives&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;kind&#34;&gt;kind&lt;/h3&gt;
&lt;p&gt;kind (kind is not discord) is a native, cross-platform Discord client built in C++ and Qt 6. Not an Electron wrapper. Supports guilds, channels, DMs, full message rendering, unread tracking, and more. Free, open source, and ad-free.&lt;br&gt;
&lt;a href=&#34;https://kind.ihavea.quest&#34;&gt;kind.ihavea.quest&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/kind&#34;&gt;kind GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;turtlewow&#34;&gt;TurtleWoW&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;lazyarms&#34;&gt;LazyArms&lt;/h3&gt;
&lt;p&gt;A combat automation addon for Arms Warriors on TurtleWoW. Handles ability prioritization, stance management, rage optimization, and swing timer gating. Reads character stats dynamically from the game client.&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/LazyArms&#34;&gt;LazyArms GitHub&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;performant-alternatives&#34;&gt;Performant Alternatives&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;kind&#34;&gt;kind&lt;/h3&gt;
&lt;p&gt;kind (kind is not discord) is a native, cross-platform Discord client built in C++ and Qt 6. Not an Electron wrapper. Supports guilds, channels, DMs, full message rendering, unread tracking, and more. Free, open source, and ad-free.&lt;br&gt;
&lt;a href=&#34;https://kind.ihavea.quest&#34;&gt;kind.ihavea.quest&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/kind&#34;&gt;kind GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;turtlewow&#34;&gt;TurtleWoW&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;lazyarms&#34;&gt;LazyArms&lt;/h3&gt;
&lt;p&gt;A combat automation addon for Arms Warriors on TurtleWoW. Handles ability prioritization, stance management, rage optimization, and swing timer gating. Reads character stats dynamically from the game client.&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/LazyArms&#34;&gt;LazyArms GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;hearthdb&#34;&gt;HearthDB&lt;/h3&gt;
&lt;p&gt;A Rust DLL plugin that gives TurtleWoW addons the ability to read from and write to SQLite databases from within the game client.&lt;br&gt;
&lt;a href=&#34;https://github.com/The-Kludge-Bureau/HearthDB&#34;&gt;HearthDB GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;reliquary&#34;&gt;Reliquary&lt;/h3&gt;
&lt;p&gt;A Rust DLL plugin for reading TurtleWoW&amp;rsquo;s DBC (DataBase Client) files directly from within the game, exposing game data tables to Lua addon code.&lt;br&gt;
&lt;a href=&#34;https://github.com/The-Kludge-Bureau/Reliquary&#34;&gt;Reliquary GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;nampowerdb&#34;&gt;nampowerDB&lt;/h3&gt;
&lt;p&gt;A library that facilitates writing SavedVariable data to file, preventing data loss when TurtleWoW crashes.&lt;br&gt;
&lt;a href=&#34;https://github.com/The-Kludge-Bureau/nampowerDB&#34;&gt;nampowerDB GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;minecraft-stuff&#34;&gt;Minecraft stuff&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;prism-launcher&#34;&gt;Prism Launcher&lt;/h3&gt;
&lt;p&gt;A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once&lt;br&gt;
&lt;a href=&#34;https://prismlauncher.org&#34;&gt;prismlauncher.org&lt;/a&gt; :: &lt;a href=&#34;https://github.com/PrismLauncher/PrismLauncher&#34;&gt;PrismLauncher GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;prism-launcher-chocolatey-package&#34;&gt;Prism Launcher Chocolatey package&lt;/h3&gt;
&lt;p&gt;The Prism Launcher Chocolatey package&lt;br&gt;
&lt;a href=&#34;https://community.chocolatey.org/packages/prismlauncher&#34;&gt;Chocolatey package&lt;/a&gt; :: &lt;a href=&#34;https://git.sr.ht/~txtsd/prismlauncher-chocolatey&#34;&gt;Sourcehut&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;mcrpc&#34;&gt;mcrpc&lt;/h3&gt;
&lt;p&gt;MCRPC (Minecraft Resource Pack Comparator) checks your resource pack against any version of Minecraft to show resources missing from your pack for that version. It can also compare any two versions of Minecraft and show missing (added) files.&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/mcrpc&#34;&gt;sr.ht/~txtsd/mcrpc&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/mcrpc&#34;&gt;mcrpc GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;arch-linux-specific&#34;&gt;Arch Linux specific&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;archosaur&#34;&gt;archosaur&lt;/h3&gt;
&lt;p&gt;A PKGBUILD management framework for the Arch User Repository&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/archosaur&#34;&gt;archosaur GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;ankylosaurus&#34;&gt;ankylosaurus&lt;/h3&gt;
&lt;p&gt;txtsd&amp;rsquo;s general PKGBUILDs for the Arch User Repository&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/ankylosaurus&#34;&gt;ankylosaurus GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;auricularr&#34;&gt;auricularr&lt;/h3&gt;
&lt;p&gt;txtsd&amp;rsquo;s media stack PKGBUILDs for the Arch User Repository&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/auricularr&#34;&gt;auricularr GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;centaur&#34;&gt;centaur&lt;/h3&gt;
&lt;p&gt;A PKGBUILD updater for jackett, jackett-bin, and jackett-mono, on the Arch User Repository&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/centaur&#34;&gt;centaur GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;assorted&#34;&gt;Assorted&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;dpitunnel&#34;&gt;DPITunnel&lt;/h3&gt;
&lt;p&gt;Free, simple and serverless solution against censorship for Linux PCs and routers&lt;br&gt;
&lt;a href=&#34;https://github.com/txtsd/DPITunnel&#34;&gt;DPITunnel GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;riplinestickers&#34;&gt;ripLINEStickers&lt;/h3&gt;
&lt;p&gt;Rip stickers straight from LINE&amp;rsquo;s marketplace&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/ripLINEStickers&#34;&gt;sr.ht/~txtsd/ripLINEStickers&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/ripLINEStickers&#34;&gt;ripLINEStickers GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;pwnedpass&#34;&gt;pwnedpass&lt;/h3&gt;
&lt;p&gt;A tool to check passwords against the pwnedpasswords API at haveibeenpwned&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/pwnedpass&#34;&gt;sr.ht/~txtsd/pwnedpass&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/pwnedpass&#34;&gt;pwnedpass GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;fb2vcard&#34;&gt;fb2vcard&lt;/h3&gt;
&lt;p&gt;A set of python scripts to pull contacts from Facebook and convert them to csv and vcard&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/fb2vcard&#34;&gt;sr.ht/~txtsd/fb2vcard&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/fb2vcard&#34;&gt;fb2vcard GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;unbound-cache&#34;&gt;unbound-cache&lt;/h3&gt;
&lt;p&gt;A script to manage unbound&amp;rsquo;s DNS cache using unbound-control&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/unbound-cache&#34;&gt;sr.ht/~txtsd/unbound-cache&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/unbound-cache&#34;&gt;unbound-cache GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;qb-ipt&#34;&gt;qB-IPT&lt;/h3&gt;
&lt;p&gt;A plugin for qBittorrent to search on iptorrents.com&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/qB-IPT&#34;&gt;sr.ht/~txtsd/qB-IPT&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/qB-IPT&#34;&gt;qB-IPT GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;idlechampwiki&#34;&gt;idlechampwiki&lt;/h3&gt;
&lt;p&gt;A set of tools to update the ICotFR wiki using data parsed from game files&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/idlechampwiki&#34;&gt;sr.ht/~txtsd/idlechampwiki&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/idlechampwiki&#34;&gt;idlechampwiki GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;ihaveaquest&#34;&gt;ihavea.quest&lt;/h3&gt;
&lt;p&gt;This website&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/ihavea.quest&#34;&gt;sr.ht/~txtsd/ihavea.quest&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/ihavea.quest&#34;&gt;ihavea.quest GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;autoplaying-bots&#34;&gt;Autoplaying bots&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;ornauto&#34;&gt;ornauto&lt;/h3&gt;
&lt;p&gt;An autoplayer for Orna&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/ornauto&#34;&gt;sr.ht/~txtsd/ornauto&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/ornauto&#34;&gt;ornauto GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;neobots&#34;&gt;neobots&lt;/h3&gt;
&lt;p&gt;neobots is a Habitarium autoplayer for neopets&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/neobots&#34;&gt;sr.ht/~txtsd/neobots&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/neobots&#34;&gt;neobots GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;plight-rising&#34;&gt;Plight-Rising&lt;/h3&gt;
&lt;p&gt;Plight Rising contains scripts that will let you automate certain dailies on Flight Rising, and automatically play the Coliseum.&lt;br&gt;
&lt;a href=&#34;https://sr.ht/~txtsd/plight-rising&#34;&gt;sr.ht/~txtsd/plight-rising&lt;/a&gt; :: &lt;a href=&#34;https://github.com/txtsd/plight-rising&#34;&gt;plight-rising GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>Web Development Plans</title>
      <link>https://ihavea.quest/misc/webdev/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>txtsd@ihavea.quest (txtsd)</author>
      <guid>https://ihavea.quest/misc/webdev/</guid>
      <description>&lt;h2 id=&#34;plans&#34;&gt;Plans&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;personal-portfolio&#34;&gt;Personal Portfolio&lt;/h3&gt;
&lt;p&gt;Showcase your skills, projects, and achievements with a personalized portfolio website tailored to your professional identity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹5,000–₹15,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;business-website&#34;&gt;Business Website&lt;/h3&gt;
&lt;p&gt;Establish a strong online presence for your business with a professional website that showcases your products, services, and brand identity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-1&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹8,000–₹25,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-1&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹15,000–₹40,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-1&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹25,000–₹70,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;e-commerce-website&#34;&gt;E-Commerce Website&lt;/h3&gt;
&lt;p&gt;Launch your online store and start selling products or services with a customizable e-commerce platform tailored to your business needs.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;plans&#34;&gt;Plans&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h3 id=&#34;personal-portfolio&#34;&gt;Personal Portfolio&lt;/h3&gt;
&lt;p&gt;Showcase your skills, projects, and achievements with a personalized portfolio website tailored to your professional identity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹5,000–₹15,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;business-website&#34;&gt;Business Website&lt;/h3&gt;
&lt;p&gt;Establish a strong online presence for your business with a professional website that showcases your products, services, and brand identity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-1&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹8,000–₹25,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-1&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹15,000–₹40,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-1&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹25,000–₹70,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;e-commerce-website&#34;&gt;E-Commerce Website&lt;/h3&gt;
&lt;p&gt;Launch your online store and start selling products or services with a customizable e-commerce platform tailored to your business needs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-2&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹12,000–₹35,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-2&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-2&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹35,000–₹1,00,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;blog&#34;&gt;Blog&lt;/h3&gt;
&lt;p&gt;Share your thoughts, stories, and expertise with the world through a dynamic and engaging blog platform designed for content creators.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-3&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹6,000–₹20,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-3&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-3&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;non-profit-organization-website&#34;&gt;Non-Profit Organization Website&lt;/h3&gt;
&lt;p&gt;Increase awareness, engagement, and support for your cause with a dedicated website for your non-profit organization.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-4&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹7,000–₹22,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-4&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹12,000–₹35,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-4&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;educational-website&#34;&gt;Educational Website&lt;/h3&gt;
&lt;p&gt;Provide valuable educational resources, courses, and tools to learners of all ages with an interactive and user-friendly educational website.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-5&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-5&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹15,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-5&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹30,000–₹80,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;forum&#34;&gt;Forum&lt;/h3&gt;
&lt;p&gt;Foster community engagement, discussion, and collaboration with a versatile forum platform that connects like-minded individuals around shared interests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-6&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹8,000–₹25,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-6&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹15,000–₹40,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-6&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹25,000–₹70,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;directory-or-listing-website&#34;&gt;Directory or Listing Website&lt;/h3&gt;
&lt;p&gt;Create a comprehensive directory or listing platform to showcase businesses, services, or resources within a specific niche or location.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-7&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹7,000–₹25,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-7&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹15,000–₹35,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-7&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;real-estate-website&#34;&gt;Real Estate Website&lt;/h3&gt;
&lt;p&gt;Showcase properties, connect buyers with sellers, and streamline the real estate process with a feature-rich website for real estate professionals.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-8&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-8&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹18,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-8&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹30,000–₹80,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;photography-portfolio&#34;&gt;Photography Portfolio&lt;/h3&gt;
&lt;p&gt;Display your photography work in a stunning online portfolio that highlights your talent, style, and creativity to potential clients and collaborators.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h4 id=&#34;basic-9&#34;&gt;Basic&lt;/h4&gt;
&lt;p&gt;₹6,000–₹20,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;standard-9&#34;&gt;Standard&lt;/h4&gt;
&lt;p&gt;₹10,000–₹30,000&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4 id=&#34;premium-9&#34;&gt;Premium&lt;/h4&gt;
&lt;p&gt;₹20,000–₹50,000&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
  </channel>
</rss>
