the ugly shellscript powering https://oppi.li

nicer links

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li dbc61fb3 2e64ba08

verified
Changed files
+37 -61
docs
posts
mounting_the_atmosphere
posts
+1 -1
docs/index.html
··· 35 35 <tr> 36 36 <td class=table-post> 37 37 <div class="date"> 38 - 30/07 — 2025 38 + 31/07 — 2025 39 39 </div> 40 40 <a href="/posts/mounting_the_atmosphere" class="post-link"> 41 41 <span class="post-link">Mounting The Atmosphere</span>
+12 -24
docs/index.xml
··· 14 14 <item> 15 15 <title>Mounting The Atmosphere</title> 16 16 <description>&lt;p&gt;&lt;a href="https://tangled.sh/@oppi.li/pdsfs"&gt;pdsfs&lt;/a&gt; is a tool that 17 - mounts atproto PDS repositories as a FUSE filesystem.&lt;/p&gt; 18 - &lt;p&gt;A PDS repository&lt;a href="#fn1" class="footnote-ref" id="fnref1" 19 - role="doc-noteref"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; contains all data published by a 20 - user to the atmosphere&lt;a href="#fn2" class="footnote-ref" id="fnref2" 21 - role="doc-noteref"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;. It is exportable as a CAR 22 - (content-addressable archive) file. pdsfs is a tool that mounts this CAR 23 - file as a readonly-FUSE filesystem, allowing quick and easy 24 - exploration.&lt;/p&gt; 17 + mounts &lt;a href="https://atproto.com"&gt;atproto&lt;/a&gt; PDS repositories as a 18 + &lt;a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace"&gt;FUSE&lt;/a&gt; 19 + filesystem.&lt;/p&gt; 20 + &lt;p&gt;A &lt;a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace"&gt;PDS 21 + repository&lt;/a&gt; contains all data published by a user to the atmosphere. 22 + It is exportable as a CAR (content-addressable archive) file. pdsfs is a 23 + tool that mounts this CAR file as a readonly-FUSE filesystem, allowing 24 + quick and easy exploration.&lt;/p&gt; 25 25 &lt;p&gt;To motivate the need for such a program, we could begin by mounting a 26 26 repository:&lt;/p&gt; 27 27 &lt;pre&gt;&lt;code&gt;λ pdsfs oppi.li ··· 32 32 is not important. Let’s have a look around:&lt;/p&gt; 33 33 &lt;pre&gt;&lt;code&gt;λ ls mnt/ 34 34 did:plc:qfpnj4og54vl56wngdriaxug/&lt;/code&gt;&lt;/pre&gt; 35 - &lt;p&gt;The &lt;code&gt;did:plc:stuff&lt;/code&gt; is my DID&lt;a href="#fn3" 36 - class="footnote-ref" id="fnref3" role="doc-noteref"&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;. 35 + &lt;p&gt;The &lt;code&gt;did:plc:stuff&lt;/code&gt; is my &lt;a 36 + href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace"&gt;DID&lt;/a&gt;. 37 37 Digging deeper:&lt;/p&gt; 38 38 &lt;pre&gt;&lt;code&gt;λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/ 39 39 app.bsky.actor.profile/ place.stream.chat.message/ ··· 140 140 &lt;code&gt;read&lt;/code&gt; are rerouted to your custom fs implementation (pdsfs 141 141 in this case). The custom fs implementation is free to as it pleases, in 142 142 fact the first iteration of pdsfs accessed the network for each 143 - open/read call to fetch live data from PDii.&lt;/p&gt; 144 - &lt;section id="footnotes" class="footnotes footnotes-end-of-document" 145 - role="doc-endnotes"&gt; 146 - &lt;hr /&gt; 147 - &lt;ol&gt; 148 - &lt;li id="fn1"&gt;&lt;p&gt;https://atproto.com/guides/data-repos&lt;a href="#fnref1" 149 - class="footnote-back" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; 150 - &lt;li id="fn2"&gt;&lt;p&gt;https://atproto.com&lt;a href="#fnref2" 151 - class="footnote-back" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; 152 - &lt;li id="fn3"&gt;&lt;p&gt;https://en.wikipedia.org/wiki/Decentralized_identifier&lt;a 153 - href="#fnref3" class="footnote-back" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; 154 - &lt;/ol&gt; 155 - &lt;/section&gt;</description> 143 + open/read call to fetch live data from PDii.&lt;/p&gt;</description> 156 144 <link>https://oppi.li/posts/mounting_the_atmosphere/</link> 157 - <pubDate>Wed, 30 Jul 2025 20:25:00 +0000</pubDate> 145 + <pubDate>Thu, 31 Jul 2025 07:56:00 +0000</pubDate> 158 146 <guid>https://oppi.li/posts/mounting_the_atmosphere/</guid> 159 147 </item> 160 148 <item>
+1 -1
docs/posts/index.html
··· 27 27 <tr> 28 28 <td class=table-post> 29 29 <div class="date"> 30 - 30/07 — 2025 30 + 31/07 — 2025 31 31 </div> 32 32 <a href="/posts/mounting_the_atmosphere" class="post-link"> 33 33 <span class="post-link">Mounting The Atmosphere</span>
+11 -23
docs/posts/mounting_the_atmosphere/index.html
··· 25 25 ">View Raw</a> 26 26 <div class="separator"></div> 27 27 <div class="date"> 28 - 30/07 — 2025 28 + 31/07 — 2025 29 29 <div class="stats"> 30 30 <span class="stats-number"> 31 31 60.34 ··· 43 43 </h1> 44 44 <div class="post-text"> 45 45 <p><a href="https://tangled.sh/@oppi.li/pdsfs">pdsfs</a> is a tool that 46 - mounts atproto PDS repositories as a FUSE filesystem.</p> 47 - <p>A PDS repository<a href="#fn1" class="footnote-ref" id="fnref1" 48 - role="doc-noteref"><sup>1</sup></a> contains all data published by a 49 - user to the atmosphere<a href="#fn2" class="footnote-ref" id="fnref2" 50 - role="doc-noteref"><sup>2</sup></a>. It is exportable as a CAR 51 - (content-addressable archive) file. pdsfs is a tool that mounts this CAR 52 - file as a readonly-FUSE filesystem, allowing quick and easy 53 - exploration.</p> 46 + mounts <a href="https://atproto.com">atproto</a> PDS repositories as a 47 + <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">FUSE</a> 48 + filesystem.</p> 49 + <p>A <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">PDS 50 + repository</a> contains all data published by a user to the atmosphere. 51 + It is exportable as a CAR (content-addressable archive) file. pdsfs is a 52 + tool that mounts this CAR file as a readonly-FUSE filesystem, allowing 53 + quick and easy exploration.</p> 54 54 <p>To motivate the need for such a program, we could begin by mounting a 55 55 repository:</p> 56 56 <pre><code>λ pdsfs oppi.li ··· 61 61 is not important. Let’s have a look around:</p> 62 62 <pre><code>λ ls mnt/ 63 63 did:plc:qfpnj4og54vl56wngdriaxug/</code></pre> 64 - <p>The <code>did:plc:stuff</code> is my DID<a href="#fn3" 65 - class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>. 64 + <p>The <code>did:plc:stuff</code> is my <a 65 + href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">DID</a>. 66 66 Digging deeper:</p> 67 67 <pre><code>λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/ 68 68 app.bsky.actor.profile/ place.stream.chat.message/ ··· 170 170 in this case). The custom fs implementation is free to as it pleases, in 171 171 fact the first iteration of pdsfs accessed the network for each 172 172 open/read call to fetch live data from PDii.</p> 173 - <section id="footnotes" class="footnotes footnotes-end-of-document" 174 - role="doc-endnotes"> 175 - <hr /> 176 - <ol> 177 - <li id="fn1"><p>https://atproto.com/guides/data-repos<a href="#fnref1" 178 - class="footnote-back" role="doc-backlink">↩︎</a></p></li> 179 - <li id="fn2"><p>https://atproto.com<a href="#fnref2" 180 - class="footnote-back" role="doc-backlink">↩︎</a></p></li> 181 - <li id="fn3"><p>https://en.wikipedia.org/wiki/Decentralized_identifier<a 182 - href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li> 183 - </ol> 184 - </section> 185 173 186 174 </div> 187 175
+12 -12
posts/mounting_the_atmosphere.md
··· 1 1 [pdsfs](https://tangled.sh/@oppi.li/pdsfs) is a tool that 2 - mounts atproto PDS repositories as a FUSE filesystem. 2 + mounts [atproto](https://atproto.com) PDS repositories as a 3 + [FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) 4 + filesystem. 3 5 4 - A PDS repository[^0] contains all data published by a user to 5 - the atmosphere[^1]. It is exportable as a CAR 6 - (content-addressable archive) file. pdsfs is a tool that 7 - mounts this CAR file as a readonly-FUSE filesystem, allowing 8 - quick and easy exploration. 6 + A [PDS 7 + repository](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) 8 + contains all data published by a user to the atmosphere. It 9 + is exportable as a CAR (content-addressable archive) file. 10 + pdsfs is a tool that mounts this CAR file as a readonly-FUSE 11 + filesystem, allowing quick and easy exploration. 9 12 10 13 To motivate the need for such a program, we could begin by 11 14 mounting a repository: ··· 22 25 λ ls mnt/ 23 26 did:plc:qfpnj4og54vl56wngdriaxug/ 24 27 25 - The `did:plc:stuff` is my DID[^2]. Digging deeper: 28 + The `did:plc:stuff` is my 29 + [DID](https://en.wikipedia.org/wiki/Filesystem_in_Userspace). 30 + Digging deeper: 26 31 27 32 λ ls mnt/did\:plc\:qfpnj4og54vl56wngdriaxug/ 28 33 app.bsky.actor.profile/ place.stream.chat.message/ ··· 144 149 pleases, in fact the first iteration of pdsfs accessed the 145 150 network for each open/read call to fetch live data from 146 151 PDii. 147 - 148 - 149 - [^0]: https://atproto.com/guides/data-repos 150 - [^1]: https://atproto.com 151 - [^2]: https://en.wikipedia.org/wiki/Decentralized_identifier