diff --git a/bun.lockb b/bun.lockb
index 56afe13..761def7 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 07bac45..eb0e917 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"typescript": "^5"
},
"dependencies": {
+ "@ocbwoy3/libocbwoy3": "^0.0.5",
"@types/commander": "^2.12.5",
"@types/dotenv": "^8.2.3",
"@types/sharp": "^0.32.0",
diff --git a/scripts/bin/betterSplash.ts b/scripts/bin/betterSplash.ts
index f4693e9..91c1436 100644
--- a/scripts/bin/betterSplash.ts
+++ b/scripts/bin/betterSplash.ts
@@ -2,30 +2,108 @@
import { $ } from "bun";
+const birthday = new Date(2009, 7, 16);
+const age = Math.floor(
+ (Date.now() - birthday.getTime()) / (1000 * 60 * 60 * 24 * 365)
+);
+
+const isBirthday =
+ birthday.getDate() === new Date().getDate() &&
+ birthday.getMonth() === new Date().getMonth();
+
+const isLatvian = Intl.DateTimeFormat()
+ .resolvedOptions()
+ .timeZone.startsWith("Europe/Riga");
+
+function getOrdinalSuffix(day: number): string {
+ const j = day % 10,
+ k = day % 100;
+ if (j === 1 && k !== 11) return "st";
+ if (j === 2 && k !== 12) return "nd";
+ if (j === 3 && k !== 13) return "rd";
+ return "th";
+}
+
+// chatgpt
+function chooseRandom(array: string[]): string {
+ if (isBirthday)
+ return `Is it your ${age}${getOrdinalSuffix(age)} birthday?`;
+
+ if (array.length === 0) throw new Error("lol");
+ const index =
+ crypto.getRandomValues(new Uint32Array(4)).reduce((a, b) => a + b) %
+ array.length;
+ return array[index];
+}
+
const splashes = [
- "not ben shaped pear-o",
+ "Keep on ricing yo' Hyprland",
+ "Let's make today even better!",
- "\"I use Nix, btw!\" - OCbwoy3",
- "I use Nix, btw!",
- "Nix beats arch",
-
- "You like kissing boys, don't you?",
-
- "Now with gay furries :3",
- "Now with femboys :3",
+ "\"iUseNixBTW\" You literally... Roblox?",
+ "is it just me or the arch/nix pipeline turned me into a closeted femboy?",
+ "the nix pipeline is real",
+ "Anti-OCbwoy3-ifier MV2 Premium.xpi",
+
+ "Do crabs think fish are flying?",
+ "Don't forget to water your thoughts.",
+ "Fox detected. Please pet gently.",
+
+ // Venting ones
+
+ "mount /dev/boyfriend ~",
+ isLatvian
+ ? "Latvia.. I hate it here, I wanna move." /* extremely accurate unbiased content coming from a latvian himself */
+ : "NOT going back Latvia.",
+ "rm -rf ~",
+
+ // Minecraft (DEI ones)
+
+ "Amplify and listen to BIPOC voices!",
+ "Support the BIPOC community and creators!",
+ "Contains infinite genders!",
+ "Remember to use gender neutral pronouns!",
+ "You are valid!",
+ "I'm glad you're here!",
+ "You are welcome here!",
+ "Your gender is valid!",
+
+ // Regretevator ones
+
+ "dr! ar u sure i cant drink 20 blogsy's??",
+ "That subway wuz so dark! Can't have a party withowt silly litez!",
+ "Blogsy is so AWESOME!",
+ "My life is liek a video game i think",
+
+ "What’s yer favorite type o’ wood?",
+ "Everybody knows th’ best kind o’ buildin’ is made outta grit and woodwork!",
+
+ // Me IRL
+
+ "tfw Hyprland boots faster than I do",
+ "everyone gangsta till your free trial of life ends",
+
+ // Reality
+
+ "flake 'flake:self' does not provide attribute 'willpower'",
+ "copilot stop writing my thoughts",
+ "404: purpose not found",
+ "respawn button greyed out",
+ "you’ve reached the end of the existential demo",
+ "feeling like an empty JSON object"
+
];
const debug: boolean = false as false | true;
if (debug === true) {
- splashes.forEach(async(a)=>{
- await $`notify-send "Welcome to... your PC?" "${a}"`;
- })
+ splashes.forEach(async (a) => {
+ await $`notify-send "Welcome to Hyprland!" "${a}"`;
+ });
} else {
- const randomSplash = splashes[Math.floor(Math.random() * splashes.length)];
-
- await $`notify-send "Welcome to... your PC?" "${randomSplash}"`;
-}
+ const randomSplash = chooseRandom(splashes);
+ await $`notify-send "Welcome to Hyprland!" "${randomSplash}"`;
+}
diff --git a/scripts/bin/patchInternalRobloxStudio.ts b/scripts/bin/patchInternalRobloxStudio.ts
index 04ea18d..21b922f 100644
--- a/scripts/bin/patchInternalRobloxStudio.ts
+++ b/scripts/bin/patchInternalRobloxStudio.ts
@@ -1,6 +1,9 @@
import { promises as fs } from "fs";
import * as path from "path";
import * as os from "os";
+import { setConsoleTitle } from "@ocbwoy3/libocbwoy3";
+
+setConsoleTitle("Roblox Studio patcher");
const SIGNATURE = Buffer.from([
0x48, 0x81, 0xEC, 0x40, 0x03, 0x00, 0x00, 0x84, 0xD2, 0x74, 0x05, 0xE8
diff --git a/scripts/bin/r2Upload.ts b/scripts/bin/r2Upload.ts
index b0854f6..201f495 100644
--- a/scripts/bin/r2Upload.ts
+++ b/scripts/bin/r2Upload.ts
@@ -3,6 +3,9 @@ import { configDotenv } from "dotenv";
import { homedir } from "os";
import { readdirSync, readFileSync, statSync } from "fs";
import { join } from "path";
+import { setConsoleTitle } from "@ocbwoy3/libocbwoy3";
+
+setConsoleTitle("R2 Uploader");
try {
const start = Date.now();
@@ -34,12 +37,12 @@ try {
let [ _, regretevator, floorNum ] = latestFile.match(/\-(regretevator)\-?([0-9]+)?\.png$/) || [];
+ // the devs changed rich presence, what's the point of parsing the filename if tuxstrap doesn't update the state file anymore?
if (regretevator === "regretevator") {
latestFile = latestFile.replace(`-regretevator${floorNum ? `-${floorNum}` : ""}.png`,".png")
+ // OR i could keep the filename and have my worker parse the filename
if (floorNum) {
urlParams = `?floor=${floorNum}`
- } else {
- urlParams = ``
}
}
@@ -52,7 +55,7 @@ try {
} catch (e_) {
const cx = `${e_}`.toLowerCase();
if (cx.includes("enable r2") && cx.includes("cloudflare dashboard")) {
- $`notify-send "Cloudflare" "bro u mf didnt pay for r2 >:(
${`${e_}`}"`.nothrow().catch(a => { });
+ $`notify-send "Cloudflare" "You owe Cloudflare money!! >:(
${`${e_}`}"`.nothrow().catch(a => { });
process.exit(0);
}
$`notify-send "Screenshot" "${`${e_}`}"`.nothrow().catch(a => { });