Compare commits

...

2 Commits

42 changed files with 1746 additions and 1651 deletions
+12 -12
View File
@@ -9,23 +9,23 @@
"astro": "astro"
},
"dependencies": {
"@astrojs/mdx": "^4.3.6",
"@astrojs/solid-js": "^5.1.1",
"@tailwindcss/vite": "^4.1.13",
"astro": "^5.14.1",
"@astrojs/mdx": "^4.3.13",
"@astrojs/solid-js": "^5.1.3",
"@tailwindcss/vite": "^4.1.18",
"astro": "^5.17.0",
"fuse.js": "^7.1.0",
"party-js": "^2.2.0",
"qrcode-generator": "^2.0.4",
"sharp": "^0.34.4",
"solid-js": "^1.9.9",
"tailwindcss": "^4.1.13"
"sharp": "^0.34.5",
"solid-js": "^1.9.11",
"tailwindcss": "^4.1.18"
},
"packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a",
"packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
"devDependencies": {
"@types/node": "^24.5.2",
"typescript": "^5.9.2",
"@types/node": "^25.1.0",
"typescript": "^5.9.3",
"typescript-plugin-toml": "^0.5.0",
"vite-plugin-toml": "^0.8.4",
"wrangler": "^4.40.2"
"vite-plugin-toml": "^0.8.7",
"wrangler": "^4.61.1"
}
}
+1350 -1603
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,2 +1,2 @@
<?xml version="1.0" standalone="no"?>
<?xml version="1.0" standalone="no"?>
<svg class="pf-v6-svg" viewBox="0 0 512 512" fill="currentColor" aria-hidden="true" role="img" width="100%" height="100%" color="" xmlns="http://www.w3.org/2000/svg"><path d="M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z"></path></svg>
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+25 -7
View File
@@ -23,6 +23,7 @@ const fuseOptions: IFuseOptions<Task> = {
const AppList: Component<{ lang: string }> = ({ lang }) => {
const [currentPlaceholder, setCurrentPlaceholder] = createSignal("");
const [searchQuery, setSearchQuery] = createSignal("");
const [flathub, setFlathub] = createSignal(false);
const fuse = new Fuse(appData.tasks as Task[], fuseOptions);
const searchResults = createMemo(() => {
if (searchQuery().trim() === "") {
@@ -38,18 +39,19 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
onMount(async () => {
setCurrentPlaceholder(
appData.tasks[Math.floor(Math.random() * appData.tasks.length)].name
appData.tasks[Math.floor(Math.random() * appData.tasks.length)]
.name,
);
setInterval(() => {
const cats = Object.values(strings().categories);
setCurrentPlaceholder(
cats[Math.floor(Math.random() * cats.length)]
cats[Math.floor(Math.random() * cats.length)],
);
}, 3000);
setStrings(
(await import(`@/data/strings/${lang}.toml`)).default.appList
(await import(`@/data/strings/${lang}.toml`)).default.appList,
);
if (lang === "en") return;
@@ -58,7 +60,7 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
(appData.tasks as Task[]).map((task) => ({
...task,
name: strings().categories[task.key] ?? task.name,
}))
})),
);
});
@@ -68,7 +70,10 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
return (
<>
<div id="searchBox" class="my-4 flex justify-center items-center">
<div
id="searchBox"
class="mt-4 mb-2 flex justify-center items-center"
>
<span>{strings().todo}</span>
<input
type="search"
@@ -80,6 +85,15 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
class="ml-4 px-4 py-2 border rounded dark:border-slate-600 border-gray-400"
/>
</div>
<div class="mb-4 flex justify-center items-center gap-2">
<input
type="checkbox"
id="flathub"
checked={flathub()}
oninput={(e) => setFlathub(e.target.checked)}
/>
<label>Link to Flathub (if available)</label>
</div>
<div
id="appList"
class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"
@@ -90,11 +104,15 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
<div class="font-bold border-r dark:border-slate-600 border-gray-400 w-[30%] pr-4 mr-4">
{getTaskName(item.key) ?? item.name}
</div>
<ul class="flex gap-4">
<ul class="flex gap-x-4 flex-wrap">
{item.apps.map((app) => (
<li>
<a
href={app.url}
href={
flathub()
? (app.flathub ?? app.url)
: app.url
}
target="_blank"
rel="noopener"
>
+10
View File
@@ -21,6 +21,11 @@ name = "OpenToonz"
url = "https://opentoonz.github.io/e/"
flathub = "https://flathub.org/en/apps/io.github.OpenToonz"
[[tasks.apps]]
name = "Krita"
url = "https://krita.org/"
flathub = "https://flathub.org/en/apps/org.kde.krita"
[[tasks]]
name = "Drawing"
key = "drawing"
@@ -135,6 +140,11 @@ flathub = "https://flathub.org/en/apps/com.visualstudio.code"
name = "JetBrains IDEs"
url = "https://www.jetbrains.com/"
[[tasks.apps]]
name = "Zed"
url = "https://zed.dev/"
flathub = "https://flathub.org/en/apps/dev.zed.Zed"
[[tasks]]
name = "Video Editing"
key = "video"
+2 -2
View File
@@ -5,7 +5,7 @@ title: Choose your flavor
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import fedoraWorkstation from "@/assets/imgs/Fedora/fedora42_workstation.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora43_kdeplasma.png";
Choose a desktop environment, pick whatever you like based on
appearance. KDE Plasma (Right) may be more familiar for Windows users.
@@ -28,7 +28,7 @@ appearance. KDE Plasma (Right) may be more familiar for Windows users.
src={fedoraPlasma}
formats={["avif"]}
width="1280"
alt="Fedora KDE Plasma Desktop 42"
alt="Fedora KDE Plasma Desktop 43"
/>
<figcaption>Fedora KDE Plasma Desktop</figcaption>
</figure>
+2 -2
View File
@@ -4,13 +4,13 @@ title: Fedora KDE Plasma Desktop
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora43_kdeplasma.png";
<Picture
src={fedoraPlasma}
formats={["avif"]}
width="1280"
alt="Fedora KDE Plasma Desktop 42"
alt="Fedora KDE Plasma Desktop 43"
/>
<ChoiceList>
+19
View File
@@ -0,0 +1,19 @@
---
title: Fedora Media Writer
description: Choosing to download Fedora automatically.
continueTo: distro/fedora/plasma/1/
---
import { Picture } from "astro:assets";
import selectImageSource from "@/assets/imgs/Fedora/FedoraMediaWriter/SelectImageSource.png";
<div class="flex justify-center">
<Picture
src={selectImageSource}
formats={["avif"]}
alt="Fedora Media Writer's Select Image Source page"
class="h-72 w-auto"
/>
</div>
Select "Download automatically" and click Next.
+19
View File
@@ -0,0 +1,19 @@
---
title: Select Fedora Release
description: Select the Fedora release according to your choosing.
continueTo: distro/fedora/plasma/2/
---
import { Picture } from "astro:assets";
import selectImageSource from "@/assets/imgs/Fedora/FedoraMediaWriter/SelectFedoraRelease_Plasma.png";
<div class="flex justify-center">
<Picture
src={selectImageSource}
formats={["avif"]}
alt="Fedora Media Writer's Select Fedora Release page"
class="h-72 w-auto"
/>
</div>
Select "Fedora KDE Plasma Desktop" and click Next.
+25
View File
@@ -0,0 +1,25 @@
---
title: Write Options
description: Selecting the USB flash drive write options
continueTo: distro/fedora/plasma/3/
---
import { Picture } from "astro:assets";
import writeOptions from "@/assets/imgs/Fedora/FedoraMediaWriter/WriteOptions.png";
<div class="flex justify-center">
<Picture
src={writeOptions}
formats={["avif"]}
alt="Fedora Media Writer's Write Options page"
class="h-72 w-auto"
/>
</div>
Select the latest version available (as of writing, is version 43) and make
sure you're choosing the right device in the USB Drive dropdown.
Optionally, check "Delete download after writing" if you'd like to save space
and do not plan to format a USB flash drive again with Fedora anytime soon.
Then, Click "Write"
+22
View File
@@ -0,0 +1,22 @@
---
title: Erase Confirmation
description: Confirming the formatting of the USB drive.
continueTo: distro/fedora/plasma/4/
---
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import eraseConfirmation from "@/assets/imgs/Fedora/FedoraMediaWriter/EraseConfirmation.png";
<div class="flex justify-center">
<Picture
src={eraseConfirmation}
formats={["avif"]}
alt="Fedora Media Writer's Erase Confirmation dialog"
class="h-48 w-auto"
/>
</div>
**The entire device that you have selected will be wiped.** Click "Write" if
you have absolutely made sure that the selected device does not have important
data on it. This action is **irreversible.**
+22
View File
@@ -0,0 +1,22 @@
---
title: Wait
description: Wait while Fedora Media Writer does its thing.
continueTo: distro/fedora/plasma/5/
---
import { Picture } from "astro:assets";
import writing from "@/assets/imgs/Fedora/FedoraMediaWriter/Writing.png";
<div class="flex justify-center">
<Picture
src={writing}
formats={["avif"]}
alt="Fedora Media Writer's Writing page"
class="h-72 w-auto"
/>
</div>
Now, wait while Fedora Media Writer is downloading and writing to your USB
flash drive. You can do something else while it does its thing.
_Yes, The screenshot above is reused from the Workstation guide._
+19
View File
@@ -0,0 +1,19 @@
---
title: Finished
description: Finished! Get ready to install.
continueTo: distro/fedora/plasma/install/0/
---
import { Picture } from "astro:assets";
import finished from "@/assets/imgs/Fedora/FedoraMediaWriter/Finished.png";
<div class="flex justify-center">
<Picture
src={finished}
formats={["avif"]}
alt="Fedora Media Writer's Finished page"
class="h-72 w-auto"
/>
</div>
Done! Next, We'll start the real installation process.
@@ -0,0 +1,15 @@
---
title: Installation
description: The steps of installing Fedora Linux
continueTo: distro/fedora/plasma/install/1/
---
import QRCode from "@/components/QRCode.astro";
The steps after this will require you to restart the machine you're going to
install Linux on. If that is the machine you're viewing this guide on, You
should likely switch to a phone or other devices.
<div class="flex justify-center">
<QRCode msg="/en/distro/fedora/plasma/install/0/" width="164" />
</div>
@@ -0,0 +1,6 @@
---
title: Restart
description: Restarting your machine to boot from the USB flash drive
aliasOf: common/boot/bootmenukey
continueTo: distro/fedora/plasma/install/2/
---
@@ -0,0 +1,6 @@
---
title: Boot Menu
description: Choose your USB flash drive
aliasOf: common/boot/bootmenuselect
continueTo: distro/fedora/plasma/install/3/
---
@@ -0,0 +1,22 @@
---
title: Boot Option Restoration
continueTo: distro/fedora/plasma/install/4/
---
import { Picture } from "astro:assets";
import bootOption from "@/assets/imgs/Fedora/Boot/BootOptionRestoration_Cropped.png";
<div class="relative">
<Picture
src={bootOption}
formats={["avif"]}
alt="A photo of the boot option menu"
/>
<div class="absolute bottom-1/4 max-w-3/4 left-1/8 translate-y-3/8 bg-black/30 rounded p-4 text-white">
You _may_ see this screen if you have secure boot enabled, Press any key on
your keyboard to stop your system from restarting.
You can ignore this step (and the next) if you do not face this screen.
</div>
</div>
@@ -0,0 +1,19 @@
---
title: Continue Boot
continueTo: distro/fedora/plasma/install/5/
---
import { Picture } from "astro:assets";
import continueBoot from "@/assets/imgs/Fedora/Boot/ContinueBootOption_Cropped.png";
<div class="relative">
<Picture
src={continueBoot}
formats={["avif"]}
alt="A photo of the boot option menu"
/>
<div class="absolute bottom-1/4 max-w-3/4 left-1/8 translate-y-1/2 bg-black/30 text-white rounded p-4">
After that, press the arrow down key to select "Continue boot" and then
press Enter.
</div>
</div>
@@ -0,0 +1,21 @@
---
title: GRUB Menu
description: Entering Fedora Linux
continueTo: distro/fedora/plasma/install/6/
---
import { Picture } from "astro:assets";
import continueBoot from "@/assets/imgs/Fedora/Plasma/Install/GRUB_Cropped.png";
<div class="relative">
<Picture
src={continueBoot}
formats={["avif"]}
alt="A photo of the boot loader, showing a list with 3 items"
/>
<div class="absolute top-1/2 w-3/4 left-1/8 -translate-y-1/2 text-white">
You can simply press Enter to continue. However, If your machine is
slow, You could skip the test by pressing the arrow up key and Enter to
directly enter the desktop.
</div>
</div>
@@ -0,0 +1,17 @@
---
title: Integrity Check
continueTo: distro/fedora/plasma/install/7/
---
import { Picture } from "astro:assets";
import check from "@/assets/imgs/Fedora/Install/Check_Cropped.png";
<Picture
src={check}
formats={["avif"]}
alt="A photo of a running integrity check"
/>
If you didn't skip the test, You will see this screen.
Simply wait for it to complete and you'll go right into
the desktop.
@@ -0,0 +1,18 @@
---
title: Welcome
continueTo: distro/fedora/plasma/install/8/
---
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import overview from "@/assets/imgs/Fedora/Plasma/Install/Welcome.png";
<Picture
src={overview}
formats={["avif"]}
alt="The desktop view, with a Welcome window"
width="1280"
/>
Welcome to the desktop! You can optionally explore the desktop first, or
directly click the big "Install to Hard Drive" button
+1 -1
View File
@@ -16,7 +16,7 @@ import writeOptions from "@/assets/imgs/Fedora/FedoraMediaWriter/WriteOptions.pn
/>
</div>
Select the latest version available (as of writing, is version 42) and make
Select the latest version available (as of writing, is version 43) and make
sure you're choosing the right device in the USB Drive dropdown.
Optionally, check "Delete download after writing" if you'd like to save space
+2 -2
View File
@@ -5,7 +5,7 @@ title: เลือกรสชาติที่คุณชอบ
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import fedoraWorkstation from "@/assets/imgs/Fedora/fedora42_workstation.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora43_kdeplasma.png";
เลือกสภาพแวดล้อมเดสก์ท็อปของคุณ เลือกอะไรก็ได้จากหน้าตาของมัน KDE Plasma
(รูปด้านขวา) อาจมีการทำงานที่ผู้ใช้ Windows จะคุ้นชินมากกว่า
@@ -28,7 +28,7 @@ import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
src={fedoraPlasma}
formats={["avif"]}
width="1280"
alt="Fedora KDE Plasma Desktop 42"
alt="Fedora KDE Plasma Desktop 43"
/>
<figcaption>Fedora KDE Plasma Desktop</figcaption>
</figure>
+2 -2
View File
@@ -4,13 +4,13 @@ title: Fedora KDE Plasma Desktop
import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
import fedoraPlasma from "@/assets/imgs/Fedora/fedora43_kdeplasma.png";
<Picture
src={fedoraPlasma}
formats={["avif"]}
width="1280"
alt="Fedora KDE Plasma Desktop 42"
alt="Fedora KDE Plasma Desktop 43"
/>
<ChoiceList>
+1 -1
View File
@@ -16,7 +16,7 @@ import writeOptions from "@/assets/imgs/Fedora/FedoraMediaWriter/WriteOptions.pn
/>
</div>
เลือกเวอร์ชันล่าสุด (ณ เวลาที่เขียนคือ 42) และทำให้แน่ใจว่าเลือกแฟลชไดรฟ์ถูก
เลือกเวอร์ชันล่าสุด (ณ เวลาที่เขียนคือ 43) และทำให้แน่ใจว่าเลือกแฟลชไดรฟ์ถูก
คลิก "Delete download after writing" ถ้าอยากลบไฟล์ระบบหลังโปรแกรม
ทำการฟอร์แมตไดรฟ์เสร็จ
+24 -1
View File
@@ -9,7 +9,7 @@ action = "continue"
[[dialogs.choices]]
text = "Just recommend me one"
action = "jump"
data = 3
data = 5
[[dialogs]]
title = "In the sea of distributions"
@@ -70,3 +70,26 @@ content = ""
text = "Continue"
action = "link"
data = "https://archlinux.org/"
[[dialogs]]
title = "What matters most to you?"
content = "Would you prefer a modern interface with up-to-date software or having a rock-solid system?"
[[dialogs.choices]]
text = "Modernness"
action = "jump"
data = 3
[[dialogs.choices]]
text = "Absolute stability"
action = "jump"
data = 6
[[dialogs]]
title = "Linux Mint"
content = "A stable and user-friendly Linux distribution."
[[dialogs.choices]]
text = "Continue"
action = "link"
data = "https://linuxmint.com/"
+24 -1
View File
@@ -9,7 +9,7 @@ action = "continue"
[[dialogs.choices]]
text = "แนะนำมาอย่างเดียวก็พอ"
action = "jump"
data = 3
data = 5
[[dialogs]]
title = "ในทะเลแห่งการแจกจ่าย Linux"
@@ -70,3 +70,26 @@ content = ""
text = "ดำเนินการต่อ"
action = "link"
data = "https://archlinux.org/"
[[dialogs]]
title = "อะไรสำคัญสำหรับคุณมากที่สุด"
content = "คุณเลือกอะไรระหว่างหน้าตาที่ทันสมัยที่มาพร้อมกับซอฟต์แวร์ล่าสุดหรือระบบที่สเถียรมากที่สุด"
[[dialogs.choices]]
text = "ความทันสมัย"
action = "jump"
data = 3
[[dialogs.choices]]
text = "สเถียรภาพสูงสุด"
action = "jump"
data = 6
[[dialogs]]
title = "Linux Mint"
content = "การแจกจ่าย Linux ที่เสถียรและใช้งานง่าย"
[[dialogs.choices]]
text = "ดำเนินการต่อ"
action = "link"
data = "https://linuxmint.com/"
+1 -1
View File
@@ -31,7 +31,7 @@ const site = ORIGIN ?? Astro.url.host;
<meta property="og:image" content={banner.src} />
<!-- X (Twitter) -->
<meta property="twitter:card" content="summary" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content={site} />
<meta property="twitter:title" content={shownTitle} />
<meta property="twitter:description" content={shownDescription} />
+25 -2
View File
@@ -1,8 +1,15 @@
---
import { ClientRouter } from "astro:transitions";
import { ORIGIN } from "astro:env/server";
import banner from "@/assets/imgs/site/banner_1280x720.png";
import "../styles/global.css";
const { title, description } = Astro.props;
const shownTitle = title ?? "Move to Linux";
const shownDescription =
description ??
"A guide on moving to Linux. Installation, Usage, and Applications.";
const site = ORIGIN ?? Astro.url.host;
---
<html lang="en" transition:name="root" transition:animate="none">
@@ -11,9 +18,25 @@ const { title, description } = Astro.props;
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} />
{description ? <meta name="description" content={description} /> : null}
<title>{title ?? "Move to Linux"}</title>
<!-- Primary Meta Tags -->
<title>{shownTitle}</title>
<meta name="title" content={shownTitle} />
<meta name="description" content={shownDescription} />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content={site} />
<meta property="og:title" content={shownTitle} />
<meta property="og:description" content={shownDescription} />
<meta property="og:image" content={banner.src} />
<!-- X (Twitter) -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content={site} />
<meta property="twitter:title" content={shownTitle} />
<meta property="twitter:description" content={shownDescription} />
<meta property="twitter:image" content={banner.src} />
</head>
<body>
<slot />
-7
View File
@@ -1,7 +0,0 @@
import PocketBase from "pocketbase";
export const pb = new PocketBase("http://127.0.0.1:8090");
export const apps = pb.collection("apps");
export const appDetails = pb.collection("app_details");
+9 -3
View File
@@ -64,9 +64,15 @@ function visualizeTree(tree: Tree, key: string | null, prefix: string): string {
const value = tree[key];
if (typeof value === "string") {
children.push(`<li>
<a href="${`/${lang}/distro/${prefix}${key}`}">${value}</a>
</li>`);
if (prefix === "distroquiz/") {
children.push(`<li>
<a href="${`/${lang}/${prefix}${key}`}">${value}</a>
</li>`);
} else {
children.push(`<li>
<a href="${`/${lang}/distro/${prefix}${key}`}">${value}</a>
</li>`);
}
} else {
subcategories.push(visualizeTree(value, key, `${prefix}${key}/`));
}
+4 -2
View File
@@ -10,7 +10,7 @@ const startLink = getRelativeLocaleUrl("en", "start");
class="min-h-[60vh] flex justify-center items-center flex-col gap-2 bg-amber-50 dark:bg-amber-950"
>
<h1
class="text-5xl font-bold bg-gradient-to-r from-amber-700 to-amber-900 dark:from-amber-400 dark:to-amber-600 bg-clip-text text-transparent"
class="text-5xl font-bold bg-linear-to-r from-amber-700 to-amber-900 dark:from-amber-400 dark:to-amber-600 bg-clip-text text-transparent"
>
Move to Linux
</h1>
@@ -76,7 +76,9 @@ const startLink = getRelativeLocaleUrl("en", "start");
<p class="max-w-[50vw] text-center">
This site is not perfect. If you found any outdated, invalid, or
information which can be possibly misunderstood, send an email
to <code>linesofcodes at dailitation dot xyz</code> (<a
to <a href="mailto:linesofcodes@dailitation.xyz"
>linesofcodes@dailitation.xyz</a
> (<a
href="https://keys.openpgp.org/vks/v1/by-fingerprint/8A487B532BEF7B324339AC1CFBE9E5E346F3DDE8"
target="_blank"
rel="noopener">PGP Keys Available</a
+1 -1
View File
@@ -2,7 +2,7 @@
"$schema": "node_modules/wrangler/config-schema.json",
"name": "movetolinux",
// Update to today's date
"compatibility_date": "2025-09-15",
"compatibility_date": "2026-01-29",
"assets": {
"directory": "./dist"
}