This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

1import { FitAddon } from "@xterm/addon-fit"; 2import { WebglAddon } from "@xterm/addon-webgl"; 3import { Terminal } from "@xterm/xterm"; 4import "@xterm/xterm/css/xterm.css"; 5import { 6 BlockDevice, 7 ConsoleDevice, 8 EntropyDevice, 9 Machine, 10} from "./build/linux"; 11import "./style.css"; 12 13const terminal = new Terminal({ 14 convertEol: true, 15 fontFamily: "monospace", 16}); 17 18{ 19 const terminal_fit = new FitAddon(); 20 terminal.loadAddon(terminal_fit); 21 terminal.open(document.body); 22 terminal_fit.fit(); 23 window.onresize = () => terminal_fit.fit(); 24} 25 26try { 27 terminal.loadAddon(new WebglAddon()); 28} catch (err) { 29 console.warn(err); 30} 31 32if (!window.crossOriginIsolated) { 33 terminal.write("Error: not cross origin isolated\n"); 34} 35 36const { 37 cmdline = "", 38 memory = navigator.hardwareConcurrency > 16 ? 256 : 128, 39 initcpio: initcpio_path = new URL("./build/initcpio", import.meta.url).href, 40} = Object.fromEntries(new URLSearchParams(location.search)); 41 42(document.querySelector("input[name=cmdline]") as HTMLInputElement).value = 43 cmdline; 44(document.querySelector("input[name=memory]") as HTMLInputElement).value = 45 String(memory); 46(document.querySelector("input[name=initcpio]") as HTMLInputElement).value = 47 initcpio_path; 48 49const initcpio = await fetch(initcpio_path).then((res) => 50 res.ok ? res.arrayBuffer() : null, 51); 52if (!initcpio) { 53 terminal.write(`Failed to fetch initramfs.\n`); 54} 55 56const stdin = new ReadableStream<string>({ 57 start(controller) { 58 terminal.onData((data) => { 59 controller.enqueue(data); 60 }); 61 }, 62}).pipeThrough(new TextEncoderStream()); 63 64const stdout = new WritableStream<Uint8Array>({ 65 write(chunk) { 66 terminal.write(chunk); 67 }, 68}); 69const stdout2 = new WritableStream<Uint8Array>({ 70 write(chunk) { 71 terminal.write(chunk); 72 }, 73}); 74 75const machine = new Machine({ 76 cmdline: cmdline.replace(/\+/g, " "), 77 memoryMib: Number(memory), 78 devices: [ 79 new ConsoleDevice(stdin, stdout), 80 new EntropyDevice(), 81 new BlockDevice(new Uint8Array(8 * 1024 * 1024)), 82 ], 83 initcpio: initcpio ? new Uint8Array(initcpio) : undefined, 84}); 85 86// machine.bootConsole.pipeTo(stdout2); 87 88machine.on("halt", () => { 89 terminal.write("halting..."); 90}); 91 92machine.on("restart", () => { 93 location.reload(); 94}); 95 96machine.on("error", ({ error, threadName }) => { 97 terminal.write(`${error.name} in ${threadName}: ${error.message}\n`); 98}); 99 100machine.boot();