= useRef(null);
+
+ const handleBlur = useCallback((e: PointerEvent) => {
+ if (!buttonRef.current!.contains(e.target! as Node)) {
+ setFocused(false);
+ document.removeEventListener("click", handleBlur)
+ }
+ }, [])
+
+ const handleFocus = useCallback(() => {
+ setFocused(true);
+
+ document.addEventListener("click", handleBlur)
+ }, [])
+
+ const handleDoubleClick = useCallback(() => {
+ let app = APP_REGISTRY[file.type as SourceTypes];
+ if (app === undefined) {
+ console.error(`couldn't find app for file of type "${file.type}"`)
+ return
+ }
+
+ setFocused(false);
+ taskManager.add({
+ app,
+ source: signal(file),
+ window: {
+ minimized: signal(false),
+ maximized: signal(false),
+ height: file.height,
+ width: file.width,
+ z: signal(taskManager.tasks.value.value.length)
+ },
+ title: signal(undefined),
+ id: getTaskId(),
+ contentReady: signal(false),
+ sizingFinished: signal(false)
+ })
+ }, [])
+
+ return
+
+
+
+ {/* for some reason firefox can select the name div if i don't add tabindex=-1
+ * as a side effect of doing that, click events don't go to the button
+ * See:
+ * https://html.spec.whatwg.org/multipage/interaction.html#click-focusable
+ * https://html.spec.whatwg.org/multipage/interaction.html#attr-tabindex
+ */}
+
+
+}
diff --git a/src/desktop/files/about.tsx b/src/desktop/files/about.tsx
new file mode 100644
index 0000000..8c4ffc8
--- /dev/null
+++ b/src/desktop/files/about.tsx
@@ -0,0 +1,33 @@
+import { VirtualTextFile } from "$/apps/source";
+
+export default {
+ name: "ABOUT.txt",
+ type: "text",
+ content: <>
+Netpunk
+
+
+
+ Tracklist:
+
+
+ Internet Exploder
+ Netpunk (feat. Kasane Teto)
+ Free Download
+ I am not a Robot
+ Content
+ Keygen
+ Base64
+ Readme (feat. Kasane Teto)
+ Symlink
+ Memory
+
+
+
+An album about borrowing software forever.
+
+A clumsy robot forgets about their girlfriend's anniversary, scrambling to find something to do for the date, eventually concluding they should watch a movie. Of course the movie is in high demand, so the tickets have sold out. Ultimately they resort to piracy, and things spiral out of control...
+>,
+ height: "25em",
+ width: "50ch"
+} as VirtualTextFile;
diff --git a/src/desktop/files/base64.tsx b/src/desktop/files/base64.tsx
new file mode 100644
index 0000000..f6acaf7
--- /dev/null
+++ b/src/desktop/files/base64.tsx
@@ -0,0 +1,31 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Base64.txt",
+ type: "text",
+ content: (
+ <>
+ Base64
+WW91IGZvdW5kIGEgc2VjcmV0IQ==
+
+ Base64 is a binary-to-text encoding that uses 64 characters to represent sequences of byte values. It’s used for many things such as web pages, e-mail attachments or QR codes, but is also used to obfuscate links that a bot or scraper shouldn’t see (to avoid getting your website blocked).
+In this song I interpreted it as a singer using a foreign, encoded language we can’t understand, but still enjoy.
+For the vocal I used a free plugin called Aquestone, which is like a precursor to Vocaloid. Similar principle though, you fill in some text and it’ll sing each syllable every note you play. The words I filled in are “netpunkalbum”, but the accent makes it unrecognizable.
+
+
+I really love the sound of this synth and I plan on doing more with it, despite it being extremely old and buggy. Here’s a video from 17 years ago showcasing it in more detail!
+
+
+Also need to mention Base64 is heavily inspired by “Can You Feel” by Torchkas. I first heard it in a Super Mario World romhack called VLDC, known as Abstract Map there.
+
+
+Graphics
+A lot of the background visuals are from the Butter Churn visualizer, it’s based on the Milkdrop 2 visualizer from Winamp. Open source as well!
+
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/content.tsx b/src/desktop/files/content.tsx
new file mode 100644
index 0000000..693be41
--- /dev/null
+++ b/src/desktop/files/content.tsx
@@ -0,0 +1,34 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Content.txt",
+ type: "text",
+ content: (
+ <>
+ Content
+Description
+This track is what it feels like to doomscroll until your brain turns into slime. Considering I might be consuming too much content, it’s ironic I made more.
+
+Sound design
+I’ve always sampled other songs in my music, but really wanted to challenge myself with this one. This song is created entirely using snippets from other music, except the drums. In the end I think I sampled around 30 tracks to make this. Heavily inspired by zeroth’s sample away the world.
+
+ sample anything and everything in life pic.twitter.com/cf9bGzIPFs
+
+zeroth (@notzeroth) April 14, 2025
+
+Graphics
+For the music video I simply recorded my screen while scrolling Bluesky and Pinterest, and occasionally layered the two together with random blend modes.
+While uploading the video to YouTube I ran into an extremely infuriating issue, the video was considered a “Short” because it has a square aspect ratio and under 3 minutes long. So I had to export the video TWO pixels wider than usual to make it stop detecting as a short. The resolution ended up becoming 2162 x 2160 px. Cursed.
+
+“AAA” is the test file that confirmed adding two pixels to the width of the video actually prevents it from turning into a short. Thanks YouTube, great feature not having the option to say whether a video should be put in front of people with zero attention span.
+
+WRAHHGHGHHHGHGHGH HGHGHHHHH
+Okay rant over, it took a little longer than I’d hoped re-rendering that but it’s all good now!!
+
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/freeDownload.tsx b/src/desktop/files/freeDownload.tsx
new file mode 100644
index 0000000..491c2fc
--- /dev/null
+++ b/src/desktop/files/freeDownload.tsx
@@ -0,0 +1,30 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Free Download.txt",
+ type: "text",
+ content: (
+ <>
+ Free Download
+ 100% working no virus
+
+
+ This track is a reference to infamous YouTube tutorials from the 2010s about topics like how to get Minecraft for free. One of the most popular music tracks was{" "}
+
+ 009 Sound System Dreamscape
+
+ .
+
+
+ I still love this track and listen to it occasionally.
+ A little while ago I found out about a genre called hypertrance. It’s a movement that expands on the origins of trance music, and I immediately fell in love with it. I wanted to try making the genre myself by combining Dreamscape with hypertrance. It was a lot of fun trying to make that overly grand, almost cheesy futuristic vibe the music portrayed.
+
+
+ I was around 9 years old when I got my first laptop, and I remember being a little idiot trying to download Nintendo games for free, stuff like “free eShop gift card generator” and getting my whole computer infected with every kind of malware ever. Still funny to think about 13 years later!
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/iAmNotARobot.tsx b/src/desktop/files/iAmNotARobot.tsx
new file mode 100644
index 0000000..05d23f0
--- /dev/null
+++ b/src/desktop/files/iAmNotARobot.tsx
@@ -0,0 +1,28 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "I am not a Robot.txt",
+ type: "text",
+ content: (
+ <>
+ I am not a Robot
+Powered by reCAPTURE
+Many websites want to prevent bots from accessing their data, so they use countermeasures such as CAPTCHAs. These typically include a piece of warbled text that you gotta copy, or a checkbox saying “I am not a bot”.
+This track recontextualizes the phrase when it comes to robots and their journey to get closer to human behavior. Are they aware of their true nature? Should they strive to become human? Does it even matter? I wonder how Sunnexo feels about this.
+
+Sound design
+For this particular track I wanted to use some older sample packs like the ones by Vengeance Sound, but also even older ones such as the Zero-G CDs. They’re so cheesy but so much fun at the same time. I believe artists like Hideki Naganuma used the Zero-G ones back in the day, a notable example being Jet Set Radio’s soundtrack. Nowadays these packs are available on the Internet Archive.
+
+I also used a bunch of resampling techniques in the track, such as the glitchy piano. I made a few random chords and chopped them up using a slicer to rearrange the sequence into something stuttery. Resampling is a recurring theme in this album, I love doing it!
+Another thing I’d like to mention is this synth called Junior by Fors, it’s a recreation of the Game Boy’s wavetable as a modern VST plugin. I used it to create some of the old school growls and basses and love the way it sounds!
+
+It’s DRM free and cheap, unheard of nowadays when it comes to VSTs. And the demo video goes extremely hard…
+
+The music video contains background footage taken from a game called I’m not a robot, created by Neal.fun! I highly recommend checking it out, it runs in the browser.
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/index.ts b/src/desktop/files/index.ts
new file mode 100644
index 0000000..11dbd32
--- /dev/null
+++ b/src/desktop/files/index.ts
@@ -0,0 +1,34 @@
+import netpunk from "./netpunk.tsx";
+import listen from "./listen";
+import { VirtualFile } from "$/apps/source";
+import readmeLyrics from "./readmeLyrics";
+import netpunkLyrics from "./netpunkLyrics";
+import about from "./about";
+import freeDownload from "./freeDownload.tsx";
+import internetExploder from "./internetExploder.tsx";
+import readme from "./readme.tsx";
+import iAmNotARobot from "./iAmNotARobot.tsx";
+import content from "./content.tsx";
+import keygen from "./keygen.tsx";
+import base64 from "./base64.tsx";
+import symlink from "./symlink.tsx";
+import memory from "./memory.tsx";
+import robotYuri from "./robotYuri.tsx";
+import netpunkShred from "./netpunkShred.tsx";
+
+export const FILE_REGISTRY: VirtualFile[] = [
+ about,
+ listen,
+ internetExploder,
+ netpunk,
+ freeDownload,
+ iAmNotARobot,
+ content,
+ keygen,
+ base64,
+ readme,
+ symlink,
+ memory,
+ robotYuri,
+ netpunkShred
+]
diff --git a/src/desktop/files/internetExploder.tsx b/src/desktop/files/internetExploder.tsx
new file mode 100644
index 0000000..8f488c3
--- /dev/null
+++ b/src/desktop/files/internetExploder.tsx
@@ -0,0 +1,54 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Internet Exploder.txt",
+ type: "text",
+ content: (
+ <>
+Free Download
+100% working no virus
+
+Sound design
+I remember watching a GDC talk by Mick Gordon about his workflow when making the music for DOOM (2016). Mick showed how he started the sound design chain with a sine wave, because it is “the most pure representation of what sound can be”. He then started experimenting by putting different guitar pedals in series and created feedback loops.
+
+It sounds pretty awesome and unlike anything I had heard prior to playing the game, and I liked it so much I tried creating a similar bass sound in Phase Plant. Also starting with a sine and adding different effects on top of it just to see what would happen. The end result is very different but still cool in its own way.
+This is what the patch sounds like with and without effects:
+
+
+
+I started with a simple sine and wavetable, and added a big chain of distortion after it. It’s a pretty huge difference before and after. One thing I really like about this experiment is the Multipass instance called “ring air convolver”, which is just a convolution reverb that only affects the high end. The impulse response it’s using is just the tail of a random dubstep snare I found and it works surprisingly well to add top end to the bass. I also have a frequency shifter at the end of the chain that gets automated later on in the track.
+
+
+Rhythm
+I kept getting samey results in my own music, and wanted to make something a little more daring and different, so I ended up taking inspiration from the way Mick tackled music production as well. He discussed how changing your process is necessary if you want to change the outcome, and that’s exactly what I did!
+This time, I paid a lot of attention to the rhythmic pattern. I started by making an irregular rhythm, where some notes are offset by a 16th note so they hit just after the spot you expect them to be in, as if they’re lagging behind and catching up. I don’t usually make rhythms this way, and thought it would be interesting to try making an entire song around it.
+
+As of writing this I’m in art university studying music and technology, and I’ve learned a bit about sheet music. Now I actually know how to transcribe simple rhythms, so I did this one for fun!
+
+
+Artwork
+For this cover art I worked together with Rokushini and humanbydefinition!
+Rokushini is an illustrator, character designer and 3D artist, and I’ve always wondered what their artstyle would look like in pixel art. So I reached out and we decided to make something inspired by Flipnote Studio. It’s characterized by messy pixelated brush strokes, limited colors and dithering effects. They had not done pixel art prior to this project so it was a little challenging to get started, but the end result is almost exactly as I had hoped!
+
+
+Textmode
+Humanbydefinition is the creator of textmode.js, a creative coding library designed to make textmode graphics using JavaScript. At first I reached out to them because I had some issues with my code for an entirely unrelated project. Eventually we figured it out and I started experimenting more with the textmode.js library. Humanbydefinition actually went and made some tools for me that interpret video footage as textmode tiles, which I’ve used extensively throughout the music video. Huge thanks to them for the effort, this video wouldn’t have looked as cool without the tools.
+
+ my contribution was mostly about tooling rather than direct creative decisions. i onboarded sunnexo to textmode.js and put together a few basic sketches to convert video frames into textmode representations. to make the visuals work with the video’s palette and overall vibe, i added a small shader that remaps the source image colors to a limited palette by picking the closest match per pixel.
+ after that it was mostly just testing, tweaking, and making sure nothing got in the way. working with sunnexo was genuinely pleasant, especially because everything felt open and uncomplicated. (っ◔。◔)♪♬
+
+Written by @humanbydefinition
+I used a bunch of random footage for the background, such as fluid simulations, Garry’s Mod gameplay and recordings I made using my camera.
+
+
+Typography
+Inspired by the art from desktopGeneration and textmode I made my logotype using a font called TES-GIGR (created by hlotvonen). I used a program called lvllvl to assemble the typography. I started by copying another logo I saw called “angel” so I could understand the way the original creator used the tiles. From there I started iterating on my own logo. It was a painstakingly long task to find each tile to place in the right spots, but I think the end result is worth it.
+
+
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/keygen.tsx b/src/desktop/files/keygen.tsx
new file mode 100644
index 0000000..b922075
--- /dev/null
+++ b/src/desktop/files/keygen.tsx
@@ -0,0 +1,25 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Keygen.txt",
+ type: "text",
+ content:
+ <>
+ Keygen
+Fine release by Sunnexo 2026
+
+A key generator, commonly shortened as keygen, is a tool that generates a license key or serial number to unlock software. They can be made by legitimate distributors, but many of them are also made by software cracking groups. These programs often play tracker music which include genres like dubstep, drum and bass, trance and more.
+I really enjoy keygen music and wanted to make some myself too! For the album I wanted at least one track made on my Game Boy (using Little Sound DJ).
+
+BOOTLOOP version
+During the production of this track I also participated in the GMTK Game Jam (2025), which is an annual event where game developers around the world try to make a video game within 4 days. The theme we settled on was a small robot fighting computer viruses in its own circuits.
+I was the sound designer and composer for my team. We were on a tight time limit and I wanted to get a song out as quickly as possible, so I looked through my work in progress folder and decided the Keygen track fits the theme the best. I remixed the melody, added a new bassline and some modern drums, which worked out pretty well!
+We also ended up getting into the video on the GMTK channel! Skip to 18:05 to see the game.
+
+Check out BOOTLOOP.
+ >,
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/listen.ts b/src/desktop/files/listen.ts
new file mode 100644
index 0000000..59fdd8b
--- /dev/null
+++ b/src/desktop/files/listen.ts
@@ -0,0 +1,9 @@
+import { VirtualFile } from "$/apps/source";
+
+export default {
+ name: "Stream on Bandcamp",
+ type: "link",
+ link: new URL("https://bandcamp.com/EmbeddedPlayer/album=3374731395/size=large/bgcol=000000/linkcol=ff0047/transparent=true/"),
+ height: "70vh",
+ width: "25vw"
+} as VirtualFile
diff --git a/src/desktop/files/memory.tsx b/src/desktop/files/memory.tsx
new file mode 100644
index 0000000..cdcbfa3
--- /dev/null
+++ b/src/desktop/files/memory.tsx
@@ -0,0 +1,19 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Memory.txt",
+ type: "text",
+ content: (
+ <>
+ Memory
+Reconstructing human music after the singularity
+I have been learning guitar for a year now and finally felt comfortable enough with my skill level to make a full song using it! Heavily inspired by the music from kessoku band and Sunfaded.
+Memory is expensive nowadays, so cherish it while you can.
+
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/netpunk.tsx b/src/desktop/files/netpunk.tsx
new file mode 100644
index 0000000..7645495
--- /dev/null
+++ b/src/desktop/files/netpunk.tsx
@@ -0,0 +1,127 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Netpunk.txt",
+ type: "text",
+ content: (
+ <>
+ Netpunk (feat. Kasane Teto)
+ I think I started working on this about 2-3 years ago? It’s been so long I don’t remember! The oldest file on my PC with “netpunk” in the name is from 2024, so it must’ve been something like that. It was around the time I got my first electric guitar, a Yamaha Pacifica 112J in light blue. I’ve been practicing guitar ever since and it’s really hard, but a lot of fun as well. My fingers sure have grown extra layers of skin from all that playing.
+
+
+ This is also the first time I’ve ever used a vocal synth! I love Teto so much… I’m kinda terrible at writing lyrics so I’m really happy I got help from retraceyoursteps! She perfectly understood the type of girlfailure energy I wanted to write about. Read the lyrics below!
+
+ A clumsy robot forgets about their girlfriend’s anniversary, scrambling to find something to do for the date, eventually concluding they should watch a movie. Of course the movie is in high demand, so the tickets have sold out. Ultimately they resort to piracy, and things spiral out of control…
+
+ Graphics
+ This was originally going to get a bigger music video, but the scope was a little bigger than I could handle on my own. Stellazium and I came up with a big storyboard, but unfortunately she got occupied with other work. I actually learned Blender and made a ton of assets using it, but they didn’t end up getting used this time. Maybe they’ll be useful for future projects though!
+ Eventually I decided to reduce the scope of the video and make it more manageable for one person. I think it still ended up pretty nice, despite cutting out a bunch of our ideas.
+
+
+
+
+
+
+ Character design
+ We figured out the song’s narrative, and I had to come up with a character design that reflected the clumsy idiotic nature of the protagonist. I brainstormed a bit with Avolicis and our initial iteration looked like this:
+
+ I tried modeling this in Blender. Blender however, is way more difficult than it seems. Getting the mesh right was quite a challenge already, but then getting the rig working was even worse! To animate a 3D model it needs to have a skeleton (also called a rig). That skeleton will then deform the mesh when you move the bones around. This was far more work than I first thought, as I kept running into issues like the mesh not deforming correctly.
+
+ The original design had a skirt but I had to ditch it because it wouldn’t bend the way I expected. My friend Niko has a lot of experience with Blender so he was able to help me a lot with the technical stuff. Thanks to him I gained a ton of knowledge about the type of things that are easy or hard to do in Blender, and adjusted the 2nd iteration of the character accordingly.
+ Ghosttra.in helped me a lot with the model revision, giving me feedback on the proportions, hairstyle and outfit design. This time we went for a crop top and bodysuit, along with shorter hair that’s easier to animate.
+
+ I also used{" "}
+ a base mesh by KeyframeChef{" "}
+ to make sure I would get the mesh deformation right. Using that as a starting point I sculpted the model more towards my reference. I recommend watching{" "}
+ their video about low poly character creation!
+
+ The character looks way better than before, and it’s easier to animate as well. I’m very happy with the way this model turned out!
+
+
+
+
+ Textmode
+
+ Similar to{" "}
+ Internet Exploder’s music video
+ , I got help from humanbydefinition for the textmode graphics. They made{" "}
+ a tool{" "}
+ that lets me interpret videos as a grid of text symbols, also known as textmode art. I used this tool for the backgrounds in the music video, by feeding it footage from my camcorder, glitchy scenes I made in Blender and more.
+
+
+
+ Netpunk papercraft
+ To celebrate the release of my debut album I’ve made something silly… This may seem random, but I’ve always wanted to design a papercraft figure from scratch. And now that I’ve learned Blender I was finally able to do it!
+
+ Big announcement: You can build one yourself too,{" "}
+ get the template here!!
+
+
+
+
+
+ Lyrics written by Sunnexo and retraceyoursteps, performed by{" "}
+
+ Kasane Teto SV
+
+
+I just woke up
+My head in the clouds
+I've got one shot
+To figure it out
+But there's one problem
+The tickets sold out
+What the hell am I gonna do? (Oh god)
+
+I'm running on an empty charge
+You know my heart is still at large
+I can't believe I'm such a mess
+My head is yearning for more rest
+An anniversary forgot
+Because I stayed in bed to rot
+My mind is about to blow up
+My time is running out
+
+(♫)
+
+Now I'm searching the internet
+Gotta see if they have it yet
+It's a new film, no resales found
+Need to figure something out
+
+So I'm trying to pirate it
+But this website looks kinda shit
+Now out of options, I've got no choice
+But to take this chance
+
+My antivirus uninstalled
+I sense my data all dissolved
+I can't believe I screwed this up
+Can barely even make a sound
+My head is feeling all abuzz
+Because my code is all for naught
+My mind is about to blow up
+My time is rŗ̶̢̧͉̤̼̮͚͍̳̯̪͔̥̐̈́̄͒̌͗͆́̉́́͝ư̵̧͉͐̔̾̀͋̀̓̔̓͂͒̕͠n̷͚̬͉̦͒̐̈̈̌͌͂̉̑̃͛̒͝͠͝n̷̡̠͈̲̪͙̤͈͔̭͔̞͖̻͖̑̍́̍̒̉́̑̊̊̓͌̈̚ͅǐ̷͓n̵̢̙̉͐̆͑̈́͆͗̏̅͗̇̒̐ǵ̸͎̻̤̬͗̅̃̈̀̃̾̓ ̵̻̟̖̦̠̥̮̄͂̈́͛̉̎̌̽̒̕͘ő̵̞̯̱̼̼̭̲̘̳͑͛̆̅u̷̢͍̮̤̖̼̼̽̀́͒̆̂̃̒́̏̂̓͝͝͠͝t̶̨͇̮͓̦̯̞͍̬̮̯̞̼͖̊͌̈́̇̂̒̈́͋̚
+
+(̵̻̱̣́♫̷̦̈́̍͝)̸̺̓͑
+
+Alright I've got an idea
+Think I know what I gotta do (oh yeah)
+
+I'm thinking of a better plan
+I know the time I have at hand
+I may have hit my head real hard
+That might've made me really smart
+So tickets for the local fair
+A dinner date with time to spare
+Some scented candles and the rest
+Today will be the best
+
+(♫)
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/netpunkShred.tsx b/src/desktop/files/netpunkShred.tsx
new file mode 100644
index 0000000..d943180
--- /dev/null
+++ b/src/desktop/files/netpunkShred.tsx
@@ -0,0 +1,24 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Netpunk (shred version).txt",
+ type: "text",
+ content: (
+ <>
+ Netpunk (shred version feat. death do us apart)
+
+For art university I worked together with an artist called death do us apart! We did a guitar centric live performance using Netpunk. It was a ton of fun and we thought the guitar solo alone warranted a spot on the album.
+
+ When I was asked to play guitar on Netpunk I wasn't quite sure how to approach it. I started by just playing the lead melody interspersed with the power chords already present in the song. When the second chorus came I thought about writing a solo for it and practiced some improvisation, but was never able to make a pre written one. This performance was also my first time playing live so my improvisation ended up being an adrenaline fuelled solo, which turned out unexpectedly good.
+ Not being able to reproduce it for the recording, I had to transcribe the solo by hand in order to figure out what I was actually doing. In the end I just played the solo exactly how it was live, but slower and sped it back up for the final track.
+
+Written by death do us apart
+There’s a clip of the performance below, she’s cracked
+
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/readme.tsx b/src/desktop/files/readme.tsx
new file mode 100644
index 0000000..2ef67bd
--- /dev/null
+++ b/src/desktop/files/readme.tsx
@@ -0,0 +1,67 @@
+import { VirtualTextFile } from "$/apps/source";
+import { Hr } from "../hr";
+import { Link } from "../link";
+
+export default {
+ name: "Readme.txt",
+ type: "text",
+ content: (
+ <>
+ Readme
+ Save me, don't replace me
+
+
+ A{" "}
+
+ README
+ {" "}
+ is a text document that contains information about the content of the directory it’s located in. It typically contains instructions on how to use or install a program. If you ever need to know what a program does, the readme file shall explain.
+
+ {/* prettier-ignore */}
+ ░██{"\n"}
+{" "}░██{"\n"}
+░██░████ ░███████ ░██████ ░████████ ░█████████████ ░███████{"\n"}
+░███ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██{"\n"}
+░██ ░█████████ ░███████ ░██ ░██ ░██ ░██ ░██ ░█████████{"\n"}
+░██ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██{"\n"}
+░██ ░███████ ░█████░██ ░█████░██ ░██ ░██ ░██ ░███████{"\n"}
+
+
+
+ Lyrics written by Sunnexo and retraceyoursteps, performed by{" "}
+
+ Kasane Teto SV
+
+
+ Readme
+ Save me
+ Don't replace me
+ Open secret
+ Can you keep it
+ And yet I
+ Can just
+ Always
+ Show you
+ My file system
+ Read and
+ List them
+
+ (♫)
+
+ Readme
+ Save me
+ Don't replace me
+ Open secret
+ Can you keep it
+ And yet I
+ Can just
+ Always
+ Show you
+ My file system
+ Read and
+ List them
+ >
+ ),
+ height: "70vh",
+ width: "70vw",
+} as VirtualTextFile;
diff --git a/src/desktop/files/regex.txt b/src/desktop/files/regex.txt
new file mode 100644
index 0000000..c058f57
--- /dev/null
+++ b/src/desktop/files/regex.txt
@@ -0,0 +1,36 @@
+ (target|style|class|data-svelte-h|controls|title|frameborder|allow|referrerpolicy|allowfullscreen)=".*?"
+
+ ?
+
+(?<=img[^<]*?)>
+/>
+
+hr>
+hr/>
+
+(?<=(href|src)="/)
+https://sunnexo.moe/
+
+
+
+
+\n?\s+( )\n?\s+
+$1
+
+\n?\s*?(.*?)\n?\s*?
+ $2
+
+
+
+
+ $0