Compare commits
4 Commits
d65776549c
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
0132ceb835
|
|||
|
7064e8aeee
|
|||
|
dbccffd3a4
|
|||
|
dd1d37186e
|
@@ -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
|
||||||
|
|||||||
@@ -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()]
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 646 KiB |
@@ -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 |
@@ -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"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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"
|
||||||
@@ -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.**
|
||||||
@@ -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._
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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" ถ้าอยากลบไฟล์ระบบหลังโปรแกรม
|
||||||
ทำการฟอร์แมตไดรฟ์เสร็จ
|
ทำการฟอร์แมตไดรฟ์เสร็จ
|
||||||
|
|||||||
@@ -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/"
|
||||||
|
|||||||
@@ -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/"
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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");
|
|
||||||
@@ -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}/`));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||