Compare commits

..

4 Commits

50 changed files with 2150 additions and 1671 deletions
+5 -5
View File
@@ -21,11 +21,11 @@ If you wish to help translate the site, you'll need to know how to use Git,
and optionally to preview the site, you'll need a little knowledge about the and optionally to preview the site, you'll need a little knowledge about the
command line. command line.
The project's structure isn't the best (I'll improve sooner or later). Most Most content are located within the `./src/data` folder. Located there are 4
content are located within the `./src/data` folder. Located there are 4 content content collections including "common" (Common pages which may be shared
collections including "common" (Common pages which may be shared between Linux between Linux distribution install guides), "distro" (The Linux distribution
distribution install guides), "distro" (The Linux distribution install guides), install guides), "distroquiz" (The short Linux distribution quiz), and
"distroquiz" (The short Linux distribution quiz), and "strings" (Short strings). "strings" (Short strings).
Inside each collection, There will be a folder named after a language code Inside each collection, There will be a folder named after a language code
(following the IETF language tag standard) _or_ there will be a TOML file named (following the IETF language tag standard) _or_ there will be a TOML file named
-5
View File
@@ -34,11 +34,6 @@ export default defineConfig({
"@": fileURLToPath(new URL("./src", import.meta.url)) "@": fileURLToPath(new URL("./src", import.meta.url))
} }
}, },
server: {
watch: {
ignored: "**/pocketbase/**"
}
}
}, },
integrations: [solidJs(), mdx()] integrations: [solidJs(), mdx()]
+12 -12
View File
@@ -9,23 +9,23 @@
"astro": "astro" "astro": "astro"
}, },
"dependencies": { "dependencies": {
"@astrojs/mdx": "^4.3.6", "@astrojs/mdx": "^4.3.13",
"@astrojs/solid-js": "^5.1.1", "@astrojs/solid-js": "^5.1.3",
"@tailwindcss/vite": "^4.1.13", "@tailwindcss/vite": "^4.1.18",
"astro": "^5.14.1", "astro": "^5.17.0",
"fuse.js": "^7.1.0", "fuse.js": "^7.1.0",
"party-js": "^2.2.0", "party-js": "^2.2.0",
"qrcode-generator": "^2.0.4", "qrcode-generator": "^2.0.4",
"sharp": "^0.34.4", "sharp": "^0.34.5",
"solid-js": "^1.9.9", "solid-js": "^1.9.11",
"tailwindcss": "^4.1.13" "tailwindcss": "^4.1.18"
}, },
"packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a", "packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
"devDependencies": { "devDependencies": {
"@types/node": "^24.5.2", "@types/node": "^25.1.0",
"typescript": "^5.9.2", "typescript": "^5.9.3",
"typescript-plugin-toml": "^0.5.0", "typescript-plugin-toml": "^0.5.0",
"vite-plugin-toml": "^0.8.4", "vite-plugin-toml": "^0.8.7",
"wrangler": "^4.40.2" "wrangler": "^4.61.1"
} }
} }
+1350 -1603
View File
File diff suppressed because it is too large Load Diff
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 KiB

+177
View File
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1280"
height="720"
viewBox="0 0 338.66666 190.5"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="banner_inkscape.svg"
inkscape:export-filename="banner_1280x720.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="false"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="0.51936728"
inkscape:cx="622.87328"
inkscape:cy="282.07399"
inkscape:window-width="1536"
inkscape:window-height="792"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<sodipodi:guide
position="0,190.5"
orientation="0,1280"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="338.66666,190.5"
orientation="720,0"
id="guide2"
inkscape:locked="false" />
<sodipodi:guide
position="338.66666,0"
orientation="0,-1280"
id="guide3"
inkscape:locked="false" />
<sodipodi:guide
position="0,0"
orientation="-720,0"
id="guide4"
inkscape:locked="false" />
<inkscape:grid
id="grid4"
units="px"
originx="0"
originy="0"
spacingx="7.9374999"
spacingy="7.9374999"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<linearGradient
id="linearGradient4"
inkscape:collect="always">
<stop
style="stop-color:#1e293b;stop-opacity:1;"
offset="0"
id="stop4" />
<stop
style="stop-color:#020617;stop-opacity:1;"
offset="1"
id="stop5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4"
id="linearGradient5"
x1="7.9375"
y1="7.9375"
x2="333.375"
y2="182.5625"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1">
<rect
style="fill:url(#linearGradient5);stroke-width:0.264583;fill-opacity:1"
id="rect4"
width="338.66666"
height="190.5"
x="0"
y="0" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25.4px;font-family:'Inter Display';-inkscape-font-specification:'Inter Display Bold';text-align:start;letter-spacing:-0.264583px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;stroke-width:0.264583"
x="14.510738"
y="34.51572"
id="text5"><tspan
sodipodi:role="line"
id="tspan5"
style="letter-spacing:-0.264583px;stroke-width:0.264583"
x="14.510738"
y="34.51572">Move to Linux</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.7556px;font-family:'Inter Display';-inkscape-font-specification:'Inter Display Bold';text-align:start;letter-spacing:-0.264583px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;stroke-width:0.264583"
x="15.682075"
y="145.76331"
id="text6"><tspan
sodipodi:role="line"
id="tspan6"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.7556px;font-family:'Inter Display';-inkscape-font-specification:'Inter Display';letter-spacing:-0.264583px;stroke-width:0.264583"
x="15.682075"
y="145.76331"
dy="5">A guide on installation,</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.7556px;font-family:'Inter Display';-inkscape-font-specification:'Inter Display';letter-spacing:-0.264583px;stroke-width:0.264583"
x="15.682075"
y="170.45781"
id="tspan7">usage, and application</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87778px;font-family:'Inter Display';-inkscape-font-specification:'Inter Display';text-align:start;letter-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;stroke-width:0.264583"
x="15.267285"
y="47.21159"
id="text8"><tspan
sodipodi:role="line"
id="tspan8"
style="font-size:9.87778px;letter-spacing:0px;fill:#cccccc;stroke-width:0.264583"
x="15.267285"
y="47.21159">https://movetolinux.dailitation.xyz</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

+25 -7
View File
@@ -23,6 +23,7 @@ const fuseOptions: IFuseOptions<Task> = {
const AppList: Component<{ lang: string }> = ({ lang }) => { const AppList: Component<{ lang: string }> = ({ lang }) => {
const [currentPlaceholder, setCurrentPlaceholder] = createSignal(""); const [currentPlaceholder, setCurrentPlaceholder] = createSignal("");
const [searchQuery, setSearchQuery] = createSignal(""); const [searchQuery, setSearchQuery] = createSignal("");
const [flathub, setFlathub] = createSignal(false);
const fuse = new Fuse(appData.tasks as Task[], fuseOptions); const fuse = new Fuse(appData.tasks as Task[], fuseOptions);
const searchResults = createMemo(() => { const searchResults = createMemo(() => {
if (searchQuery().trim() === "") { if (searchQuery().trim() === "") {
@@ -38,18 +39,19 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
onMount(async () => { onMount(async () => {
setCurrentPlaceholder( setCurrentPlaceholder(
appData.tasks[Math.floor(Math.random() * appData.tasks.length)].name appData.tasks[Math.floor(Math.random() * appData.tasks.length)]
.name,
); );
setInterval(() => { setInterval(() => {
const cats = Object.values(strings().categories); const cats = Object.values(strings().categories);
setCurrentPlaceholder( setCurrentPlaceholder(
cats[Math.floor(Math.random() * cats.length)] cats[Math.floor(Math.random() * cats.length)],
); );
}, 3000); }, 3000);
setStrings( setStrings(
(await import(`@/data/strings/${lang}.toml`)).default.appList (await import(`@/data/strings/${lang}.toml`)).default.appList,
); );
if (lang === "en") return; if (lang === "en") return;
@@ -58,7 +60,7 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
(appData.tasks as Task[]).map((task) => ({ (appData.tasks as Task[]).map((task) => ({
...task, ...task,
name: strings().categories[task.key] ?? task.name, name: strings().categories[task.key] ?? task.name,
})) })),
); );
}); });
@@ -68,7 +70,10 @@ const AppList: Component<{ lang: string }> = ({ lang }) => {
return ( 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> <span>{strings().todo}</span>
<input <input
type="search" 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" class="ml-4 px-4 py-2 border rounded dark:border-slate-600 border-gray-400"
/> />
</div> </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 <div
id="appList" id="appList"
class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4" 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"> <div class="font-bold border-r dark:border-slate-600 border-gray-400 w-[30%] pr-4 mr-4">
{getTaskName(item.key) ?? item.name} {getTaskName(item.key) ?? item.name}
</div> </div>
<ul class="flex gap-4"> <ul class="flex gap-x-4 flex-wrap">
{item.apps.map((app) => ( {item.apps.map((app) => (
<li> <li>
<a <a
href={app.url} href={
flathub()
? (app.flathub ?? app.url)
: app.url
}
target="_blank" target="_blank"
rel="noopener" rel="noopener"
> >
+10
View File
@@ -21,6 +21,11 @@ name = "OpenToonz"
url = "https://opentoonz.github.io/e/" url = "https://opentoonz.github.io/e/"
flathub = "https://flathub.org/en/apps/io.github.OpenToonz" 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]] [[tasks]]
name = "Drawing" name = "Drawing"
key = "drawing" key = "drawing"
@@ -135,6 +140,11 @@ flathub = "https://flathub.org/en/apps/com.visualstudio.code"
name = "JetBrains IDEs" name = "JetBrains IDEs"
url = "https://www.jetbrains.com/" url = "https://www.jetbrains.com/"
[[tasks.apps]]
name = "Zed"
url = "https://zed.dev/"
flathub = "https://flathub.org/en/apps/dev.zed.Zed"
[[tasks]] [[tasks]]
name = "Video Editing" name = "Video Editing"
key = "video" key = "video"
+2 -2
View File
@@ -5,7 +5,7 @@ title: Choose your flavor
import { Picture } from "astro:assets"; import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro"; import ChoiceList from "@/components/ChoiceList.astro";
import fedoraWorkstation from "@/assets/imgs/Fedora/fedora42_workstation.png"; 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 Choose a desktop environment, pick whatever you like based on
appearance. KDE Plasma (Right) may be more familiar for Windows users. 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} src={fedoraPlasma}
formats={["avif"]} formats={["avif"]}
width="1280" width="1280"
alt="Fedora KDE Plasma Desktop 42" alt="Fedora KDE Plasma Desktop 43"
/> />
<figcaption>Fedora KDE Plasma Desktop</figcaption> <figcaption>Fedora KDE Plasma Desktop</figcaption>
</figure> </figure>
+2 -2
View File
@@ -4,13 +4,13 @@ title: Fedora KDE Plasma Desktop
import { Picture } from "astro:assets"; import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro"; 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 <Picture
src={fedoraPlasma} src={fedoraPlasma}
formats={["avif"]} formats={["avif"]}
width="1280" width="1280"
alt="Fedora KDE Plasma Desktop 42" alt="Fedora KDE Plasma Desktop 43"
/> />
<ChoiceList> <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> </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. 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 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 { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro"; import ChoiceList from "@/components/ChoiceList.astro";
import fedoraWorkstation from "@/assets/imgs/Fedora/fedora42_workstation.png"; 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 เลือกสภาพแวดล้อมเดสก์ท็อปของคุณ เลือกอะไรก็ได้จากหน้าตาของมัน KDE Plasma
(รูปด้านขวา) อาจมีการทำงานที่ผู้ใช้ Windows จะคุ้นชินมากกว่า (รูปด้านขวา) อาจมีการทำงานที่ผู้ใช้ Windows จะคุ้นชินมากกว่า
@@ -28,7 +28,7 @@ import fedoraPlasma from "@/assets/imgs/Fedora/fedora42_kdeplasma.png";
src={fedoraPlasma} src={fedoraPlasma}
formats={["avif"]} formats={["avif"]}
width="1280" width="1280"
alt="Fedora KDE Plasma Desktop 42" alt="Fedora KDE Plasma Desktop 43"
/> />
<figcaption>Fedora KDE Plasma Desktop</figcaption> <figcaption>Fedora KDE Plasma Desktop</figcaption>
</figure> </figure>
+2 -2
View File
@@ -4,13 +4,13 @@ title: Fedora KDE Plasma Desktop
import { Picture } from "astro:assets"; import { Picture } from "astro:assets";
import ChoiceList from "@/components/ChoiceList.astro"; 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 <Picture
src={fedoraPlasma} src={fedoraPlasma}
formats={["avif"]} formats={["avif"]}
width="1280" width="1280"
alt="Fedora KDE Plasma Desktop 42" alt="Fedora KDE Plasma Desktop 43"
/> />
<ChoiceList> <ChoiceList>
+1 -1
View File
@@ -16,7 +16,7 @@ import writeOptions from "@/assets/imgs/Fedora/FedoraMediaWriter/WriteOptions.pn
/> />
</div> </div>
เลือกเวอร์ชันล่าสุด (ณ เวลาที่เขียนคือ 42) และทำให้แน่ใจว่าเลือกแฟลชไดรฟ์ถูก เลือกเวอร์ชันล่าสุด (ณ เวลาที่เขียนคือ 43) และทำให้แน่ใจว่าเลือกแฟลชไดรฟ์ถูก
คลิก "Delete download after writing" ถ้าอยากลบไฟล์ระบบหลังโปรแกรม คลิก "Delete download after writing" ถ้าอยากลบไฟล์ระบบหลังโปรแกรม
ทำการฟอร์แมตไดรฟ์เสร็จ ทำการฟอร์แมตไดรฟ์เสร็จ
+24 -1
View File
@@ -9,7 +9,7 @@ action = "continue"
[[dialogs.choices]] [[dialogs.choices]]
text = "Just recommend me one" text = "Just recommend me one"
action = "jump" action = "jump"
data = 3 data = 5
[[dialogs]] [[dialogs]]
title = "In the sea of distributions" title = "In the sea of distributions"
@@ -70,3 +70,26 @@ content = ""
text = "Continue" text = "Continue"
action = "link" action = "link"
data = "https://archlinux.org/" 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]] [[dialogs.choices]]
text = "แนะนำมาอย่างเดียวก็พอ" text = "แนะนำมาอย่างเดียวก็พอ"
action = "jump" action = "jump"
data = 3 data = 5
[[dialogs]] [[dialogs]]
title = "ในทะเลแห่งการแจกจ่าย Linux" title = "ในทะเลแห่งการแจกจ่าย Linux"
@@ -70,3 +70,26 @@ content = ""
text = "ดำเนินการต่อ" text = "ดำเนินการต่อ"
action = "link" action = "link"
data = "https://archlinux.org/" 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/"
+25 -2
View File
@@ -1,7 +1,14 @@
--- ---
import banner from "@/assets/imgs/site/banner_1280x720.png";
import "../styles/global.css"; import "../styles/global.css";
import { ORIGIN } from "astro:env/server";
const { title, description } = Astro.props; 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"> <html lang="en">
@@ -10,9 +17,25 @@ const { title, description } = Astro.props;
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} /> <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> </head>
<body> <body>
<slot /> <slot />
+25 -2
View File
@@ -1,8 +1,15 @@
--- ---
import { ClientRouter } from "astro:transitions"; import { ClientRouter } from "astro:transitions";
import { ORIGIN } from "astro:env/server";
import banner from "@/assets/imgs/site/banner_1280x720.png";
import "../styles/global.css"; import "../styles/global.css";
const { title, description } = Astro.props; 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"> <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" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<meta name="generator" content={Astro.generator} /> <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> </head>
<body> <body>
<slot /> <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]; const value = tree[key];
if (typeof value === "string") { if (typeof value === "string") {
children.push(`<li> if (prefix === "distroquiz/") {
<a href="${`/${lang}/distro/${prefix}${key}`}">${value}</a> children.push(`<li>
</li>`); <a href="${`/${lang}/${prefix}${key}`}">${value}</a>
</li>`);
} else {
children.push(`<li>
<a href="${`/${lang}/distro/${prefix}${key}`}">${value}</a>
</li>`);
}
} else { } else {
subcategories.push(visualizeTree(value, key, `${prefix}${key}/`)); subcategories.push(visualizeTree(value, key, `${prefix}${key}/`));
} }
+79 -4
View File
@@ -51,6 +51,85 @@ import BasicLayout from "@/layouts/BasicLayout.astro";
</p> </p>
</details> </details>
</section> </section>
<section id="buzzwords" class="mt-4">
<h1>Buzzwords Explained</h1>
<p>
Here are some words that you will encounter in the (Linux)
software world. You don't have to remember all of this, but you
can refer back to this site if you want a short definition.
</p>
<dl>
<dt>package</dt>
<dd>
Imagine a box which contains software files. You could
install a package, Which would mean copying the files inside
it onto your system.
</dd>
<dt>package manager</dt>
<dd>
A software that helps you manage packages. It is specific to
each Linux distribution and thus each distribution may have
different package formats.
</dd>
<dt>system package</dt>
<dd>
A package that is installed on your system. Also commonly
referred to as one of the ways to distribute software on
Linux, in that context, the word would mean creating a
package for a system.
</dd>
<dt>package repository</dt>
<dd>
If a package is a box, then a package repository is a
warehouse.
</dd>
<dt>binary</dt>
<dd>
A file that is already compiled and ready to run. Also known
as an "executable".
</dd>
<dt>AppImage</dt>
<dd>
A software distribution format. It is a single file that you
can download and run on any Linux distribution with minimal
reliance on the system. Specifically, it only requires FUSE
(Filesystem in Userspace) to be installed, and that's it.
The file extension of this format is <code>.AppImage</code>
</dd>
<dt>Flatpak</dt>
<dd>
A software distribution format. When an application is
packaged this way, the application will be ran inside a
sandbox to ensure security, and it will also have minimal
reliance on system packages. This is becoming the most
popular way to distribute software as it is distro-neutral.
The most popular Flatpak repository (and thus is recognized
as the central repository) is <a
href="https://flathub.org/"
target="_blank"
rel="noopener">Flathub</a
>.
</dd>
<dt>Wine</dt>
<dd>
Wine is originally an acronym for "Wine Is Not an Emulator",
and it is a compatibility layer (<strong>not</strong> an emulator)
capable of running Windows applications. A simple way of explaining
what it does would be that it translates Windows language into
Linux language on-the-fly, minimizing the performance overhead
other methods such as virtual machines and emulators may introduce.
(Just for correctness, Wine is not limited to Linux, it can also
work on other Unix-like systems such as FreeBSD and macOS)
</dd>
<dt>Proton</dt>
<dd>
A compatibility layer built on Wine by Valve, made for
running games.
</dd>
<dt>DXVK</dt>
<dd>A software which translates DirectX into Vulkan.</dd>
</dl>
</section>
</main> </main>
</BasicLayout> </BasicLayout>
@@ -64,8 +143,4 @@ import BasicLayout from "@/layouts/BasicLayout.astro";
p { p {
@apply my-2; @apply my-2;
} }
details {
@apply border dark:border-slate-700 border-gray-300 px-4 py-2 rounded mb-2;
}
</style> </style>
+17 -1
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" class="min-h-[60vh] flex justify-center items-center flex-col gap-2 bg-amber-50 dark:bg-amber-950"
> >
<h1 <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 Move to Linux
</h1> </h1>
@@ -69,6 +69,22 @@ const startLink = getRelativeLocaleUrl("en", "start");
<p>Click the button below to start on your Linux journey.</p> <p>Click the button below to start on your Linux journey.</p>
<a href={startLink} class="button mt-4">Start!</a> <a href={startLink} class="button mt-4">Start!</a>
</section> </section>
<section id="incorrect">
<h2 class="text-red-900 dark:text-red-300">
Found invalid information?
</h2>
<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 <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
>)
</p>
</section>
</main> </main>
<footer class="text-center py-4 bg-slate-800 text-white"> <footer class="text-center py-4 bg-slate-800 text-white">
<div> <div>
+79 -5
View File
@@ -3,7 +3,7 @@ import AppList from "@/components/AppList";
import BasicLayout from "@/layouts/BasicLayout.astro"; import BasicLayout from "@/layouts/BasicLayout.astro";
--- ---
<BasicLayout title="Linux Applications"> <BasicLayout title="แอพลิเคชั่น Linux">
<main class="my-8 mx-16"> <main class="my-8 mx-16">
<section id="appList"> <section id="appList">
<h1> <h1>
@@ -54,6 +54,84 @@ import BasicLayout from "@/layouts/BasicLayout.astro";
</p> </p>
</details> </details>
</section> </section>
<section id="buzzwords" class="mt-4">
<h1>คำศัพท์ที่พบเห็นได้บ่อย</h1>
<p>
นี่คือรายการคำศัพท์ที่คุณอาจพบเจอได้ในโลกแห่งซอฟต์แวร์และ Linux
คุณไม่จำเป็นต้องจำคำศัพท์พวกนี้ทั้งหมด
แต่คุณสามารถย้อนกลับมาอ่านได้หากคุณต้องการความหมายแบบสั้น ๆ
</p>
<dl>
<dt>แพคเกจ (package)</dt>
<dd>
จินตนาการถึงกล่องที่มีไฟล์ซอฟต์แวร์
คุณสามารถติดตั้งแพคเกจได้
ซึ่งจะหมายถึงการคัดลอกไฟล์ที่อยู่ภายในกล่องนั้นไปยังระบบของคุณ
</dd>
<dt>ตัวจัดการแพคเกจ (package manager)</dt>
<dd>
ซอฟต์แวร์ที่ช่วยคุณจัดการแพคเกจ เป็นซอฟต์แวร์เฉพาะที่ Linux
แต่ละเจ้าอาจมีไม่เหมือนกัน ดังนั้น Linux
บางเจ้าจะมีรูปแบบแพคเกจที่แตกต่างกันออกไป
</dd>
<dt>แพคเกจระบบ (system package)</dt>
<dd>
แพคเกจที่ติดตั้งอยู่บนระบบของคุณ
ศัพท์นี้อาจถูกใช้ในการกล่าวถึงว่าเป็นรูปแบบการกระจายซอฟต์แวร์รูปแบบหนึ่ง
ซึ่งในกรณีนั้นศัพท์นี้จะหมายถึงการสร้างแพคเกจสำหรับระบบระบบหนึ่ง
</dd>
<dt>คลังแพคเกจ (package repository)</dt>
<dd>
หากแพคเกจเป็นกล่อง คลังแพคเกจก็คือสถานที่ที่รวบรวมแพคเกจ
</dd>
<dt>ไบนารี (binary)</dt>
<dd>ไฟล์ที่สามารถถูกเรียกใช้ได้และผ่านการ "คอมไพล์" มาแล้ว</dd>
<dt>AppImage</dt>
<dd>
รูปแบบในการเผยแพร่ซอฟต์แวร์
เป็นไฟล์เดี่ยวที่คุณสามารถดาวน์โหลดและเรียกใช้บน Linux
เจ้าใหนก็ได้โดยที่พึ่งพาแพคเกจระบบน้อยที่สุด ซึ่งจริง ๆ แล้ว
AppImage นั้นต้องการเพียงแค่มี FUSE (Filesystem in
Userspace) ติดตั้งอยู่บนระบบ และนามสกุลไฟล์ของรูปแบบนี้คือ <code
>.AppImage</code
>
</dd>
<dt>Flatpak</dt>
<dd>
รูปแบบการเผยแพร่ซอฟต์แวร์
เมื่อแอพลิเคชั่นถูกเผยแพร่ในรูปแบบนี้
แอพลิเคชั่นนั้นจะถูกเรียกใช้ภายในกล่องที่สามารถเข้าถึงระบบได้เท่าที่จำเป็น
(sandbox) เพื่อความปลอดภัย
และจะมีการพึ่งพาแพคเกจระบบให้น้อยที่สุด
การเผยแพร่ซอฟต์แวร์รูปแบบนี้กำลังจะเป็นการเผยแพร่ที่นิยมที่สุดเนื่องจากมันเป็นวิธีเผยแพร่แอพที่จะสามารถมั่นใจได้ว่าแอพลิเคชั่นจะทำงานเหมือนกันบน
Linux ทุกเจ้า คลัง Flatpak ที่โด่งดังที่สุด
(และสามารถถือว่าเป็นคลังส่วนกลางเลยก็ได้) คือ <a
href="https://flathub.org/"
target="_blank"
rel="noopener">Flathub</a
>.
</dd>
<dt>ไวน์ (Wine)</dt>
<dd>
ไวน์ ที่ไม่ใช่เครื่องดื่ม และไม่ใช่อีมูเลเตอร์
แต่เป็นชั้นความเข้ากันได้ที่ช่วยให้ระบบปฏิบัติการ Linux
นั้นสามารถใช้งานแอพลิเคชั่น Windows ได้
การอธิบายการทำงานของมันแบบง่าย ๆ คือ Wine ทำหน้าที่แปลภาษา
Windows ให้เป็นภาษา Linux
โดยการทำเช่นนี้นั้นจะช่วยเพิ่มประสิทธิภาพของแอพลิเคชั่นที่อาจลดลงหากเป็นการใช้อีมูเลเตอร์หรือ
Virtual Machine แทน (เพื่อความถูกต้อง ไวน์นั้นไม่จำกัดสำหรับ
Linux เท่านั้น มันยังสามารถทำงานบนระบบเสมือน Unix อื่น ๆ
เช่น FreeBSD และ macOS ได้ด้วย)
</dd>
<dt>Proton</dt>
<dd>
ชั้นความเข้ากันได้ของซอฟต์แวร์ที่ถูกสร้างขึ้นจาก Wine โดย
Valve ถูกสร้างขึ้นเพื่อการเรียกใช้เกมโดยเฉพาะ
</dd>
<dt>DXVK</dt>
<dd>ซอฟต์แวร์ที่ทำการแปล DirectX เป็น Vulkan</dd>
</dl>
</section>
</main> </main>
</BasicLayout> </BasicLayout>
@@ -67,8 +145,4 @@ import BasicLayout from "@/layouts/BasicLayout.astro";
p { p {
@apply my-2; @apply my-2;
} }
details {
@apply border dark:border-slate-700 border-gray-300 px-4 py-2 rounded mb-2;
}
</style> </style>
+15 -1
View File
@@ -5,7 +5,7 @@ import { getRelativeLocaleUrl } from "astro:i18n";
const startLink = getRelativeLocaleUrl("th", "start"); const startLink = getRelativeLocaleUrl("th", "start");
--- ---
<BasicLayout> <BasicLayout title="ย้ายไป Linux">
<header <header
class="min-h-[50vh] flex justify-center items-center flex-col gap-2 bg-amber-50 dark:bg-amber-950" class="min-h-[50vh] flex justify-center items-center flex-col gap-2 bg-amber-50 dark:bg-amber-950"
> >
@@ -70,6 +70,20 @@ const startLink = getRelativeLocaleUrl("th", "start");
<p>กดปุ่มด้านล่างเพื่อเริ่มต้นการผจญภัยในดินแดนเพนกวินได้เลย</p> <p>กดปุ่มด้านล่างเพื่อเริ่มต้นการผจญภัยในดินแดนเพนกวินได้เลย</p>
<a href={startLink} class="button mt-4">เริ่มต้นเลย!</a> <a href={startLink} class="button mt-4">เริ่มต้นเลย!</a>
</section> </section>
<section id="incorrect">
<h2 class="text-red-900 dark:text-red-300 mb-2">
พบเจอข้อมูลที่ไม่ถูกต้องรึเปล่า
</h2>
<p class="max-w-[50vw] text-center">
เว็บไซต์นี้ไม่สมบูรณ์แบบ หากคุณเจอข้อมูลใดที่ล้าสมัย ไม่ถูกต้อง
หรืออาจถูกเข้าใจผิด โปรดส่งอีเมลไปยัง
<code>linesofcodes at dailitation dot xyz</code> (<a
href="https://keys.openpgp.org/vks/v1/by-fingerprint/8A487B532BEF7B324339AC1CFBE9E5E346F3DDE8"
target="_blank"
rel="noopener">คีย์เข้ารหัส PGP</a
>)
</p>
</section>
</main> </main>
<footer class="text-center py-4 bg-slate-800 text-white"> <footer class="text-center py-4 bg-slate-800 text-white">
<div> <div>
+12
View File
@@ -33,3 +33,15 @@ a:not(.button) {
background-image: url("/logos/archlinux-logo-light-scalable.svg"); background-image: url("/logos/archlinux-logo-light-scalable.svg");
} }
} }
details {
@apply border dark:border-slate-700 border-gray-300 px-4 py-2 rounded mb-2;
}
dt {
@apply font-bold;
}
dd {
@apply pl-8 mb-4;
}
+1 -1
View File
@@ -2,7 +2,7 @@
"$schema": "node_modules/wrangler/config-schema.json", "$schema": "node_modules/wrangler/config-schema.json",
"name": "movetolinux", "name": "movetolinux",
// Update to today's date // Update to today's date
"compatibility_date": "2025-09-15", "compatibility_date": "2026-01-29",
"assets": { "assets": {
"directory": "./dist" "directory": "./dist"
} }