diff --git a/.flox/.gitattributes b/.flox/.gitattributes new file mode 100644 index 00000000..bb5491e1 --- /dev/null +++ b/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/.flox/.gitignore b/.flox/.gitignore new file mode 100644 index 00000000..8d211868 --- /dev/null +++ b/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/.flox/env.json b/.flox/env.json new file mode 100644 index 00000000..9702df48 --- /dev/null +++ b/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "wiki", + "version": 1 +} diff --git a/.flox/env/manifest.lock b/.flox/env/manifest.lock new file mode 100644 index 00000000..cc11d3c2 --- /dev/null +++ b/.flox/env/manifest.lock @@ -0,0 +1,267 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.10.0", + "install": { + "bun": { + "pkg-path": "bun" + }, + "nodejs": { + "pkg-path": "nodejs" + } + }, + "hook": { + "on-activate": "\n bun i\n echo \"\"\n echo \"run 'flox services start dev' to start the dev server at localhost:3000\"\n echo \"\"\n echo \"run 'flox services start dev-host' to start the dev server and expose to the LAN/Tailnet at hostname:300\"\n echo \"\"\n echo \"Contact Jaiden for help with Flox @ Fyra\"\n echo \"\"\n echo \"\"\n" + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-darwin", + "x86_64-linux" + ] + }, + "services": { + "dev": { + "command": "bun dev" + }, + "dev-host": { + "command": "bun dev --host" + } + } + }, + "packages": [ + { + "attr_path": "bun", + "broken": false, + "derivation": "/nix/store/923bn84szvvcjhy05226q05vr2ds847s-bun-1.3.11.drv", + "description": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one", + "install_id": "bun", + "license": "[ MIT, LGPL-2.1-only ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "bun-1.3.11", + "pname": "bun", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T03:37:19.688901Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.3.11", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/cgzjp11cgzg8n349rqmbqz46izm2kl2k-bun-1.3.11" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "bun", + "broken": false, + "derivation": "/nix/store/qjvwg5k4mn20j9v1lhbvzyc0dl7r8jv3-bun-1.3.11.drv", + "description": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one", + "install_id": "bun", + "license": "[ MIT, LGPL-2.1-only ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "bun-1.3.11", + "pname": "bun", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T04:09:54.055855Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.3.11", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/n24wmwy3slpa1z9d5x6hyw9s2r41xjxm-bun-1.3.11" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "bun", + "broken": false, + "derivation": "/nix/store/84icbf3f96islpxqvil7pb9rafwwbfdx-bun-1.3.11.drv", + "description": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one", + "install_id": "bun", + "license": "[ MIT, LGPL-2.1-only ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "bun-1.3.11", + "pname": "bun", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T04:40:38.923886Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.3.11", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/p03zpjl2i2f03pv7xd335cqv8w1qn6i8-bun-1.3.11" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "bun", + "broken": false, + "derivation": "/nix/store/64i3nhw4vszdmfkc8mja1g8v0gsfbps5-bun-1.3.11.drv", + "description": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one", + "install_id": "bun", + "license": "[ MIT, LGPL-2.1-only ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "bun-1.3.11", + "pname": "bun", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T05:16:14.376411Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.3.11", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/4b7jvqsqywnsb273svingfmpqschkszi-bun-1.3.11" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "nodejs", + "broken": false, + "derivation": "/nix/store/g2yfx00n1lp9i8ka7nbl11fawc0yfm7n-nodejs-24.14.0.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "nodejs-24.14.0", + "pname": "nodejs", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T03:37:44.188491Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "24.14.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/d5hw52iialz64hvfzfp9qm1gr2fp43kx-nodejs-24.14.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "nodejs", + "broken": false, + "derivation": "/nix/store/jj8rw2gnisil7dw10xi2qdinad9jqp7s-nodejs-24.14.0.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "nodejs-24.14.0", + "pname": "nodejs", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T04:10:33.055894Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "24.14.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/vs8zaq8fvbbjqfg4bzn424kn55sj7s7y-nodejs-24.14.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "nodejs", + "broken": false, + "derivation": "/nix/store/l9ksrfa960964gqf23yfr7a66a2n18c1-nodejs-24.14.0.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "nodejs-24.14.0", + "pname": "nodejs", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T04:41:03.483286Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "24.14.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/70ypbaj273w2kk0nrs4vijizyqgbg48v-nodejs-24.14.0" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "nodejs", + "broken": false, + "derivation": "/nix/store/15s1kk2n6vg180wg04wj2wgnl19f03v7-nodejs-24.14.0.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "name": "nodejs-24.14.0", + "pname": "nodejs", + "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685", + "rev_count": 971119, + "rev_date": "2026-03-28T14:48:23Z", + "scrape_date": "2026-03-30T05:16:55.941803Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "24.14.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/v2210ar51jddnrcx46m53ivv9palc26m-nodejs-24.14.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + } + ] +} diff --git a/.flox/env/manifest.toml b/.flox/env/manifest.toml new file mode 100644 index 00000000..78d45dd5 --- /dev/null +++ b/.flox/env/manifest.toml @@ -0,0 +1,28 @@ +schema-version = "1.10.0" + +[install] +nodejs.pkg-path = "nodejs" +bun.pkg-path = "bun" + +[hook] +on-activate = """ + + bun i + echo "" + echo "run 'flox services start dev' to start the dev server at localhost:3000" + echo "" + echo "run 'flox services start dev-host' to start the dev server and expose to the LAN/Tailnet at hostname:300" + echo "" + echo "Contact Jaiden for help with Flox @ Fyra" + echo "" + echo "" +""" +[services.dev] +command = "bun dev" + +[services.dev-host] +command = "bun dev --host" + +## Other Environment Options ----------------------------------------- +[options] +systems = ["aarch64-darwin", "aarch64-linux", "x86_64-darwin", "x86_64-linux"] diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index c7be0775..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file - -version: 2 -updates: - - package-ecosystem: "bun" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "weekly" diff --git a/.gitignore b/.gitignore index e5bc5793..9e429e49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,26 @@ -# build output -dist/ -# generated types -.astro/ +# deps +/node_modules -# dependencies -node_modules/ +# generated content +.source -# logs +# test & build +/coverage +/.next/ +/out/ +/build +*.tsbuildinfo + +# misc +.DS_Store +*.pem +/.pnp +.pnp.js npm-debug.log* yarn-debug.log* yarn-error.log* -pnpm-debug.log* - - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store -bun.lockb +# others +.env*.local +.vercel +next-env.d.ts \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index bd5535a6..00000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -pnpm-lock.yaml diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 38ce14b4..00000000 --- a/.prettierrc.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import("prettier").Config} */ -export default { - plugins: ["prettier-plugin-astro"], -}; diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 22f3924a..00000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "recommendations": [ - "astro-build.astro-vscode", - "esbenp.prettier-vscode", - "unifiedjs.vscode-mdx" - ], - "unwantedRecommendations": [] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index d6422097..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9bf4d12b..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true -} diff --git a/README.md b/README.md index db51983b..fcadcaad 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,33 @@ content here! ## Translations -If you'd like to translate for a new language: +TBD as we shift to our new docs site -1. Go to `src/consts.ts` to add a new language into `KNOWN_LANGUAGES` -2. Copy everything from `src/content/docs/en` to `src/content/docs/`[^1] -3. Add pages into `SIDEBAR` in `src/consts.ts` -4. Start translating! +## Hacking +### Dev Containers + +1. Install the Dev Containers extension in your IDE + - Zed comes with Dev Containers, see [this documentation](https://zed.dev/docs/dev-containers) + + - VSCode users need to install the Dev Containers extension + + - Podman users need to install `podman-docker` from their package manager + +2. Open your IDE and select the "Reopen in Dev Container" option +3. Run `bun i` to install deps +4. Run `bun dev` or `bun dev --host` to start the dev server + +### Flox +1. Get [Flox](https://flox.dev/docs/install-flox/install/) +2. Clone and enter this repo +3. Run `flox activate` + +You can run the dev server with `flox services start dev`, or to expose to LAN or Tailnet, run `flox services start dev-host` + +### On the Host +1. Install `bun` and `nodejs` +2. Run `bun i` to install deps +3. Run `bun dev` or `bun dev --host` to start the dev server -[^1]: We encourage you to use a generic language code without limiting the region. [Ultramarine Wiki]: https://wiki.ultramarine-linux.org diff --git a/app/(home)/layout.tsx b/app/(home)/layout.tsx new file mode 100644 index 00000000..77379fac --- /dev/null +++ b/app/(home)/layout.tsx @@ -0,0 +1,6 @@ +import { HomeLayout } from 'fumadocs-ui/layouts/home'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/'>) { + return {children}; +} diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx new file mode 100644 index 00000000..d3fd9bf0 --- /dev/null +++ b/app/(home)/page.tsx @@ -0,0 +1,125 @@ +import { Card, Cards } from "fumadocs-ui/components/card"; +import { source } from "@/lib/source"; +import { icons as lucideIcons } from "lucide-react"; +import { createElement } from "react"; + +const START = [ + { + title: "Get Started", + href: "/docs/get-started", + slug: "get-started", + icon: "CirclePower", + }, + { + title: "Using Ultramarine", + href: "/docs/usage", + slug: "usage", + icon: "Sailboat", + }, +] as const; + +const LEARN = [ + { + title: "Anywhere", + href: "/docs/anywhere", + slug: "anywhere", + icon: "Cpu", + }, + { + title: "Join the Community", + href: "/docs/community", + slug: "community", + icon: "MessageCircleHeart", + }, + { + title: "Linux Concepts", + href: "/docs/linux", + slug: "linux", + icon: "GraduationCap", + }, + { + title: "About Ultramarine", + href: "/docs/about", + slug: "about", + icon: "PawPrint", + }, +] as const; + +function getIcon(iconName: string | undefined): React.ReactNode | undefined { + if (!iconName) return undefined; + if (iconName in lucideIcons) { + return createElement(lucideIcons[iconName as keyof typeof lucideIcons]); + } + return undefined; +} + +export default function HomePage() { + const start = START.map((section) => ({ + ...section, + description: source.getPage([section.slug])?.data.description ?? "", + icon: getIcon(section.icon), + })); + const learn = LEARN.map((section) => ({ + ...section, + description: source.getPage([section.slug])?.data.description ?? "", + icon: getIcon(section.icon), + })); + + return ( +
+
+

Welcome to the Ultramarine Wiki!

+

+
+ +
+

Get Started and Settled

+ + {start.map((section) => ( + + ))} + +
+ +
+

Learn More

+ + {learn.map((section) => ( + + ))} + +
+ +
+

Community

+

+ Stuck? Have a question? Join our{" "} + Discord community. Our + community is friendly and always willing to help. +

+
+ +
+

Contributing

+

+ This site is libre software and contributions are welcome. Check out + the{" "} + GitHub repository{" "} + for more information. +

+
+
+ ); +} diff --git a/app/api/search/route.ts b/app/api/search/route.ts new file mode 100644 index 00000000..aaaff7ff --- /dev/null +++ b/app/api/search/route.ts @@ -0,0 +1,9 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const revalidate = false; + +export const { staticGET: GET } = createFromSource(source, { + // https://docs.orama.com/docs/orama-js/supported-languages + language: 'english', +}); diff --git a/app/docs/[[...slug]]/page.tsx b/app/docs/[[...slug]]/page.tsx new file mode 100644 index 00000000..7e9ccb5f --- /dev/null +++ b/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,60 @@ +import { getPageImage, source } from "@/lib/source"; +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, +} from "fumadocs-ui/layouts/docs/page"; +import { notFound } from "next/navigation"; +import { getMDXComponents } from "@/mdx-components"; +import type { Metadata } from "next"; +import { createRelativeLink } from "fumadocs-ui/mdx"; + +export default async function Page(props: PageProps<"/[...slug]">) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDX = page.data.body; + + return ( + + {page.data.title} + {page.data.description} + + + + + ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata( + props: PageProps<"/[...slug]">, +): Promise { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + openGraph: { + images: getPageImage(page).url, + }, + }; +} diff --git a/app/docs/layout.tsx b/app/docs/layout.tsx new file mode 100644 index 00000000..a373143b --- /dev/null +++ b/app/docs/layout.tsx @@ -0,0 +1,11 @@ +import { source } from '@/lib/source'; +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/docs'>) { + return ( + + {children} + + ); +} diff --git a/app/global.css b/app/global.css new file mode 100644 index 00000000..dbcc721d --- /dev/null +++ b/app/global.css @@ -0,0 +1,3 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; diff --git a/app/icon.svg b/app/icon.svg new file mode 100644 index 00000000..78a87ee7 --- /dev/null +++ b/app/icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 00000000..fffc0a58 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,17 @@ +import { Inter } from 'next/font/google'; +import { Provider } from '@/components/provider'; +import './global.css'; + +const inter = Inter({ + subsets: ['latin'], +}); + +export default function Layout({ children }: LayoutProps<'/'>) { + return ( + + + {children} + + + ); +} diff --git a/app/llms-full.txt/route.ts b/app/llms-full.txt/route.ts new file mode 100644 index 00000000..d494d2cb --- /dev/null +++ b/app/llms-full.txt/route.ts @@ -0,0 +1,10 @@ +import { getLLMText, source } from '@/lib/source'; + +export const revalidate = false; + +export async function GET() { + const scan = source.getPages().map(getLLMText); + const scanned = await Promise.all(scan); + + return new Response(scanned.join('\n\n')); +} diff --git a/app/og/docs/[...slug]/route.tsx b/app/og/docs/[...slug]/route.tsx new file mode 100644 index 00000000..21739c78 --- /dev/null +++ b/app/og/docs/[...slug]/route.tsx @@ -0,0 +1,34 @@ +import { getPageImage, source } from "@/lib/source"; +import { notFound } from "next/navigation"; +import { ImageResponse } from "next/og"; +import { generate as DefaultImage } from "fumadocs-ui/og"; + +export const revalidate = false; + +export async function GET( + _req: Request, + { params }: RouteContext<"/og/docs/[...slug]">, +) { + const { slug } = await params; + const page = source.getPage(slug.slice(0, -1)); + if (!page) notFound(); + + return new ImageResponse( + , + { + width: 1200, + height: 630, + }, + ); +} + +export function generateStaticParams() { + return source.getPages().map((page) => ({ + lang: page.locale, + slug: getPageImage(page).segments, + })); +} diff --git a/astro.config.mjs b/astro.config.mjs deleted file mode 100644 index fe6857cb..00000000 --- a/astro.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from "astro/config"; -import preact from "@astrojs/preact"; -import icon from "astro-icon"; - -// https://astro.build/config -import mdx from "@astrojs/mdx"; - -// https://astro.build/config -export default defineConfig({ - site: "https://wiki.ultramarine-linux.org", - integrations: [ - // Enable Preact to support Preact JSX components. - preact(), - icon(), - mdx(), - ], -}); diff --git a/bun.lock b/bun.lock index 9f97ab9b..0e93aed7 100644 --- a/bun.lock +++ b/bun.lock @@ -1,358 +1,304 @@ { "lockfileVersion": 1, - "configVersion": 1, + "configVersion": 0, "workspaces": { "": { - "name": "@example/docs", + "name": "wiki", "dependencies": { - "@algolia/client-search": "^5.49.0", - "@astrojs/mdx": "^2.0.5", - "@astrojs/preact": "^4.1.3", - "@astrojs/react": "^4.4.2", - "@docsearch/css": "^4.5.3", - "@docsearch/react": "^3.5.2", - "@iconify-json/bi": "^1.1.23", - "@iconify-json/lucide": "^1.2.92", - "@types/node": "^25.0.10", - "@types/react": "^18.2.48", - "@types/react-dom": "^18.2.18", - "astro": "^4.2.1", - "astro-icon": "^1.0.2", - "preact": "^10.19.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "@orama/orama": "^3.1.18", + "fumadocs-core": "16.5.4", + "fumadocs-mdx": "14.2.7", + "fumadocs-ui": "16.5.4", + "lucide-react": "^0.563.0", + "next": "16.1.6", + "react": "^19.2.4", + "react-dom": "^19.2.4", }, "devDependencies": { - "html-escaper": "^3.0.3", - "prettier": "^3.2.4", - "prettier-plugin-astro": "^0.14.1", + "@tailwindcss/postcss": "^4.1.18", + "@types/mdx": "^2.0.13", + "@types/node": "^25.2.3", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "postcss": "^8.5.6", + "serve": "^14.2.5", + "tailwindcss": "^4.1.18", + "typescript": "^5.9.3", }, }, }, "packages": { - "@algolia/abtesting": ["@algolia/abtesting@1.13.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-Zrqam12iorp3FjiKMXSTpedGYznZ3hTEOAr2oCxI8tbF8bS1kQHClyDYNq/eV0ewMNLyFkgZVWjaS+8spsOYiQ=="], + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], - "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.17.9", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", "@algolia/autocomplete-shared": "1.17.9" } }, "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ=="], - - "@algolia/autocomplete-plugin-algolia-insights": ["@algolia/autocomplete-plugin-algolia-insights@1.17.9", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ=="], - - "@algolia/autocomplete-preset-algolia": ["@algolia/autocomplete-preset-algolia@1.17.9", "", { "dependencies": { "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ=="], - - "@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.17.9", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ=="], - - "@algolia/client-abtesting": ["@algolia/client-abtesting@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-aOpsdlgS9xTEvz47+nXmw8m0NtUiQbvGWNuSEb7fA46iPL5FxOmOUZkh8PREBJpZ0/H8fclSc7BMJCVr+Dn72w=="], - - "@algolia/client-analytics": ["@algolia/client-analytics@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-EcF4w7IvIk1sowrO7Pdy4Ako7x/S8+nuCgdk6En+u5jsaNQM4rTT09zjBPA+WQphXkA2mLrsMwge96rf6i7Mow=="], - - "@algolia/client-common": ["@algolia/client-common@5.49.0", "", {}, "sha512-BDmVDtpDvymfLE5YQ2cPnfWJUVTDJqwpJa03Fsb7yJFJmbeKsUOGsnRkYsTbdzf0FfcvyvBB5zdcbrAIL249bg=="], - - "@algolia/client-insights": ["@algolia/client-insights@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-Ci+cn/FDIsDxSKMRBEiyKrqybblbk8xugo6ujDN1GSTv9RIZxwxqZYuHfdLnLEwLlX7GB8pqVyqrUSlRnR+sJA=="], - - "@algolia/client-personalization": ["@algolia/client-personalization@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-gsLnHPZmWcX0T3IigkDL2imCNtsQ7dR5xfnwiFsb+uTHCuYQt+IwSNjsd8tok6HLGLzZrliSaXtB5mfGBtYZvQ=="], - - "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-PDOw0s8WSlR2fWFjPQldEpmm/gAoUgLigvC3k/jCSi/DzigdGX6RdC0Gh1RR1P8Cbk5KOWYDuL3TNzdYwkfDyA=="], - - "@algolia/client-search": ["@algolia/client-search@5.49.0", "", { "dependencies": { "@algolia/client-common": "5.49.0", "@algolia/requester-browser-xhr": "5.49.0", "@algolia/requester-fetch": "5.49.0", "@algolia/requester-node-http": "5.49.0" } }, "sha512-uGv2P3lcviuaZy8ZOAyN60cZdhOVyjXwaDC27a1qdp3Pb5Azn+lLSJwkHU4TNRpphHmIei9HZuUxwQroujdPjw=="], - - "@algolia/ingestion": ["@algolia/ingestion@1.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-WvwwXp5+LqIGISK3zHRApLT1xkuEk320/EGeD7uYy+K8WwDd5OjXnhjuXRhYr1685KnkvWkq1rQ/ihCJjOfHpQ=="], - - "@algolia/monitoring": ["@algolia/monitoring@1.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-j2EUFKAlzM0TE4GRfkDE3IDfkVeJdcbBANWzK16Tb3RHz87WuDfQ9oeEW6XiRE1/bEkq2xf4MvZesvSeQrZRDA=="], - - "@algolia/recommend": ["@algolia/recommend@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-+kTSE4aQ1ARj2feXyN+DMq0CIDHJwZw1kpxIunedkmpWUg8k3TzFwWsMCzJVkF2nu1UcFbl7xsIURz3Q3XwOXA=="], - - "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.49.0", "", { "dependencies": { "@algolia/client-common": "5.49.0" } }, "sha512-BaZ6NTI9VdSbDcsMucdKhTuFFxv6B+3dAZZBozX12fKopYsELh7dBLfZwm8evDCIicmNjIjobi4VNnNshrCSuw=="], - - "@algolia/requester-fetch": ["@algolia/requester-fetch@5.49.0", "", { "dependencies": { "@algolia/client-common": "5.49.0" } }, "sha512-2nxISxS5xO5DLAj6QzMImgJv6CqpZhJVkhcTFULESR/k4IpbkJTEHmViVTxw9MlrU8B5GfwHevFd7vKL3a7MXQ=="], - - "@algolia/requester-node-http": ["@algolia/requester-node-http@5.49.0", "", { "dependencies": { "@algolia/client-common": "5.49.0" } }, "sha512-S/B94C6piEUXGpN3y5ysmNKMEqdfNVAXYY+FxivEAV5IGJjbEuLZfT8zPPZUWGw9vh6lgP80Hye2G5aVBNIa8Q=="], - - "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], - - "@antfu/utils": ["@antfu/utils@8.1.1", "", {}, "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ=="], - - "@astrojs/compiler": ["@astrojs/compiler@2.13.0", "", {}, "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw=="], - - "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.4.1", "", {}, "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="], - - "@astrojs/markdown-remark": ["@astrojs/markdown-remark@5.1.0", "", { "dependencies": { "@astrojs/prism": "^3.1.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.0", "hast-util-to-text": "^4.0.0", "import-meta-resolve": "^4.0.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.0", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "remark-smartypants": "^2.0.0", "shiki": "^1.1.2", "unified": "^11.0.4", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.0", "vfile": "^6.0.1" } }, "sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ=="], - - "@astrojs/mdx": ["@astrojs/mdx@2.3.1", "", { "dependencies": { "@astrojs/markdown-remark": "5.1.0", "@mdx-js/mdx": "^3.0.0", "acorn": "^8.11.2", "es-module-lexer": "^1.4.1", "estree-util-visit": "^2.0.0", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "hast-util-to-html": "^9.0.0", "kleur": "^4.1.4", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.0", "remark-smartypants": "^2.0.0", "source-map": "^0.7.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1" }, "peerDependencies": { "astro": "^4.0.0" } }, "sha512-BOQFKD2Pi9cRntNQJlpF2fh4xV8doNpmVy9NKI95r4jsitrY4X5aTOhAowi+fkQgP/zW1A4HwCyQ6Pdam6z8zQ=="], - - "@astrojs/preact": ["@astrojs/preact@4.1.3", "", { "dependencies": { "@preact/preset-vite": "^2.10.2", "@preact/signals": "^2.3.1", "preact-render-to-string": "^6.6.1", "vite": "^6.4.1" }, "peerDependencies": { "preact": "^10.6.5" } }, "sha512-Ph416wbgyumkmYr7erZ83l/d+LXdZethlHRRCbgoKEn8wo3Rkq13shKFp0QYXYSDYxVaA6UBdkdimeowy/lMLQ=="], - - "@astrojs/prism": ["@astrojs/prism@3.1.0", "", { "dependencies": { "prismjs": "^1.29.0" } }, "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw=="], - - "@astrojs/react": ["@astrojs/react@4.4.2", "", { "dependencies": { "@vitejs/plugin-react": "^4.7.0", "ultrahtml": "^1.6.0", "vite": "^6.4.1" }, "peerDependencies": { "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0", "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0", "react": "^17.0.2 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0" } }, "sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ=="], + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], - "@astrojs/telemetry": ["@astrojs/telemetry@3.1.0", "", { "dependencies": { "ci-info": "^4.0.0", "debug": "^4.3.4", "dlv": "^1.1.3", "dset": "^3.1.3", "is-docker": "^3.0.0", "is-wsl": "^3.0.0", "which-pm-runs": "^1.1.0" } }, "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], - "@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], - "@babel/compat-data": ["@babel/compat-data@7.28.6", "", {}, "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], - "@babel/core": ["@babel/core@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], - "@babel/generator": ["@babel/generator@7.28.6", "", { "dependencies": { "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], - "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], - "@babel/parser": ["@babel/parser@7.28.6", "", { "dependencies": { "@babel/types": "^7.28.6" }, "bin": "./bin/babel-parser.js" }, "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], - "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], - "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], - "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], - "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], - "@babel/traverse": ["@babel/traverse@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.6", "@babel/template": "^7.28.6", "@babel/types": "^7.28.6", "debug": "^4.3.1" } }, "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], - "@babel/types": ["@babel/types@7.28.6", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], - "@docsearch/css": ["@docsearch/css@4.5.3", "", {}, "sha512-kUpHaxn0AgI3LQfyzTYkNUuaFY4uEz/Ym9/N/FvyDE+PzSgZsCyDH9jE49B6N6f1eLCm9Yp64J9wENd6vypdxA=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], - "@docsearch/react": ["@docsearch/react@3.9.0", "", { "dependencies": { "@algolia/autocomplete-core": "1.17.9", "@algolia/autocomplete-preset-algolia": "1.17.9", "@docsearch/css": "3.9.0", "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", "react": ">= 16.8.0 < 20.0.0", "react-dom": ">= 16.8.0 < 20.0.0", "search-insights": ">= 1 < 3" }, "optionalPeers": ["@types/react", "react", "react-dom", "search-insights"] }, "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], - "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], + "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.1.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], + "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.1", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.0", "tslib": "^2.8.1" } }, "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], + "@fumadocs/tailwind": ["@fumadocs/tailwind@0.0.2", "", { "dependencies": { "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "tailwindcss": "^4.0.0" }, "optionalPeers": ["tailwindcss"] }, "sha512-4JrTJLRDKKdFF3gy07rAsakqGr17/0cJE042B1icCmMRrPA4a38cjR1qd4EqUiDJ+fzM0wgVN9QYiqds3HB2rg=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], + "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], - "@iconify-json/bi": ["@iconify-json/bi@1.2.7", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-IPz8WNxmLkH1I9msl+0Q4OnmjjvP4uU0Z61a4i4sqonB6vKSbMGUWuGn8/YuuszlReVj8rf+3gNv5JU8Xoljyg=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], - "@iconify-json/lucide": ["@iconify-json/lucide@1.2.92", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-+ghJelYoO/cfR6Kl/SKRJJZ+lONUUanC7w94Lh8gOZaSK92RBmLE+mojYrcVrLqjLnJO5KkryQxRcg3dLFPZww=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], - "@iconify/tools": ["@iconify/tools@4.2.0", "", { "dependencies": { "@iconify/types": "^2.0.0", "@iconify/utils": "^2.3.0", "cheerio": "^1.1.2", "domhandler": "^5.0.3", "extract-zip": "^2.0.1", "local-pkg": "^1.1.2", "pathe": "^2.0.3", "svgo": "^3.3.2", "tar": "^7.5.2" } }, "sha512-WRxPva/ipxYkqZd1+CkEAQmd86dQmrwH0vwK89gmp2Kh2WyyVw57XbPng0NehP3x4V1LzLsXUneP1uMfTMZmUA=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], - "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], - "@iconify/utils": ["@iconify/utils@2.3.0", "", { "dependencies": { "@antfu/install-pkg": "^1.0.0", "@antfu/utils": "^8.1.0", "@iconify/types": "^2.0.0", "debug": "^4.4.0", "globals": "^15.14.0", "kolorist": "^1.8.0", "local-pkg": "^1.0.0", "mlly": "^1.7.4" } }, "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA=="], + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], - "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], - - "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], - "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.0.5", "", { "os": "linux", "cpu": "arm" }, "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.0.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA=="], + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw=="], + "@next/env": ["@next/env@16.1.6", "", {}, "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ=="], - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw=="], - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ=="], - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.0.5" }, "os": "linux", "cpu": "arm" }, "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw=="], - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.0.4" }, "os": "linux", "cpu": "s390x" }, "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ=="], - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg=="], - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw=="], - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A=="], - "@img/sharp-wasm32": ["@img/sharp-wasm32@0.33.5", "", { "dependencies": { "@emnapi/runtime": "^1.2.0" }, "cpu": "none" }, "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg=="], + "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], - "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.33.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ=="], + "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], - "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], - "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], - "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], - "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], - "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], - "@preact/preset-vite": ["@preact/preset-vite@2.10.3", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@prefresh/vite": "^2.4.11", "@rollup/pluginutils": "^5.0.0", "babel-plugin-transform-hook-names": "^1.0.2", "debug": "^4.4.3", "picocolors": "^1.1.1", "vite-prerender-plugin": "^0.5.8" }, "peerDependencies": { "@babel/core": "7.x", "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x" } }, "sha512-1SiS+vFItpkNdBs7q585PSAIln0wBeBdcpJYbzPs1qipsb/FssnkUioNXuRsb8ZnU8YEQHr+3v8+/mzWSnTQmg=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], - "@preact/signals": ["@preact/signals@2.8.0", "", { "dependencies": { "@preact/signals-core": "^1.13.0" }, "peerDependencies": { "preact": ">= 10.25.0 || >=11.0.0-0" } }, "sha512-lcILM82mei8s/53n2M6uZlrDHLlgLld8Squ0PVSUL5Ae1M45uEstWfHm+wcDqp2U5I/ZYrBvCY65udFyTo5OZw=="], + "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w=="], - "@preact/signals-core": ["@preact/signals-core@1.13.0", "", {}, "sha512-slT6XeTCAbdql61GVLlGU4x7XHI7kCZV5Um5uhE4zLX4ApgiiXc0UYFvVOKq06xcovzp7p+61l68oPi563ARKg=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], - "@prefresh/babel-plugin": ["@prefresh/babel-plugin@0.5.2", "", {}, "sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], - "@prefresh/core": ["@prefresh/core@1.5.9", "", { "peerDependencies": { "preact": "^10.0.0 || ^11.0.0-0" } }, "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], - "@prefresh/utils": ["@prefresh/utils@1.2.1", "", {}, "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], - "@prefresh/vite": ["@prefresh/vite@2.4.11", "", { "dependencies": { "@babel/core": "^7.22.1", "@prefresh/babel-plugin": "0.5.2", "@prefresh/core": "^1.5.0", "@prefresh/utils": "^1.2.0", "@rollup/pluginutils": "^4.2.1" }, "peerDependencies": { "preact": "^10.4.0 || ^11.0.0-0", "vite": ">=2.0.0" } }, "sha512-/XjURQqdRiCG3NpMmWqE9kJwrg9IchIOWHzulCfqg2sRe/8oQ1g5De7xrk9lbqPIQLn7ntBkKdqWXIj4E9YXyg=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], - "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.10", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.56.0", "", { "os": "android", "cpu": "arm" }, "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.56.0", "", { "os": "android", "cpu": "arm64" }, "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.56.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.56.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.56.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.56.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.56.0", "", { "os": "linux", "cpu": "arm" }, "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.56.0", "", { "os": "linux", "cpu": "arm" }, "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw=="], + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.56.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ=="], + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.56.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA=="], + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg=="], + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA=="], + "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.56.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw=="], + "@shikijs/core": ["@shikijs/core@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.56.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ=="], + "@shikijs/langs": ["@shikijs/langs@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.56.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ=="], + "@shikijs/rehype": ["@shikijs/rehype@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.1", "shiki": "3.22.0", "unified": "^11.0.5", "unist-util-visit": "^5.1.0" } }, "sha512-69b2VPc6XBy/VmAJlpBU5By+bJSBdE2nvgRCZXav7zujbrjXuT0F60DIrjKuutjPqNufuizE+E8tIZr2Yn8Z+g=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.56.0", "", { "os": "linux", "cpu": "x64" }, "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw=="], + "@shikijs/themes": ["@shikijs/themes@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.56.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA=="], + "@shikijs/transformers": ["@shikijs/transformers@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/types": "3.22.0" } }, "sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.56.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA=="], + "@shikijs/types": ["@shikijs/types@3.22.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.56.0", "", { "os": "none", "cpu": "arm64" }, "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ=="], + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.56.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.56.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg=="], + "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.56.0", "", { "os": "win32", "cpu": "x64" }, "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ=="], + "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.56.0", "", { "os": "win32", "cpu": "x64" }, "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], - "@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="], - "@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="], - "@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="], - "@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="], - "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="], - "@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="], - "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="], - "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="], - "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="], - "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="], - "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.18", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "postcss": "^8.4.41", "tailwindcss": "4.1.18" } }, "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], @@ -368,29 +314,23 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/nlcst": ["@types/nlcst@1.0.4", "", { "dependencies": { "@types/unist": "^2" } }, "sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg=="], - - "@types/node": ["@types/node@25.0.10", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg=="], - - "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], + "@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="], - "@types/react": ["@types/react@18.3.27", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w=="], + "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], - "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + "@zeit/schemas": ["@zeit/schemas@2.36.0", "", {}, "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg=="], "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "algoliasearch": ["algoliasearch@5.47.0", "", { "dependencies": { "@algolia/abtesting": "1.13.0", "@algolia/client-abtesting": "5.47.0", "@algolia/client-analytics": "5.47.0", "@algolia/client-common": "5.47.0", "@algolia/client-insights": "5.47.0", "@algolia/client-personalization": "5.47.0", "@algolia/client-query-suggestions": "5.47.0", "@algolia/client-search": "5.47.0", "@algolia/ingestion": "1.47.0", "@algolia/monitoring": "1.47.0", "@algolia/recommend": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-AGtz2U7zOV4DlsuYV84tLp2tBbA7RPtLA44jbVH4TTpDcc1dIWmULjHSsunlhscbzDydnjuFlNhflR3nV4VJaQ=="], + "ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], @@ -398,45 +338,37 @@ "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + "arch": ["arch@2.2.0", "", {}, "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ=="], - "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], - - "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], - "astro": ["astro@4.16.19", "", { "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.1", "@astrojs/markdown-remark": "5.3.0", "@astrojs/telemetry": "3.1.0", "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/types": "^7.26.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", "@types/babel__core": "^7.20.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.1.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.7.2", "cssesc": "^3.0.0", "debug": "^4.3.7", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.5.4", "esbuild": "^0.21.5", "estree-walker": "^3.0.3", "fast-glob": "^3.3.2", "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.14", "magicast": "^0.3.5", "micromatch": "^4.0.8", "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "ora": "^8.1.1", "p-limit": "^6.1.0", "p-queue": "^8.0.1", "preferred-pm": "^4.0.0", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.6.3", "shiki": "^1.23.1", "tinyexec": "^0.3.1", "tsconfck": "^3.1.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "vite": "^5.4.11", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-baeSswPC5ZYvhGDoj25L2FuzKRWMgx105FetOPQVJFMCAp0o08OonYC7AhwsFdhvp7GapqjnC1Fe3lKb2lupYw=="], - - "astro-icon": ["astro-icon@1.1.5", "", { "dependencies": { "@iconify/tools": "^4.0.5", "@iconify/types": "^2.0.0", "@iconify/utils": "^2.1.30" } }, "sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - "babel-plugin-transform-hook-names": ["babel-plugin-transform-hook-names@1.0.2", "", { "peerDependencies": { "@babel/core": "^7.12.10" } }, "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw=="], + "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "base-64": ["base-64@1.0.0", "", {}, "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="], - - "baseline-browser-mapping": ["baseline-browser-mapping@2.9.18", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.9.15", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg=="], - "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], + "boxen": ["boxen@7.0.0", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.0", "chalk": "^5.0.1", "cli-boxes": "^3.0.0", "string-width": "^5.1.2", "type-fest": "^2.13.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.0.1" } }, "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + "camelcase": ["camelcase@7.0.1", "", {}, "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="], - "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], - - "caniuse-lite": ["caniuse-lite@1.0.30001766", "", {}, "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA=="], + "caniuse-lite": ["caniuse-lite@1.0.30001765", "", {}, "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "chalk": ["chalk@5.0.1", "", {}, "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w=="], + + "chalk-template": ["chalk-template@0.4.0", "", { "dependencies": { "chalk": "^4.1.2" } }, "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg=="], "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], @@ -446,110 +378,70 @@ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], - "cheerio": ["cheerio@1.2.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg=="], - - "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - - "ci-info": ["ci-info@4.3.1", "", {}, "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], + "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "clipboardy": ["clipboardy@3.0.0", "", { "dependencies": { "arch": "^2.2.0", "execa": "^5.1.1", "is-wsl": "^2.2.0" } }, "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg=="], "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], - "color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "color-string": ["color-string@1.9.1", "", { "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="], - "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - - "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], + "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], - "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + "compression": ["compression@1.8.1", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "compute-scroll-into-view": ["compute-scroll-into-view@3.1.1", "", {}, "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw=="], - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + "content-disposition": ["content-disposition@0.5.2", "", {}, "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA=="], - "css-tree": ["css-tree@2.3.1", "", { "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" } }, "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="], - - "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], - - "devalue": ["devalue@5.6.2", "", {}, "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "diff": ["diff@5.2.2", "", {}, "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A=="], - - "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], - - "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - - "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - - "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - - "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - - "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.278", "", {}, "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw=="], + "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - - "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], - - "encoding-sniffer": ["encoding-sniffer@0.2.1", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw=="], - - "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - - "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "enhanced-resolve": ["enhanced-resolve@5.18.4", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q=="], "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], - - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], @@ -560,65 +452,37 @@ "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], + "estree-util-value-to-estree": ["estree-util-value-to-estree@3.5.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ=="], + "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], - - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], - - "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], - - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], - - "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - - "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "framer-motion": ["framer-motion@12.34.0", "", { "dependencies": { "motion-dom": "^12.34.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg=="], - "find-up-simple": ["find-up-simple@1.0.1", "", {}, "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="], + "fumadocs-core": ["fumadocs-core@16.5.4", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.8.1", "@orama/orama": "^3.1.18", "@shikijs/rehype": "^3.22.0", "@shikijs/transformers": "^3.22.0", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-markdown": "^2.1.2", "negotiator": "^1.0.0", "npm-to-yarn": "^3.0.1", "path-to-regexp": "^8.3.0", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^3.22.0", "tinyglobby": "^0.2.15", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3" }, "peerDependencies": { "@mdx-js/mdx": "*", "@mixedbread/sdk": "^0.46.0", "@orama/core": "1.x.x", "@oramacloud/client": "2.x.x", "@tanstack/react-router": "1.x.x", "@types/estree-jsx": "*", "@types/hast": "*", "@types/mdast": "*", "@types/react": "*", "algoliasearch": "5.x.x", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x", "waku": "^0.26.0 || ^0.27.0 || ^1.0.0", "zod": "4.x.x" }, "optionalPeers": ["@mdx-js/mdx", "@mixedbread/sdk", "@orama/core", "@oramacloud/client", "@tanstack/react-router", "@types/estree-jsx", "@types/hast", "@types/mdast", "@types/react", "algoliasearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-CUqyl1YMTzj6JbzduVqAza5rp3zRO2idwu7HoYTkB3Gpibyph1uwOMVGwFt3ra8hENpQCXQAfPMUGcjyba9MCg=="], - "find-yarn-workspace-root2": ["find-yarn-workspace-root2@1.2.16", "", { "dependencies": { "micromatch": "^4.0.2", "pkg-dir": "^4.2.0" } }, "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA=="], + "fumadocs-mdx": ["fumadocs-mdx@14.2.7", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.1.0", "chokidar": "^5.0.0", "esbuild": "^0.27.3", "estree-util-value-to-estree": "^3.5.0", "js-yaml": "^4.1.1", "mdast-util-to-markdown": "^2.1.2", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "remark-mdx": "^3.1.1", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "zod": "^4.3.6" }, "peerDependencies": { "@fumadocs/mdx-remote": "^1.4.0", "@types/mdast": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "^15.0.0 || ^16.0.0", "mdast-util-directive": "*", "mdast-util-mdx-jsx": "*", "next": "^15.3.0 || ^16.0.0", "react": "*", "vite": "6.x.x || 7.x.x" }, "optionalPeers": ["@fumadocs/mdx-remote", "@types/mdast", "@types/mdx", "@types/react", "mdast-util-directive", "mdast-util-mdx-jsx", "next", "react", "vite"], "bin": { "fumadocs-mdx": "dist/bin.js" } }, "sha512-Q2W79F7wpwhq4HoYPw9GnMpf5ZmpdU7YzZND7EWwwOiWddfyzPh6EH/z7MFhhdhsTqRh9/kwwsu9XslWDRRPsg=="], - "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + "fumadocs-ui": ["fumadocs-ui@16.5.4", "", { "dependencies": { "@fumadocs/tailwind": "0.0.2", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-direction": "^1.1.1", "@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-presence": "^1.1.5", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "class-variance-authority": "^0.7.1", "lucide-react": "^0.563.0", "motion": "^12.33.0", "next-themes": "^0.4.6", "react-medium-image-zoom": "^5.4.0", "react-remove-scroll": "^2.7.2", "scroll-into-view-if-needed": "^3.1.0", "tailwind-merge": "^3.4.0" }, "peerDependencies": { "@types/react": "*", "fumadocs-core": "16.5.4", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0" }, "optionalPeers": ["@types/react", "next"] }, "sha512-HGKBgjViQTd1Df/ZcDTELnZ5haAbkGR16Yy5oJkUKKqdNJ5fpEBCLn/f9nbxjBIfvtayPtUd7+1jNIjvBZu/1A=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], - - "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], - - "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], - "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "globals": ["globals@15.15.0", "", {}, "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], - - "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], - - "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], - - "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], - - "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], - - "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], @@ -626,27 +490,17 @@ "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], - "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], - - "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + "hast-util-to-string": ["hast-util-to-string@3.0.1", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A=="], "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - - "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - - "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], - "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "htmlparser2": ["htmlparser2@10.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "entities": "^7.0.1" } }, "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ=="], + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="], - "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], @@ -654,74 +508,64 @@ "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], - "is-arrayish": ["is-arrayish@0.3.4", "", {}, "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA=="], - - "is-buffer": ["is-buffer@2.0.5", "", {}, "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="], - "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], - "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-port-reachable": ["is-port-reachable@4.0.0", "", {}, "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig=="], - "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], - "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], - "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], - "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], - "load-yaml-file": ["load-yaml-file@0.2.0", "", { "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.13.0", "pify": "^4.0.1", "strip-bom": "^3.0.0" } }, "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], - "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], - "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], - "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - - "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "lucide-react": ["lucide-react@0.563.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], - "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], @@ -754,9 +598,7 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "mdn-data": ["mdn-data@2.0.30", "", {}, "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="], - - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], @@ -828,107 +670,81 @@ "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - - "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + "mime-types": ["mime-types@2.1.18", "", { "dependencies": { "mime-db": "~1.33.0" } }, "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="], - "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - - "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], - - "nlcst-to-string": ["nlcst-to-string@3.1.1", "", { "dependencies": { "@types/nlcst": "^1.0.0" } }, "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw=="], + "motion": ["motion@12.34.0", "", { "dependencies": { "framer-motion": "^12.34.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-01Sfa/zgsD/di8zA/uFW5Eb7/SPXoGyUfy+uMRMW5Spa8j0z/UbfQewAYvPMYFCXRlyD6e5aLHh76TxeeJD+RA=="], - "node-html-parser": ["node-html-parser@6.1.13", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg=="], + "motion-dom": ["motion-dom@12.34.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q=="], - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], - "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], + "next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="], - "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "p-limit": ["p-limit@6.2.0", "", { "dependencies": { "yocto-queue": "^1.1.1" } }, "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA=="], + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "npm-to-yarn": ["npm-to-yarn@3.0.1", "", {}, "sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A=="], - "p-queue": ["p-queue@8.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ=="], + "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], - "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], - "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], + "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "parse-latin": ["parse-latin@5.0.1", "", { "dependencies": { "nlcst-to-string": "^3.0.0", "unist-util-modify-children": "^3.0.0", "unist-util-visit-children": "^2.0.0" } }, "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg=="], - - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + "path-is-inside": ["path-is-inside@1.0.2", "", {}, "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w=="], - "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "parse5-parser-stream": ["parse5-parser-stream@7.1.2", "", { "dependencies": { "parse5": "^7.0.0" } }, "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow=="], - - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], - - "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], - - "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - "preact": ["preact@10.28.2", "", {}, "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA=="], - - "preact-render-to-string": ["preact-render-to-string@6.6.5", "", { "peerDependencies": { "preact": ">=10 || >= 11.0.0-0" } }, "sha512-O6MHzYNIKYaiSX3bOw0gGZfEbOmlIDtDfWwN1JJdc/T3ihzRT6tGGSEWE088dWrEDGa1u7101q+6fzQnO9XCPA=="], + "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - "preferred-pm": ["preferred-pm@4.1.1", "", { "dependencies": { "find-up-simple": "^1.0.0", "find-yarn-workspace-root2": "1.2.16", "which-pm": "^3.0.1" } }, "sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], - "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "prettier-plugin-astro": ["prettier-plugin-astro@0.14.1", "", { "dependencies": { "@astrojs/compiler": "^2.9.1", "prettier": "^3.0.0", "sass-formatter": "^0.7.6" } }, "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw=="], + "range-parser": ["range-parser@1.2.0", "", {}, "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="], - "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], - "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], - "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + "react-medium-image-zoom": ["react-medium-image-zoom@5.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg=="], - "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], - "react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="], - - "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], @@ -938,21 +754,19 @@ "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], - "regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], - "regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], - "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], - - "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], + "registry-auth-token": ["registry-auth-token@3.3.2", "", { "dependencies": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" } }, "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ=="], - "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], + "registry-url": ["registry-url@3.1.0", "", { "dependencies": { "rc": "^1.0.1" } }, "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA=="], "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], - "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], + "remark": ["remark@15.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A=="], "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], @@ -962,51 +776,31 @@ "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], - "remark-smartypants": ["remark-smartypants@2.1.0", "", { "dependencies": { "retext": "^8.1.0", "retext-smartypants": "^5.2.0", "unist-util-visit": "^5.0.0" } }, "sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw=="], - "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - - "retext": ["retext@8.1.0", "", { "dependencies": { "@types/nlcst": "^1.0.0", "retext-latin": "^3.0.0", "retext-stringify": "^3.0.0", "unified": "^10.0.0" } }, "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q=="], - - "retext-latin": ["retext-latin@3.1.0", "", { "dependencies": { "@types/nlcst": "^1.0.0", "parse-latin": "^5.0.0", "unherit": "^3.0.0", "unified": "^10.0.0" } }, "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ=="], - - "retext-smartypants": ["retext-smartypants@5.2.0", "", { "dependencies": { "@types/nlcst": "^1.0.0", "nlcst-to-string": "^3.0.0", "unified": "^10.0.0", "unist-util-visit": "^4.0.0" } }, "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw=="], - - "retext-stringify": ["retext-stringify@3.1.0", "", { "dependencies": { "@types/nlcst": "^1.0.0", "nlcst-to-string": "^3.0.0", "unified": "^10.0.0" } }, "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w=="], - - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - - "rollup": ["rollup@4.56.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.56.0", "@rollup/rollup-android-arm64": "4.56.0", "@rollup/rollup-darwin-arm64": "4.56.0", "@rollup/rollup-darwin-x64": "4.56.0", "@rollup/rollup-freebsd-arm64": "4.56.0", "@rollup/rollup-freebsd-x64": "4.56.0", "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", "@rollup/rollup-linux-arm-musleabihf": "4.56.0", "@rollup/rollup-linux-arm64-gnu": "4.56.0", "@rollup/rollup-linux-arm64-musl": "4.56.0", "@rollup/rollup-linux-loong64-gnu": "4.56.0", "@rollup/rollup-linux-loong64-musl": "4.56.0", "@rollup/rollup-linux-ppc64-gnu": "4.56.0", "@rollup/rollup-linux-ppc64-musl": "4.56.0", "@rollup/rollup-linux-riscv64-gnu": "4.56.0", "@rollup/rollup-linux-riscv64-musl": "4.56.0", "@rollup/rollup-linux-s390x-gnu": "4.56.0", "@rollup/rollup-linux-x64-gnu": "4.56.0", "@rollup/rollup-linux-x64-musl": "4.56.0", "@rollup/rollup-openbsd-x64": "4.56.0", "@rollup/rollup-openharmony-arm64": "4.56.0", "@rollup/rollup-win32-arm64-msvc": "4.56.0", "@rollup/rollup-win32-ia32-msvc": "4.56.0", "@rollup/rollup-win32-x64-gnu": "4.56.0", "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg=="], - - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - - "s.color": ["s.color@0.0.15", "", {}, "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA=="], - - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "sass-formatter": ["sass-formatter@0.7.9", "", { "dependencies": { "suf-log": "^2.5.3" } }, "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "search-insights": ["search-insights@2.17.3", "", {}, "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ=="], - - "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], + "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "^3.0.2" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - "sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], + "serve": ["serve@14.2.5", "", { "dependencies": { "@zeit/schemas": "2.36.0", "ajv": "8.12.0", "arg": "5.0.2", "boxen": "7.0.0", "chalk": "5.0.1", "chalk-template": "0.4.0", "clipboardy": "3.0.0", "compression": "1.8.1", "is-port-reachable": "4.0.0", "serve-handler": "6.1.6", "update-check": "1.5.4" }, "bin": { "serve": "build/main.js" } }, "sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA=="], + + "serve-handler": ["serve-handler@6.1.6", "", { "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ=="], - "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - "simple-code-frame": ["simple-code-frame@1.3.0", "", { "dependencies": { "kolorist": "^1.6.0" } }, "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w=="], + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "simple-swizzle": ["simple-swizzle@0.2.4", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw=="], + "shiki": ["shiki@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/engine-javascript": "3.22.0", "@shikijs/engine-oniguruma": "3.22.0", "@shikijs/langs": "3.22.0", "@shikijs/themes": "3.22.0", "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], @@ -1014,68 +808,50 @@ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - - "stack-trace": ["stack-trace@1.0.0-pre2", "", {}, "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A=="], - - "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], - - "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], - "suf-log": ["suf-log@2.5.3", "", { "dependencies": { "s.color": "0.0.15" } }, "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow=="], + "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], - "svgo": ["svgo@3.3.2", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0" }, "bin": "./bin/svgo" }, "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "tar": ["tar@7.5.6", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA=="], + "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - - "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], - - "undici": ["undici@7.19.1", "", {}, "sha512-Gpq0iNm5M6cQWlyHQv9MV+uOj1jWk7LpkoE5vSp/7zjb4zMdAcUD+VL5y0nH4p9EbUklq00eVIIX/XcDHzu5xg=="], - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "unherit": ["unherit@3.0.1", "", {}, "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg=="], - "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], - "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "unist-util-modify-children": ["unist-util-modify-children@3.1.1", "", { "dependencies": { "@types/unist": "^2.0.0", "array-iterate": "^2.0.0" } }, "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA=="], - "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], @@ -1086,330 +862,88 @@ "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "unist-util-visit-children": ["unist-util-visit-children@2.0.2", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q=="], - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + "update-check": ["update-check@1.5.4", "", { "dependencies": { "registry-auth-token": "3.3.2", "registry-url": "3.1.0" } }, "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ=="], - "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], - "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "vite-prerender-plugin": ["vite-prerender-plugin@0.5.12", "", { "dependencies": { "kolorist": "^1.8.0", "magic-string": "0.x >= 0.26.0", "node-html-parser": "^6.1.12", "simple-code-frame": "^1.3.0", "source-map": "^0.7.4", "stack-trace": "^1.0.0-pre2" }, "peerDependencies": { "vite": "5.x || 6.x || 7.x" } }, "sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], - - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - - "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], - - "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], - - "which-pm": ["which-pm@3.0.1", "", { "dependencies": { "load-yaml-file": "^0.2.0" } }, "sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg=="], - - "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], - - "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], - - "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], - - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], - - "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "widest-line": ["widest-line@4.0.1", "", { "dependencies": { "string-width": "^5.0.1" } }, "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig=="], - "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "zod-to-ts": ["zod-to-ts@1.2.0", "", { "peerDependencies": { "typescript": "^4.9.4 || ^5.0.2", "zod": "^3" } }, "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA=="], + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@algolia/abtesting/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/abtesting/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/abtesting/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/abtesting/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/client-abtesting/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], + "@mdx-js/mdx/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - "@algolia/client-abtesting/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], + "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@algolia/client-abtesting/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], + "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@algolia/client-abtesting/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], + "@radix-ui/react-popover/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@algolia/client-analytics/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], + "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "@algolia/client-analytics/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], - "@algolia/client-analytics/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], - "@algolia/client-analytics/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@algolia/client-insights/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], - "@algolia/client-insights/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - "@algolia/client-insights/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/client-insights/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/client-personalization/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/client-personalization/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/client-personalization/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/client-personalization/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/client-query-suggestions/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/client-query-suggestions/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/client-query-suggestions/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/client-query-suggestions/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/ingestion/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/ingestion/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/ingestion/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/ingestion/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/monitoring/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/monitoring/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/monitoring/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/monitoring/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@algolia/recommend/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "@algolia/recommend/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "@algolia/recommend/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "@algolia/recommend/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], - - "@antfu/install-pkg/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@docsearch/react/@docsearch/css": ["@docsearch/css@3.9.0", "", {}, "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA=="], - - "@prefresh/vite/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], - - "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "@types/nlcst/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "@types/yauzl/@types/node": ["@types/node@20.19.30", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g=="], - - "algoliasearch/@algolia/client-common": ["@algolia/client-common@5.47.0", "", {}, "sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg=="], - - "algoliasearch/@algolia/client-search": ["@algolia/client-search@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0", "@algolia/requester-browser-xhr": "5.47.0", "@algolia/requester-fetch": "5.47.0", "@algolia/requester-node-http": "5.47.0" } }, "sha512-b5hlU69CuhnS2Rqgsz7uSW0t4VqrLMLTPbUpEl0QVz56rsSwr1Sugyogrjb493sWDA+XU1FU5m9eB8uH7MoI0g=="], - - "algoliasearch/@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-Ja+zPoeSA2SDowPwCNRbm5Q2mzDvVV8oqxCQ4m6SNmbKmPlCfe30zPfrt9ho3kBHnsg37pGucwOedRIOIklCHw=="], - - "algoliasearch/@algolia/requester-fetch": ["@algolia/requester-fetch@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-N6nOvLbaR4Ge+oVm7T4W/ea1PqcSbsHR4O58FJ31XtZjFPtOyxmnhgCmGCzP9hsJI6+x0yxJjkW5BMK/XI8OvA=="], - - "algoliasearch/@algolia/requester-node-http": ["@algolia/requester-node-http@5.47.0", "", { "dependencies": { "@algolia/client-common": "5.47.0" } }, "sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA=="], + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "astro/@astrojs/markdown-remark": ["@astrojs/markdown-remark@5.3.0", "", { "dependencies": { "@astrojs/prism": "3.1.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", "shiki": "^1.22.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg=="], - - "astro/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + "chalk-template/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + "mdast-util-to-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - "htmlparser2/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + "micromark/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "load-yaml-file/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + "mime-types/mime-db": ["mime-db@1.33.0", "", {}, "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="], - "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], - - "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - - "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - - "retext/unified": ["unified@10.1.2", "", { "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" } }, "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q=="], - - "retext-latin/unified": ["unified@10.1.2", "", { "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" } }, "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q=="], - - "retext-smartypants/unified": ["unified@10.1.2", "", { "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" } }, "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q=="], - - "retext-smartypants/unist-util-visit": ["unist-util-visit@4.1.2", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", "unist-util-visit-parents": "^5.1.1" } }, "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg=="], - - "retext-stringify/unified": ["unified@10.1.2", "", { "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" } }, "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q=="], + "serve-handler/bytes": ["bytes@3.0.0", "", {}, "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="], - "unist-util-modify-children/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "serve-handler/path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="], - "unist-util-visit-children/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - - "@prefresh/vite/@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "@prefresh/vite/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "@types/yauzl/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "unist-util-remove-position/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "astro/@astrojs/markdown-remark/remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], - - "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], - - "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - - "load-yaml-file/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - - "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "retext-latin/unified/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "retext-latin/unified/vfile": ["vfile@5.3.7", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" } }, "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g=="], - - "retext-smartypants/unified/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "retext-smartypants/unified/vfile": ["vfile@5.3.7", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" } }, "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g=="], - - "retext-smartypants/unist-util-visit/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "retext-smartypants/unist-util-visit/unist-util-is": ["unist-util-is@5.2.1", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw=="], - - "retext-smartypants/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@5.1.3", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" } }, "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg=="], - - "retext-stringify/unified/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "retext-stringify/unified/vfile": ["vfile@5.3.7", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" } }, "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g=="], - - "retext/unified/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - - "retext/unified/vfile": ["vfile@5.3.7", "", { "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^3.0.0", "vfile-message": "^3.0.0" } }, "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g=="], - - "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], - - "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], - - "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], - - "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], - - "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], - - "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], - - "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + "chalk-template/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], - - "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], - - "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], - - "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], - - "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], - - "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], - - "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], - - "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], - - "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], - - "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], - - "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], - - "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], - - "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], - - "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], - - "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], - - "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "micromark/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], - - "retext-latin/unified/vfile/unist-util-stringify-position": ["unist-util-stringify-position@3.0.3", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg=="], - - "retext-latin/unified/vfile/vfile-message": ["vfile-message@3.1.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" } }, "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw=="], - - "retext-smartypants/unified/vfile/unist-util-stringify-position": ["unist-util-stringify-position@3.0.3", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg=="], - - "retext-smartypants/unified/vfile/vfile-message": ["vfile-message@3.1.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" } }, "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw=="], - - "retext-stringify/unified/vfile/unist-util-stringify-position": ["unist-util-stringify-position@3.0.3", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg=="], - - "retext-stringify/unified/vfile/vfile-message": ["vfile-message@3.1.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" } }, "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw=="], - - "retext/unified/vfile/unist-util-stringify-position": ["unist-util-stringify-position@3.0.3", "", { "dependencies": { "@types/unist": "^2.0.0" } }, "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg=="], - - "retext/unified/vfile/vfile-message": ["vfile-message@3.1.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" } }, "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext-smartypants/@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext-smartypants/nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-latin/parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-stringify/nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-latin/parse-latin/nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-latin/parse-latin/unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], - - "astro/@astrojs/markdown-remark/remark-smartypants/retext/retext-latin/parse-latin/unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], } } diff --git a/components/provider.tsx b/components/provider.tsx new file mode 100644 index 00000000..522282b2 --- /dev/null +++ b/components/provider.tsx @@ -0,0 +1,8 @@ +'use client'; +import SearchDialog from '@/components/search'; +import { RootProvider } from 'fumadocs-ui/provider/next'; +import { type ReactNode } from 'react'; + +export function Provider({ children }: { children: ReactNode }) { + return {children}; +} diff --git a/components/search.tsx b/components/search.tsx new file mode 100644 index 00000000..1f704205 --- /dev/null +++ b/components/search.tsx @@ -0,0 +1,46 @@ +'use client'; +import { + SearchDialog, + SearchDialogClose, + SearchDialogContent, + SearchDialogHeader, + SearchDialogIcon, + SearchDialogInput, + SearchDialogList, + SearchDialogOverlay, + type SharedProps, +} from 'fumadocs-ui/components/dialog/search'; +import { useDocsSearch } from 'fumadocs-core/search/client'; +import { create } from '@orama/orama'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; + +function initOrama() { + return create({ + schema: { _: 'string' }, + // https://docs.orama.com/docs/orama-js/supported-languages + language: 'english', + }); +} + +export default function DefaultSearchDialog(props: SharedProps) { + const { locale } = useI18n(); // (optional) for i18n + const { search, setSearch, query } = useDocsSearch({ + type: 'static', + initOrama, + locale, + }); + + return ( + + + + + + + + + + + + ); +} diff --git a/components/split.tsx b/components/split.tsx new file mode 100644 index 00000000..59a6db5c --- /dev/null +++ b/components/split.tsx @@ -0,0 +1,59 @@ +"use client"; +import React, { useState } from "react"; + +interface SplitProps { + children: React.ReactNode; +} + +export function Root({ children }: SplitProps) { + const [leftWidth, setLeftWidth] = useState(50); + + const handleMouseDown = (e: React.MouseEvent) => { + e.preventDefault(); + + const startX = e.clientX; + const initialLeftWidth = leftWidth; + + const handleMouseMove = (moveEvent: MouseEvent) => { + const deltaX = moveEvent.clientX - startX; + const newLeftWidth = Math.max( + 20, + Math.min(80, initialLeftWidth + (deltaX / window.innerWidth) * 100), + ); + setLeftWidth(newLeftWidth); + }; + + const handleMouseUp = () => { + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("mouseup", handleMouseUp); + }; + + document.addEventListener("mousemove", handleMouseMove); + document.addEventListener("mouseup", handleMouseUp); + }; + + const childrenArray = React.Children.toArray(children); + const leftChild = childrenArray[0]; + const rightChild = childrenArray[1]; + + return ( +
+
+ {leftChild} +
+
+
+
+
+
+ {rightChild} +
+
+ ); +} diff --git a/src/content/docs/en/release/43-upgrades.mdx b/content/docs/about/43-upgrades.mdx similarity index 69% rename from src/content/docs/en/release/43-upgrades.mdx rename to content/docs/about/43-upgrades.mdx index 73cf9cb7..54101555 100644 --- a/src/content/docs/en/release/43-upgrades.mdx +++ b/content/docs/about/43-upgrades.mdx @@ -1,9 +1,8 @@ --- -title: Upgrades for Ultramarine 43 -description: "A temporary notice for the 42 to 43 upgrade path." +title: Upgrading to Ultramarine 43 +description: "How to upgrade to Ultramarine 43" --- -import Alert from "../../../../components/Docs/Alert.astro"; We're proud to announce that upgrades to Ultramarine Linux 43 (Gas Meter) are ready right now in your edition's app store! @@ -17,7 +16,7 @@ You may need to update your copy of Ultramarine 42 before the upgrade will becom ## Command Line -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. +In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`dnf. Run the following and follow the prompts: @@ -38,8 +37,4 @@ sudo dnf distro-sync --releasever=43 ## Getting Support -If you need any help please reach out in [one of our chats.](/en/community/community/) - -#### [Next Up: Errata →](/en/release/errata) - -#### [← Back To: Linux Concepts, Security and Privacy →](/en/linux/securityprivacy) +If you need any help please reach out in [one of our chats.](/docs/community/) diff --git a/src/content/docs/en/release/diff-fedora.mdx b/content/docs/about/diff-fedora.mdx similarity index 74% rename from src/content/docs/en/release/diff-fedora.mdx rename to content/docs/about/diff-fedora.mdx index bbe8d26a..9e36cc28 100644 --- a/src/content/docs/en/release/diff-fedora.mdx +++ b/content/docs/about/diff-fedora.mdx @@ -3,7 +3,6 @@ title: Differences with Fedora description: "Known differences and changes compared with Fedora" --- -import Alert from "../../../../components/Docs/Alert.astro"; This page documents Ultramarine Linux's significant changes compared with a typical Fedora workstation setup. @@ -17,8 +16,8 @@ Changes listed below are non-exhaustive and cumulative, meaning each section con ## Ultramarine 43 -- `umcli` tweak: cachyos-kernel -- `umcli` tweak: sudo-pwfeedback +- `umcli`dnf tweak: cachyos-kernel +- `umcli`dnf tweak: sudo-pwfeedback - More fixes to Taidan, including language selection, keyboard variant, etc. - 🔥 Readymade preview images @@ -27,7 +26,7 @@ Changes listed below are non-exhaustive and cumulative, meaning each section con - 🔥 Many Taidan fixes and new pages/features - 📦 Use netto for network connection in Taidan - Properly enable terra-mesa repo for all images -- 📦 `umcli` tweaks feature included ootb +- 📦 `umcli`dnf tweaks feature included ootb - 📦 Surface images switch to upstream surface-dtx-daemon package - WSL gains hardware acceleration, proper Ultramarine shell configs, and some packages ported over from Ultramarine proper. - Update preset systemd services @@ -42,19 +41,19 @@ Changes listed below are non-exhaustive and cumulative, meaning each section con - 🔥 Move many core desktop apps to Flatpak - 🔥 WSL support - 🔥 Surface Images -- 🛳️ `fastfetch` -- 🛳️ `zstd` -- 📦 `umcli` +- 🛳️ `fastfetch`dnf +- 🛳️ `zstd`dnf +- 📦 `umcli`dnf - 📦 NVIDIA drivers shipped in [Terra] - 📦 Codecs shipped in [Terra] ## Ultramarine 40 -- 🔥 [Change default package manager to `dnf5`](/en/usage/um40-dnf5) (`dnf5-default-package-manager`) +- Change default package manager to `dnf5` (`dnf5-default-package-manager`dnf) - Drop Pantheon Edition -- `ultramarine-fun` -- 🛳️ `git` -- 🛳️ XFCE Edition +- `ultramarine-fun`dnf +- `git`dnf +- XFCE Edition - Improve key bindings for `zsh` - Supported by [Raspberry Pi Imager](https://github.com/raspberrypi/rpi-imager) - Use `ext4` instead of `btrfs` for Raspberry Pis @@ -64,20 +63,20 @@ Changes listed below are non-exhaustive and cumulative, meaning each section con - Out of box repositories: [Terra], full set of [RPM Fusion], [Flathub] - IP MTU probing enabled (which fixes [Ubisoft Connect](https://en.wikipedia.org/wiki/Ubisoft_Connect) games) - [Custom wallpapers](https://github.com/Ultramarine-Linux/backgrounds) 🌇 by Aikoyori -- 📦 [System76 Scheduler](https://github.com/pop-os/system76-scheduler) (significantly better scheduling for low-end devices) +- 📦 [System76 Scheduler](https://github.com/pop-os/system76-scheduler)dnf (significantly better scheduling for low-end devices) - 📦 [KWin Script for system76-scheduler Integration](https://github.com/maxiberta/kwin-system76-scheduler-integration) - Numerous popular GNOME extensions - - 🛳️ [AppIndicator/KStatusNotifierItem support](https://github.com/ubuntu/gnome-shell-extension-appindicator) (`gnome-shell-extension-appindicator`) - - 🛳️ [Pop shell extension](https://github.com/pop-os/shell) (`gnome-shell-extension-pop-shell`) - - 🛳️ Support for keyboard selection of windows and workspaces in GNOME Shell (`gnome-shell-extension-windowsNavigator`) - - 🛳️ [Bringing back the app menu](https://github.com/fthx/appmenu-is-back) (`gnome-shell-extension-appmenu-is-back`) - - 📦 [Pop Launcher](https://github.com/pop-os/launcher) (`pop-launcher`) + - 🛳️ [AppIndicator/KStatusNotifierItem support](https://github.com/ubuntu/gnome-shell-extension-appindicator) (`gnome-shell-extension-appindicator`dnf) + - 🛳️ [Pop shell extension](https://github.com/pop-os/shell) (`gnome-shell-extension-pop-shell`dnf) + - 🛳️ Support for keyboard selection of windows and workspaces in GNOME Shell (`gnome-shell-extension-windowsNavigator`dnf) + - 🛳️ [Bringing back the app menu](https://github.com/fthx/appmenu-is-back) (`gnome-shell-extension-appmenu-is-back`dnf) + - 📦 [Pop Launcher](https://github.com/pop-os/launcher) (`pop-launcher`dnf) - 🛳️ Most drivers and codecs -- 🛳️ Guest Desktop Agents (`@guest-desktop-agents`) -- 📦 `sipa-fonts` ([Thai National Fonts](https://en.wikipedia.org/wiki/National_Fonts)) +- 🛳️ Guest Desktop Agents (`@guest-desktop-agents`dnf) +- 📦 `sipa-fonts`dnf ([Thai National Fonts](https://en.wikipedia.org/wiki/National_Fonts)) - 🛳️ Mozc (Japanese Input Method Editor) - 📦 ~~Pantheon Edition (`@pantheon-desktop`)~~ (deprecated since UM40) -- 📦 [Starship](https://starship.rs) +- 📦 [Starship](https://starship.rs)dnf - Custom Budgie Layout that focuses on simplicity (Last Updated October 2025) @@ -85,5 +84,3 @@ Changes listed below are non-exhaustive and cumulative, meaning each section con [Terra]: https://terra.fyralabs.com [RPM Fusion]: https://rpmfusion.org [Flathub]: https://flathub.org - -#### [← Back To: Errata](/en/release/errata) diff --git a/src/content/docs/en/release/errata.mdx b/content/docs/about/errata.mdx similarity index 88% rename from src/content/docs/en/release/errata.mdx rename to content/docs/about/errata.mdx index 7514d0cb..84cd512f 100644 --- a/src/content/docs/en/release/errata.mdx +++ b/content/docs/about/errata.mdx @@ -3,7 +3,6 @@ title: Errata description: "Various known bugs and other issues in Ultramarine Linux." --- -import Alert from "../../../../components/Docs/Alert.astro"; This page contains bugs that we can't solve or that are easily solvable by users. We remove them as they are resolved. @@ -30,7 +29,7 @@ This is solved by distributors including Ultramarine as a synonym to Fedora. This is caused by the boot partition running out of space, you can boot into the previous kernel entry and either install `dracut-strip-trigger` (which will break moving drives to another device) or [tell DNF to keep less kernels](https://discussion.fedoraproject.org/t/how-can-i-change-the-number-of-kernels-retained-when-updating-in-fedora/73863/2). - Since Ultramarine 42, only 2 kernel versions are kept, and `dracut-strip-trigger` should be installed by default. + Since Ultramarine 42, only 2 kernel versions are kept, and `dracut-strip-trigger`dnf should be installed by default. - Taidan language switching does not work @@ -44,7 +43,7 @@ This is solved by distributors including Ultramarine as a synonym to Fedora. - Install icon may not be using the Ultramarine icon. -## Ultramarine Linux 41 +## Ultramarine Linux 41 (EOL) ### All Editions @@ -56,10 +55,10 @@ This is solved by distributors including Ultramarine as a synonym to Fedora. - Nvidia and Surface users may experience a kernel panic after upgrade. - This is caused by the boot partition running out of space, you can boot into the previous kernel entry and either install `dnf-strip-trigger` (which will break moving drives to another device) or [tell DNF to keep less kernels](https://discussion.fedoraproject.org/t/how-can-i-change-the-number-of-kernels-retained-when-updating-in-fedora/73863/2). + This is caused by the boot partition running out of space, you can boot into the previous kernel entry and either install `dracut-strip-trigger`dnf (which will break moving drives to another device) or [tell DNF to keep less kernels](https://discussion.fedoraproject.org/t/how-can-i-change-the-number-of-kernels-retained-when-updating-in-fedora/73863/2). -## Ultramarine Linux 40 +## Ultramarine Linux 40 (EOL) ### Xfce Edition @@ -77,7 +76,7 @@ This is solved by distributors including Ultramarine as a synonym to Fedora. - Flathub not included in new installs - Our builder had dnf weakdeps disabled, causing `ultramarine-repos-extras` to not be installed. This was fixed in UM40.1. + Our builder had dnf weakdeps disabled, causing `ultramarine-repos-extras`dnf to not be installed. This was fixed in UM40.1. - Raw images don't have a Plymouth theme @@ -93,7 +92,7 @@ This is solved by distributors including Ultramarine as a synonym to Fedora. - Fedora bookmarks still included - We removed the Fedora bookmarks and replaced them with `ultramarine-phony-bookmarks`. As the name implies, there are no bookmarks. + We removed the Fedora bookmarks and replaced them with `ultramarine-phony-bookmarks`dnf. As the name implies, there are no bookmarks. - dnf5 not set as default @@ -155,7 +154,7 @@ A workaround is to also specify the Fedora buildroot when trying to add a Copr r - Pop!\_Shell launcher -The Pop!\_Shell launcher is not included. This can be fixed by installing the `pop-launcher` package. +The Pop!\_Shell launcher is not included. This can be fixed by installing the `pop-launcher`dnf package. ### Cutefish Edition @@ -176,7 +175,3 @@ You can help us fix this issue by offering to maintain these packages ourselves, - Missing Tweaks from the Standard Releases As the standard release includes a script to modify the system, due to the nature of OSTree, we are unable to include these tweaks unless we rebuild all major packages with our custom patches. - -#### [Next Up: Differences with Fedora →](/en/release/diff-fedora) - -#### [← Back To: Ultramarine 42 Upgrades →](/en/release/42-upgrades) diff --git a/src/content/docs/en/welcome.mdx b/content/docs/about/index.mdx similarity index 86% rename from src/content/docs/en/welcome.mdx rename to content/docs/about/index.mdx index f4a5eb2e..ba754fa6 100644 --- a/src/content/docs/en/welcome.mdx +++ b/content/docs/about/index.mdx @@ -1,19 +1,23 @@ --- -title: "Welcome" -description: "This wiki is meant to be the extended documentation for both end users and developers, so it is separated in those two categories." +title: "About Ultramarine" +description: "Learn about Ultramarine itself" --- -import Alert from "../../../components/Docs/Alert.astro"; +If you want to install Ultramarine Linux, head to the [Getting Started](/docs/get-started) section. -Welcome to the Ultramarine Wiki! This wiki is designed to help users get settled into Ultramarine Linux. +## What is Ultramarine? -Developer and Package Maintainer Documentation has moved to [Fyra Developer](https://developer.fyralabs.com). +Ultramarine Linux is a modern operating system that supports your workflow with the hardware and tools you already love, for work, school, and play. -If you want to get started with contributing, head to the [Contributing Section](/en/contributing/contributorguide). +However you use your system, we have you covered with tweaks and tools to make things run more seamlessly out of the box. -On this page, you can read about the project, so if you want to become familiar with important concepts and our philosophy, read this first! +## A Brief History -If you want to install Ultramarine Linux, head to the [Getting Ultramarine](/en/setup/getting) section. +Ultramarine Linux was founded as a spiritual succesor to Korora Linux, but has since come into its own and grown beyond this goal. + +Our first release was Ultramarine 35 (Phing Kan), based on Fedora 35. + +Ultramarine joined Fyra Labs ahead of UM39, and has been maintained by Team Fyra ever since. ## General Philosophy @@ -33,7 +37,7 @@ While it may seem trivial to more advanced users to tweak a few settings and ins ### Ultramarine is Accesible. -We believe that software should meet you where you are. Ultramarine accomplishes this by making the experience better, localizing our software, and running on the hardware you already have. +We believe that software should meet you where you are. Ultramarine accomplishes this by making the experience better, localizing our software, providing a better experience for languages with non-Latin characters, and running on the hardware you already have. ## FAQ @@ -49,13 +53,13 @@ After you're migrated, you'll get the latest and greatest Ultramarine features a No, Ultramarine is not just Fedora with extra desktop environments. We aim to improve the user experience by making the system "just work" for new and advanced users. -### What happened to Cutefish? +### What happened to Pantheon? -Cutefish is no longer maintained upstream. We decided to stop supporting Cutefish due to this in Ultramarine 37. +Pantheon Edition was removed in UM40. Downloads had been steadily declining for some time and the desktop simply failed to start in UM40, which is why unfortunately it was dropped. -### What happened to Pantheon? +### What happened to Cutefish? -Pantheon Edition was removed in UM40. Downloads had been steadily declining for some time and the desktop simply failed to start, which is why unfortunately it was dropped. +Cutefish is no longer maintained upstream. We decided to stop supporting Cutefish due to this in Ultramarine 37. ### Can you add a (insert desktop here) edition? @@ -73,15 +77,11 @@ Ideally, any new edition will also have the following: You may also manually install the desktop environment if it is available in Fedora. -#### But what about (insert revival of Cutefish)? - -We do not intend to include revivals of Cutefish as they tend to be very short-lived. - ### Does Ultramarine track or collect my data? -As of now, the only data we collect is a count of how many times a package has been downloaded from Terra or the Ultramarine repository using [DNF Counting](https://docs.fedoraproject.org/en-US/infra/sysadmin_guide/dnf-counting/). This information is not tied to you or your computer. +As of now, the only data we collect is a count of how many times a package has been downloaded from Terra or the Ultramarine repository using [DNF Counting](https://docs.fedoraproject.org/en-US/infra/sysadmin_guide/dnf-counting/), and the number of times our out of box experience connects to the internet. This information does not include any information about your system beyond your CPU architecture, Ultramarine version, and Edition. -Fyra Labs (the company behind Ultramarine) does not collect any data that can be tied to an individual without express consent from the user. +Fyra Labs (the company behind Ultramarine) does not collect any data that can be tied to an individual. ### Is Ultramarine semi-rolling? @@ -117,14 +117,14 @@ By default, Ultramarine will automatically update using _PackageKit_, which will which requires a reboot to apply updates. Ultramarine may prompt you to reboot your system after applying updates to ensure that all updates are applied correctly, but you can choose to reboot at any later time. - + It is still recommended to reboot your system after applying updates to ensure that all updates are applied correctly, especially if you have not rebooted your system in a while. - + -### Why Ultramarine (instead of other distros) +### Why Ultramarine over other distros? - Performance - Fedora (the distro Ultramarine is based on) has some of the best IO performance over other distros. @@ -150,7 +150,7 @@ especially if you have not rebooted your system in a while. - Terra is reviewed by Fyra Labs and the Ultramarine Project. You can also [take a look at our security policy](https://github.com/terrapkg/packages/blob/f39/SECURITY.md). - Flathub is used by users across the entire Linux/BSD ecosystem. If you install apps from an app store, you are most likely installing apps from Flathub, which are isolated from your system environment when run, making attacks less likely to succeed. -### Why Ultramarine (instead of Windows) +### Why Ultramarine over Windows? - Performance - Windows bloats your computer with many different potentially unwanted programs that slow down your computer. Ultramarine does not. @@ -185,21 +185,6 @@ especially if you have not rebooted your system in a while. - Ultramarine comes with an app store. You can install programs reviewed by dedicated teams very easily. - If you want some programs to be included in the app stores, you should send us feedback. -## Team - -Made with these people, and the community! - -- Pornpipat "Cappy" Popum -- Lleyton "Lea" Gray -- Madomado -- Jaiden Riordan -- Owen Zimmerman -- June Fish -- Aikoyori -- Trobonox -- Mo -- Toru Ishikawa - -[Meet the team →](https://fyralabs.com/about/#Meet:~:text=benefit%20of%20all.-,Meet%20the%20Team) +## Core Team -#### [Next Up: Join the Community →](/en/community/community) +[Learn more about the core team here ->](https://fyralabs.com/about/) diff --git a/content/docs/about/meta.json b/content/docs/about/meta.json new file mode 100644 index 00000000..3d7b2067 --- /dev/null +++ b/content/docs/about/meta.json @@ -0,0 +1,6 @@ +{ + "title": "About Ultramarine", + "description": "Learn about Ultramarine itself", + "icon": "PawPrint", + "root": true +} diff --git a/src/content/docs/en/anywhere/chromebook.mdx b/content/docs/anywhere/completed/chromebook.mdx similarity index 77% rename from src/content/docs/en/anywhere/chromebook.mdx rename to content/docs/anywhere/completed/chromebook.mdx index 4af4fada..ca55f963 100644 --- a/src/content/docs/en/anywhere/chromebook.mdx +++ b/content/docs/anywhere/completed/chromebook.mdx @@ -1,16 +1,8 @@ --- -title: "Chromebook (Anywhere)" -description: "Chromebooks in the Ultramarine Anywhere Initiative" +title: "Chromebook" +description: "Technical details about Ultramarine on Chromebooks" --- -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **In Progress Phase**. All information on - this page is subject to change. Do not follow any instructions unless you know - what you're doing. - - Chromebooks were an obvious target for Ultramarine Anywhere, despite being mostly standard hardware, they have custom EC and strange firmware. @@ -20,7 +12,7 @@ Chromebook support in Ultramarine Linux is provided in partnership with the [Chr ## How it Works -Ultramarine Chromebook Edition uses a special bootloader called [Submarine](https://developer.fyralabs.com/submarine) to load the kernel. +Ultramarine for Chromebooks uses the [Submarine](https://developer.fyralabs.com/submarine) bootloader to load the kernel. Under the hood, Submarine is an incredibly minimal Linux OS based on [u-root](https://github.com/u-root/u-root), it's only really usable for debug and booting a full distribution. Once Submarine is loaded, we use [LinuxBoot](https://www.linuxboot.org/) to boot a full copy of Ultramarine (and hopefully more distros in the future). @@ -88,15 +80,15 @@ These are among the first few generations of Chromebooks, and either use an unsu ## Installation -Ultramarine on Chromebook will be released soon, installation guide for that will be found on a separate menu in this wiki at the time of release. +Ultramarine for Chromebooks will be released soon, installation guide for that will be found on a separate menu in this wiki at the time of release. -## Manual Installation - Note that Ultramarine Chromebook Edition will be a much easier experience once released +## Manual Installation - Note that Ultramarine for Chromebooks will be a much easier experience once released - + This method is more technical than our usual wiki content, proceed if you know what you're doing. We are not responsible for brickage, thermonuclear war, the death of a pet, etc. - + This guide assumes you are on x86 and have [Developer Mode](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_mode.md#dev-mode) and [USB Booting Enabled](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md#boot-from-your-usb-disk). We also assume you are using GParted for partitioning tasks. There are alterations you could make to these instructions and still get the same result, this is just what we think is the easiest way. @@ -117,9 +109,9 @@ You're now inside the Ultramarine install on your USB/SD card. Slowness and lag 6. Use `dd` to copy the contents of the USB/SD card to the internal storage of the Chromebook. - + You do NOT need to resize the root filesystem, it should do this automatically upon first boot. Depending on the size of your Chromebook's internal storage, you may need to move the Submarine partition to the end of the disk again, after it is copied to internal. - + If you need help with `dd` syntax, here are some pointers - @@ -151,10 +143,69 @@ cgpt add -i -t kernel -P 15 -T 1 -S 1 /dev/sdX 11. Done! - + Once Ultramarine has been successfully installed onto your Chromebook's internal disk, rebooting will take you back to the ChromeOS recovery screen. To boot to Ultramarine, select 'Boot to Internal Disk' or press Ctrl+D - - -## ARM - -ARM Chromebooks are in heavy development. If you'd like to help test, check out the [ARM Beta Program](/en/chromebook/armbeta). + + +## ARM Chromebook Closed Beta + +We are looking for technically-versed people to test our Ultramarine Chromebook beta images for ARM. + +This is a closed program, please join and ping @Owen in the [Discord](https://fyralabs.com/discord), or email him at owen@fyralabs.com, to apply. + +The following devices are supported: + +All Kukui (mt8183) family Chromebooks: + +| Model name/number | Codename | +| ------------------------------------------ | -------- | +| Acer Chromebook 311 (C722/C722T) | willow | +| Acer Chromebook 311 (CB311-11H/CB311-11HT) | kenzo | +| Acer Chromebook 314 (CB314-2H/CB314-2HT) | cozmo | +| Acer Chromebook Spin 311 (CP311-3H) | juniper | +| Acer Chromebook Spin 311 (R722T) | pico | +| Asus Chromebook CZ1 | cerise | +| Asus Chromebook Detachable CM3 (CM3000) | kakadu | +| Asus Chromebook Detachable CZ1 | katsu | +| Asus Chromebook Flip CM3 (CM3200, MT8183) | damu | +| Asus Chromebook Flip CZ1 | stern | +| HP Chromebook 11a | kappa | +| HP Chromebook 11MK G9 EE | esche | +| HP Chromebook x360 11MK G3 EE | burnet | +| Lenovo 100e Chromebook 2nd Gen MTK 2 | makomo | +| Lenovo 10e Chromebook Tablet | kodama | +| Lenovo IdeaPad 3 Chromebook (MT8183) | fennel14 | +| Lenovo IdeaPad Duet Chromebook | krane | +| Lenovo IdeaPad Flex 3 Chromebook (MT8183) | fennel | + +Source: https://wiki.postmarketos.org/wiki/Google_Kukui_Chromebook_(google-kukui) + +All Asurada (mt8192) family Chromebooks: + +| Model name/number | Codename | +| ------------------------------------------ | -------- | +| Acer Chromebook 514 (CB514-2H / CB514-2HT) | spherion | +| ASUS Chromebook Flip CM3 (CM3200, MT8192) | hayato | + +Source: https://wiki.postmarketos.org/wiki/Google_Asurada_Chromebook_(google-asurada) + +All Trogdor (sc7180) family Chromebooks: + +| Model name/number | Codename | +| --------------------------------------------- | ------------- | +| Acer Chromebook 511 | limozeen | +| Acer Chromebook Spin 513 | lazor | +| Dynabook Chromebook C1 | pompom | +| HP Fortis 11 G9 Q Chromebook | kingoftown | +| Libera-Merdeka Chromebook C100/C110/C120/C150 | pazquel | +| Orbic Chromebook 4G | pazquel | +| Acer Chromebook Tab 510 | quackingstick | +| HP Chromebook X2 | coachz | +| Lenovo IdeaPad Duet 3 | wormdingler | +| Lenovo IdeaPad Duet 5 | homestar | + +Source: https://wiki.postmarketos.org/wiki/Google_Trogdor_Chromebook_(google-trogdor) + +If your device isn't listed, contact Owen anyway! We may be able to help! + +Follow-up instructions, guide, and dedicated discord channel will be provided after acceptance. diff --git a/src/content/docs/en/anywhere/rpi.mdx b/content/docs/anywhere/completed/rpi.mdx similarity index 61% rename from src/content/docs/en/anywhere/rpi.mdx rename to content/docs/anywhere/completed/rpi.mdx index edda72c8..eb8adfca 100644 --- a/src/content/docs/en/anywhere/rpi.mdx +++ b/content/docs/anywhere/completed/rpi.mdx @@ -1,32 +1,29 @@ --- -title: "Raspberry Pi (Anywhere)" -description: "Raspberry Pi in the Ultramarine Anywhere Initiative" +title: "Raspberry Pi" +description: "Technical details about Ultramarine on Raspberry Pi devices" --- -import Alert from "../../../../components/Docs/Alert.astro"; - -### Ultramarine Linux currently supports the Raspberry Pi 3 and 4/400. For information on other Pis, see [below](/en/anywhere/rpi#raspberry-pi-5). - -## Selecting a Drive +## Raspberry Pi 3, 4, and 400 +### Selecting a Drive The drive you use will affect the experience you'll have on Ultramarine. -### Raspberry Pi 3 Series +#### Raspberry Pi 3 Series Raspberry Pi 3 Series support only microSD cards. Your storage device must be 16GB or larger. You should also look for a class 10 SDHC or SDXC microSD. -### Raspberry Pi 4 Series +#### Raspberry Pi 4 Series Raspberry Pi 4 Series support microSD cards and USB storage. Your storage device must be 16GB or larger. The best experience will be with an SSD connected over an adapter. A USB 3.0 flash drive will be on-par to slightly better then a microSD card. All of the options are good, it's up to your needs. -## Flashing the Image +### Flashing the Image If you're using a Raspberry Pi 4/400, you can skip these steps and use -[Raspberry Pi Imager instead](/en/anywhere/rpi#raspberry-pi-imager). +[Raspberry Pi Imager instead](#raspberry-pi-imager). First, you will need to decompress it. - On Linux, run `unzstd FILENAME.img.zst`, you may need to install the `zstd` package @@ -34,17 +31,17 @@ First, you will need to decompress it. - On Windows 10, use 7zip or WinRaR - On macOS, install `zstd` from [Homebrew](https://brew.sh/) (`brew install zstd`), then `unzstd FILENAME.img.zst`. -Grab a USB stick or SD Card! Use a flasher program to flash Ultramarine to your storage device. [balenaEtcher](https://www.balena.io/etcher/) is an easy cross-platform choice. +Grab a USB stick or SD Card! Use a flasher program to flash Ultramarine to your storage device. [Moonshot](https://www.github.com/fyralabs/moonshot)flatpak is an easy cross-platform choice. -![](/assets/balenaetcher.png) +![](/assets/moonshot/moonshot.png) Simply select the .img file, the device you're using, and click flash. You can also use the Disks application on Budgie, Xfce, and GNOME editions. -## Raspberry Pi Imager +### Raspberry Pi Imager -- Install [Raspberry Pi Imager](https://www.raspberrypi.com/software/). You can grab this from the app store on Ultramarine. If you're on Windows or Mac you can [download it from here](https://www.raspberrypi.com/software/), or use it [directly in the Raspberry Pi firmware](https://www.raspberrypi.com/documentation/computers/getting-started.html#install-over-the-network). +- Install [Raspberry Pi Imager](https://www.raspberrypi.com/software/)flatpak. You can grab this from the app store on Ultramarine. If you're on Windows or Mac you can [download it from here](https://www.raspberrypi.com/software/), or use it [directly in the Raspberry Pi firmware](https://www.raspberrypi.com/documentation/computers/getting-started.html#install-over-the-network). - Open Raspberry Pi Imager, select 'Choose Device,' then select 'Raspberry Pi 4.' - Select 'Choose OS' then scroll down to 'Other General-Purpose OS,' select 'Ultramarine Linux,' then select your edition of choice. - Select 'Choose Storage,' and select your storage device you would like to flash to. Double check you have the correct device selected, as this is a destructive operation. @@ -55,7 +52,7 @@ You can also use the Disks application on Budgie, Xfce, and GNOME editions. Your Imager app should look something like this when ready to flash. -## First Boot +### First Boot On first boot, the root file system will automatically be expanded, and you’ll be prompted with our out-of-box app, [Taidan](/en/setup/installation/#taidan-out-of-box-guide). @@ -63,22 +60,22 @@ That’s it! You’re ready to enjoy Ultramarine on your Raspberry Pi! We’re w Fedora has upstream support for the Pi 4, 400, and 3. Ultramarine Anywhere intends to extend support to the Pi 5 and Zero 2. -## Packages +### Packages We have Raspberry Pi packages packaged in [Terra](https://terra.fyralabs.com/). We are working on packaging as many as we can, currently included packages: -- [rpi-utils](https://github.com/raspberrypi/utils), a collection of miscellaneous tools for Raspberry Pis. You may install these individually, or all together as `rpi-utils` -- [rpi-update](https://github.com/raspberrypi/rpi-update), a script to update Raspberry Pi firmware. -- [Picotool](https://github.com/raspberrypi/picotool), a tool for working with RP2040/RP2350 devices. +- [rpi-utils](https://github.com/raspberrypi/utils)dnf, a collection of miscellaneous tools for Raspberry Pis. You may install these individually, or all together as `rpi-utils` +- [rpi-update](https://github.com/raspberrypi/rpi-update)dnf, a script to update Raspberry Pi firmware. +- [Picotool](https://github.com/raspberrypi/picotool)dnf, a tool for working with RP2040/RP2350 devices. -We also have the [Raspberry Pi Control Center](https://github.com/raspberrypi-ui/rpcc) application, and its various plugins: +We also have the [Raspberry Pi Control Center](https://github.com/raspberrypi-ui/rpcc)dnf application, and its various plugins: -- [Appset](https://github.com/raspberrypi-ui/appset), Application for customisation of appearance of Raspberry Pi Desktop. -- [Bookshelf](https://github.com/raspberrypi-ui/bookshelf), A browser for Raspberry Pi Press publications. -- [Piclone](https://github.com/raspberrypi-ui/piclone), Utility to back up a Raspberry Pi to an SD card. -- [Raindrop](https://github.com/raspberrypi-ui/raindrop), Graphical display configurator for Raspberry Pi, using arandr and wlrandr. -- [Rasputin](https://github.com/raspberrypi-ui/rasputin), Mouse and keyboard settings for Raspberry Pi Desktop. -- [Rpinters](https://github.com/raspberrypi-ui/rpinters), Printing utility +- [Appset](https://github.com/raspberrypi-ui/appset)dnf, Application for customisation of appearance of Raspberry Pi Desktop. +- [Bookshelf](https://github.com/raspberrypi-ui/bookshelf)dnf, A browser for Raspberry Pi Press publications. +- [Piclone](https://github.com/raspberrypi-ui/piclone)dnf, Utility to back up a Raspberry Pi to an SD card. +- [Raindrop](https://github.com/raspberrypi-ui/raindrop)dnf, Graphical display configurator for Raspberry Pi, using arandr and wlrandr. +- [Rasputin](https://github.com/raspberrypi-ui/rasputin)dnf, Mouse and keyboard settings for Raspberry Pi Desktop. +- [Rpinters](https://github.com/raspberrypi-ui/rpinters)dnf, Printing utility To install any of these: @@ -86,7 +83,7 @@ To install any of these: dnf install PACKAGENAME ``` -### Notes +#### Notes - RPi4B has a 1GB and 2GB model, we suggest against running a desktop environment on these (Xfce may be alright). - RPi3B has only 1GB of RAM, and the 3A only has 512MB, we suggest against running a desktop environment (Xfce may be alright). @@ -95,18 +92,14 @@ dnf install PACKAGENAME - If using a microSD card, we recommend using a Class 10 microSD card, your experience will be significantly better than lower classes. - Your storage device will need to be larger than 9GB (the image is 8.59GB). We suggest 16GB so you have space for software. -# (Currently) Unsupported Raspberry Pi Devices +## Unsupported Raspberry Pi Devices -## Raspberry Pi 5 +### Raspberry Pi 5 The Raspberry Pi 5 is not currently supported in Fedora. We are packaging the official Raspberry Pi kernel (which will also provide a better experience on the other Pi models). -## Raspberry Pi Zero, 1, and 2 +### Raspberry Pi Zero, 1, and 2 - + These devices are **Not Supported** due to 32bit CPUs. - - -#### [Next Up: Windows Subsystem for Linux →](/en/anywhere/wsl) - -#### [← Back To: Microsoft Surface](/en/anywhere/surface) + diff --git a/src/content/docs/hi/anywhere/surface.mdx b/content/docs/anywhere/completed/surface.mdx similarity index 97% rename from src/content/docs/hi/anywhere/surface.mdx rename to content/docs/anywhere/completed/surface.mdx index f6375579..69482cd5 100644 --- a/src/content/docs/hi/anywhere/surface.mdx +++ b/content/docs/anywhere/completed/surface.mdx @@ -3,7 +3,6 @@ title: Microsoft Surface description: "Information about Ultramarine Linux on Microsoft Surfaces" --- -import Alert from "../../../../components/Docs/Alert.astro"; Microsoft Surface support is provided using the [Linux Surface team's](https://github.com/linux-surface/linux-surface) Surface kernel and packages/software. @@ -54,7 +53,3 @@ All packages and configuration needed to enable (lib)camera support is included. - We do not and will **NEVER** support the Surface 1, 2, or RT. - We do not support the Surface Pro X or Windows DevKit, and probably won't. If you'd like to change this you can [donate hardware](/en/contributing/contributorguide/#hardware). - We do not support the "Copilot+ PC" Surfaces **YET**. - -#### [Next Up: Raspberry Pi →](/en/anywhere/rpi) - -#### [← Back To: Ultramarine Anywhere](/en/anywhere/anywhere) diff --git a/content/docs/anywhere/completed/wsl.mdx b/content/docs/anywhere/completed/wsl.mdx new file mode 100644 index 00000000..4b175340 --- /dev/null +++ b/content/docs/anywhere/completed/wsl.mdx @@ -0,0 +1,7 @@ +--- +title: "Windows Subsystem for Linux" +description: "Technical details about Ultramarine for Windows Subsystem for Linux (WSL)" +--- +If you want to learn about using Ultramarine WSL go [here](/docs/get-started/wsl). + +Ultramarine WSL uses the [standard Microsoft distro launcher](https://github.com/Ultramarine-Linux/wsl), we add a few packages to keep WSL working properly and provide our userspace utilities. diff --git a/src/content/docs/en/anywhere/applesilicon.mdx b/content/docs/anywhere/in-progress/applesilicon.mdx similarity index 51% rename from src/content/docs/en/anywhere/applesilicon.mdx rename to content/docs/anywhere/in-progress/applesilicon.mdx index 0ff33784..8e5e6504 100644 --- a/src/content/docs/en/anywhere/applesilicon.mdx +++ b/content/docs/anywhere/in-progress/applesilicon.mdx @@ -1,14 +1,13 @@ --- -title: "Apple Silicon Macs (Anywhere)" -description: "Apple Silicon in the Ultramarine Anywhere Initiative" +title: "Apple Silicon Macs" +description: "Technical information about supporting Apple Silicon Macs in Ultramarine" --- -import Alert from "../../../../components/Docs/Alert.astro"; - - This device type is still in the **Planning Phase**. All information on this + + This device type is still in the **In Progress**. All information on this page is subject to change - + We are working on porting the Asahi Linux installer to work with Ultramarine. Images that can boot from an external drive that already has Asahi installed are also being worked on. diff --git a/src/content/docs/en/anywhere/xr.mdx b/content/docs/anywhere/in-progress/xr.mdx similarity index 78% rename from src/content/docs/en/anywhere/xr.mdx rename to content/docs/anywhere/in-progress/xr.mdx index c3477099..1e5f24f0 100644 --- a/src/content/docs/en/anywhere/xr.mdx +++ b/content/docs/anywhere/in-progress/xr.mdx @@ -3,23 +3,23 @@ title: "XR and Spatial Computing" description: "XR and Spatial Computing in the Ultramarine Anywhere Initiative" --- -We are working on providing full support for [Stardust XR](https://stardustxr.org/). +We are working on providing full support for [Stardust XR](https://stardustxr.org/). ### Packages All core Stardust XR components are packaged in the [Terra repository](https://terra.fyralabs.com/) (shipped with Ultramarine): -- [stardust-xr-armillary](https://repology.org/project/stardust-xr-armillary/versions) -- [stardust-xr-atmosphere](https://repology.org/project/stardust-xr-atmosphere/versions) -- [stardust-xr-black-hole](https://repology.org/project/stardust-xr-black-hole/versions) -- [stardust-xr-comet](https://repology.org/project/stardust-xr-comet/versions) -- [stardust-xr-flatland](https://repology.org/project/stardust-xr-flatland/versions) -- [stardust-xr-gravity](https://repology.org/project/stardust-xr-gravity/versions) -- [stardust-xr-magnetar](https://repology.org/project/stardust-xr-magnetar/versions) -- [stardust-xr-non-spatial-input](https://repology.org/project/stardust-xr-non-spatial-input/versions) -- [stardust-xr-protostar](https://repology.org/project/stardust-xr-protostar/versions) -- [stardust-xr-server](https://repology.org/project/stardust-xr-server/versions) -- [stardust-xr-telescope](https://repology.org/project/stardust-xr-telescope/versions) +- [stardust-xr-armillary](https://repology.org/project/stardust-xr-armillary/versions)dnf +- [stardust-xr-atmosphere](https://repology.org/project/stardust-xr-atmosphere/versions)dnf +- [stardust-xr-black-hole](https://repology.org/project/stardust-xr-black-hole/versions)dnf +- [stardust-xr-comet](https://repology.org/project/stardust-xr-comet/versions)dnf +- [stardust-xr-flatland](https://repology.org/project/stardust-xr-flatland/versions)dnf +- [stardust-xr-gravity](https://repology.org/project/stardust-xr-gravity/versions)dnf +- [stardust-xr-magnetar](https://repology.org/project/stardust-xr-magnetar/versions)dnf +- [stardust-xr-non-spatial-input](https://repology.org/project/stardust-xr-non-spatial-input/versions)dnf +- [stardust-xr-protostar](https://repology.org/project/stardust-xr-protostar/versions)dnf +- [stardust-xr-server](https://repology.org/project/stardust-xr-server/versions)dnf +- [stardust-xr-telescope](https://repology.org/project/stardust-xr-telescope/versions)dnf To install all of these packages: @@ -31,6 +31,6 @@ To install these packages on an RPM-OSTree/bootc based system: sudo rpm-ostree install stardust-xr-armillary stardust-xr-atmosphere stardust-xr-black-hole stardust-xr-comet stardust-xr-flatland stardust-xr-gravity stardust-xr-magnetar stardust-xr-non-spatial-input stardust-xr-protostar stardust-xr-server stardust-xr-telescope ``` -Then, run `telescope` in your terminal, or `telescope -f` for flatscreen mode. +Then, run `telescope` in your terminal, or `telescope -f` for flatscreen mode. For further information, check out [the Stardust XR docs](https://stardustxr.org/docs/get-started/What-is-Stardust). diff --git a/src/content/docs/en/anywhere/anywhere.mdx b/content/docs/anywhere/index.mdx similarity index 50% rename from src/content/docs/en/anywhere/anywhere.mdx rename to content/docs/anywhere/index.mdx index 20acab54..e8ef6f2e 100644 --- a/src/content/docs/en/anywhere/anywhere.mdx +++ b/content/docs/anywhere/index.mdx @@ -1,57 +1,52 @@ --- title: Ultramarine Anywhere -description: "Our goal is to run Ultramarine Linux on as many devices as possible" +description: "Check out the unique devices Ultramarine runs on" --- -import Alert from "../../../../components/Docs/Alert.astro"; - One of the major focuses of the Ultramarine project is to bring Linux to as many people as possible. A major part of this is supporting as many devices as possible, through our Ultramarine Anywhere Initiative. By contributing to Ultramarine Anywhere, you can help us bring Linux to more devices and more people. - + The pages about this program are more technical than the rest of the wiki. Do not follow the instructions on these pages unless you know what you're doing. - + -#### If you have any suggestions or comments regarding these pages, don't hesitate to [reach out](/en/community/community). +If you have any suggestions or comments regarding these pages, don't hesitate to [reach out](/docs/community). ## Completed Platforms in the **Completed** category are fully supported in Ultramarine and available to use right now! -- [Microsoft Surface](/en/anywhere/surface) -- [Raspberry Pi 3, 4, and 400](/en/anywhere/rpi) -- [Windows Subsystem for Linux](/en/anywhere/wsl) +- [Microsoft Surface](/docs/anywhere/surface) +- [Raspberry Pi 3, 4, and 400](/docs/anywhere/rpi) +- [Windows Subsystem for Linux](/docs/anywhere/wsl) +- [Chromebooks](/docs/anywhere/chromebook) ## In Progress Platforms in the **In Progress** category are being actively worked on, and will be released soon. For more updates or contributions, check out our [socials](https://fyralabs.com/contact/). -- [Chromebooks](/en/anywhere/chromebook) -- [XR and Spatial Computing](/en/anywhere/xr) -- [Raspberry Pi 5](/en/anywhere/rpi) -- [Apple Silicon Macs](/en/anywhere/applesilicon) +- [XR and Spatial Computing](/docs/anywhere/xr) +- [Raspberry Pi 5](/docs/anywhere/rpi) +- [Apple Silicon Macs](/docs/anywhere/applesilicon) ## Planned Devices in the **Planned** category are being brainstormed, researched, or experimented with, and will (probably) be worked on in the near future. -- [Android Devices](/en/anywhere/android) -- [Data Centre, Enterprise, and HPC](/en/anywhere/enterprise) -- [RISC-V](/en/anywhere/riscv) +- [Android Devices](/docs/anywhere/android) +- [Servers](/docs/anywhere/servers) +- [RISC-V](/docs/anywhere/riscv) ## Wishlist Devices in the **Wishlist** category are platforms we would like to support one day, but are very much up in the air and have not been worked on. -- [Smart TV Devices](/en/anywhere/ott) -- [Thin Clients](/en/anywhere/thin) -- [Steam Deck](/en/anywhere/steamdeck) -- [Nintendo Switch](/en/anywhere/tegra) -- [NVIDIA Shield](/en/anywhere/tegra) -- [NVIDIA Jetson Microcomputers](/en/anywhere/tegra) - -#### [Next Up: Microsoft Surface →](/en/anywhere/surface) +- [Smart TV Devices](/docs/anywhere/ott) +- [Thin Clients](/docs/anywhere/thin) +- [Nvidia Tegra Devices (Jetson, Nintendo Switch)](/docs/anywhere/tegra) -#### [← Back To: Ultramarine Contributions, Mirroring](/en/contributing/mirroring) + + If you're looking for support for your x86 PC handheld, we highly suggest checking out our friends at [Bazzite](https://bazzite.gg). + diff --git a/content/docs/anywhere/meta.json b/content/docs/anywhere/meta.json new file mode 100644 index 00000000..70314a6b --- /dev/null +++ b/content/docs/anywhere/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Anywhere", + "description": "Learn about running Ultramarine on unusual devices", + "icon": "Cpu", + "root": true +} diff --git a/src/content/docs/en/anywhere/android.mdx b/content/docs/anywhere/planned/android.mdx similarity index 68% rename from src/content/docs/en/anywhere/android.mdx rename to content/docs/anywhere/planned/android.mdx index ecbe9507..709f857f 100644 --- a/src/content/docs/en/anywhere/android.mdx +++ b/content/docs/anywhere/planned/android.mdx @@ -1,17 +1,16 @@ --- -title: "Android (Anywhere)" +title: "Android" description: "Android Devices in the Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Planning Phase**. All information on this page is subject to change - + Android Devices are very common, and (most of the time) extremely customizable. We do not have a target release or full plan at this time, but we will support in the (hopefully) near future. ## Implementation -We are actively debating wether to do pmOS style ports or Halium (like Ubuntu Touch). Join our [community](/en/community/community) if you wanna discuss this! \ No newline at end of file +We are actively debating wether to do pmOS style ports or Halium (like Ubuntu Touch). Join our [community](/docs/community) if you wanna discuss this! diff --git a/src/content/docs/en/anywhere/riscv.mdx b/content/docs/anywhere/planned/riscv.mdx similarity index 79% rename from src/content/docs/en/anywhere/riscv.mdx rename to content/docs/anywhere/planned/riscv.mdx index 370a12ad..c623af0c 100644 --- a/src/content/docs/en/anywhere/riscv.mdx +++ b/content/docs/anywhere/planned/riscv.mdx @@ -1,13 +1,12 @@ --- -title: "RISC-V (Anywhere)" +title: "RISC-V" description: "RISC-V Devices in the Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Wishlist Phase**. All information on this page is subject to change. - + We plan to port to RISC-V architecture as soon as we can get the hardware. If you are a hardware vendor producing RISC-V devices or have a spare RISC-V device, please [reach out](mailto:contact@fyralabs.com) if you'd like to support the Ultramarine RISC-V port. diff --git a/src/content/docs/hi/anywhere/enterprise.mdx b/content/docs/anywhere/planned/servers.mdx similarity index 65% rename from src/content/docs/hi/anywhere/enterprise.mdx rename to content/docs/anywhere/planned/servers.mdx index 2efcabbe..f1901da6 100644 --- a/src/content/docs/hi/anywhere/enterprise.mdx +++ b/content/docs/anywhere/planned/servers.mdx @@ -1,16 +1,15 @@ --- -title: "Data Centre, Enterprise, and HPC (Anywhere)" -description: "Data Centre, Enterprise, and HPC in the Ultramarine Anywhere Initiative" +title: "Servers" +description: "Servers in the Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Planning Phase**. All information on this page is subject to change. - + -These images will be built for constant runtime, and include/exclude fitting packages for server usecases. If you'd like to suggest a platform, drop us a line in [our chats](/en/community/community). +These images will be built for constant runtime, and include/exclude fitting packages for server usecases. If you'd like to suggest a platform, drop us a line in [our chats](/docs/community). ## Implementation diff --git a/src/content/docs/en/anywhere/ott.mdx b/content/docs/anywhere/wishlist/ott.mdx similarity index 84% rename from src/content/docs/en/anywhere/ott.mdx rename to content/docs/anywhere/wishlist/ott.mdx index 6d7d45a2..25a3b280 100644 --- a/src/content/docs/en/anywhere/ott.mdx +++ b/content/docs/anywhere/wishlist/ott.mdx @@ -3,13 +3,12 @@ title: "Smart TV Devices" description: "Smart TV Devices in the Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Wishlist Phase**. All information on this page is subject to change. - + -Smart TV boxes often run Android, which means we can use Halium to port Ultramarine to the unlockable ones. See [the Android page.](/en/anywhere/android) +Smart TV boxes often run Android, which means we can use Halium to port Ultramarine to the unlockable ones. See [the Android page.](/docs/anywhere/android) This may be limited to FireOS devices as many of them are vulnerable to [mtk-su](https://xdaforums.com/t/amazing-temp-root-for-mediatek-armv8-2020-08-24.3922213/). If you are knowledgable about Smart TV modding/running alternative operating systems, please reach out [here](/en/community/community). diff --git a/src/content/docs/hi/anywhere/tegra.mdx b/content/docs/anywhere/wishlist/tegra.mdx similarity index 96% rename from src/content/docs/hi/anywhere/tegra.mdx rename to content/docs/anywhere/wishlist/tegra.mdx index 970f28c8..6f3f575d 100644 --- a/src/content/docs/hi/anywhere/tegra.mdx +++ b/content/docs/anywhere/wishlist/tegra.mdx @@ -1,14 +1,13 @@ --- -title: "NVIDIA Tegra (Anywhere)" +title: "NVIDIA Tegra" description: "NVIDIA Tegra devices in the Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Wishlist Phase**. All information on this page is subject to change. - + Most of the team has a modern Tegra device, most commonly, the Nintendo Switch. There is interest in running Ultramarine on these devices, but we haven’t started work on a port yet. @@ -64,4 +63,4 @@ the user with the boot menu options. [Horizon OS]: https://en.wikipedia.org/wiki/Nintendo_Switch_system_software [U-Boot]: https://en.wikipedia.org/wiki/Das_U-Boot [Submarine]: https://github.com/FyraLabs/submarine -[Boot Loader Specification]: https://uapi-group.org/specifications/specs/boot_loader_specification/ \ No newline at end of file +[Boot Loader Specification]: https://uapi-group.org/specifications/specs/boot_loader_specification/ diff --git a/src/content/docs/en/anywhere/thin.mdx b/content/docs/anywhere/wishlist/thin.mdx similarity index 81% rename from src/content/docs/en/anywhere/thin.mdx rename to content/docs/anywhere/wishlist/thin.mdx index b66e279d..1dc4d814 100644 --- a/src/content/docs/en/anywhere/thin.mdx +++ b/content/docs/anywhere/wishlist/thin.mdx @@ -1,14 +1,13 @@ --- -title: "Thin Clients (Anywhere)" +title: "Thin Clients" description: " Ultramarine Anywhere Initiative" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + This device type is still in the **Wishlist Phase**. All information on this page is subject to change. - + Thin client images would be fun, and frankly pretty easy. diff --git a/src/content/docs/hi/community/codeofconduct.mdx b/content/docs/community/codeofconduct.mdx similarity index 97% rename from src/content/docs/hi/community/codeofconduct.mdx rename to content/docs/community/codeofconduct.mdx index 37b44b31..43fb09da 100644 --- a/src/content/docs/hi/community/codeofconduct.mdx +++ b/content/docs/community/codeofconduct.mdx @@ -3,7 +3,6 @@ title: Code of Conduct description: "Rules for interacting in the Ultramarine Community" --- -import Alert from "../../../../components/Docs/Alert.astro"; ## Summary @@ -114,6 +113,4 @@ The Code of Conduct for Fyra Labs Projects is derived from the Citizen Code of C Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). -#### [Next Up: Ultramarine Linux System Requirements →](/en/setup/requirements) -#### [← Back To: Join the Community](/en/community/community) diff --git a/src/content/docs/en/contributing/contributorguide.mdx b/content/docs/community/contributing/contributorguide.mdx similarity index 87% rename from src/content/docs/en/contributing/contributorguide.mdx rename to content/docs/community/contributing/contributorguide.mdx index a332d8a5..a5cd277e 100644 --- a/src/content/docs/en/contributing/contributorguide.mdx +++ b/content/docs/community/contributing/contributorguide.mdx @@ -13,7 +13,7 @@ This applies to all of the code that Fyra Labs writes with the community, and mo Sadly, some components, especially device drivers, may be (in a way) held hostage by their authors. This means we cannot see or fix the code. -Check out the [Development Page](/en/contributing/hacking) to get started! +Check out the [Development Page](/docs/contributing/hacking) to get started! ## Packaging @@ -35,10 +35,10 @@ Documentation allows people to understand how to use Ultramarine. Our main sourc Many parts of Ultramarine need testing before release. Here's a list of our current pre-release programs: -- [ARM Chromebook Beta Program](/en/chromebook/armbeta) -- [Ultramarine Atomic Open Beta](https://github.com/Ultramarine-Linux/bootc) +- [ARM Chromebook Beta Program](/docs/anywhere/chromebook#arm-chromebook-closed-beta) +- [Ultramarine Atomic Public Preview](https://github.com/ultramarine-linux/bootc) -We announce new programs frequently, [join our chat] or [follow us on socials] to stay up to date. +We announce new programs frequently, [join our chats] or [follow us on socials] to stay up to date. ## Finance @@ -46,7 +46,7 @@ You can [sponsor us on Github](https://github.com/sponsors/FyraLabs)! Your sponsorship helps us continue and dedicate more time to our work, allowing us to develop and ship technology that can make a difference for you (and many others.) Now, of course, don't forget there's also some sweet and useful benefits (with even more coming soon) in it for you :3 -For those without a GitHub account, we also have [a PayPal page where you can sponsor us](https://www.paypal.com/donate/?hosted_button_id=FE3SHU5U4CL5C). Please note that because we can't reward perks automatically via PayPal, you'll need to ping staff in our chats, so we can manually award them. +For those without a GitHub account, we also have [a PayPal page where you can sponsor us](https://www.paypal.com/donate/?hosted_button_id=FE3SHU5U4CL5C). Please note that because we can't reward perks automatically via PayPal, you'll need to ping staff in our chats, so we can manually award them. ## Outreach @@ -56,7 +56,7 @@ If you'd like to help us grow, join [one of our chats] and ask where you can hel ## Hardware -One of Ultramarine's major focuses is to support as many hardware platforms as possible, our formal initiative for this is [Ultramarine Anywhere](/en/hardware/anywhere). +One of Ultramarine's major focuses is to support as many hardware platforms as possible, our formal initiative for this is [Ultramarine Anywhere](/docs/anywhere). We're always looking for people with knowledge of different and niche hardware platforms to help us expand our support. Hardware donations are also appreciated, especially Chromebooks and RISC-V boards, as they're a major focus of this program. @@ -90,10 +90,6 @@ Here is a list of important upstream projects to Ultramarine, with links to thei - [KDE](https://community.kde.org/Get_Involved) - [XFCE](https://docs.xfce.org/contribute/start) -[one of our chats]: /en/community/community -[join our chat]: /en/community/community -[follow us on socials]: /en/community/community - -#### [Next Up: Code Contributions →](/en/contributing/hacking) - -#### [← Back To: NVIDIA](/en/setup/nvidia) +[one of our chats]: /docs/community +[join our chats]: /docs/community +[follow us on socials]: /docs/community diff --git a/src/content/docs/zh_hant/contributing/hacking.mdx b/content/docs/community/contributing/hacking.mdx similarity index 84% rename from src/content/docs/zh_hant/contributing/hacking.mdx rename to content/docs/community/contributing/hacking.mdx index 40d32cf6..747a5235 100644 --- a/src/content/docs/zh_hant/contributing/hacking.mdx +++ b/content/docs/community/contributing/hacking.mdx @@ -1,9 +1,8 @@ --- -title: 原碼貢獻 +title: Code Contributions description: "A step-by-step guide to hacking on Ultramarine Linux components" --- -import Alert from "../../../../components/Docs/Alert.astro"; One of the most noticeable contributions you can make is code contributions. Whether it's building a new feature or fixing a bug, contributing code is a great way to make a noticeable difference to the operating system itself. @@ -21,32 +20,32 @@ This problem can be anything from a tiny papercut to a massive structural change If you're fixing an issue, what's the cause? If you're building a feature, what's the goal? What's the best way to implement it? -A great place to gather information is within our [community](/en/community/community), simply ask and see what users, contributors, and developers think. +A great place to gather information is within our [community](/docs/community), simply ask and see what users, contributors, and developers think. ## Getting the Ultramarine Toolchain If you're contributing to an existing component, simply get the tools needed for it (we're slowly adding a list to our repositories.) -If you're building a completely new feature, we recommend [Rust](https://www.rust-lang.org/) or [Go](https://go.dev) for features without a GUI. +If you're building a completely new feature, we recommend [Rust](https://www.rust-lang.org/) (`cargo`dnf) or [Go](https://go.dev) (`golang`dnf) for features without a GUI. -If you're building with a GUI, we recommend using [libhelium](https://github.com/tau-os/libhelium), you can find more information here. +If you're building with a GUI, we recommend using [libhelium](https://github.com/tau-os/libhelium)dnf, you can find more information here. Get to work! Make a fork of a project and tinker away! - -
+ +
**Big Changes** For especially big changes, or, major features, ask for help. We'll help you refine and build your idea.
- +
## Writing the Code Write the code! Make sure to continuously test your solution as you go. This will help you catch bugs early and make sure your changes are on the right track. It's also important to document your code when you're done, as this will help other contributors understand your changes. -Remember, you're not alone, no problem is too big or too small to ask for help. If you have a question or want to work with another contributor, ask in our [community](/en/community/community). +Remember, you're not alone, no problem is too big or too small to ask for help. If you have a question or want to work with another contributor, ask in our [community](/docs/community). ## Getting into Ultramarine diff --git a/src/content/docs/hi/contributing/mirroring.mdx b/content/docs/community/contributing/mirroring.mdx similarity index 96% rename from src/content/docs/hi/contributing/mirroring.mdx rename to content/docs/community/contributing/mirroring.mdx index 9ed3cb75..bea53438 100644 --- a/src/content/docs/hi/contributing/mirroring.mdx +++ b/content/docs/community/contributing/mirroring.mdx @@ -75,7 +75,3 @@ And here is a table of what each field means: - You can use a service like [ipinfo.io](https://ipinfo.io/) to get your ASN, continent, country, latitute, and longitude from your server's IP address. - The location doesn't have to be exact, but it should be close to your actual location. - -#### [Next Up: Ultramarine Anywhere →](/en/anywhere/anywhere) - -#### [← Back To: Code Contributions](/en/contributing/hacking) diff --git a/src/content/docs/hi/community/community.mdx b/content/docs/community/index.mdx similarity index 78% rename from src/content/docs/hi/community/community.mdx rename to content/docs/community/index.mdx index 84b6a01c..ea21b69f 100644 --- a/src/content/docs/hi/community/community.mdx +++ b/content/docs/community/index.mdx @@ -1,10 +1,8 @@ --- title: Join the Community! -description: "Community Information" +description: "Come chat with us, or get started with contributing" --- -import Alert from "../../../../components/Docs/Alert.astro"; - Ultramarine Linux has an active community of users, tinkerers, developers, and everyone in between. Our community (like our code) is open to everyone. Here's some of the official spaces: @@ -15,12 +13,9 @@ The Fyra Labs Discord is for all of our projects. We have lively discussions and [Join the Fyra Labs Chat →](https://fyralabs.com/discord) -### Matrix - - -We're closing our Matrix rooms due to a myriad of issues. [Learn more here →](https://blog.fyralabs.com/dropping-matrix/) - - + + We are aware of Discord's upcoming ID requirements. We are exploring alternatives and options. + ### Socials @@ -41,7 +36,3 @@ The Ultramarine Subreddit is a more asynchronous way to interact with the commun ## Our Philosophy We believe that the Fyra Community is larger than just Fyra (the organization). Part of this is interacting with the rest of our community. We feel that this allows us to better judge the desires and needs of our users (and we love talking to all of you). - -#### [Next Up: Code of Conduct →](/en/community/codeofconduct) - -#### [← Back To: Welcome](/en/welcome) diff --git a/content/docs/community/meta.json b/content/docs/community/meta.json new file mode 100644 index 00000000..5612764c --- /dev/null +++ b/content/docs/community/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Community", + "description": "Join our community and get started with contributing", + "icon": "MessageCircleHeart", + "root": true +} diff --git a/src/content/docs/hi/setup/bioskeys.mdx b/content/docs/get-started/bioskeys.mdx similarity index 96% rename from src/content/docs/hi/setup/bioskeys.mdx rename to content/docs/get-started/bioskeys.mdx index 8dfc7757..1bd8b393 100644 --- a/src/content/docs/hi/setup/bioskeys.mdx +++ b/content/docs/get-started/bioskeys.mdx @@ -23,7 +23,7 @@ These are the keys (or combination of keys) used to enter the boot menu or UEFI/ | Huawei | F2 | F12 | | | Intel | F2 | F10 | | | Lenovo (Desktops) | F1 | F12 | | -| Lenovo (Laptops) | F1+Enter, Novo Button | F12, Novo Button | | +| Lenovo (Laptops) | F1+Enter, Novo Button, F2 | F12, Novo Button | | | Lenovo (ThinkPad) | F1, Startup Interrupt Menu | F12, Startup Interrupt Menu | You can (and may need to) access the BIOS/UEFI and boot menus from the Startup Interrupt Menu, which is accessed by pressing Enter (or ThinkVantage when present). | | Macs (Intel) | - | Hold Option (⌥) or Alt | You can change NVRAM variables inside the OS. If you know what you're doing, power to you. | | MSI | Del | F11 | | @@ -42,8 +42,8 @@ These are the keys (or combination of keys) used to enter the boot menu or UEFI/ | Vaio | F3, F4 | F11 | | | Zotac | Del | F8 | | -#### [Next Up: Installation →](/en/setup/installation) - -#### [← Back To: Getting Ultramarine](/en/setup/getting) + +You may need to hold FN/Function when you press these keys. + [mrchromebox UEFI Full ROM]: https://docs.chrultrabook.com/docs/firmware/about.html#rw-legacy diff --git a/src/content/docs/en/setup/getting.mdx b/content/docs/get-started/index.mdx similarity index 71% rename from src/content/docs/en/setup/getting.mdx rename to content/docs/get-started/index.mdx index 33efddbb..8c65d54d 100644 --- a/src/content/docs/en/setup/getting.mdx +++ b/content/docs/get-started/index.mdx @@ -3,11 +3,10 @@ title: Getting Ultramarine Linux description: "Getting started with installing Ultramarine Linux" --- -import Alert from "../../../../components/Docs/Alert.astro"; ## System Requirements -If your computer could run Windows 7 well, chances are it'll run Ultramarine Linux. You should check the [System Requirements](/en/hardware/requirements) to make sure +If your computer could run Windows 7 well, chances are it'll run Ultramarine Linux. You should check the [System Requirements](/docs/get-started/requirements) to make sure. ## Choosing Your Edition @@ -18,36 +17,34 @@ Ultramarine Linux comes in 4 variants: - **Budgie Edition**: A familiar and stylish experience with a bit of flair. - **GNOME Edition**: A simple, elegant, and intuitive desktop with a large ecosystem of apps and extensions. -Check the [System Requirements](/en/hardware/requirements) to make sure your hardware is supported. - Ultramarine Linux is distributed in various formats available for download from [our website](https://ultramarine-linux.org). - + Fyra Labs cannot guarantee the safety or quality of images downloaded from - sites other than our website or FOSSTorrents - + sites other than our website, the Microsoft Store, Raspberry Pi Imager, or FOSSTorrents + ### Microsoft Surface Devices Ultramarine is available with Microsoft Surface support out of the box. -Downloads can be found on our website, and more information can be found [here](../anywhere/surface). +Downloads can be found on our website, and more information can be found [here](/docs/anywhere/surface). ### Windows Subsystem for Linux Ultramarine offers a WSL build/application. -This can be found on the microsoft store, with `winget`, or can be installed with an offline script found on it's anywhere page [here](../anywhere/wsl). +This can be found on the microsoft store, with `winget`, or can be installed with an offline script, learn more [here](/docs/get-started/wsl). -### Raw Images and Raspberry Pi +### Preinstalled Images and Raspberry Pi -Ultramarine is also available as a raw (or preinstalled) image. These images come with a desktop preinstalled and are intended to be flashed directly to the drive your device will boot from (like an SSD or an SD card.) +Ultramarine is also available as a preinstalled (or raw) image. These images come with a desktop preinstalled and are intended to be flashed directly to the drive your device will boot from (like an SSD or an SD card.) These can be found in the [Raw Image](https://images.fyralabs.com/images/ultramarine/) sections of the download page. - + If you're using a Raspberry Pi 4, you can skip these steps and use Raspberry Pi Imager! Either insert an empty microSD and press shfit at startup, or use it on another device. - + ## Verifying the Safety of an Ultramarine Image (Recommended) @@ -75,22 +72,22 @@ CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 # Open the checksum file with Notepad and compare the checksum ``` - + If you're using a Raspberry Pi, stop here and go to the [Raspberry Pi instructions](/en/anywhere/rpi) - + ## Creating the Installer -Grab a USB stick! Use a flasher program to create an installer from the image. [balenaEtcher](https://www.balena.io/etcher/) is an easy cross-platform choice. +Grab a USB stick! Use a flasher program to create an installer from the image. [Moonshot](https://github.com/fyralabs/moonshot)flatpak is an easy cross-platform choice. -![](/assets/balenaetcher.png) +![](/assets/moonshot/moonshot.png) -You can also use [Fedora Media Writer](https://github.com/FedoraQt/MediaWriter), or the Disks application on Budgie, Xfce, and GNOME editions. +You can also use [Fedora Media Writer](https://github.com/FedoraQt/MediaWriter)dnf, or the Disks application on Budgie, Xfce, and GNOME editions. - + Rufus has been known to cause issues with Ultramarine images. - + ## Booting the Installer @@ -98,22 +95,12 @@ After flashing the image to your installer, you can boot to Ultramarine Linux by Most computers have a special key that can be used to select a boot device, or to enter the setup screen. This varies from brand to brand, check the [BIOS Keys Page](/en/hardware/bioskeys) for how to enter the boot menu on your machine. - + If you're currently using Windows 10 (or newer) head to the recovery section of settings and select "Advanced Restart". Once there, select "Use a Device". - + - + If you're currently using Linux, you may be able to enter the BIOS by running `sudo systemctl reboot --firmware` - - -## Footnotes - -- The Anaconda installer is very complex and hard to work with, we are working on a new installer that is easier to use and more reliable. -- Ultramarine's Budgie edition provides a close to stock Budgie experience, with a custom theme. Unlike Fedora's Budgie Spin, which provides a completely custom layout and experience. - -#### [Next Up: BIOS Keys →](/en/setup/bioskeys) - -#### [← Back To: System Requirements](/en/setup/requirements) - + diff --git a/src/content/docs/en/setup/installation.mdx b/content/docs/get-started/installation.mdx similarity index 95% rename from src/content/docs/en/setup/installation.mdx rename to content/docs/get-started/installation.mdx index 8e33711c..9b6afc39 100644 --- a/src/content/docs/en/setup/installation.mdx +++ b/content/docs/get-started/installation.mdx @@ -3,7 +3,6 @@ title: Installation description: "A guide on how to install Ultramarine Linux" --- -import Alert from "../../../../components/Docs/Alert.astro"; If you're using an Anaconda image, proceed with the instructions below. If you're using a Readymade Preview image, go [here](#readymade). @@ -27,11 +26,11 @@ After starting the installer, you will be greeted with a language and keyboard s Set your date and time, as well as your time zone. By default, it will be set to automatic - + By default, the time is set from your IP address geolocation. If you're using a VPN or proxy this may not be accurate. - + ### Installation Method @@ -47,10 +46,10 @@ Configure your storage. You also have the option to encrypt your disk. When you If you want to set up a custom storage config, select the 3-dot menu on the top right, then select `Launch Storage Editor`. - + We recommend encrypting your disk for added security. Simply select the "Encrypt" checkbox, and you will be prompted to enter a passphrase for encryption. You will need to enter this passphrase every time your system reboots. - + For more information on how encryption works, refer [here](#encryption). @@ -58,16 +57,16 @@ For more information on how encryption works, refer [here](#encryption). After completing your system configuration, press the `Erase data and Install` button to continue. The installation process will start and may take a few minutes. - + This process is **IRREVERSIBLE**. If you manage to stop the installer before it finishes, you will end up with a broken system.
To fix this, you will have to reinstall. -
+ After the installation process is complete, Anaconda will prompt you to exit back to the live environment. You can reboot your device from the live environment. When the system reboots, you will be greeted with our out-of-box app, Taidan. -For a guide on using Taidan, go [here](#taidan). +For a guide on using Taidan, go [here](#taidan-out-of-box-guide). --- @@ -100,10 +99,10 @@ From here, select `Entire Disk`. Note that a custom option will come in future r You also have the option to encrypt your disk, and enable TPM encryption. When you encrypt your disk, you will be prompted to enter a password used for encryption. Note that this is in no way tied to your Ultramarine user password. - + We recommend encrypting your disk for added security. Simply select the "Encrypt" checkbox, and you will be prompted to enter a passphrase for encryption. You will need to enter this passphrase every time your system reboots. - + For more information on how encryption works, refer [here](#encryption). @@ -117,16 +116,16 @@ Now, you are ready to install. Select `Install` to begin. You will then be taken ![Installing](/assets/readymade/installing.png) - + This process is **IRREVERSIBLE**. If you manage to stop the installer before it finishes, you will end up with a broken system.
To fix this, you will have to reinstall. -
+ After the installation process is complete, Readymade will prompt you to reboot your device. When the system reboots, you will be greeted with our out-of-box app, Taidan. -For a guide on using Taidan, go [here](#taidan). +For a guide on using Taidan, go [here](#taidan-out-of-box-guide). --- @@ -234,7 +233,7 @@ If you'd like, you can turn on a more yellow-tuned color tone, which may be easi Once you press `Confirm and Setup System`, Taidan will start the configuration process, as seen below. -### Sit Back and Relax! +### Sit Back and Relax! ![Installing Apps](/assets/taidan/installing-your-apps.png) @@ -250,8 +249,4 @@ We hope you enjoy using Ultramarine! ## Issues and Support -If you run into any issues at all, please hop into [our chats](/en/community/community/) and let us know! - -#### [Next Up: Post-Installation →](/en/setup/postinstall) - -#### [← Back To: BIOS Keys](/en/setup/bioskeys) +If you run into any issues at all, please hop into [our chats](/docs/community/) and let us know! diff --git a/content/docs/get-started/meta.json b/content/docs/get-started/meta.json new file mode 100644 index 00000000..5bac85aa --- /dev/null +++ b/content/docs/get-started/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Getting Started", + "description": "Get started with Ultramarine", + "icon": "CirclePower", + "root": true +} diff --git a/src/content/docs/zh_hant/hardware/broadcom-realtek.mdx b/content/docs/get-started/post-installation/broadcom-realtek.mdx similarity index 69% rename from src/content/docs/zh_hant/hardware/broadcom-realtek.mdx rename to content/docs/get-started/post-installation/broadcom-realtek.mdx index 4bb42433..7c27e8b2 100644 --- a/src/content/docs/zh_hant/hardware/broadcom-realtek.mdx +++ b/content/docs/get-started/post-installation/broadcom-realtek.mdx @@ -1,9 +1,8 @@ --- -title: Broadcom and Realtek Networking -description: "Information about Broadcom and Realtek Networking on Ultramarine Linux" +title: Broadcom and Realtek Drivers +description: "Get your Broadcom or Realtek wireless card working" --- -import Alert from "../../../../components/Docs/Alert.astro"; Some computers with specific Broadcom or Realtek chipsets may require additional drivers to be installed. These should be automatically installed if you were connected to the internet during installation. @@ -11,13 +10,13 @@ We can't include these by default as they may break other WiFi devices. You'll need to connect to the internet, you can do this via Ethernet or USB tethering from your phone. iPhones will automatically tether over USB when connected, Android phones may require you to switch the USB mode. -On Broadcom, install `broadcom-wl` and `kmod-wl` +On Broadcom, install `broadcom-wl`dnf and `kmod-wl`dnf ```shell sudo dnf install kmod-wl broadcom-wl ``` -On Realtek, install `kmod-wl` only +On Realtek, install `kmod-wl`dnf only ```shell sudo dnf install kmod-wl diff --git a/src/content/docs/zh_hant/installation/postinstall.mdx b/content/docs/get-started/post-installation/codecs.mdx similarity index 56% rename from src/content/docs/zh_hant/installation/postinstall.mdx rename to content/docs/get-started/post-installation/codecs.mdx index 29543850..96f00133 100644 --- a/src/content/docs/zh_hant/installation/postinstall.mdx +++ b/content/docs/get-started/post-installation/codecs.mdx @@ -1,47 +1,8 @@ --- -title: 安裝之後… -description: "Things to do after installing Ultramarine Linux." +title: Installing Codecs +description: "If codecs weren't automatically installed, this page will help." --- -import Alert from "../../../../components/Docs/Alert.astro"; - -After installing Ultramarine Linux, There are a few things you should do to make the most out of your new system. - -## Install NVIDIA Drivers - -NVIDIA drivers were installed during the installation process. If this didn't happen or you missed the chance to enable them on first boot, you can install them with these commands - -```bash -sudo dnf update # Update the system first, the drivers may not work right if you don't. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - -Then, reboot your system. - - - You MUST wait until the process is finished before rebooting. Rebooting too - early might result in a broken installation! This may take upwards of 15 - minutes! You can check the progress by running `sudo akmods` - - -### Use NVIDIA Graphics Card as the primary card on Optimus Laptops - -This change is is completely optional. You can skip this step if you don't -want to use your NVIDIA Graphics Card as the primary card, or you do not use a -dual-GPU laptop connected to an external monitor. It may also cause issues -with some applications, such as Steam and Bottles. - -Run the following commands to make your NVIDIA Graphics Card the primary Graphics Card: - -```bash -sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf -sudo sed -i '10i\ Option "PrimaryGPU" "yes"' /etc/X11/xorg.conf.d/nvidia.conf # Add PrimaryGPU = yes to the 10th line of the file. -``` - -Then reboot your system. - -## Install Codecs - Ultramarine Linux includes codecs for most of the media you'll come across. **You shouldn't need to install any additional codecs.** Most of these packages below should be installed by default, excluding the VLC and MPV media players, and the `libdvdcss` library. @@ -59,14 +20,3 @@ However, if you find yourself in the situation where you do not have those codec - `nv-codec-headers` - NVIDIA's codec headers for encoding and decoding video on NVIDIA GPUs. Required for hardware-accelerated video encoding and decoding on NVIDIA GPUs. May not be used by default assuming you do not have an NVIDIA GPU. - [LAME](https://lame.sourceforge.io/) (`lame`) - A free and open-source MP3 encoder. Required for encoding MP3 files. - `PackageKit-gstreamer-plugin` - PackageKit plugin that helps you install the above codec packages using GNOME Software/KDE Discover. - -## Set up Backups - -You may want to back up your files to an external volume, you can use [Pika Backup] or [Déjà Dup] to do so. - -Instructions are available on the [Pika Backup] and [Déjà Dup] websites. - -[Déjà Dup]: https://wiki.gnome.org/Apps/DejaDup -[Pika Backup]: https://apps.gnome.org/PikaBackup/ - -#### [← Back To: Installation](/en/installation/installation) diff --git a/src/content/docs/en/setup/nvidia.mdx b/content/docs/get-started/post-installation/nvidia.mdx similarity index 57% rename from src/content/docs/en/setup/nvidia.mdx rename to content/docs/get-started/post-installation/nvidia.mdx index ac291cbc..924a2a2c 100644 --- a/src/content/docs/en/setup/nvidia.mdx +++ b/content/docs/get-started/post-installation/nvidia.mdx @@ -1,21 +1,20 @@ --- title: NVIDIA Drivers -description: "Information about NVIDIA Graphics on Ultramarine Linux" +description: "Get your NVIDIA GPU working" --- -import Alert from "../../../../components/Docs/Alert.astro"; For computers with NVIDIA graphics cards, you have two choices for drivers. -#### Noveau Driver +## Nouveau Driver -[The Noveau driver](https://nouveau.freedesktop.org/) is a fully open-source driver for NVIDIA graphics cards. It's built into Ultramarine so you can use your GPU instantly. +[The Nouveau driver](https://nouveau.freedesktop.org/) is a fully open-source driver for NVIDIA graphics cards. It's built into Ultramarine so you can use your GPU instantly. -Despite how good this sounds, modern NVIDIA GPUs will suffer performance issues and screen tearing under the Noveau driver. +Despite how good this sounds, modern NVIDIA GPUs will suffer performance issues and screen tearing under the Nouveau driver. -Older NVIDIA GPUs work well with the Noveau driver (and may only work with Noveau.) +Older NVIDIA GPUs work well with the Nouveau driver (and may only work with Nouveau.) -#### Proprietary Driver +## Proprietary Driver This is our recommended solution. Proprietary drivers support all of the features and performance of your GPU. They are automatically installed during installation if you are connected to the internet. @@ -26,12 +25,8 @@ sudo dnf update # Update the system first, the drivers may not work right if you sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. ``` - + You MUST wait until the process is finished before rebooting. Rebooting too early might result in a broken installation! This may take upwards of 15 minutes! - - -#### [Next Up: Contributing →](/en/contributing/contributorguide) - -#### [← Back To: Broadcom and Realtek Networking](/en/setup/broadcom-realtek) + diff --git a/src/content/docs/zh_hant/installation/post-advanced.mdx b/content/docs/get-started/post-installation/systemd-boot.mdx similarity index 78% rename from src/content/docs/zh_hant/installation/post-advanced.mdx rename to content/docs/get-started/post-installation/systemd-boot.mdx index 1438134d..566b5b16 100644 --- a/src/content/docs/zh_hant/installation/post-advanced.mdx +++ b/content/docs/get-started/post-installation/systemd-boot.mdx @@ -1,23 +1,21 @@ --- -title: 進階安裝後步驟 -description: Learn how to further configure your Ultramarine Linux installation. +title: Use systemd-boot as the Bootloader (Advanced) +description: Try a modern bootloader --- -import Alert from "../../../../components/Docs/Alert.astro"; - -## Use systemd-boot as the bootloader - Ultramarine Linux currently still uses GRUB as the default bootloader for compatibility reasons. However, if you have a UEFI system, you can simply switch to systemd-boot, which is a more modern bootloader. - - This step is optional. You can skip this step if you don't want to use - systemd-boot. Make sure to back up your data and have a live USB ready in case + + Don't try this if you don't know what you're doing. + Make sure to back up your data and have a live USB ready in case something goes wrong. Incorrectly configuring a new bootloader can make your OS unbootable. - + + +## Switching to systemd-boot -1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after [Setting up Secure Boot](#set-up-secure-boot) +1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after [Setting up Secure Boot](#using-secure-boot-with-systemd-boot) 2. Remove GRUB from protected packages: ```bash @@ -30,7 +28,7 @@ sudo rm /etc/dnf/protected.d/grub* sudo dnf remove -y grubby grub2\* memtest86\* && sudo rm -rf /boot/grub2 && sudo rm -rf /boot/loader ``` -4. Install unsigned systemd-boot binaries and the `sdubby` tool: +4. Install `systemd-boot-unsigned`dnf and `sdubby`dnf: ```bash sudo dnf install systemd-boot-unsigned sdubby @@ -50,20 +48,20 @@ sudo dnf reinstall -y kernel-core ``` 6. Reboot your system and make sure it boots correctly, run `sudo bootctl` to check if the boot process is correct. -7. (Optional) Proceed to [Set up Secure Boot](#set-up-secure-boot) if you want to re-enable Secure Boot. +7. (Optional) Proceed to [Set up Secure Boot](#using-secure-boot-with-systemd-boot) if you want to re-enable Secure Boot. -## Set up Secure Boot +## Using Secure Boot with systemd-boot [Secure Boot] is a UEFI security protocol that secures the boot process by ensuring that only signed executables are allowed to boot. While Ultramarine Linux's bootloader shim is signed by Microsoft and Red Hat, you may want to use a different bootloader (i.e systemd-boot or rEFInd) or kernel. In that case, you will need to manually enroll and sign the files with your own keys. -Fortunately, there's a tool to automate this called [sbctl]. You can install it from the Terra repository: +Fortunately, there's a tool to automate this called [sbctl]dnf. You can install it from the Terra repository: - + `sbctl` is only available on Ultramarine/Fedora 40 and later. - + ```bash sudo dnf install sbctl diff --git a/content/docs/get-started/requirements.mdx b/content/docs/get-started/requirements.mdx new file mode 100644 index 00000000..df65669f --- /dev/null +++ b/content/docs/get-started/requirements.mdx @@ -0,0 +1,20 @@ +--- +title: System Requirements +description: "Minimum Requirements for Ultramarine Linux" +--- + +Ultramarine's requirements are simple: + +- 64bit processor (x86_64 or aarch64) +- Compatible firmware (EFI, BIOS, etc) +- 1GB RAM +- 16GB disk space + +If your device isn't a normal x86_64 computer, check out the [Anywhere section](/docs/anywhere) for more information about booting Ultramarine. + +These are the recommended specs for a system that can handle opening a browser or a handful of native apps. You CAN run Ultramarine on lower specs, but you may run into a sluggish or unusable system. + +- 4GB of RAM (More recommended) +- 1st generation Intel Core (or Equivalent) or newer + +Xfce Edition can run with as little as 2GB of RAM. We suggest a minimum of 8GB of memory for Plasma and GNOME Editions, and 4GB for Budgie. You can run any Edition on less memory than we recommend, but your mileage may vary. diff --git a/src/content/docs/en/anywhere/wsl.mdx b/content/docs/get-started/wsl.mdx similarity index 85% rename from src/content/docs/en/anywhere/wsl.mdx rename to content/docs/get-started/wsl.mdx index fac37c4b..e097fc0b 100644 --- a/src/content/docs/en/anywhere/wsl.mdx +++ b/content/docs/get-started/wsl.mdx @@ -3,7 +3,6 @@ title: "Windows Subsystem for Linux" description: "Ultramarine for Windows Subsystem for Linux (WSL)" --- -import Alert from "../../../../components/Docs/Alert.astro"; [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/about) is a feature in Windows 10 and 11 that, in essence, is a Linux system as a Windows application. @@ -29,7 +28,7 @@ Locate the 'Hyper-V Requirements' section, near the bottom. Within that section, ## Enabling Virtualization - Power off your device. -- Press the power button, then press your [BIOS key](/en/setup/bioskeys). +- Press the power button, then press your [BIOS key](/docs/get-started/bioskeys). - Locate the virtualization option. This can be in various places depending on the motherboard/manufacturer. Typically, this will be in the CPU configuration menu. Check with your manufacturer if you need help. - Save and exit. There will typically be a dedicated key to do this, or a select option on the main or exit page. @@ -37,7 +36,7 @@ Hardware virtualization should now be enabled, and you can proceed to installati ## Installing Ultramarine WSL -### Install using the Microsoft Store +### Install Using the Microsoft Store Open the Microsoft Store, and search 'Ultramarine Linux' in the Microsoft Store app, or use [this link](https://apps.microsoft.com/detail/9PBPG2RDMZB9?hl=en-us&gl=US&ocid=pdpshare) @@ -45,7 +44,7 @@ Select 'Ultramarine Linux,' verify the author is Fyra Labs, and then select 'Get After this, Ultramarine WSL will appear as a Windows app. You can select 'Open' from the Microsoft Store window. -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! +You're now ready for the [Post-Installation](#post-installation) section! ### Install with WinGet @@ -65,7 +64,7 @@ winget install ultramarine After this, Ultramarine WSL will appear as a Windows application. This will install everything needed for WSL, and Ultramarine WSL, assuming the requirements are met. -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! +You're now ready for the [Post-Installation](#post-installation) section! ### Install from the Command Line @@ -95,7 +94,7 @@ Be sure to replace the file name in the URL to match your architecture. If you a After this, Ultramarine WSL will appear as a Windows application. This will install everything needed for WSL, and Ultramarine WSL, assuming the requirements are met. -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! +You're now ready for the [Post-Installation](#post-installation) section! ## Post-installation @@ -113,7 +112,7 @@ It is always recommended to update a fresh install. To do this, please run the f sudo dnf upgrade ``` -### Setting your Default WSL Distro as Ultramarine +### Setting your Default WSL Distro to Ultramarine To change your default WSL distro to Ultramarine, run the following command: @@ -131,7 +130,7 @@ Then, replace `Ultramarine` in the setdefault command with the listed name. ### Hardware Acceleration -Starting with Ultramarine WSL 42, hardware acceleration packages are included by default. +Starting with Ultramarine 42, hardware acceleration packages are included by default. If you upgraded from 41 to 42, you may need to enable the terra-mesa repository to install the needed packages. Run the following command to enable the repo: @@ -140,21 +139,27 @@ Run the following command to enable the repo: sudo sed -i '0,/enabled=0/s/enabled=0/enabled=1/' /etc/yum.repos.d/terra-mesa.repo ``` -And then install the `mesa-vulkan-drivers` package: +And then install the `mesa-vulkan-drivers`dnf package: ```sh sudo dnf install mesa-vulkan-drivers ``` -This will install everything you need for hardware acceleration through Ultramarine WSL. +This will install everything you need for hardware acceleration on Ultramarine WSL. ### Version Upgrading -To version upgrade Ultramarine WSL, check the instructions [here](/en/release/43-upgrades#upgrading-ultramarine-wsl-system-versions). +WSL works a bit differently than regular Ultramarine installs, run the following commands, replacing `xx` with the version you want to upgrade to. Follow the prompts: + +```sh +sudo dnf upgrade --refresh +sudo dnf distro-sync --releasever=xx +``` + ## More Information -Microsoft has vast resources about WSL, here are some helpful links: +Microsoft has lots of resources about WSL, here are some helpful links: General WSL information: https://learn.microsoft.com/en-us/windows/wsl/about @@ -163,7 +168,3 @@ Basic WSL commands: https://learn.microsoft.com/en-us/windows/wsl/basic-commands Best Practices: https://learn.microsoft.com/en-us/windows/wsl/setup/environment Frequently Asked Questions: https://learn.microsoft.com/en-us/windows/wsl/faq - -#### [Next Up: Gaming on Ultramarine →](/en/usage/gaming) - -#### [← Back To: Raspberry Pi](/en/anywhere/rpi) diff --git a/src/content/docs/en/linux/devicefiles.mdx b/content/docs/linux/devicefiles.mdx similarity index 94% rename from src/content/docs/en/linux/devicefiles.mdx rename to content/docs/linux/devicefiles.mdx index 0c9ca3a9..4ed22c9f 100644 --- a/src/content/docs/en/linux/devicefiles.mdx +++ b/content/docs/linux/devicefiles.mdx @@ -3,13 +3,12 @@ title: Device Files description: "Overview of various device files in /dev" --- -import Alert from "../../../../components/Docs/Alert.astro"; - + These files are an actual representation of all your hardware devices according to how your drivers see them. Please do not modify or delete these files unless you know what you are doing. - + Device files are special files that exist as an interface for your system to interact with hardware. They are located in the `/dev` directory, which is a temporary virtual filesystem that is created by Linux on boot. @@ -85,10 +84,10 @@ nvme0n1 259:0 0 119.2G 0 disk In this specific case, it is configured in a Btrfs spanned (JBOD) volume, which in this case combines both `sda3` and `nvme0n1p1` into a single volume. - + Ultramarine Linux's installer, *Anaconda* will automatically configure your disks in a Btrfs spanned volume by default when multiple disks are selected. - + `nvme0n1` is a 128GB NVMe SSD that is used as a cache for the Btrfs volume. It has a single partition, `nvme0n1p1`, which is mounted to `/var/lib/docker/btrfs`, `/home`, `/var` and `/`. @@ -103,19 +102,19 @@ Since we are using Btrfs, Docker will use Btrfs subvolumes to store its data. Fo ### Manipulating Block Devices -You can use `fdisk` to do various operations on block devices, such as creating partitions, formatting them and more. +You can use `fdisk`dnf to do various operations on block devices, such as creating partitions, formatting them and more. ```sh fdisk /dev/sda ``` - + **NEVER** run the following commands on any actual systems! These commands **ANNIHILATE your system WITHOUT CONFIRMATION**, causing **IRREVERSIBLE DAMAGES** to your system! If you want to test out these commands for whatever reason, please _make sure (and double check) you are ONLY doing this in a virtual environment._ - + As an example, you can use the following command to do a zero-filled format of a disk called `/dev/sda` by simply using a pipe: @@ -147,8 +146,6 @@ dd if=/dev/sda of=/dev/sdb You can find more information about `dd` [here](https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html). -#### [Next Up: Permissions →](/en/linux/permissions) -#### [← Back To: The Filesystem](/en/linux/filesystem) [Docker]: https://en.wikipedia.org/wiki/Docker_(software) diff --git a/src/content/docs/hi/linux/filesystem.mdx b/content/docs/linux/filesystem.mdx similarity index 72% rename from src/content/docs/hi/linux/filesystem.mdx rename to content/docs/linux/filesystem.mdx index a34e445e..ad59ebb4 100644 --- a/src/content/docs/hi/linux/filesystem.mdx +++ b/content/docs/linux/filesystem.mdx @@ -3,7 +3,6 @@ title: The File System description: "An overview of the file system in Linux." --- -import Alert from "../../../../components/Docs/Alert.astro"; There are a few notable differences in how files work on Linux when compared to Windows or macOS. @@ -13,7 +12,7 @@ In Linux, and more widely, UNIX, everything is a file. Unlike Windows which has ## The File System Hierarchy -Linux has a standardized file system hierarchy called the [*Filesystem Hierarchy Standard*](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard) (FHS). The FHS is contained within `/` (called root.) Root doesn't only contain normal files, but also physical devices, virtual devices, and various other special files that control the system itself. +Linux has a standardized file system hierarchy called the [*Filesystem Hierarchy Standard*](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard) (FHS). The FHS is contained within `/` (called root, not to be confused with `/root`). Root doesn't only contain normal files, but also physical devices, virtual devices, and various other special files that control the system itself. It should also be noted that Linux uses a forward slash (`/`) to represent going deeper in a directory, unlike Windows which uses a backslash (`\`) @@ -22,23 +21,32 @@ The directory structure is as follows: | Directory | Description | | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | / | The root directory with the all the other directories and files. This is as far back as you can go | -| /bin | Executables and command binares required for a functioning system. Most applications installed from RPM end up here. | -| /boot | The bootloader and files used during early boot process. May usually be in a seperate partition. | +| /bin | A symbolic link to /usr/bin. | +| /boot | The bootloader and files used during early boot process. Usually in a seperate partition. | | /dev | Special device files for various purposes (`/dev/sda` for a drive, `/dev/null` for blank data, `/dev/random` for pseudo-random data, `/dev/tty` for terminal sessions, etc). | | /etc | System-wide settings and configuration files. | | /home | User files. This is where your stuff lives! | -| /lib | Libraries required for executables in `/bin` to function. May be also named `/lib`. | +| /lib | A symbolic link to /usr/lib. | | /media | Mount points for when the system mounts removable media, such as USB drives, SD cards, etc. | | /mnt | Temporary mount points for media. Usually used when manually mounting a drive. | | /opt | Optional packages that may be installed by the user. Most packages don't actually install here. | | /proc | Process data and kernel information for inter-process communication managed by the kernel. | | /root | User data for the root user. Don't confuse this with `/` (root) | -| /sbin | Executables for system tasks. | +| /sbin | A symbolic link to /usr/sbin. | | /srv | Shared service data used by server processes, such as web servers and NAS/File servers. | | /tmp | Temporary data. | -| /usr | Shared application data used by all users. | +| /usr | Shared application data used by all users. +| /usr/bin | Executables and command binaries.. Most applications installed from an RPM end up here. +| /usr/sbin | A symbolic link to /usr/bin since UM42. +| /usr/lib | Libraries required for executables to function. May be also named `/usr/lib`| | /var | Variable data used by system processes. | + +You may notice that `/bin`, `/sbin`, and `/lib` are "symbolic links", this is for legacy reasons. In the past, binaries were seperated between system (`/bin`, `/sbin`) and user (`/usr/bin`, `/usr/sbin`). As systems evolved this complexity became unnecessary and clunky, leading to the merged usr setup you see today. + +Similarly, in UM42, we completed sbin-merge, which turned `/usr/sbin` into a link to `/usr/bin`. Historically sbin contained binaries specifically for managing the system, but as with usr-merge, this became unnecessary as package management became better. + + ## The Home Directory The home folder is the place where your personal data, and most of your apps are stored. It's a folder located in the `/home` directory named after your username. It is similar to the `Users` folder in Windows. @@ -71,17 +79,24 @@ It currently supports most file systems that are supported by the Linux kernel, And extra file system drivers can be installed, such as: -- ZFS +- ZFSdnf Ultramarine's installer is configured to use Btrfs by default. Btrfs is a modern filesystem with snapshots, virtual volumes, journaling, error correction and compression. -By default, the installer will use all the available space on the disk. 500mb is dedicated to the EFI boot partition (2mb on BIOS systems, 16mb on x86 Chromebooks, and 64mb on ARM Chromebooks), 1gb for /boot, a Btrfs volume uses the rest of the space on the selected disks. -It then creates 2 subvolumes, one for the root directory `/`, and one for the home directory `/home`, which will share the same space but have different filesystem settings. - +By default, the installer will use all the available space on the disk. +- 2–500 MB for the system partition, this varies by platform: + - 500 MB for the EFI partition + - 2 MB for a GPT shim on BIOS systems + - 16 MB for Submarine on x86 Chromebooks + - 64 MB for Submarine on ARM Chromebooks +- 1 GB for /boot +- Remainder of the disk is used for a Btrfs partition containing: + - /home Subvolume + - /root Subvolume + + + The subvolumes don't show sizes as they are dynamically allocated based on usage. Simply, they will grow and shrink as needed. + ### Remote Filesystems -Ultramarine Linux can also mount remote file systems from a remote server or NAS, using the NFS, SFTP, SMB, and WebDAV protocols. - -#### [Next Up: Device Files →](../linux/devicefiles) - -#### [← Back To: What is Linux?](../linux/overview) +Ultramarine Linux can also mount remote file systems from a remote server, using the NFS, SFTP, SMB, and WebDAV protocols. You can connect with your edition's file manager. diff --git a/src/content/docs/en/linux/overview.mdx b/content/docs/linux/index.mdx similarity index 83% rename from src/content/docs/en/linux/overview.mdx rename to content/docs/linux/index.mdx index b48f0b2b..faa7ecf7 100644 --- a/src/content/docs/en/linux/overview.mdx +++ b/content/docs/linux/index.mdx @@ -1,15 +1,13 @@ --- title: What is Linux? -description: "A general overview of Linux concepts." +description: "Get acquainted with how a Linux system works" --- -import Alert from "../../../../components/Docs/Alert.astro"; - Linux refers to a family of operating systems with one common feature: the Linux kernel. Linux is distributed differently than Windows or macOS. Multiple (separate) groups take the Linux kernel and combine it with other software before distributing it as a distinct operating system. These compilations are called "distributions" (but we'll shorten that to distro.) -Ultramarine Linux is based on another distribution of Linux called Fedora. See ["Why does this distro exist?"](/en/welcome#why-does-this-distro-exist-what-difference-does-it-have-other-than-just-fedora-with-rpmfusion) for more on that. +Ultramarine Linux is based on another distribution of Linux called Fedora. See ["Why does this distro exist?"](/docs/get-started#why-does-this-distro-exist-what-difference-does-it-have-other-than-just-fedora-with-rpmfusion) for more on that. ## Why use Linux? @@ -27,7 +25,7 @@ For example: Edge cannot be removed from a Windows computer. Meanwhile on Linux, ### Security -Linux is more secure by design, with features like mandatory access controls (MACs) and stricter permissions, you can learn more about those features on the [Permissions](/en/linux/securityprivacy) page. +Linux is more secure by design, with features like mandatory access controls (MACs) and stricter permissions, you can learn more about those features on the [Permissions](/docs/linux//securityprivacy) page. Linux is also resistant to many common viruses due to these features (and inexperienced developers.) While it can be argued that developers simply do not target Linux, it's actually because most software comes from moderated collections (repositories) rather than the internet. @@ -41,8 +39,8 @@ Ultramarine Linux is designed to get a lot of the configuration out of the way. Ultramarine is built on Fedora, the base for Red Hat's Enterprise Linux. This means that the software backing Ultramarine has been built with the stability needed for mission critical systems. - -
+ +
If you'd like a crash course on the basics, this video should cover a lot of what the following pages will cover
- - -#### [Next Up: The Filesystem →](/en/linux/filesystem) - -#### [← Back To: eduroam](/en/usage/eduroam/) +
diff --git a/content/docs/linux/meta.json b/content/docs/linux/meta.json new file mode 100644 index 00000000..507a0c2f --- /dev/null +++ b/content/docs/linux/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Linux Concepts", + "description": "Learn how a Linux system works", + "icon": "GraduationCap", + "root": true +} diff --git a/src/content/docs/hi/linux/permissions.mdx b/content/docs/linux/permissions.mdx similarity index 91% rename from src/content/docs/hi/linux/permissions.mdx rename to content/docs/linux/permissions.mdx index 4c67df00..9279e3c0 100644 --- a/src/content/docs/hi/linux/permissions.mdx +++ b/content/docs/linux/permissions.mdx @@ -25,6 +25,4 @@ To execute commands as a superuser, use the `sudo` command, followed by the comm sudo dnf install vim # This will install vim as the root user ``` -#### [Next Up: Software and Package Management →](/en/linux/software) -#### [← Back To: Device Files](/en/linux/devicefiles) diff --git a/src/content/docs/hi/linux/securityprivacy.mdx b/content/docs/linux/securityprivacy.mdx similarity index 88% rename from src/content/docs/hi/linux/securityprivacy.mdx rename to content/docs/linux/securityprivacy.mdx index 56cd977b..43cb2db9 100644 --- a/src/content/docs/hi/linux/securityprivacy.mdx +++ b/content/docs/linux/securityprivacy.mdx @@ -3,7 +3,6 @@ title: Security and Privacy description: "How Ultramarine keeps you safe" --- -import Alert from "../../../../components/Docs/Alert.astro"; ## Mandatory Access Controls @@ -21,11 +20,11 @@ By default, SELinux is in "Enforcing" mode, which means that it will prevent you Ultramarine includes polkit, a tool used to manage privilege elevation. If you've ever gotten a graphical password prompt on your system, you've interacted with polkit. - + Use the `pkexec` command instead of `sudo` to give polkit a try. - + polkit also manages communication between privileged and non privileged applications. @@ -40,7 +39,3 @@ When you install an app as a Flatpak, it's contained within a sandbox, meaning i ## Restricted Memory Access Ultramarine and Fedora restrict access to physical memory. This should prevent most memory injection attacks. - -#### [Next Up: Ultramarine Release Notes, Ultramarine 42 Upgrades →](/en/release/42-upgrades) - -#### [← Back To: SSH](/en/linux/ssh) diff --git a/src/content/docs/hi/linux/shell.mdx b/content/docs/linux/shell.mdx similarity index 93% rename from src/content/docs/hi/linux/shell.mdx rename to content/docs/linux/shell.mdx index f7408978..3a8b301e 100644 --- a/src/content/docs/hi/linux/shell.mdx +++ b/content/docs/linux/shell.mdx @@ -3,13 +3,12 @@ title: The Shell description: "How the shell works in Linux." --- -import Alert from "../../../../components/Docs/Alert.astro"; The shell is a command line interface to the operating system. It is a program that allows you to directly execute commands and interact on deeper level. -You may be familiar with bash from other Linux distributions. Ultramarine uses the [zsh](https://en.wikipedia.org/wiki/Z_shell) instead of bash. We also use the [Starship Prompt](https://starship.rs/) to provide additional convenience features like displaying the current git branch. +You may be familiar with bash from other Linux distributions. Ultramarine uses the [zsh](https://en.wikipedia.org/wiki/Z_shell) instead of bash. We also use the [Starship Prompt](https://starship.rs/)dnf to provide additional convenience features like displaying the current git branch. - +
To learn more about shell scripting, you can watch this Bash introduction video by Fireship here: @@ -18,14 +17,14 @@ You may be familiar with bash from other Linux distributions. Ultramarine uses t height="315" src="https://www.youtube.com/embed/I4EWvMFj37g" title="YouTube video player" - frameborder="0" + frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowfullscreen + allowFullScreen > NOTE: The Z shell is mostly compatible with Bash, so most of the knowledge you will learn will be mostly applicable in Ultramarine Linux.
-
+ ## Interacting with the Shell @@ -94,10 +93,10 @@ To delete a full directory, recursively delete it by typing `rm -r` followed by rm -r /home/user/Documents ``` - + Most users will usually execute `rm -rf` instead of `rm -r`. The `-f` flag is used to force the deletion of a file or directory. - + To create a new file, type `touch` followed by the path to the file. @@ -111,10 +110,10 @@ To create a new directory, type `mkdir` followed by the path to the directory. mkdir /home/user/Documents/newdir ``` - + To create a new directory inside of another new directory (i.e. `.../newdir/newdir2`), execute `mkdir` with the `-p` flag. - + To move or rename a file or directory, type `mv` followed by the path to the file or directory, and then the new path. @@ -128,9 +127,9 @@ To copy a file and optionally rename the copy, type `cp` followed by the path of cp file newfile ``` - + To copy a directory, type `cp` with the `-r` (recursive) flag. - + For both the `cp` and `mv` commands, you may move multiple files into a directory at once. The target directory must exist. @@ -191,12 +190,8 @@ For files in your current folder, you must use `./` before the file name. ./exec ``` - + Executables are often moved into a directories listed in the `$PATH` variable (run `echo $PATH`). The filenames of executables in `$PATH` can be executed as commands (i.e. `custom-command` will run `/usr/local/bin/custom-command`) - - -#### [Next Up: SSH →](/en/linux/ssh) - -#### [← Back To: Software and Package Management](/en/linux/software) + diff --git a/src/content/docs/hi/linux/software.mdx b/content/docs/linux/software.mdx similarity index 50% rename from src/content/docs/hi/linux/software.mdx rename to content/docs/linux/software.mdx index 9057bf28..307198cc 100644 --- a/src/content/docs/hi/linux/software.mdx +++ b/content/docs/linux/software.mdx @@ -2,54 +2,60 @@ title: Software and Package Management description: "How to manage software on Linux." --- + +You may have noticed package manager tags (like thisdnf and thisflatpak) across the wiki. This shows our recommended way to get that software, either using `dnf` or as a `flatpak`. +This page goes more into depth about package managers, to help you make choices like this on your own. + -import Alert from "../../../../components/Docs/Alert.astro"; +## Using the App Store +Ultramarine comes with an app store. It's called "Discover" on Plasma Edition, and "Software" on GNOME, Budgie, and Xfce Edition. -There are many different ways to install software on Linux. +You can search for and install the majority of software available for Ultramarine in the app store, and it will handle installing RPMs and flatpakrefs from the internet. + +You can also install software with the terminal, which we'll cover in the next section. + +If you're trying to install something from the internet, check the [Software Downloaded from the Internet](#software-downloaded-from-the-internet) section. ## The Package Manager Unlike Windows, most software for Ultramarine is stored in online collections of software called repositories. You can browse and install software (packages) from these repositories using something called a package manager. -### Flatpaks +### Flatpak Flatpak is the primary package manager for regular apps. It installs applications in a sandbox, keeping them separate from anything they don't need to access. -Flatpaks can be installed from **Software** on Flagship, GNOME, and Xfce, and **Discover** on Plasma. +You can install Flatpaks from your app store, or with `flatpak install` in the terminal. -You can browse the available software in these app stores, or on the [Flathub website](https://flathub.org/). +You can browse the available software in your app store, or on the [Flathub website](https://flathub.org/). -Most desktop apps should be installed as a Flatpak, but in some cases, like with Steam, IDEs, or other apps that require access to the system, they may not work. The following sections will help with software in other formats. +Most desktop apps should be installed as a Flatpak, but in some cases, like with Steamdnf, IDEs, or other apps that require access to the system, they may not work. The following sections will help with software in other formats. -### Software Downloaded from the Internet - -Sometimes, the software you need may come as a package file downloaded from the internet. - -#### RPM Packages - -To install RPMs simply double-click the downloaded file in the file manager. +### DNF -#### AppImages +Ultramarine uses the DNF package manager. While this package manager handles system software (like the kernel, and your desktop environment), it can install user apps as well. -1. Install AppImage Launcher from **Software** or **Discover**. +```bash +sudo dnf install steam # Install Steam +``` -2. Double-click the AppImage file and you're done! +You can also install groups of packages, like full desktop environments or a suite of tools for music production, using the `dnf group install` command. - +```bash +sudo dnf group install audio # installs multiple packages at once, in this case a suite of music/audio production tools +``` -AppImages are not automatically updated and may have issues communicating with other apps and the system. We recommend looking for a Flatpak or RPM instead. +For a full list of available groups, run `sudo dnf group list` - ### Snap Snap is a package manager made by Canonical. It contains a large amount of proprietary applications that you may not be able to find elsewhere. - + Snap may cause your system to run noticeably slower! - + To get started, install Snap. @@ -64,28 +70,28 @@ sudo snap install helloworld helloworld ``` - + Snap packages can load slowly and may not work on editions other than GNOME. We recommend avoiding Snaps. - + -### DNF +### Software Downloaded from the Internet -Ultramarine uses the DNF package manager. While this package manager primarily handles system software (like the kernel, and your desktop environment) it can install user apps as well. +Sometimes, the software you need may come as a package file downloaded from the internet. -```bash -sudo dnf install steam # Install Steam -``` +#### RPM Packages -You can also install groups of packages, like full desktop environments or a suite of tools for music production, using the `dnf groupinstall` command. +To install RPMs simply double-click the downloaded file in the file manager. -```bash -sudo dnf groupinstall "Audio Production" # installs multiple packages at once, in this case a suite of music/audio production tools -``` +#### AppImages -For a full list of available groups, run `sudo dnf group list` +1. Install Gear Lever from **Software** or **Discover**. + +2. Double-click the AppImage file, select "Install" and you're done! -#### [Next Up: The Shell →](/en/linux/shell) + + +AppImages are not automatically updated and may have issues communicating with other apps and the system. We recommend looking for a Flatpak or RPM instead. -#### [← Back To: Permissions](/en/linux/permissions) + diff --git a/src/content/docs/hi/linux/ssh.mdx b/content/docs/linux/ssh.mdx similarity index 92% rename from src/content/docs/hi/linux/ssh.mdx rename to content/docs/linux/ssh.mdx index d8663cc1..f1ab89df 100644 --- a/src/content/docs/hi/linux/ssh.mdx +++ b/content/docs/linux/ssh.mdx @@ -1,123 +1,117 @@ ---- -title: SSH Secure Shell -description: "An overview of the SSH utility." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Secure Shell ("SSH") is a tool used to access a shell on a remote device. - -## SSH overview - -SSH uses a client/server model where one computer acts as an SSH server[^1] and allows other computers to connect. - -![Example SSH Client and Server](/assets/ssh.png) - -## Connecting to an SSH Server - -To access a device remotely, the `ssh` command is run from [the shell](/en/linux/shell), mostly used with this format: - -```zsh -ssh [username@] -``` - -If you don't specify a username then SSH will attempt to connect you using the username with which you are logged in. Here are some examples: - -- `ssh myuser@myserver.com` - - This will attempt to connect to the server at myserver.com using the username myuser -- `ssh myuser@192.168.1.2` - - This is just like the example above except you can also specify an IP address instead of a hostname -- `ssh myserver.com` - - This will attempt to connect to the SSH server at myserver.com using your current username - -When using any of the above commands, once connected to the remote server you'll be prompted for a password. - -## Running Your Own SSH Server - -Start by installing the SSH server: - -```zsh -sudo dnf install openssh-server -``` - -Then start the server using: - -```zsh -systemctl enable --now sshd -``` -You will be prompted to enter your password, enter it. - -Once the above command is run, your machine will begin listening for incoming connections on port 22. You can verify that the SSH server application started correctly by using the command - -```zsh -systemctl status sshd -``` - -You should see output similar to this: - -```zsh -● sshd.service - OpenSSH server daemon - Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) - Drop-In: /usr/lib/systemd/system/service.d - └─10-timeout-abort.conf - Active: active (running) since Sun 2024-04-07 14:00:20 EDT; 44min ago - Docs: man:sshd(8) - man:sshd_config(5) - Main PID: 1065 (sshd) - Tasks: 1 (limit: 4396) - Memory: 156.0K - CPU: 50ms - CGroup: /system.slice/sshd.service - └─1065 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups" - -Apr 07 14:00:20 ultramarine systemd[1]: Starting sshd.service - OpenSSH server daemon... -Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on 0.0.0.0 port 22. -Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on :: port 22. -Apr 07 14:00:20 ultramarine systemd[1]: Started sshd.service - OpenSSH server daemon. -``` - -Check for the field that says `Active: active (running)` to ensure that the SSH server is listening for incoming connections. - -If you'd like to stop the SSH server, you can do so with - -```zsh -sudo systemctl stop sshd -``` - -You should see output similar to this: - -```zsh - -○ sshd.service - OpenSSH server daemon - Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) - Drop-In: /usr/lib/systemd/system/service.d - └─10-timeout-abort.conf - Active: inactive (dead) since Sun 2024-04-07 14:50:24 EDT; 3s ago - Duration: 50min 4.206s - Docs: man:sshd(8) - man:sshd_config(5) - Process: 1065 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS) - Main PID: 1065 (code=exited, status=0/SUCCESS) - CPU: 58ms - -Apr 07 14:50:24 ultramarine systemd[1]: Stopping sshd.service - OpenSSH server daemon... -Apr 07 14:50:24 ultramarine sshd[1065]: Received signal 15; terminating. -Apr 07 14:50:24 ultramarine systemd[1]: sshd.service: Deactivated successfully. -Apr 07 14:50:24 ultramarine systemd[1]: Stopped sshd.service - OpenSSH server daemon. -``` - -#### [← Back To: Software and Package Management](/en/linux/software) - -[^1]### A Note about the Word "Server" -It's common to hear the word "server" used but not understand exactly what is meant. Here are a couple examples of how "server" can be used: - -- It can refer to a physical machine somewhere - - Ex: Our email server lost power over the weekend. -- It can refer to a specific _application_ running on one machine (or even a number of machines across the world!) - - Ex: The SSH server is up so that users can connect. - -In this guide we'll try to make it clear to which we're referring. - -#### [Next Up: Security and Privacy →](/en/linux/securityprivacy) - -#### [← Back To: The Shell](/en/linux/shell) +--- +title: SSH +description: "An overview of the SSH utility." +--- + + +Secure Shell ("SSH") is a tool used to access a shell on a remote device. + +## SSH overview + +SSH uses a client/server model where one computer acts as an SSH server[^1] and allows other computers to connect. + +![Example SSH Client and Server](/assets/ssh.png) + +## Connecting to an SSH Server + +To access a device remotely, the `ssh` command is run from [the shell](/docs/linux/shell), mostly used with this format: + +```zsh +ssh [username@] +``` + +If you don't specify a username then SSH will attempt to connect you using the username with which you are logged in. Here are some examples: + +- `ssh myuser@myserver.com` + - This will attempt to connect to the server at myserver.com using the username myuser +- `ssh myuser@192.168.1.2` + - This is just like the example above except you can also specify an IP address instead of a hostname +- `ssh myserver.com` + - This will attempt to connect to the SSH server at myserver.com using your current username + +When using any of the above commands, once connected to the remote server you'll be prompted for a password. + +## Running Your Own SSH Server + +Start by installing the SSH server: + +```zsh +sudo dnf install openssh-server +``` + +Then start the server using: + +```zsh +systemctl enable --now sshd +``` +You will be prompted to enter your password, enter it. + +Once the above command is run, your machine will begin listening for incoming connections on port 22. You can verify that the SSH server application started correctly by using the command + +```zsh +systemctl status sshd +``` + +You should see output similar to this: + +```zsh +● sshd.service - OpenSSH server daemon + Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) + Drop-In: /usr/lib/systemd/system/service.d + └─10-timeout-abort.conf + Active: active (running) since Sun 2024-04-07 14:00:20 EDT; 44min ago + Docs: man:sshd(8) + man:sshd_config(5) + Main PID: 1065 (sshd) + Tasks: 1 (limit: 4396) + Memory: 156.0K + CPU: 50ms + CGroup: /system.slice/sshd.service + └─1065 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups" + +Apr 07 14:00:20 ultramarine systemd[1]: Starting sshd.service - OpenSSH server daemon... +Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on 0.0.0.0 port 22. +Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on :: port 22. +Apr 07 14:00:20 ultramarine systemd[1]: Started sshd.service - OpenSSH server daemon. +``` + +Check for the field that says `Active: active (running)` to ensure that the SSH server is listening for incoming connections. + +If you'd like to stop the SSH server, you can do so with + +```zsh +sudo systemctl stop sshd +``` + +You should see output similar to this: + +```zsh + +○ sshd.service - OpenSSH server daemon + Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) + Drop-In: /usr/lib/systemd/system/service.d + └─10-timeout-abort.conf + Active: inactive (dead) since Sun 2024-04-07 14:50:24 EDT; 3s ago + Duration: 50min 4.206s + Docs: man:sshd(8) + man:sshd_config(5) + Process: 1065 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS) + Main PID: 1065 (code=exited, status=0/SUCCESS) + CPU: 58ms + +Apr 07 14:50:24 ultramarine systemd[1]: Stopping sshd.service - OpenSSH server daemon... +Apr 07 14:50:24 ultramarine sshd[1065]: Received signal 15; terminating. +Apr 07 14:50:24 ultramarine systemd[1]: sshd.service: Deactivated successfully. +Apr 07 14:50:24 ultramarine systemd[1]: Stopped sshd.service - OpenSSH server daemon. +``` + + +[^1]### A Note about the Word "Server" +It's common to hear the word "server" used but not understand exactly what is meant. Here are a couple examples of how "server" can be used: + +- It can refer to a physical machine somewhere + - Ex: Our email server lost power over the weekend. +- It can refer to a specific _application_ running on one machine (or even a number of machines across the world!) + - Ex: The SSH server is up so that users can connect. + +In this guide we'll try to make it clear to which we're referring. diff --git a/src/content/docs/en/usage/eduroam.mdx b/content/docs/usage/eduroam.mdx similarity index 83% rename from src/content/docs/en/usage/eduroam.mdx rename to content/docs/usage/eduroam.mdx index 9ce6e972..6ded21df 100644 --- a/src/content/docs/en/usage/eduroam.mdx +++ b/content/docs/usage/eduroam.mdx @@ -31,8 +31,9 @@ Final step! Enter your credentials (usually your institution-issued email addres You're done! Just visit any eduroam hotspot and you'll be automatically connected. ![Running CAT](/assets/eduroam/done.png) -If you need further support, we recommend contacting your institution's helpdesk, or hopping into one of [our chats](/en/community/community/). +If you need further support, we recommend contacting your institution's helpdesk, or hopping into one of [our chats](/docs/community/). -#### [Next Up: Linux Concepts: What is Linux? →](/en/linux/overview) - -#### [← Back To: umcli](/en/usage/umcli) +### eduroam Tips +- Many insutitions require users from other institutions to use CAT, if you followed this guide you're already good to go +- If your institution uses SSO credentials for eduroam, you will need to repeat this guide when you reset your password +- Your device will automatically connect to eduroam at any institution offering it diff --git a/content/docs/usage/gaming.mdx b/content/docs/usage/gaming.mdx new file mode 100644 index 00000000..d4662ce7 --- /dev/null +++ b/content/docs/usage/gaming.mdx @@ -0,0 +1,128 @@ +--- +title: Gaming +description: "Extra instructions for gaming on Ultramarine Linux." +--- + +Ultramarine isn't explicitly optimized for gaming, but that doesn't mean it can't game. + +Fyra Labs (the developer of Ultramarine) is a member of the [Open Gaming Collective](https://opengamingcollective.org). We use many of their patches (like Mesa) in Ultramarine, making Ultramarine slightly more optimized than normal distributions. + +Gaming on Linux has gotten a lot easier over the years. In some cases it may be even easier than Windows. + +"I was talking to a friend about GTA 4, and they were warning me about how much setup it needed to run on Windows and told me it would probably be worse on Linux. I opened Steam, pressed play, and the game just launched." + +Linux may be missing games like Fortnite and League of Legends, but beyond those (and a handful of other exceptions) your library should run just fine, or potentially better than it did on Windows. + + +## Steam +You're gonna have the best luck with Steamdnf, and you probably already have a library there. + +Valve has been improving the Linux experience in Steamdnf over the last few years. Most notably, Valve has been pushing Proton, a compatability layer, forward. Things have become far better across the board, and even outside of Steam, after the release of the Steam Deck. + +Install Steamdnf from the app store, make sure that you select "terra" instead of Flathub. +![Source selector](/assets/steam/selector.png) + +Once you launch and sign into Steam, open Settings from the Steam menu. + +![Steam menu](/assets/steam/menu.png) + +Then, go to the Compatibility page, and ensure that "Steam Play is enabled for all titles" is listed, and Proton is set either to Experimental, or the latest version. + +![Compat page](/assets/steam/compat.png) + +Now you're ready to play! Simply download and run any game in your library. + + +Sometimes, it may appear like Steam isn't launching. Just wait, sometimes its updater doesn't get shown on screen. + + +If you're looking for some games that run great on Linux to get started, here's some of our team's favorites: + + +- [HoloCure](https://store.steampowered.com/app/2420510) (Free) +- [Peggle Deluxe](https://store.steampowered.com/app/3480/Peggle_Deluxe) ($5) +- Any Valve game + - [Counter-Strike 2](https://store.steampowered.com/app/730/CounterStrike_2/) (Free) + - [Portal Bundle](https://store.steampowered.com/bundle/234/Portal_Bundle) ($15, regularly on sale) +- [SIGNALIS](https://store.steampowered.com/app/1262350/SIGNALIS/) ($20) +- [Untitled Goose Game](https://store.steampowered.com/app/837470/Untitled_Goose_Game/) ($20) +- [Ultrakill](https://store.steampowered.com/app/1229490/ULTRAKILL/) ($25) +- [Any Jackbox Party Pack](https://store.steampowered.com/developer/jackboxgames) ($25-30) +- [Stray](https://store.steampowered.com/app/1332010/Stray/) ($30) +- [Cyberpunk: 2077](https://store.steampowered.com/app/1091500/Cyberpunk_2077/) ($60) + +These are not affiliate links, just games we love. + +## itch.io + +[itch.io](https://itch.io)flatpak is a platform for indie games, and it has a native Linux client. It has a large library of indie games, and some of them are available for free. You can install the itch.io client as a Flatpak from [Flathub](https://flathub.org/apps/io.itch.itch). + +## Epic Games Store, GOG, and Amazon Games + +The Epic Games Store, GOG, and Amazon Games do not have native Linux clients, but you can use the [Heroic Games Launcher](https://heroicgameslauncher.com/)flatpak to install and run games from these platforms on Linux. + +Simply search for Heroic in the app store and hit install! + +## EA Desktop/Origin + +We suggest using [Bottles](https://usebottles.com/gaming)flatpak to install EA Desktop and your games from it. + +Although you can use Bottles for Steam, and Epic Games, we suggest using the solutions we mentioned above instead. + +## Ubisoft Connect/Uplay + +If you still own games on Ubisoft Connect (formerly known as Uplay), you may be able to run some of them on Linux using Wine/Proton. However, some games may not work due to Ubisoft's anti-cheat software. + +We suggest using [Bottles](https://usebottles.com/gaming)flatpak to install Ubisoft Connect and your games from it. + +## Anything Else + +If you have loose game files, or games from a source we didn't list, check [ProtonDB](https://www.protondb.com) and try running them in [Bottles](https://usebottles.com/gaming)flatpak, your mileage my vary, but game support in Bottles gets better every day. + +## Known Incompatible Games +These games are known to not work on Ultramarine due to various reasons, such as anti-cheat software, DRM, or API incompatibilities: + +### Games that Simply Won't Run + +Some of these may run, but they just aren't worth it. This list is not exhaustive. + +| Game | Anti-Cheat implementation | Reason (if applicable) | Notes | +| --------------------------------------------------- | ------------------------- | ------------------------------- | ---------------------------------------------- | +| Apex Legends | Easy Anti-Cheat | - | Support for Proton recently removed | +| Fortnite | Easy Anti-Cheat, BattlEye | - | Officially unsupported according to Epic Games | +| Tom Clancy's Rainbow Six Siege | BattlEye, MouseTrap | - | - | +| The Crew 2 | Easy Anti-Cheat | - | - | +| Valorant | Vanguard | - | - | +| League of Legends | Vanguard | - | - | +| Battlefield V | EA Anti-Cheat | - | - | +| Battlefield 2042 | EA Anti-Cheat | - | - | +| Need for Speed Unbound | EA Anti-Cheat | - | - | +| Command & Conquer Red Alert 3 & Uprising | - | SAGE 2 Path resolver is broken | [^3] | +| Command & Conquer 3: Tiberium Wars & Kane's Wrath | - | SAGE 2 Path resolver is broken | [^3] | +| Command & Conquer games up to Yuri's Revenge | - | DirectDraw compatibility issues | [^4] | + +### Games with Broken Online Play +This ranges from online play not working to being banned for trying to. We reccomend just playing these in their single player form. + +| Game | Anti-Cheat | Notes | +|-----------------------------------------------------|---------------------------|---------------------------------| +| Watch_Dogs | Easy Anti-Cheat | Single player works | +| Watch_Dogs 2 | Easy Anti-Cheat | Single player works | +| Watch_Dogs: Legion | Easy Anti-Cheat | Single player works | +| Honkai Impact 3rd | Tencent Anti-Cheat Expert | [^1] | +| Honkai: Star Rail | HoYoProtect | [^1] | +| Infinity Nikki | Tencent Anti-Cheat Expert | [^1] [^2] | +| Strinova | Tencent Anti-Cheat Expert | [^1] [^2] | +| Phantasy Star Online 2: New Genesis (Japan) | Easy Anti-Cheat | [^2] | + + +## Gaming Performance + +Ultramarine (and Linux distributions generally) use less resources than Windows, meaning you should be able to sqeeuze a couple more frames out of your hardware. + +Proton is frequently updated, so performance of non-native games is always being worked on. + +[^1]: There may be workarounds for these games, but they are not officially supported and you may risk getting banned for its use. The recommended way to play these games is to play on a mobile device or a Windows machine. +[^2]: These games have a known whitelist for the Steam Deck specifically, but does not guarantee that it will work on other Linux systems. +[^3]: You may run this game if you install the game in a path that does not contain periods (e.g. `~/Games/` instead of `~/.local/share/Steam/`). +[^4]: You may need to install DDrawCompat or CnC-DDraw to run this game properly, as it has compatibility issues even with Windows systems. You may also use CnCNet to apply the aforementioned fixes and enable multiplayer. diff --git a/src/content/docs/hi/usage/hop.mdx b/content/docs/usage/hop.mdx similarity index 56% rename from src/content/docs/hi/usage/hop.mdx rename to content/docs/usage/hop.mdx index 1951d302..b4929628 100644 --- a/src/content/docs/hi/usage/hop.mdx +++ b/content/docs/usage/hop.mdx @@ -1,20 +1,17 @@ --- -title: Switching Desktop Editions -description: "Add/remove the DE/edition with Ultramarine Hop." +title: Switching Editions (Advanced) +description: "Switch Editions with Hop" --- + +This is for advanced users. Your system may get a mix of components and things get messy really quickly. Be ready to troubleshoot. + -import Alert from "../../../../components/Docs/Alert.astro"; - -Hop is a graphical application -that enables users of Ultramarine to switch between editions or install -multiple desktop environments on their system. - -The source code is available on [GitHub]. +Hopdnf is an app that allows you to switch between Editions or install +multiple desktop environments on your system. ## Installation -The package name is `ultramarine-hop` but it is also aliased as `hop`. This -package is available directly in Ultramarine repositories. +The package name is `ultramarine-hop`dnf but it is also aliased as `hop`dnf. ```sh sudo dnf install hop @@ -22,7 +19,7 @@ sudo dnf install hop ## Using Hop -1. Open the launcher (usually by pressing `winkey`/`Meta`/`Super`). +1. Open the launcher (usually by pressing `Windows`, `command`, or the search key). 2. Type `hop`. `Ultramarine Hop` should pop up as the first option. 3. Select the option. A dialog asking for privileges will pop out. Type in your password to continue. @@ -37,9 +34,3 @@ sudo dnf install hop greyed out. - if you would like to switch to another edition, select the last option. 5. Select the corresponding desktop environment / edition. - -[GitHub]: https://github.com/Ultramarine-Linux/hop - -#### [Next Up: umcli →](/en/usage/umcli) - -#### [← Back To: Keyboard Configuration](/en/usage/keyboard-cfg) diff --git a/content/docs/usage/index.mdx b/content/docs/usage/index.mdx new file mode 100644 index 00000000..bc27a21e --- /dev/null +++ b/content/docs/usage/index.mdx @@ -0,0 +1,9 @@ +--- +title: Using Ultramarine +description: "Tips and tricks for getting the most out of your Ultramarine system" +--- +This section includes tips and tricks that are a bit too specific to get called out somewhere else. + +Things like [eduroam](/docs/usage/eduroam) and [advanced keyboard configuration](docs/usage/keyboard-cfg) live here. + +If you have a tip or trick to share with the world, consider [adding it](/docs/community/contributing/contributorguide)! diff --git a/src/content/docs/hi/usage/keyboard-cfg.mdx b/content/docs/usage/keyboard-cfg.mdx similarity index 51% rename from src/content/docs/hi/usage/keyboard-cfg.mdx rename to content/docs/usage/keyboard-cfg.mdx index 9b96d658..c28eac6c 100644 --- a/src/content/docs/hi/usage/keyboard-cfg.mdx +++ b/content/docs/usage/keyboard-cfg.mdx @@ -1,27 +1,27 @@ --- title: Keyboard Configuration -description: How you may configure your keyboard. +description: Remapping keys and building macros with keyd --- -import Alert from "../../../../components/Docs/Alert.astro"; ## Layouts The default keyboard layout is English (US). You may change the keyboard layout in your desktop's settings. -If you would like to type in another language, we have a dedicated [localization guide](/en/usage/l10n#inputting-in-another-language). +If you would like to type in another language, we have a dedicated [localization guide](/docs/usage/l10n#inputting-in-another-language). -## Key remapping +## Remapping Keys -`keyd` is a key remapping daemon that remaps keys at the kernel level, allowing it to be desktop agnostic and even work in TTY. +keyddnf is a key remapping tool that works at the kernel level, this means your remapped keys will work regardless of the desktop you use (or lack thereof). -### Steps for simple configuration +### Creating a Config -1. Make sure you are a system administrator (i.e. you can run sudo) -2. Create a file `/etc/keyd/default.conf` and paste the example configuration below into it. Save the file. -3. Install `keyd` (from [Terra]): `sudo dnf install keyd` +1. Make sure you are an administrator +2. Create `/etc/keyd/default.conf` and paste the example configuration below into it. Save the file. +3. Install keyddnf (from [Terra]): `sudo dnf install keyd` +4. Start the keyd service `systemctl enable --now keyd` -Every time you have changed your configurations, you will need to reload them using `sudo keyd reload` +Every time you change your configuration, you will need to reload keyd using `sudo keyd reload` ### Example configuration @@ -43,9 +43,9 @@ Lines starting with a `#` are comments, they will be ignored by `keyd`. For more information, read the [Quickstart](https://github.com/rvaiya/keyd?tab=readme-ov-file#quickstart) section from upstream. -### Advanced configurations +### Advanced Configuration -`keyd` supports more advanced configurations, including +keyd supports more advanced configuration, including: - Mapping macros - Key timeouts @@ -54,7 +54,3 @@ For more information, read the [Quickstart](https://github.com/rvaiya/keyd?tab=r [Learn More at keyd's Documentation ->](https://github.com/rvaiya/keyd/blob/master/docs/keyd.scdoc) [Terra]: https://terra.fyralabs.com - -#### [Next Up: Switching Desktop Editions →](/en/usage/hop) - -#### [← Back To: Localization](/en/usage/l10n) diff --git a/src/content/docs/en/usage/l10n.mdx b/content/docs/usage/l10n.mdx similarity index 87% rename from src/content/docs/en/usage/l10n.mdx rename to content/docs/usage/l10n.mdx index 2fa4783c..25cc9d51 100644 --- a/src/content/docs/en/usage/l10n.mdx +++ b/content/docs/usage/l10n.mdx @@ -1,9 +1,8 @@ --- -title: Localization, Internationalization and Multilingualization -description: How to make your system support other languages and even improve the support +title: Internationalization +description: How to make your system support other languages and improve support --- -import Alert from "../../../../components/Docs/Alert.astro"; Localization (l10n) and internationalization (i18n) support in Ultramarine Linux is crucial as half of the project team speaks something other than English natively. This page contains details on @@ -11,15 +10,15 @@ how i18n works and how it can be set up on Ultramarine. ## Fonts -Ultramarine should come with fonts for most if not all languages by default. Fonts for CJKV, Thai, -Indic languages are installed out of the box. If you find any glyphs supported by Unicode not +Ultramarine should come with fonts for most, if not all, languages by default. Fonts for Chinese, Japanese, Korean, and Vietnamese (CJKV), Thai, +Indic, and Latin languages are installed out of the box. If you find any glyphs supported by Unicode not rendered correctly, [file a bug report]. ### Font Priorities Chinese users might experience issues where Japanese fonts are preferred over Chinese ones simply because the locale code `ja_JP` is before `zh_*` when sorted alphabetically. To solve this issue, -edit `~/.config/fontconfig/fonts.conf` (or `/etc/fonts/local.conf` for global changes): +edit `~/.config/fontconfig/fonts.conf` (or `/etc/fonts/local.conf` for system-wide changes): ```xml @@ -44,10 +43,9 @@ edit `~/.config/fontconfig/fonts.conf` (or `/etc/fonts/local.conf` for global ch ``` -## Inputting in Another Language +## Typing in Another Language -You may change your key maps / keyboard layout in the settings applet. Refer to documentations for -your chosen Desktop Environment (DE) or Window Manager (WM) for more details. +You may change your keymaps/keyboard layout in the settings app. Check your Edition's documentation or help app for more. ### IMFs, IMEs and IMs @@ -64,12 +62,12 @@ languages. are not actual software; there must be an IME that intercepts the inputted keys and map them into output texts, where the mapping is specified by the IM. -As an example, a Japanese KDE user would install `fcitx5-mozc` in order to type Japanese. In this +As an example, a Japanese KDE user would install `fcitx5-mozc`dnf in order to type Japanese. In this case, Fcitx5 is the IMF, Mozc is the IME, and the IM can be Romaji or Kana input depending on the user's preference. -A Cantonese GNOME user from Hong Kong learning Korean would install `ibus-rime` with Jyutping and -Cangjie support alongside `ibus-hangul` for Korean support. Here, IBus is the IMF, Rime IME provides +A Cantonese GNOME user from Hong Kong learning Korean would install `ibus-rime`dnf with Jyutping and +Cangjie support alongside `ibus-hangul`dnf for Korean support. Here, IBus is the IMF, Rime IME provides support for the Jyutping IM and Cangjie IM, while libhangul IME provides support for the Hangul IM. In most typical cases, only 1 IMF is installed in a system. However, multilingual users may choose @@ -77,43 +75,38 @@ to install multiple IMEs so that they can type in multiple languages. ### Fcitx5 vs IBus -**IBus** (Intelligent Input Bus) is an IMF usually used in GTK-based desktop environments. If you -are using GNOME/Budgie, you most likely will choose IBus over Fcitx5 due to GNOME Desktop's tight +**IBus**dnf (Intelligent Input Bus) is an IMF usually used in GTK-based desktop environments. If you +are using GNOME, Budgie, or Xfce Edition, you most likely will choose IBus over Fcitx5 due to GNOME Desktop's tight integration with IBus. Even though IBus's initial release was back in August 2008, releases are still rather frequent and the project is still being maintained. -**Fcitx5** is a newer IMF implementation and provides support for many different languages with a +**Fcitx5**dnf is a newer IMF implementation and provides support for many different languages with a slim core extensible with different addons and IMEs. It is the successor to Fcitx. If you are using -DEs that are not GTK-based (such as KDE Plasma which uses Qt) or any WMs, you should choose Fcitx5. +DEs that are not GTK-based (such as Plasma which uses Qt) or any WMs, you should choose Fcitx5. There are no strict rules on which one to choose, you can install Fcitx5 even though you use GNOME, -and you can also install IBus on a KDE system. Things come down to personal preferences. +and you can also install IBus on a Plasma system. It comes down to personal preferences. -IBus will not work inside Window Managers. +IBus will not work inside standalone Window Managers. -### Setting up Fcitx5 on KDE +### Setting up Fcitx5 on Plasma Edition -1. Install your chosen IMEs (see the table below) alongside `kcm-fcitx5` and `fcitx5-configtool`. +1. Install your chosen IMEs (see the table below) alongside `kcm-fcitx5`dnf and `fcitx5-configtool`dnf. - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. + - Install `fcitx5-qt`dnf and `fcitx5-gtk`dnf for Qt/GTK support. 2. Enable Fcitx 5: - - On Wayland (default), go to _Settings > Input Devices > Virtual Keyboard_, and select _Fcitx 5_. - - If Fcitx 5 does not work even after a reboot, try running `im-chooser` and select _Fcitx 5_. - - On X11, install `fcitx5-autostart`. - - If Fcitx 5 does not work even after a reboot, try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=fcitx - QT_IM_MODULE=fcitx - ``` +Go to _Settings > Input Devices > Virtual Keyboard_, and select _Fcitx 5_. + +If Fcitx 5 does not work even after a reboot, try running `im-chooser` and select _Fcitx 5_. 3. Head to _Settings > Regional Settings > Input Method_, then start configuring Fcitx 5. ### Setting up Fcitx5 on Other DEs/WMs -1. Install your chosen IMEs (see the table below) alongside `fcitx5-configtool`, `fcitx5-autostart`. - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. +1. Install your chosen IMEs (see the table below) alongside `fcitx5-configtool`dnf, `fcitx5-autostart`dnf. + - Install `fcitx5-qt`dnf and `fcitx5-gtk`dnf for Qt/GTK support. 2. Fcitx 5 should be enabled via the autostart package. If not, - try running `im-chooser` and select _Fcitx 5_. @@ -211,16 +204,16 @@ such that it better represents Ultramarine's support on different IMs: 1. Anthy (the IM, not IME) is unmaintained, Mozc is usually preferred. 2. https://github.com/ueno/libskk 3. https://github.com/ueno/libkkc -4. See [#Compose Key](#compose-key). There is also LaTeX support in `fcitx5-m17n`. -5. See below for more IMs supported by `fcitx5-table-extra`. +4. See [#Compose Key](#compose-key). There is also LaTeX support in `fcitx5-m17n`dnf. +5. See below for more IMs supported by `fcitx5-table-extra`dnf. -#### List of IMs Supported by `fcitx5-table-extra` +#### List of IMs Supported by `fcitx5-table-extra`dnf - + Due to a bug in Fedora packaging, you need to also install `fcitx5-chinese-addons` alongside `fcitx5-table-extra` in order for things to take effect. - + - boshiamy - cangjie-large @@ -246,7 +239,7 @@ such that it better represents Ultramarine's support on different IMs: - zhengma-pinyin - zhengma -#### List of Packages for `ibus-table*` +#### List of Packages for `ibus-table*`dnf - `ibus-table-code`: Ibus-Tables for Latex, CNS11643 & Emoticons - `ibus-table-cyrillic`: Ibus-Tables for Cyrillic @@ -315,7 +308,3 @@ our communities and reach out. [file a bug report]: https://github.com/Ultramarine-Linux/ultramarine/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=%5BBUG%5D+Issue+Report [complete list of IMs]: https://wiki.archlinux.org/title/Input_method#List_of_available_input_method_editors - -#### [Next Up: Keyboard Configuration →](/en/usage/keyboard-cfg) - -#### [← Back To: Gaming](/en/usage/gaming) diff --git a/content/docs/usage/meta.json b/content/docs/usage/meta.json new file mode 100644 index 00000000..9b35a092 --- /dev/null +++ b/content/docs/usage/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Using Ultramarine", + "description": "Tips and tricks for getting the most out of your Ultramarine system", + "icon": "Sailboat", + "root": true +} diff --git a/src/content/docs/hi/usage/umcli.mdx b/content/docs/usage/umcli.mdx similarity index 89% rename from src/content/docs/hi/usage/umcli.mdx rename to content/docs/usage/umcli.mdx index 60a74306..326fab64 100644 --- a/src/content/docs/hi/usage/umcli.mdx +++ b/content/docs/usage/umcli.mdx @@ -3,19 +3,18 @@ title: umcli description: "How to use umcli" --- -import Alert from "../../../../components/Docs/Alert.astro"; -umcli is a utility included in Ultramarine. It has many planned features, and this is a list of current and planned ones. +umclidnf is a utility included in Ultramarine. It has many planned features, and this is a list of current and planned ones. ## Current Features Syntax: `um` [global options] command [command options] -#### Global Options +### Global Options `-h`, `--help` -- Display the `um` help screen if not attached to commands. Displays the Command's help page if run before a command. Just running `um` will also show the base `um` help screen. -#### Commands/Features +### Commands/Features `status` -- Displays information about the system. This includes system version info, hardware overview, disk information, system status, network information, and more. @@ -46,7 +45,3 @@ List of umcli Tweaks: - `umcli upgrade`, potentially a wrapper around the `topgrade` package. Would update everything on the system (system packages, flatpaks, firmware, etc.). - `um get PACKAGE`. A way to easily install packages that are not in a common package repository, but do distribute their own RPMs, or their own repositories. Based on [deb-get](https://github.com/wimpysworld/deb-get) - And more! - -#### [Next Up: eduroam →](/en/usage/eduroam) - -#### [← Back To: Switching Ultramarine Desktop Editions](/en/usage/hop) diff --git a/src/content/docs/hi/chromebook/chromebook.mdx b/docs-staging/chromebook/chromebook.mdx similarity index 83% rename from src/content/docs/hi/chromebook/chromebook.mdx rename to docs-staging/chromebook/chromebook.mdx index a9c544e9..e83da6b5 100644 --- a/src/content/docs/hi/chromebook/chromebook.mdx +++ b/docs-staging/chromebook/chromebook.mdx @@ -3,7 +3,6 @@ title: Getting Started with Chromebook Edition description: "Introduction to Chromebook Edition" --- -import Alert from "../../../../components/Docs/Alert.astro"; ### Welcome to Ultramarine Chromebook Edition! @@ -13,4 +12,3 @@ These pages will get you everything you need to know about what Ultramarine Chro If you would like more info about Ultramarine Chromebook and it's release, take a peak at the [Release post](link) -#### [Next Up: Getting Chromebook Edition →](getting) diff --git a/src/content/docs/en/chromebook/getting.mdx b/docs-staging/chromebook/getting.mdx similarity index 94% rename from src/content/docs/en/chromebook/getting.mdx rename to docs-staging/chromebook/getting.mdx index 3795d123..3289feeb 100644 --- a/src/content/docs/en/chromebook/getting.mdx +++ b/docs-staging/chromebook/getting.mdx @@ -3,7 +3,6 @@ title: Getting Chromebook Edition description: "Getting started with installing Ultramarine Chromebook Edition" --- -import Alert from "../../../../components/Docs/Alert.astro"; ## Minimum System Requirements @@ -20,10 +19,10 @@ Ultramarine Chromebook comes in 4 variants: Ultramarine Linux is distributed with image files available for download from [our website](https://ultramarine-linux.org/download/chromebook). - + Fyra Labs cannot guarantee the safety or quality of images downloaded from sites other than our website or FOSSTorrents - + ## Verifying the Safety of an Ultramarine ISO (Recommended) @@ -70,9 +69,7 @@ CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 Simply select the img file, a device to use for the installer, and click flash. -#### [Next Up: Installing to a Chromebook →](preparing) -#### [← Back To: Getting Started](chromebook) ## Footnotes diff --git a/docs-staging/chromebook/postinstall.mdx b/docs-staging/chromebook/postinstall.mdx new file mode 100644 index 00000000..2820df99 --- /dev/null +++ b/docs-staging/chromebook/postinstall.mdx @@ -0,0 +1,7 @@ +--- +title: Post-Installation +description: "Things to do after installing Ultramarine Chromebook Edition" +--- + + + diff --git a/src/content/docs/en/chromebook/preparing.mdx b/docs-staging/chromebook/preparing.mdx similarity index 94% rename from src/content/docs/en/chromebook/preparing.mdx rename to docs-staging/chromebook/preparing.mdx index 56f27d94..b11af988 100644 --- a/src/content/docs/en/chromebook/preparing.mdx +++ b/docs-staging/chromebook/preparing.mdx @@ -3,7 +3,6 @@ title: Installing to a Chromebook description: "Steps to be done on the Chromebook" --- -import Alert from "../../../../components/Docs/Alert.astro"; Before we insert the installer, we will need to do a few things with your ChromeOS device. @@ -15,7 +14,7 @@ If you choose to back up with Google Drive, you will be prompted to add your Goo ### 2. Enable developer mode -Enabling developer mode will wipe your data +Enabling developer mode will wipe your data #### Developer mode on Chromebooks (ChromeOS laptops only): @@ -28,12 +27,12 @@ If you choose to back up with Google Drive, you will be prompted to add your Goo #### Developer Mode on Chromeboxes and Chromebases (ChromeOS Desktops and All-in-ones): - + Not all monitors will work with the Chromebox OS Verification screens. This typically happens if the monitor has a resolution greater then 1080p. If your Chromebox appeared to boot (lights on) but does not output anything, you can attempt to continue without a display. - + 1. Shut down the device, then insert a paper clip (SIM ejector tool works great too!) into the RECOVERY BUTTON (small hole usually near the I/O, see your hardware documentation for exact location) and reboot. You will then be greeted with the "OS Verification is turned off" screen. 2. Plug in a keyboard and press Ctrl+D. You may be prompted with 'To turn OS verification off, press RECOVERY BUTTON,' press RECOVERY BUTTON. @@ -65,6 +64,4 @@ enable_dev_usb_boot ### 4. Boot from USB/SD -#### [Next Up: Post-Install →](postinstall) -#### [← Back To: Getting Chromebook Edition](getting) diff --git a/src/content/docs/en/chromebook/terminology.mdx b/docs-staging/chromebook/terminology.mdx similarity index 98% rename from src/content/docs/en/chromebook/terminology.mdx rename to docs-staging/chromebook/terminology.mdx index 4a6fd3dd..35e81154 100644 --- a/src/content/docs/en/chromebook/terminology.mdx +++ b/docs-staging/chromebook/terminology.mdx @@ -101,8 +101,6 @@ Kinda official term to refer to higher spec Chromebooks. The Pixelbooks, Framewo No real definition besides an RGB keyboard, specs and price are all over the place -#### [← Back To: ARM Chromebooks (Beta)](armbeta) - ### Footnotes [1: Firmware Overview and Porting Guide > Firmware / EC Write Protection](https://www.chromium.org/chromium-os/firmware-porting-guide/firmware-ec-write-protection/) diff --git a/lib/layout.shared.tsx b/lib/layout.shared.tsx new file mode 100644 index 00000000..c3e809b5 --- /dev/null +++ b/lib/layout.shared.tsx @@ -0,0 +1,24 @@ +import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; + +export function baseOptions(): BaseLayoutProps { + return { + nav: { + title: ( +
+ + + + + + + + + + + + Ultramarine Wiki +
+ ), + }, + }; +} diff --git a/lib/source.ts b/lib/source.ts new file mode 100644 index 00000000..43252ab2 --- /dev/null +++ b/lib/source.ts @@ -0,0 +1,36 @@ +import { docs } from "fumadocs-mdx:collections/server"; +import { type InferPageType, loader } from "fumadocs-core/source"; +import { icons } from "lucide-react"; +import { createElement } from "react"; + +// See https://fumadocs.dev/docs/headless/source-api for more info +export const source = loader({ + baseUrl: "/docs", + source: docs.toFumadocsSource(), + plugins: [], + icon(icon) { + if (!icon) { + // You may set a default icon + return; + } + + if (icon in icons) return createElement(icons[icon as keyof typeof icons]); + }, +}); + +export function getPageImage(page: InferPageType) { + const segments = [...page.slugs, "image.png"]; + + return { + segments, + url: `/og/docs/${segments.join("/")}`, + }; +} + +export async function getLLMText(page: InferPageType) { + const processed = await page.data.getText("processed"); + + return `# ${page.data.title} + +${processed}`; +} diff --git a/mdx-components.tsx b/mdx-components.tsx new file mode 100644 index 00000000..20beb4cd --- /dev/null +++ b/mdx-components.tsx @@ -0,0 +1,9 @@ +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import type { MDXComponents } from 'mdx/types'; + +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...defaultMdxComponents, + ...components, + }; +} diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 00000000..4f2216e9 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,15 @@ +import { createMDX } from "fumadocs-mdx/next"; + +const withMDX = createMDX(); + +/** @type {import('next').NextConfig} */ +const config = { + output: "export", + reactStrictMode: true, + images: { + // TODO: make this work properly + unoptimized: true, + }, +}; + +export default withMDX(config); diff --git a/package.json b/package.json index 06544e9a..b7573978 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,33 @@ { - "name": "@example/docs", - "type": "module", - "version": "0.0.1", + "name": "wiki", + "version": "0.0.0", "private": true, "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" + "build": "next build", + "dev": "next dev", + "start": "serve out", + "types:check": "fumadocs-mdx && next typegen && tsc --noEmit", + "postinstall": "fumadocs-mdx" }, "dependencies": { - "@algolia/client-search": "^5.49.0", - "@astrojs/mdx": "^2.0.5", - "@astrojs/preact": "^4.1.3", - "@astrojs/react": "^4.4.2", - "@docsearch/css": "^4.5.3", - "@docsearch/react": "^3.5.2", - "@iconify-json/bi": "^1.1.23", - "@iconify-json/lucide": "^1.2.92", - "@types/node": "^25.0.10", - "@types/react": "^18.2.48", - "@types/react-dom": "^18.2.18", - "astro": "^4.2.1", - "astro-icon": "^1.0.2", - "preact": "^10.19.3", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@orama/orama": "^3.1.18", + "fumadocs-core": "16.5.4", + "fumadocs-mdx": "14.2.7", + "fumadocs-ui": "16.5.4", + "lucide-react": "^0.563.0", + "next": "16.1.6", + "react": "^19.2.4", + "react-dom": "^19.2.4" }, "devDependencies": { - "html-escaper": "^3.0.3", - "prettier": "^3.2.4", - "prettier-plugin-astro": "^0.14.1" + "@tailwindcss/postcss": "^4.1.18", + "@types/mdx": "^2.0.13", + "@types/node": "^25.2.3", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "postcss": "^8.5.6", + "serve": "^14.2.5", + "tailwindcss": "^4.1.18", + "typescript": "^5.9.3" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..9b12f4aa --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4604 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@orama/orama': + specifier: ^3.1.18 + version: 3.1.18 + fumadocs-core: + specifier: 16.5.4 + version: 16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + fumadocs-mdx: + specifier: 14.2.7 + version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + fumadocs-ui: + specifier: 16.5.4 + version: 16.5.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18) + lucide-react: + specifier: ^0.563.0 + version: 0.563.0(react@19.2.4) + next: + specifier: 16.1.6 + version: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: + specifier: ^19.2.4 + version: 19.2.4 + react-dom: + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.1.18 + version: 4.1.18 + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 + '@types/node': + specifier: ^25.2.3 + version: 25.2.3 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + postcss: + specifier: ^8.5.6 + version: 8.5.6 + serve: + specifier: ^14.2.5 + version: 14.2.5 + tailwindcss: + specifier: ^4.1.18 + version: 4.1.18 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.7.4': + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + + '@floating-ui/dom@1.7.5': + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + + '@floating-ui/react-dom@2.1.7': + resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@formatjs/fast-memoize@3.1.0': + resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==} + + '@formatjs/intl-localematcher@0.8.1': + resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==} + + '@fumadocs/tailwind@0.0.2': + resolution: {integrity: sha512-4JrTJLRDKKdFF3gy07rAsakqGr17/0cJE042B1icCmMRrPA4a38cjR1qd4EqUiDJ+fzM0wgVN9QYiqds3HB2rg==} + peerDependencies: + tailwindcss: ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@next/env@16.1.6': + resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} + + '@next/swc-darwin-arm64@16.1.6': + resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.1.6': + resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.1.6': + resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@16.1.6': + resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@16.1.6': + resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@16.1.6': + resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@16.1.6': + resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.1.6': + resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@orama/orama@3.1.18': + resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} + engines: {node: '>= 20.0.0'} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-navigation-menu@1.2.14': + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@shikijs/core@3.22.0': + resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==} + + '@shikijs/engine-javascript@3.22.0': + resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==} + + '@shikijs/engine-oniguruma@3.22.0': + resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==} + + '@shikijs/langs@3.22.0': + resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==} + + '@shikijs/rehype@3.22.0': + resolution: {integrity: sha512-69b2VPc6XBy/VmAJlpBU5By+bJSBdE2nvgRCZXav7zujbrjXuT0F60DIrjKuutjPqNufuizE+E8tIZr2Yn8Z+g==} + + '@shikijs/themes@3.22.0': + resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==} + + '@shikijs/transformers@3.22.0': + resolution: {integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==} + + '@shikijs/types@3.22.0': + resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.18': + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@25.2.3': + resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + hasBin: true + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-lite@1.0.30001769: + resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.19.0: + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + engines: {node: '>=10.13.0'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + framer-motion@12.34.0: + resolution: {integrity: sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fumadocs-core@16.5.4: + resolution: {integrity: sha512-CUqyl1YMTzj6JbzduVqAza5rp3zRO2idwu7HoYTkB3Gpibyph1uwOMVGwFt3ra8hENpQCXQAfPMUGcjyba9MCg==} + peerDependencies: + '@mdx-js/mdx': '*' + '@mixedbread/sdk': ^0.46.0 + '@orama/core': 1.x.x + '@oramacloud/client': 2.x.x + '@tanstack/react-router': 1.x.x + '@types/estree-jsx': '*' + '@types/hast': '*' + '@types/mdast': '*' + '@types/react': '*' + algoliasearch: 5.x.x + lucide-react: '*' + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x + waku: ^0.26.0 || ^0.27.0 || ^1.0.0 + zod: 4.x.x + peerDependenciesMeta: + '@mdx-js/mdx': + optional: true + '@mixedbread/sdk': + optional: true + '@orama/core': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/estree-jsx': + optional: true + '@types/hast': + optional: true + '@types/mdast': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true + + fumadocs-mdx@14.2.7: + resolution: {integrity: sha512-Q2W79F7wpwhq4HoYPw9GnMpf5ZmpdU7YzZND7EWwwOiWddfyzPh6EH/z7MFhhdhsTqRh9/kwwsu9XslWDRRPsg==} + hasBin: true + peerDependencies: + '@fumadocs/mdx-remote': ^1.4.0 + '@types/mdast': '*' + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: ^15.0.0 || ^16.0.0 + mdast-util-directive: '*' + mdast-util-mdx-jsx: '*' + next: ^15.3.0 || ^16.0.0 + react: '*' + vite: 6.x.x || 7.x.x + peerDependenciesMeta: + '@fumadocs/mdx-remote': + optional: true + '@types/mdast': + optional: true + '@types/mdx': + optional: true + '@types/react': + optional: true + mdast-util-directive: + optional: true + mdast-util-mdx-jsx: + optional: true + next: + optional: true + react: + optional: true + vite: + optional: true + + fumadocs-ui@16.5.4: + resolution: {integrity: sha512-HGKBgjViQTd1Df/ZcDTELnZ5haAbkGR16Yy5oJkUKKqdNJ5fpEBCLn/f9nbxjBIfvtayPtUd7+1jNIjvBZu/1A==} + peerDependencies: + '@types/react': '*' + fumadocs-core: 16.5.4 + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + next: + optional: true + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lucide-react@0.563.0: + resolution: {integrity: sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + motion-dom@12.34.0: + resolution: {integrity: sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==} + + motion-utils@12.29.2: + resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} + + motion@12.34.0: + resolution: {integrity: sha512-01Sfa/zgsD/di8zA/uFW5Eb7/SPXoGyUfy+uMRMW5Spa8j0z/UbfQewAYvPMYFCXRlyD6e5aLHh76TxeeJD+RA==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.1.6: + resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + peerDependencies: + react: ^19.2.4 + + react-medium-image-zoom@5.4.0: + resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + + serve@14.2.5: + resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} + engines: {node: '>= 14'} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@3.22.0: + resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@floating-ui/core@1.7.4': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.5': + dependencies: + '@floating-ui/core': 1.7.4 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.5 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@floating-ui/utils@0.2.10': {} + + '@formatjs/fast-memoize@3.1.0': + dependencies: + tslib: 2.8.1 + + '@formatjs/intl-localematcher@0.8.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + tslib: 2.8.1 + + '@fumadocs/tailwind@0.0.2(tailwindcss@4.1.18)': + dependencies: + postcss-selector-parser: 7.1.1 + optionalDependencies: + tailwindcss: 4.1.18 + + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.8.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@next/env@16.1.6': {} + + '@next/swc-darwin-arm64@16.1.6': + optional: true + + '@next/swc-darwin-x64@16.1.6': + optional: true + + '@next/swc-linux-arm64-gnu@16.1.6': + optional: true + + '@next/swc-linux-arm64-musl@16.1.6': + optional: true + + '@next/swc-linux-x64-gnu@16.1.6': + optional: true + + '@next/swc-linux-x64-musl@16.1.6': + optional: true + + '@next/swc-win32-arm64-msvc@16.1.6': + optional: true + + '@next/swc-win32-x64-msvc@16.1.6': + optional: true + + '@orama/orama@3.1.18': {} + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/rect@1.1.1': {} + + '@shikijs/core@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + + '@shikijs/engine-oniguruma@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + + '@shikijs/rehype@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.22.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + '@shikijs/themes@3.22.0': + dependencies: + '@shikijs/types': 3.22.0 + + '@shikijs/transformers@3.22.0': + dependencies: + '@shikijs/core': 3.22.0 + '@shikijs/types': 3.22.0 + + '@shikijs/types@3.22.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@standard-schema/spec@1.1.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.18': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + + '@tailwindcss/oxide-android-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.18': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + optional: true + + '@tailwindcss/oxide@4.1.18': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/postcss@4.1.18': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + postcss: 8.5.6 + tailwindcss: 4.1.18 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + + '@types/estree@1.0.8': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + + '@types/ms@2.1.0': {} + + '@types/node@25.2.3': + dependencies: + undici-types: 7.16.0 + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.3.0': {} + + '@zeit/schemas@2.36.0': {} + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + arch@2.2.0: {} + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + astring@1.9.0: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.9.19: {} + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.0.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + bytes@3.0.0: {} + + bytes@3.1.2: {} + + camelcase@7.0.1: {} + + caniuse-lite@1.0.30001769: {} + + ccount@2.0.1: {} + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-boxes@3.0.0: {} + + client-only@0.0.1: {} + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + comma-separated-tokens@2.0.3: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + deep-extend@0.6.0: {} + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.19.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + framer-motion@12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + motion-dom: 12.34.0 + motion-utils: 12.29.2 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + fumadocs-core@16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6): + dependencies: + '@formatjs/intl-localematcher': 0.8.1 + '@orama/orama': 3.1.18 + '@shikijs/rehype': 3.22.0 + '@shikijs/transformers': 3.22.0 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + mdast-util-mdx: 3.0.0 + mdast-util-to-markdown: 2.1.2 + negotiator: 1.0.0 + npm-to-yarn: 3.0.1 + path-to-regexp: 8.3.0 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.22.0 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + optionalDependencies: + '@mdx-js/mdx': 3.1.1 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 19.2.14 + lucide-react: 0.563.0(react@19.2.4) + next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + zod: 4.3.6 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.1.0 + chokidar: 5.0.0 + esbuild: 0.27.3 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + js-yaml: 4.1.1 + mdast-util-to-markdown: 2.1.2 + picocolors: 1.1.1 + picomatch: 4.0.3 + remark-mdx: 3.1.1 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + zod: 4.3.6 + optionalDependencies: + '@types/mdast': 4.0.4 + '@types/mdx': 2.0.13 + '@types/react': 19.2.14 + mdast-util-mdx-jsx: 3.2.0 + next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + transitivePeerDependencies: + - supports-color + + fumadocs-ui@16.5.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18): + dependencies: + '@fumadocs/tailwind': 0.0.2(tailwindcss@4.1.18) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + class-variance-authority: 0.7.1 + fumadocs-core: 16.5.4(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + lucide-react: 0.563.0(react@19.2.4) + motion: 12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-medium-image-zoom: 5.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + scroll-into-view-if-needed: 3.1.0 + tailwind-merge: 3.4.0 + optionalDependencies: + '@types/react': 19.2.14 + next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react-dom' + - tailwindcss + + get-nonce@1.0.1: {} + + get-stream@6.0.1: {} + + github-slugger@2.0.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + html-void-elements@3.0.0: {} + + human-signals@2.1.0: {} + + image-size@2.0.2: {} + + ini@1.3.8: {} + + inline-style-parser@0.2.7: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-hexadecimal@2.0.1: {} + + is-plain-obj@4.1.0: {} + + is-port-reachable@4.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + jiti@2.6.1: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + longest-streak@3.1.0: {} + + lucide-react@0.563.0(react@19.2.4): + dependencies: + react: 19.2.4 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + merge-stream@2.0.0: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mime-db@1.33.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimist@1.2.8: {} + + motion-dom@12.34.0: + dependencies: + motion-utils: 12.29.2 + + motion-utils@12.29.2: {} + + motion@12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + framer-motion: 12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + tslib: 2.8.1 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + ms@2.0.0: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + + next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@next/env': 16.1.6 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001769 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(react@19.2.4) + optionalDependencies: + '@next/swc-darwin-arm64': 16.1.6 + '@next/swc-darwin-x64': 16.1.6 + '@next/swc-linux-arm64-gnu': 16.1.6 + '@next/swc-linux-arm64-musl': 16.1.6 + '@next/swc-linux-x64-gnu': 16.1.6 + '@next/swc-linux-x64-musl': 16.1.6 + '@next/swc-win32-arm64-msvc': 16.1.6 + '@next/swc-win32-x64-msvc': 16.1.6 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-to-yarn@3.0.1: {} + + on-headers@1.1.0: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.4: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + path-is-inside@1.0.2: {} + + path-key@3.1.1: {} + + path-to-regexp@3.3.0: {} + + path-to-regexp@8.3.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-information@7.1.0: {} + + punycode@2.3.1: {} + + range-parser@1.2.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@19.2.4(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + + react-medium-image-zoom@5.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + get-nonce: 1.0.1 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react@19.2.4: {} + + readdirp@5.0.0: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + require-from-string@2.0.2: {} + + safe-buffer@5.2.1: {} + + scheduler@0.27.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + semver@7.7.4: + optional: true + + serve-handler@6.1.6: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.5: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.12.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1 + is-port-reachable: 4.0.0 + serve-handler: 6.1.6 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@3.22.0: + dependencies: + '@shikijs/core': 3.22.0 + '@shikijs/engine-javascript': 3.22.0 + '@shikijs/engine-oniguruma': 3.22.0 + '@shikijs/langs': 3.22.0 + '@shikijs/themes': 3.22.0 + '@shikijs/types': 3.22.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + signal-exit@3.0.7: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + styled-jsx@5.1.6(react@19.2.4): + dependencies: + client-only: 0.0.1 + react: 19.2.4 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tailwind-merge@3.4.0: {} + + tailwindcss@4.1.18: {} + + tapable@2.3.0: {} + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@2.8.1: {} + + type-fest@2.19.0: {} + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + util-deprecate@1.0.2: {} + + vary@1.1.2: {} + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + zod@4.3.6: {} + + zwitch@2.0.4: {} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 00000000..a34a3d56 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index 03cb49b1..00000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -wiki.ultramarine-linux.org \ No newline at end of file diff --git a/public/assets/moonshot/moonshot.png b/public/assets/moonshot/moonshot.png new file mode 100644 index 00000000..251dc46d Binary files /dev/null and b/public/assets/moonshot/moonshot.png differ diff --git a/public/assets/steam/compat.png b/public/assets/steam/compat.png new file mode 100644 index 00000000..e13d3e44 Binary files /dev/null and b/public/assets/steam/compat.png differ diff --git a/public/assets/steam/menu.png b/public/assets/steam/menu.png new file mode 100644 index 00000000..51a30a5c Binary files /dev/null and b/public/assets/steam/menu.png differ diff --git a/public/assets/steam/selector.png b/public/assets/steam/selector.png new file mode 100644 index 00000000..c6fd48a1 Binary files /dev/null and b/public/assets/steam/selector.png differ diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 63c63d3a..00000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/make-scrollable-code-focusable.js b/public/make-scrollable-code-focusable.js deleted file mode 100644 index 6fbf1eeb..00000000 --- a/public/make-scrollable-code-focusable.js +++ /dev/null @@ -1,3 +0,0 @@ -Array.from(document.getElementsByTagName("pre")).forEach((element) => { - element.setAttribute("tabindex", "0"); -}); diff --git a/public/og-image.png b/public/og-image.png deleted file mode 100644 index d9db4eb5..00000000 Binary files a/public/og-image.png and /dev/null differ diff --git a/source.config.ts b/source.config.ts new file mode 100644 index 00000000..63cedfa8 --- /dev/null +++ b/source.config.ts @@ -0,0 +1,22 @@ +import { defineConfig, defineDocs, frontmatterSchema, metaSchema } from 'fumadocs-mdx/config'; + +// You can customise Zod schemas for frontmatter and `meta.json` here +// see https://fumadocs.dev/docs/mdx/collections +export const docs = defineDocs({ + dir: 'content/docs', + docs: { + schema: frontmatterSchema, + postprocess: { + includeProcessedMarkdown: true, + }, + }, + meta: { + schema: metaSchema, + }, +}); + +export default defineConfig({ + mdxOptions: { + // MDX options + }, +}); diff --git a/src/components/Docs/Alert.astro b/src/components/Docs/Alert.astro deleted file mode 100644 index 1a39705a..00000000 --- a/src/components/Docs/Alert.astro +++ /dev/null @@ -1,74 +0,0 @@ ---- -const { type } = Astro.props; - -const getIconName = (type: string) => { - switch (type) { - case "info": - return "lucide:info"; - - case "warning": - return "lucide:alert-circle"; - - case "danger": - return "lucide:x-circle"; - - default: - return "lucide:info"; - } -}; - -import { Icon } from "astro-icon/components"; ---- - -
-
- - -
-
- - diff --git a/src/components/Footer/Footer.astro b/src/components/Footer/Footer.astro deleted file mode 100644 index b528c3d2..00000000 --- a/src/components/Footer/Footer.astro +++ /dev/null @@ -1,19 +0,0 @@ ---- -import ThemeToggleButton from "../RightSidebar/ThemeToggleButton"; ---- - -
-

Copyright © 2021 - {new Date().getFullYear()} Fyra Labs

- -
- - diff --git a/src/components/HeadCommon.astro b/src/components/HeadCommon.astro deleted file mode 100644 index 221ec978..00000000 --- a/src/components/HeadCommon.astro +++ /dev/null @@ -1,38 +0,0 @@ ---- -import "../styles/theme.css"; -import "../styles/index.css"; ---- - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/HeadSEO.astro b/src/components/HeadSEO.astro deleted file mode 100644 index 67da0a39..00000000 --- a/src/components/HeadSEO.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- -import type { CollectionEntry } from "astro:content"; -import { SITE, OPEN_GRAPH } from "../consts"; - -type Props = { canonicalUrl: URL } & CollectionEntry<"docs">["data"]; - -const { ogLocale, image, title, description, canonicalUrl } = Astro.props; -const formattedContentTitle = `${title} 🚀 ${SITE.title}`; -const imageSrc = image?.src ?? OPEN_GRAPH.image.src; -const canonicalImageSrc = new URL(imageSrc, Astro.site); -const imageAlt = image?.alt ?? OPEN_GRAPH.image.alt; ---- - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/Header/Header.astro b/src/components/Header/Header.astro deleted file mode 100644 index bcd86c4f..00000000 --- a/src/components/Header/Header.astro +++ /dev/null @@ -1,195 +0,0 @@ ---- -import { getLanguageFromURL, KNOWN_LANGUAGE_CODES } from "../../languages"; -import { SITE } from "../../consts"; -import UltramarineLogo from "./UltramarineLogo.astro"; -import SkipToContent from "./SkipToContent.astro"; -import SidebarToggle from "./SidebarToggle"; -import LanguageSelect from "./LanguageSelect"; - -import { Icon } from "astro-icon/components"; - -type Props = { - currentPage: string; -}; - -const { currentPage } = Astro.props; -const lang = getLanguageFromURL(currentPage); ---- - -
- - -
- - - - diff --git a/src/components/Header/LanguageSelect.css b/src/components/Header/LanguageSelect.css deleted file mode 100644 index 4e878714..00000000 --- a/src/components/Header/LanguageSelect.css +++ /dev/null @@ -1,47 +0,0 @@ -.language-select { - flex-grow: 1; - width: 48px; - box-sizing: border-box; - margin: 0; - padding: 0.33em 0.5em; - overflow: visible; - font-weight: 500; - font-size: 1rem; - font-family: inherit; - line-height: inherit; - background-color: var(--theme-bg); - border-color: var(--theme-text-lighter); - color: var(--theme-text-light); - border-style: solid; - border-width: 1px; - border-radius: 0.25rem; - outline: 0; - cursor: pointer; - transition-timing-function: ease-out; - transition-duration: 0.2s; - transition-property: border-color, color; - -webkit-font-smoothing: antialiased; - padding-left: 30px; - padding-right: 1rem; -} -.language-select-wrapper .language-select:hover, -.language-select-wrapper .language-select:focus { - color: var(--theme-text); - border-color: var(--theme-text-light); -} -.language-select-wrapper { - color: var(--theme-text-light); - position: relative; -} -.language-select-wrapper > svg { - position: absolute; - top: 7px; - left: 10px; - pointer-events: none; -} - -@media (min-width: 50em) { - .language-select { - width: 100%; - } -} diff --git a/src/components/Header/LanguageSelect.tsx b/src/components/Header/LanguageSelect.tsx deleted file mode 100644 index 8440d483..00000000 --- a/src/components/Header/LanguageSelect.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import type { FunctionComponent } from "react"; -import "./LanguageSelect.css"; -import { KNOWN_LANGUAGES, langPathRegex } from "../../languages"; - -const LanguageSelect: FunctionComponent<{ lang: string }> = ({ lang }) => { - return ( -
- - -
- ); -}; - -export default LanguageSelect; diff --git a/src/components/Header/SidebarToggle.tsx b/src/components/Header/SidebarToggle.tsx deleted file mode 100644 index c14a0fbc..00000000 --- a/src/components/Header/SidebarToggle.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import type { FunctionalComponent } from "preact"; -import { useState, useEffect } from "preact/hooks"; - -const MenuToggle: FunctionalComponent = () => { - const [sidebarShown, setSidebarShown] = useState(false); - - useEffect(() => { - const body = document.querySelector("body")!; - if (sidebarShown) { - body.classList.add("mobile-sidebar-toggle"); - } else { - body.classList.remove("mobile-sidebar-toggle"); - } - }, [sidebarShown]); - - return ( - - ); -}; - -export default MenuToggle; diff --git a/src/components/Header/SkipToContent.astro b/src/components/Header/SkipToContent.astro deleted file mode 100644 index 829c70d2..00000000 --- a/src/components/Header/SkipToContent.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -type Props = {}; ---- - - - - diff --git a/src/components/Header/UltramarineLogo.astro b/src/components/Header/UltramarineLogo.astro deleted file mode 100644 index 9424dec2..00000000 --- a/src/components/Header/UltramarineLogo.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -type Props = { - size: number; -}; -const { size } = Astro.props; ---- - - - - diff --git a/src/components/LeftSidebar/LeftSidebar.astro b/src/components/LeftSidebar/LeftSidebar.astro deleted file mode 100644 index 59dff0cf..00000000 --- a/src/components/LeftSidebar/LeftSidebar.astro +++ /dev/null @@ -1,135 +0,0 @@ ---- -import { getLanguageFromURL } from "../../languages"; -import { SIDEBAR } from "../../consts"; - -type Props = { - currentPage: string; -}; - -const { currentPage } = Astro.props; -const currentPageMatch = currentPage.endsWith("/") - ? currentPage.slice(1, -1) - : currentPage.slice(1); -const langCode = getLanguageFromURL(currentPage); -const sidebar = SIDEBAR[langCode]; ---- - - - - - - - - diff --git a/src/components/PageContent/PageContent.astro b/src/components/PageContent/PageContent.astro deleted file mode 100644 index a9484bf8..00000000 --- a/src/components/PageContent/PageContent.astro +++ /dev/null @@ -1,51 +0,0 @@ ---- -import type { MarkdownHeading } from "astro"; -import MoreMenu from "../RightSidebar/MoreMenu.astro"; -import TableOfContents from "../RightSidebar/TableOfContents"; - -type Props = { - title: string; - headings: MarkdownHeading[]; - githubEditUrl: string; -}; - -const { title, headings, githubEditUrl } = Astro.props; ---- - -
-
-

{title}

- - -
- -
- - diff --git a/src/components/RightSidebar/MoreMenu.astro b/src/components/RightSidebar/MoreMenu.astro deleted file mode 100644 index 0309d8cd..00000000 --- a/src/components/RightSidebar/MoreMenu.astro +++ /dev/null @@ -1,76 +0,0 @@ ---- -import ThemeToggleButton from "./ThemeToggleButton"; -import { COMMUNITY_INVITE_URL } from "../../consts"; - -type Props = { - editHref: string; -}; - -const { editHref } = Astro.props; -const showMoreSection = Boolean(COMMUNITY_INVITE_URL); ---- - -{showMoreSection &&

More

} - - - diff --git a/src/components/RightSidebar/RightSidebar.astro b/src/components/RightSidebar/RightSidebar.astro deleted file mode 100644 index d318e991..00000000 --- a/src/components/RightSidebar/RightSidebar.astro +++ /dev/null @@ -1,34 +0,0 @@ ---- -import type { MarkdownHeading } from "astro"; -import TableOfContents from "./TableOfContents"; -import MoreMenu from "./MoreMenu.astro"; - -type Props = { - headings: MarkdownHeading[]; - githubEditUrl: string; -}; - -const { headings, githubEditUrl } = Astro.props; ---- - - - - diff --git a/src/components/RightSidebar/TableOfContents.tsx b/src/components/RightSidebar/TableOfContents.tsx deleted file mode 100644 index 0b886af7..00000000 --- a/src/components/RightSidebar/TableOfContents.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import type { MarkdownHeading } from "astro"; -import type { FunctionalComponent } from "preact"; -import { unescape } from "html-escaper"; -import { useState, useEffect, useRef } from "preact/hooks"; - -type ItemOffsets = { - id: string; - topOffset: number; -}; - -const TableOfContents: FunctionalComponent<{ headings: MarkdownHeading[] }> = ({ - headings = [], -}) => { - const toc = useRef(); - const onThisPageID = "on-this-page-heading"; - const itemOffsets = useRef([]); - const [currentID, setCurrentID] = useState("overview"); - useEffect(() => { - const getItemOffsets = () => { - const titles = document.querySelectorAll("article :is(h1, h2, h3, h4)"); - itemOffsets.current = Array.from(titles).map((title) => ({ - id: title.id, - topOffset: title.getBoundingClientRect().top + window.scrollY, - })); - }; - - getItemOffsets(); - window.addEventListener("resize", getItemOffsets); - - return () => { - window.removeEventListener("resize", getItemOffsets); - }; - }, []); - - useEffect(() => { - if (!toc.current) return; - - const setCurrent: IntersectionObserverCallback = (entries) => { - for (const entry of entries) { - if (entry.isIntersecting) { - const { id } = entry.target; - if (id === onThisPageID) continue; - setCurrentID(entry.target.id); - break; - } - } - }; - - const observerOptions: IntersectionObserverInit = { - // Negative top margin accounts for `scroll-margin`. - // Negative bottom margin means heading needs to be towards top of viewport to trigger intersection. - rootMargin: "-100px 0% -66%", - threshold: 1, - }; - - const headingsObserver = new IntersectionObserver( - setCurrent, - observerOptions, - ); - - // Observe all the headings in the main page content. - document - .querySelectorAll("article :is(h1,h2,h3)") - .forEach((h) => headingsObserver.observe(h)); - - // Stop observing when the component is unmounted. - return () => headingsObserver.disconnect(); - }, [toc.current]); - - const onLinkClick = (e) => { - setCurrentID(e.target.getAttribute("href").replace("#", "")); - }; - - return ( - <> -

- On this page -

- - - ); -}; - -export default TableOfContents; diff --git a/src/components/RightSidebar/ThemeToggleButton.css b/src/components/RightSidebar/ThemeToggleButton.css deleted file mode 100644 index 0f0ee5e1..00000000 --- a/src/components/RightSidebar/ThemeToggleButton.css +++ /dev/null @@ -1,40 +0,0 @@ -.theme-toggle { - display: inline-flex; - align-items: center; - gap: 0.25em; - padding: 0.33em 0.67em; - border-radius: 99em; - background-color: var(--theme-code-inline-bg); -} - -.theme-toggle > label:focus-within { - outline: 2px solid transparent; - box-shadow: - 0 0 0 0.08em var(--theme-accent), - 0 0 0 0.12em white; -} - -.theme-toggle > label { - color: var(--theme-code-inline-text); - position: relative; - display: flex; - align-items: center; - justify-content: center; - opacity: 0.5; - cursor: pointer; -} - -.theme-toggle .checked { - color: var(--theme-accent); - opacity: 1; -} - -input[name="theme-toggle"] { - position: absolute; - opacity: 0; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; -} diff --git a/src/components/RightSidebar/ThemeToggleButton.tsx b/src/components/RightSidebar/ThemeToggleButton.tsx deleted file mode 100644 index bdcf8243..00000000 --- a/src/components/RightSidebar/ThemeToggleButton.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import type { FunctionalComponent } from "preact"; -import { useState, useEffect } from "preact/hooks"; -import "./ThemeToggleButton.css"; - -const themes = ["light", "dark"]; - -const icons = [ - - - , - - - , -]; - -const ThemeToggle: FunctionalComponent = () => { - const [theme, setTheme] = useState(() => { - if (import.meta.env.SSR) { - return undefined; - } - if (typeof localStorage !== undefined && localStorage.getItem("theme")) { - return localStorage.getItem("theme"); - } - if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - return "dark"; - } - return "light"; - }); - - useEffect(() => { - const root = document.documentElement; - if (theme === "light") { - root.classList.remove("theme-dark"); - } else { - root.classList.add("theme-dark"); - } - }, [theme]); - - return ( -
- {themes.map((t, i) => { - const icon = icons[i]; - const checked = t === theme; - return ( - - ); - })} -
- ); -}; - -export default ThemeToggle; diff --git a/src/consts.ts b/src/consts.ts deleted file mode 100644 index 244de71b..00000000 --- a/src/consts.ts +++ /dev/null @@ -1,185 +0,0 @@ -export const SITE = { - title: "Ultramarine Wiki", - description: "The wiki for Ultramarine Linux.", - defaultLanguage: "en-us", -} as const; - -export const OPEN_GRAPH = { - image: { - src: "https://i.imgur.com/thZm6Qc.png", - alt: "Ultramarine Linux Wiki Text with an abstract background with two blue circles", - }, - twitter: "UltramarineProj", -}; - -export const KNOWN_LANGUAGES = { - English: "en", - Deutsch: "de", - 正體中文: "zh_hant", - hindi: "hi" -} as const; -export const KNOWN_LANGUAGE_CODES = Object.values(KNOWN_LANGUAGES); - -export const GITHUB_EDIT_URL = `https://github.com/Ultramarine-Linux/wiki-new/blob/main`; - -export const COMMUNITY_INVITE_URL = `https://fyralabs.com/discord`; - -export type Sidebar = Record< - (typeof KNOWN_LANGUAGE_CODES)[number], - Record ->; -export const SIDEBAR: Sidebar = { - en: { - Introduction: [{ text: "Welcome", link: "en/welcome" }], - Community: [ - { text: "Join the Community", link: "en/community/community" }, - { text: "Code of Conduct", link: "en/community/codeofconduct" }, - ], - Setup: [ - { text: "System Requirements", link: "en/setup/requirements" }, - { text: "Getting Ultramarine", link: "en/setup/getting" }, - { text: "BIOS Keys", link: "en/setup/bioskeys" }, - { text: "Installation", link: "en/setup/installation" }, - // { - // text: "Installation with Readymade", - //link: "en/installation/readymade", - //}, - { text: "Post-Installation", link: "en/setup/postinstall" }, - { - text: "Broadcom and Realtek Networking", - link: "en/setup/broadcom-realtek", - }, - { text: "NVIDIA", link: "en/setup/nvidia" }, - ], - Contributing: [ - { text: "Overview", link: "en/contributing/contributorguide" }, - { text: "Development", link: "en/contributing/hacking" }, - { text: "Mirroring", link: "en/contributing/mirroring" }, - ], - //Hardware: [ - //{ text: "Ultramarine Anywhere", link: "en/hardware/anywhere" }, - //{ text: "Microsoft Surface", link: "en/hardware/surface" }, - //{ - // text: "Broadcom and Realtek Networking", - // link: "en/hardware/broadcom-realtek", - //}, - //], - Anywhere: [ - { text: "Ultramarine Anywhere", link: "en/anywhere/anywhere" }, - { text: "Microsoft Surface", link: "en/anywhere/surface" }, - { text: "Raspberry Pi", link: "en/anywhere/rpi" }, - { text: "WSL", link: "en/anywhere/wsl" }, - ], - Usage: [ - { text: "Gaming on Ultramarine", link: "en/usage/gaming" }, - { text: "Localization", link: "en/usage/l10n" }, - { text: "Keyboard Configuration", link: "en/usage/keyboard-cfg" }, - { - text: "Switching Desktop Environments / Edition", - link: "en/usage/hop", - }, - { text: "umcli", link: "en/usage/umcli" }, - { text: "eduroam", link: "en/usage/eduroam" }, - ], - "Linux Concepts": [ - { text: "What is Linux?", link: "en/linux/overview" }, - { text: "The File System", link: "en/linux/filesystem" }, - { text: "Device Files", link: "en/linux/devicefiles" }, - { text: "Permissions", link: "en/linux/permissions" }, - { text: "Software and Package Management", link: "en/linux/software" }, - { text: "The Shell", link: "en/linux/shell" }, - { text: "SSH", link: "en/linux/ssh" }, - { text: "Security and Privacy", link: "en/linux/securityprivacy" }, - ], - "Release Notes": [ - { text: "Ultramarine 43 Upgrades", link: "en/release/43-upgrades" }, - { text: "Errata", link: "en/release/errata" }, - { text: "Differences with Fedora", link: "en/release/diff-fedora" }, - ], - // Chromebook: [ - // { text: "Getting Started", link: "en/chromebook/chromebook" }, - // { text: "Getting Chromebook Edition", link: "en/chromebook/getting" }, - // { text: "Installing to a Chromebook", link: "en/chromebook/preparing" }, - // { text: "Post-Install", link: "en/chromebook/postinstall" }, - // { text: "ARM Chromebooks (Beta)", link: "en/chromebook/armbeta" }, - // { text: "Terminology", link: "en/chromebook/terminology" }, - // ], - }, - de: { - Introduction: [{ text: "Welcome", link: "de/welcome" }], - Installation: [ - { text: "Getting started", link: "de/installation/getting-started" }, - { text: "Installation", link: "de/installation/installation" }, - { text: "Post-Installation", link: "de/installation/postinstall" }, - ], - "Linux Concepts": [ - { text: "Concepts overview", link: "de/linux/overview" }, - { text: "The File System", link: "de/linux/filesystem" }, - { text: "Permissions", link: "de/linux/permissions" }, - { text: "Software and package management", link: "de/linux/software" }, - { text: "The Shell", link: "de/linux/shell" }, - ], - }, - zh_hant: { - 介紹: [{ text: "歡迎", link: "zh_hant/welcome" }], - 社羣: [ - { text: "參與社羣", link: "zh_hant/community/community" }, - { text: "行為準則", link: "zh_hant/community/codeofconduct" }, - ], - 安裝: [ - { text: "取得 Ultramarine", link: "zh_hant/installation/getting" }, - { text: "安裝過程", link: "zh_hant/installation/installation" }, - // { - // text: "Installation with Readymade", - //link: "zh_hant/installation/readymade", - //}, - { - text: "Raspberry Pi 安裝過程", - link: "zh_hant/installation/rpi", - }, - { text: "安裝之後…", link: "zh_hant/installation/postinstall" }, - { - text: "進階安裝後步驟", - link: "zh_hant/installation/post-advanced", - }, - ], - 貢獻: [ - { text: "貢獻指南", link: "zh_hant/contributing/contributorguide" }, - { text: "原碼貢獻", link: "zh_hant/contributing/hacking" }, - ], - 硬件: [ - { text: "系統要求", link: "zh_hant/hardware/requirements" }, - { text: "Ultramarine Anywhere", link: "zh_hant/hardware/anywhere" }, - { text: "NVIDIA", link: "zh_hant/hardware/nvidia" }, - { text: "Microsoft Surface", link: "zh_hant/hardware/surface" }, - { - text: "Broadcom and Realtek Networking", - link: "zh_hant/hardware/broadcom-realtek", - }, - { text: "BIOS Keys", link: "zh_hant/hardware/bioskeys" }, - ], - "關於 Linux": [ - { text: "何謂 Linux?", link: "zh_hant/linux/overview" }, - { text: "檔案系統", link: "zh_hant/linux/filesystem" }, - { text: "裝置檔案", link: "zh_hant/linux/devicefiles" }, - { text: "權限", link: "zh_hant/linux/permissions" }, - { text: "軟件及安裝包管理", link: "zh_hant/linux/software" }, - { text: "The Shell", link: "zh_hant/linux/shell" }, - { text: "安全及私隱", link: "zh_hant/linux/securityprivacy" }, - ], - - 用途: [ - { text: "電子遊戲", link: "zh_hant/usage/gaming" }, - { text: "本地化", link: "zh_hant/usage/l10n" }, - ], - - 發佈版本通知: [{ text: "勘誤表", link: "zh_hant/release/errata" }], - - 開發: [ - { - text: "為 Ultramarine 開發", - link: "zh_hant/development/developing-for-ultramarine", - }, - ], - }, -}; diff --git a/src/content/config.ts b/src/content/config.ts deleted file mode 100644 index 8fa194ad..00000000 --- a/src/content/config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineCollection, z } from "astro:content"; -import { SITE } from "../consts"; - -const docs = defineCollection({ - schema: z.object({ - title: z.string().default(SITE.title), - description: z.string().default(SITE.description), - lang: z.literal("en-us").default(SITE.defaultLanguage), - dir: z.union([z.literal("ltr"), z.literal("rtl")]).default("ltr"), - image: z - .object({ - src: z.string(), - alt: z.string(), - }) - .optional(), - ogLocale: z.string().optional(), - }), -}); - -export const collections = { docs }; diff --git a/src/content/docs/de/development/anda.md b/src/content/docs/de/development/anda.md deleted file mode 100644 index f1544569..00000000 --- a/src/content/docs/de/development/anda.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Using Andaman -description: "Build and push packages with the Andaman toolchain." ---- - -To make package management easier for everyone, Ultramarine Linux developers and Fyra Labs have created the Andaman Toolchain, aka. [`anda`](https://github.com/FyraLabs/anda). - -The latest version as of writing is `0.1.6`. - -## Getting Started - -Install Andaman with `dnf install anda`. Andaman is in the Terra repository. - -## Configuration - -Andaman uses a per-project configuration file written in HCL. The configuration file is named `anda.hcl` and it is located in the root of the project directory. - -The configuration files can also be loaded recursively from the current directory, for easier project discovery. This is useful if you have multiple projects in the same directory. For example, the Terra and Ultramarine Linux repositories are stored inside a monorepo with all its packages. - -To start building a package in an already configured project, simply run `anda build ` from the project directory. diff --git a/src/content/docs/de/development/developing-for-ultramarine.md b/src/content/docs/de/development/developing-for-ultramarine.md deleted file mode 100644 index eff9ec29..00000000 --- a/src/content/docs/de/development/developing-for-ultramarine.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Developing for Ultramarine -description: "Things to get started on developing in Ultramarine." ---- - -Ultramarine Linux aims to be a developer-friendly environment for all kinds of developers. In this article, we will cover the basics of how to get started developing in Ultramarine. - -If you would like to develop your own software, you can get started with the section below. - -If you would like to develop **for** Ultramarine, you can get started with the [Developing for Ultramarine](#developing-for-ultramarine) section. - -## Getting Started - -Ultramarine comes with the [Python programming language](https://www.python.org/) out of the box, which is also required for most Fedora and Ultramarine -software, including the DNF package manager itself. - -### Setting up Rust - -To set up Rust in your environment, you can install the Rust and Cargo package from the Fedora repositories. - -```zsh -sudo dnf install rustc cargo -``` - -You can also use the `rustup` installer from the [Rust website](https://www.rust-lang.org/tools/install). This will install Rust in your local environment. - -## Developing for Ultramarine - -Our main IDE is [Visual Studio Code](https://code.visualstudio.com/), which is an open-source (mostly source-available) IDE that is available for both Windows, macOS, and Linux. - -If you, however, do not prefer to use the official Microsoft distribution of Visual Studio Code, you can also use [VSCodium](https://www.vscodium.com/), which is a free alternative distribution of Visual Studio Code. Or you can also use the [Official open-source build of Visual Studio Code](https://github.com/microsoft/vscode) here. - -There are also other supported IDEs and software we recommend using for development, such as: - -- [JetBrains CLion](https://www.jetbrains.com/clion/) (Native applications with C/C++, or Rust) -- [JetBrains PyCharm](https://www.jetbrains.com/pycharm/) for Python development. -- [GNOME Builder](https://wiki.gnome.org/Apps/Builder) for GNOME and GTK development. -- [Qt Creator](https://www.qt.io/product/development-tools) for Qt development. - -And other text editors you can use, such as: - -- [VIM](https://www.vim.org/) -- [Emacs](https://www.gnu.org/software/emacs/) -- [Micro](https://micro-editor.github.io/) -- [Neovim](https://neovim.io/) -- [Helix](https://helix-editor.com/) - -These text editors come with a minimal set of features, so you may want to install plugins for them, and configure them to your liking. - -Our preferred programming languages are Python, Vala and Rust, and our preferred GUI library is Helium. - -To build packages for Ultramarine, see [Using Andaman](/development/anda). - -### UI development - -It is recommended to follow the [Helium Human Interface Guidelines](https://developers.tauos.co/docs/hig) for UI development for Ultramarine apps. However, if you think that the Helium guidelines limit aspects of your app, you can deviate from the Helium guidelines and do your own UI design. - -### Build systems - -For build systems, we prefer using the programming language's native build system. For example, if you're using Rust, you can use the Rust's native Cargo build system. And in the case of Python, you can use the standard Python setuptools, which consists of either a `setup.py` file or a `pyproject.toml` file. - -For cases where using a native build system does not fit the needs of the application, we have a prioritized list of build systems that we recommend using: - -- [Meson](https://mesonbuild.com/) -- [CMake](https://cmake.org/) -- [GNU Autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html) -- A standard makefile. diff --git a/src/content/docs/de/development/ux-guide.md b/src/content/docs/de/development/ux-guide.md deleted file mode 100644 index 6b11aa4c..00000000 --- a/src/content/docs/de/development/ux-guide.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: UX Guidelines -description: "Guidelines for how the Ultramarine Linux experience should be designed." ---- - -Ultramarine Linux is supposed to be a user-friendly desktop operating system, and stay out the way of the user. These guidelines are meant to be a reference for how to implement the UX of Ultramarine Linux. - -## Theming - -We believe that the user should be able to easily customize the look and feel of Ultramarine Linux. But we want the default experience to be as minimalistic as possible, and not be full of clutter. - -Applications should look and feel like they are in the same place as the rest of the desktop. This means consistent theming, and a consistent color scheme. - -This also means that applications that use a dedicated styling library (libadwaita, libhelium, Material UI, etc.) are frowned upon for default apps, unless they are made for that exact ecosystem (libadwaita and libhelium apps on GNOME, for example). -The only exception for this is a case where there are no apps that functionally fit into the intended use case. - -## UX - -There are a few things that should be kept in mind when creating an application for Ultramarine Linux: - -- The application should be designed to be usable on any desktop environment. - -- Keep notifications to a minimum. - -- Always let the user know what is happening. - -- Let the user know what they're doing, and don't try to get in their way if they really want to do something. Which means allowing the user to do risky changes to their system, with a warning. - -## DE Choice - -Unlike what most people think about Ultramarine Linux, Ultramarine is not just supposed to be Fedora with a bunch of Desktop Environments. One should not expect the team to ship Ultramarine with every single desktop environment that they want to support. - -The core Ultramarine team does not want to maintain every single desktop environment. Instead, consider offering to maintain packages yourself. - -Ultramarine includes a pragmatic set of tweaks that are designed to get the user started as quickly as possible, not offer as many options as possible. diff --git a/src/content/docs/de/installation/getting-started.mdx b/src/content/docs/de/installation/getting-started.mdx deleted file mode 100644 index 3320870f..00000000 --- a/src/content/docs/de/installation/getting-started.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Getting Started -description: "Getting started with installing Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Ultramarine Linux comes in a form of an ISO image, which can be used to make a bootable DVD, or be flashed onto a USB stick. - -This guide will help you get the correct ISO image, create your boot image and install Ultramarine Linux on your computer. - -## Downloading - -### Choosing your edition - -Ultramarine Linux comes in 4 variants: - -- The **Flagship Edition**, which is the default and most popular variant, powered by the Budgie desktop environment and is made to stay out of your way. This is probably the version you want to use, and its desktop layout is similar to Windows or Chrome OS. -- The **GNOME Edition**, with the GNOME desktop environment designed to be elegant and modern. This is the variant you want if you would like a simple, unique experience. -- The **Pantheon Edition**, featuring elementary OS' Pantheon Desktop, made to be familiar to users coming from macOS. -- The **KDE Edition**, a new variant for Ultramatine 37, with a fresh look and feel inspired by Pop!\_OS. - -Ultramarine Linux supports Intel and AMD (amd64/x86*64) and ARM computers. Despite supporting ARM computers, Ultramarine Linux \*\*\_DOES NOT*\*\* support M1 and M2 Macs. - -The ISO images are available for download from the [Ultramarine Linux website](https://ultramarine-linux.org). - -### Checking the integrity of the ISO image (Recommended) - -If you would like to make sure the ISO image is valid, Ultramarine ISO images all come with a `CHECKSUM` file that can be checked against the image itself. - -The checksum file is a SHA256 checksum of the ISO image, you can use the following command to check the integrity of the ISO image (if you're using another Linux distribution) - -```bash -sha256sum -b /path/to/ultramarine.iso # Generate the checksum for the ISO image -cat /path/to/CHECKSUM # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the checksum on Windows - -```powershell -CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 -# Open the CHECKSUM file with Nodepad and compare the checksum -``` - -## Creating the bootable media - -### With Ultramarine Linux - -You can use the Fedora Media Writer to create a bootable media from the ISO image. - -![](/assets/fedoramediawriter.png) - -### With other operating systems (Windows, macOS, other Linux distributions) - -You can use [balenaEtcher](https://www.balena.io/etcher/) to create a bootable media from the ISO image. - -![](/assets/balenaetcher.png) - -### With Windows (alternative) - -You can use [Rufus](https://rufus.ie/) to create the bootable image. - -![](/assets/rufus_en.png) - -## Booting to Ultramarine Linux - -After flashing the image to your USB drive, you can boot to Ultramarine Linux by plugging in the drive and restarting your computer. - -Before your computer boots to your current OS, please refer to your computer's documentation on which key to press to select a custom boot option. - - - -Most BIOS has a special key that can be used to select a boot device, or to enter the BIOS setup screen. This varies from brand to brand. These keys may be `Esc`, `F1`, `F2`, `F8`, `F11`, `F12`, or even `Del`. The BIOS will usually display a message on the screen briefly on startup. If you're not sure which key to press, look up the BIOS setup instructions on the internet or ask your computer manufacturer. - - - - - -On Macs, press power, then hold down the `Alt` or `Option` key until the Apple Logo appears. - - diff --git a/src/content/docs/de/installation/installation.mdx b/src/content/docs/de/installation/installation.mdx deleted file mode 100644 index 4df75efd..00000000 --- a/src/content/docs/de/installation/installation.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Installation -description: "A guide on how to install Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -After booting into the live system, you will see a dialog box asking you to whether to start the installer, or continue with the live system. - -![The Welcome Dialog box](/assets/welcome-window.png) - -You can pick whichever you want, and you'll be able to start the installer later by opening the `Install to Hard Drive` application. - -To start the installation, click on the `Install to Hard Drive` button, or open the `Install to Hard Drive` application. - -# The Anaconda Installer - -Ultramarine currently uses the [Anaconda Installer]() (not to be confused with [The Python distribution]()). This is a system installer similar to the likes of Ubuntu's Ubiquity, or Calamares. - -There has been progress to replace the installer with a custom installer, but it is very experimental and not yet ready for normal use. - -![Anaconda Language Selection](/assets/anaconda-1.png) - -After starting the installer, you will be greeted with a language selection screen. Simply choose the language you would like to use for Ultramarine Linux. - -## The Anaconda Hub & Spoke Model - -![Anaconda Hub](/assets/anaconda-2.png) - -Anaconda uses a hub and spoke model to guide the user through the installation process. You can configure your installation in any order you want, but you will need to complete all the options before you can continue. - -### Keyboard Layouts - -![Anaconda Keyboard Layout](/assets/anaconda-3.png) - -Press the `+` button to add a new keyboard layout, then pick and search for the keyboard layout you prefer. - -Once you have selected the keyboard layout, you can press the `Done` button on the top left to go back to the hub. - -### Time & Date - -![](/assets/anaconda-4.png) - -The Time & Date selection screen has a world map in which where you can click on your location on the map to set your timezone. - -You can also use custom NTP servers to sync your time with a different server by clicking on the cog icon in the top right, or automatically set your time from your geolocation. - - - -By default, the time is set from your IP address geolocation. If you're using a VPN, this may not be accurate. - - - -### Storage - -![](/assets/anaconda-5.png) - -On this screen, you have to choose where you would like to install Ultramarine Linux. You can choose a drive to install to, then have Anaconda automatically partition your drive, or you can pick the 2 custom partitioning options. - - - -By default, Ultramarine uses the [Btrfs](https://en.wikipedia.org/wiki/Btrfs) filesystem, which supports allocating the drive into multiple subvolumes. This is the recommended option for most users as this will allow you to back up your system as atomic snapshots, which take less space than a full data clone. - - - -#### Custom Partitioning - -![](/assets/anaconda-6.png) - -In this mode, you can have Anaconda automatically allocate a partition for you, then you can change your mount point and file system type. - - - -For UEFI-based systems, you will also have to set up an EFI partition (mounted at `/boot/efi`) for the bootloader to use. - - - -#### Advanced Partitioning - -![](/assets/anaconda-7.png) - -In this mode, Anaconda uses a tool called blivet-gui for you to manually partition your drive. This is more akin to a standard partition editor like GParted. - -You can set up your custom partitioning scheme, along with your own custom mount points and file system types. - -You can also set up disk encryption using LUKS2 for extra security, but you will have to manually type in your password everytime your system boots. - -### Networking - -![](/assets/anaconda-8.png) - -On this screen, you can configure your hostname and network settings. - - - -On live installations, you can only configure your hostname. Everything else will be configured by the Desktop's respective network tools. - - - -### User Accounts - -![](/assets/anaconda-9.png) - -In this screen, you will have to configure your user accounts. Create a system account and enter in your password to continue. - -You can also click on the `Advanced` button for a more in-depth configuration of your account, such as your user folder location, account ID, and your system group membership. - - - -If you do not enter in a password, some apps may not work properly. - - - - - -If you type in a password that Anaconda deems insecure, it will have you confirm whether you still want to use the password. - - - ---- - -After completing your system configuration, press the `Begin Installation` button to continue. The installation process will start and may take a few minutes. - - - This process **IRREVERSIBLE**. If you manage to close down the installer - before it finishes, you will end up with a corrupted system.
To fix - this, you will have to reinstall Ultramarine Linux or your preferred operating - system, causing data loss. -
- -After the installation process is complete, Anaconda will prompt you to reboot your system. Simply reboot your system to complete the installation. - -Welcome to Ultramarine Linux! diff --git a/src/content/docs/de/installation/postinstall.md b/src/content/docs/de/installation/postinstall.md deleted file mode 100644 index e028338a..00000000 --- a/src/content/docs/de/installation/postinstall.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Post-installation -description: "Things to do after installing Ultramarine Linux." ---- - -After installing Ultramarine Linux, There are a few things you should do to make the most out of your new system. - -## Install NVIDIA Drivers - -If you have an NVIDIA GPU, you can install the latest drivers for it by running the following commands: - -```bash -sudo dnf update # Update the system first, because NVIDIA drivers will build using the latest kernel. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - -Then, reboot your system. - -### (Optimus Laptops) use the NVIDIA GPU as the primary GPU - -Execute the following scripts to make your NVIDIA GPU the primary GPU: - -```bash -sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf -sudo sed -i '10i\ Option "PrimaryGPU" "yes"' /etc/X11/xorg.conf.d/nvidia.conf # Add PrimaryGPU = yes to the 10th line of the file. -``` - -Then reboot your system. - -Make sure you're using the Xorg version of your desktop environment. - -## Install Codecs - -Ultramarine Linux already includes the necessary codecs for the majority of the popular multimedia formats. You do not need to install any additional codecs. - -## Set up Snapper (Btrfs Snapshots) - -Currently, RPM's architecture does not handle snapper properly. You might experience broken RPM transactions when doing rollbacks. This is a known issue and must be addressed upstream. diff --git a/src/content/docs/de/linux/filesystem.mdx b/src/content/docs/de/linux/filesystem.mdx deleted file mode 100644 index c6ff5037..00000000 --- a/src/content/docs/de/linux/filesystem.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: The File System -description: "An overview of the file system in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -The Linux (and UNIX) file system is a hierarchical structure of files and directories that make up a Linux operating system. - -In Linux, everything is a file. Unlike Windows where there are many other object types that can either be a physical device, and inter-process communication is done by a kernel call. - - -
- If you don't like reading text, you can watch this video below from Linode! - (Not sponsored) - -
-
- -## The File System Hierarchy - -The file system hierarchy is a set of directories that appear under the root directory `/`. They not only contain normal files, but also physical devices, virtual devices, and various other special files that control the system itself. - -The directory structure is as follows: - -| Directory | Description | -| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| / | The root directory, contains the all the other directories and files. | -| /bin | Contains executables and command binares that are required for the system to function. | -| /boot | The Boot loader, this may usually be in a seperate partition. | -| /dev | Contains special device files that can be used for special purposes (`/dev/sda` for a SATA drive, `/dev/null` for blank data, `/dev/random` for pseudo-random data, `/dev/tty` for terminal sessions, etc). | -| /etc | Contains system-wide settings and configuration files. | -| /home | User data | -| /lib | Libraries required for executables in `/bin` to function. May be also named `/lib` for multi-architecture support. | -| /media | Mount points for removable media, such as USB drives, SD cards, etc. | -| /mnt | Temporary mount points for mounting devices. | -| /opt | Optional packages that may be installed by the user. | -| /proc | Process data and kernel information for inter-process communication managed by the kernel. | -| /root | User data for the root user. | -| /sbin | Executables for system tasks | -| /srv | Shared service data used by server processes, such as web servers and NAS/File servers. | -| /tmp | Temporary data | -| /usr | Shared application data used by all users. | -| /var | Variable data used by system processes. | - -## The Home Directory - -The home folder is the place where all your personal data is stored. It is a directory that is located under the `/home` directory, followed by the username. It is similar to the `Users` folder in Windows. - -In Linux, the home folder is usually more extensively used than in Windows, as it stores all user-specific data and app settings. The system folders are only used when one wants to make system-wide changes. - - - If an app you don't know asks you for your password or root access, It may be - trying to compromise your system. Cases like this are usually uncommon on - Linux, but you should be aware of it. - diff --git a/src/content/docs/de/linux/overview.mdx b/src/content/docs/de/linux/overview.mdx deleted file mode 100644 index 5a1196d5..00000000 --- a/src/content/docs/de/linux/overview.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Concepts Overview -description: "A general overview of Linux concepts." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -This article and this section outlines the concepts of Linux, GNU, and UNIX concepts. - -## What is Linux? - -Linux is an open-source operating system kernel, which can be used to build an operating system. - -Linux itself is not a complete operating system in itself. It is a kernel, or the core of an operating system. Linux itself is usually packaged along with the GNU operating system, which is a collection - - -
- An abridged video of this article can be found here: - -
-
- -## What is the GNU in GNU/Linux? - -Main article: [GNU Core Utilities from Wikipedia](https://en.wikipedia.org/wiki/GNU_Core_Utilities) - -GNU (AKA The GNU Core Utilities, or just `coreutils`) is a collection of utilities that make up the GNU operating system. - -It is a package of various common apps and utilities that are used by UNIX-like operating systems. - -## What are Linux distributions? - -A Linux distribution is an operating system that is built on top of the Linux kernel. It is a collection of packages that are packaged together to make a complete operating system. - -A Linux distribution may come in many different forms, and made for different kinds of use cases. - -There are many different Linux distributions, and each one has its own unique features and benefits, such as: - -- Ubuntu -- Pop!\_OS -- Linux Mint -- Fedora Linux -- The Enterprise Linux family (RHEL, CentOS, Rocky Linux, AlmaLinux, etc.) -- Arch Linux -- Android -- Ultramarine Linux -- etc. - -Ultramarine Linux itself is a Linux distribution that is based on Fedora Linux, and many concepts that apply to Fedora Linux are also applicable to Ultramarine Linux. diff --git a/src/content/docs/de/linux/permissions.md b/src/content/docs/de/linux/permissions.md deleted file mode 100644 index 7ef55937..00000000 --- a/src/content/docs/de/linux/permissions.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Permissions -description: "How permissions work on Linux." ---- - -On Linux, permissions are used to determine who can read, write, and execute files, or do certain actions. - -Users are seperated into various groups with different IDs, and each file or action can be assigned a permission level. - -A user can be assigned a permission level that is higher than the permission level of the group they are in. And users in a group can do certain things that other users cannot. - -However, users in UNIX-like operating are more akin to a principal, as these "users" may not actually be a person, but a program. - -Files are owned by a user, and can be assigned a permission level. The user who owns the file can modify the file and modify the permissions of the file. - -Permission levels are displayed in octal, and are represented by a number of digits. The first digit is the owner, the second is the group, and the third is the other users. Permissions range from 0 to 7, with 0 being no access, and 7 being full access. - -## The Root User - -The root user (or the superuser) is a special user that grants access to all files and actions. It is akin to the Administrator on Windows. - -To execute commands as the root user, use the `sudo` command, followed by the command you want to execute. - -```bash -sudo dnf install vim # This will install vim as the root user -``` diff --git a/src/content/docs/de/linux/shell.mdx b/src/content/docs/de/linux/shell.mdx deleted file mode 100644 index e14b51f2..00000000 --- a/src/content/docs/de/linux/shell.mdx +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: The Shell -description: "How the shell works in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Sometimes, you may want to interact with the operating system in a more direct way. A traditional way to do this is to do it through the shell. - -The shell is a command line interface to the operating system. It is a program that wraps around the operating system kernel, and allows you to directly execute system calls and commands to interact with the operating system. - -There are many various shells that are available on Linux, such as: - -- The Bourne shell (sh) -- The Bourne-again shell (bash) -- The Korn shell (ksh) -- The Z shell (zsh) -- The Friendly Interactive Shell (fish) - -Ultramarine Linux uses the [Z Shell](https://en.wikipedia.org/wiki/Z_shell) as its default shell, combined with the [Starship Prompt](https://starship.rs/) for a more clean interface. - - -
- To learn more about shell scripting, you can watch this Bash introduction - video by Fireship here: - - NOTE: The Z shell is mostly compatible with Bash, so most of the knowledge you - will learn will be mostly applicable in Ultramarine Linux. -
-
- - - The Z shell is also used Kali Linux and newer versions of macOS (Catalina and - newer). - - -## Interacting with the shell - -To start using the shell, open the Terminal app. - -![The GNOME Terminal](/assets/terminal.png) - -You will be greeted with a prompt, simply type in the command you want to execute, and press `Enter⏎`. - -To change directories, type `cd` followed by the path you want to change to. - -```zsh -cd /home/user/Documents -``` - -To list the contents of a directory, type `ls`. - -To read a file to the terminal, type `cat` followed by the path to the file. - -```zsh -cat /home/user/Documents/README.md -``` - -To delete a file, type `rm` followed by the path to the file. - -```zsh -rm /home/user/Documents/README.md -``` - -To delete a full directory, recursively delete it by typing `rm -r` followed by the path to the directory. - -```zsh -rm -r /home/user/Documents -``` - - - Most users will usually execute `rm -rf` instead of `rm -r`. The `-f` flag is - used to force the deletion of a file or directory. - - -To create a new file, type `touch` followed by the path to the file. - -```zsh -touch /home/user/Documents/newfile.txt -``` - -To create a new directory, type `mkdir` followed by the path to the directory. - -```zsh -mkdir /home/user/Documents/newdir -``` - -To move or rename a file or directory, type `mv` followed by the path to the file or directory, and then the new path. - -```zsh -mv /home/user/Documents/newfile.txt /home/user/Documents/newfile2.txt -``` - -To know more about each command, open the manual by typing `man` followed by what you want to learn about - -``` -man sudo -``` - -This will open `less`, an app that allows you to read through long lines of text as a scrollable page. - -To exit `less` press `Q`. - -Most commands will also have a `-h` or `--help` flag, which tells you more about the command. - -## The Pipeline - -Linux offers a way for inter-process communication through pipes. - -The pipeline you to transfer data from one process to another, and is used to execute commands in parallel. - -```zsh -echo "Hello World" | wc -w -``` - -This calls the `wc` (word count) command, which counts the number of words in the text. Then pipes the output of `echo` to it, which then outputs the number of words. This is a very simple example of a pipeline. - -A named pipe is created by using `>` instead of `|`. - -```zsh -echo "Hello World" > pipe.txt -``` - -This pipes the output of `echo` to the named pipe `pipe.txt`, which is now a file. - -## Executing a file - -To execute a program, you must first make sure that the file is executable. This is done by using the `chmod` command. - -```bash -chmod +x /path/to/exec -``` - -Then you can execute the file by directly pointing to it. - -```bash -/path/to/exec -``` - -For files in your current folder, you must use `./` before the file name. - -```bash -./exec -``` diff --git a/src/content/docs/de/linux/software.md b/src/content/docs/de/linux/software.md deleted file mode 100644 index a7b3393c..00000000 --- a/src/content/docs/de/linux/software.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Software and package management -description: "How to manage software on Linux." ---- - -There are many different ways to install software on Linux. - -## The system package manager - -Most software is installed using the system package manager. There are many different package managers, and each one has its own unique features and benefits, such as: - -- APT (Used by Debian, Ubuntu, and many other Linux distributions) -- Pacman (Used by Arch Linux) -- Yum (Used by older versions of Fedora and Red Hat) -- DNF (Used by Fedora) -- XBPS (Used by Void Linux) -- Portage (Used by Gentoo, and Chrome OS) - -Ultramarine Linux is based on Fedora, and thus uses the DNF package manager. - -To install an RPM package from the Ultramarine and Fedora repositories, use the `dnf` command. - -```bash -sudo dnf install steam # Install Steam -``` - -You can also install groups of packages, like full desktop environments or a suite of tools for music production, using the `dnf groupinstall` command. - -```bash -sudo dnf groupinstall "Audio Production" # installs multiple packages at once, in this case a suite of music/audio production tools -``` - -## Other package managers - -You can also install software using other package managers. - -There are many different user-only package managers, such as: - -- Snap -- Flatpak -- Steam (For games) - -### Flatpak - -Flatpak is supported out of the box in Ultramarine Linux. To install a Flatpak app, open GNOME Software or AppCenter, or use the `flatpak` command. - -### Snap - -Snap is a package manager made by Canonical for Ubuntu. It was created to make deploying serverside services easier, and it is also used for GUI applications. - -To get started, install Snap. - -```bash -sudo dnf install snapd # Install Snap -``` - -Then, open the Snap store and search for the app you want to install. - -```bash -# Install VLC media player -sudo snap install vlc -``` - -### Steam - -To install a game on Steam, first install Steam. - -```bash -sudo dnf install steam -``` - -Then, open the Steam store and search for the game you want to install. - -## Other installation methods - -### AppImages - -AppImages are self-contained binaries that are packaged with their own dependencies. To use an AppImage, simply download it, and then execute it by double-clicking it or using the command line. - -```bash -./balenaEtcher.AppImage -``` - -If this doesn't work, you may need to make the file executable. - -```bash -chmod +x balenaEtcher.AppImage -``` - -### Install from source - -Sometimes, software is not available in a package, and you need to build it from source. - -To do this, follow the developer's instructions and build the software yourself. diff --git a/src/content/docs/de/release/errata.mdx b/src/content/docs/de/release/errata.mdx deleted file mode 100644 index 1e86d9aa..00000000 --- a/src/content/docs/de/release/errata.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Errata -description: "Various known bugs and other issues in Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -This page contains the erratum for Ultramarine Linux releases. - -An erratum (or corrigendum) is a correction of a published release. It is usually made shortly after a release, and is a minor issue that is not critical to the release, and it may be corrected in the next release. - -## All versions affected - -### Applications - -#### Some installer scripts not supporting Ultramarine, even though it is a Fedora-based OS - -This is related to [DNF Tells the user there are no repositories available for a Copr project](#dnf-tells-the-user-there-are-no-repositories-available-for-a-copr-project), This bug may only be addressed upstream, or until there is mainstream recognition of Ultramarine Linux itself. - -## Ultramarine 37 (Initial Release) - -### Pantheon - -#### Blank wallpaper - -Due to a configuration error, the wallpaper is not set correctly. This will be fixed in the next release. - -The simple workaround is to set your own wallpaper. - -## Ultramarine 36 (Build 1.1) - -### Applications - -#### Firefox still includes Fedora bookmarks - -This is caused by the inclusion of the `fedora-bookmarks` package, which is a weak dependency of Firefox in Fedora. Uninstalling this package may not fix the issue on an already configured account. Simply remove the bookmarks yourself. - -#### Anaconda shows a warning about the system being pre-release - -This is caused by Anaconda not finding the patched `/.buildinfo` file (or ProductMD information about Ultramarine). We do not know how Fedora is doing this, but in Budgie and Cutefish versions there is a script inserting a custom `/.buildinfo` file in the root of the filesystem. - -#### DNF Tells the user there are no repositories available for a Copr project - -This is due to the fact that the DNF Copr plugin detects the OS ID `/etc/os-release` file, and Ultramarine uses a custom code instead of `fedora`. - -A workaround is to also specify the Fedora buildroot when trying to add a Copr repository, like this: - -```bash -sudo dnf copr enable cappyishihara/fedorajam-plus fedora-36-x86_64 -``` - -This will be addressed in a `dnf-plugins-core` patch, either upstream or locally with Ultramarine. - -This issue has been addressed upstream in the [following pull request](https://github.com/rpm-software-management/dnf-plugins-core/pull/463) - -It will be included in the next release of dnf-plugins-core after 4.3.1. - -### GNOME - -#### Pop!\_Shell launcher - -The Pop!\_Shell launcher is broken. This can be fixed by installing the `pop-launcher` package, as the package was not included in the original release. - -### Cutefish - -#### SDDM displaying black screen - -SDDM may display a black screen when starting up. This is a known issue, but there is no known fix as of yet. (Possibly an upstream bug, help needed.) - -### Pantheon - -#### Missing Switchboard (Settings) menus - -This was caused by missing Pantheon Switchboard modules, which are not included in Ultramarine Linux due to time constraints. - -You can help us fix this issue by offering to maintain these packages ourselves, or by [contributing to help submit them to upstream Fedora.](https://fedoraproject.org/wiki/SIGs/Pantheon) - -### Lapis/OSTree Edition - -#### Missing tweaks from the standard releases - -As the standard release includes a script to modify the system, due to the nature of OSTree, we are unable to include these tweaks unless we rebuild all major packages with our custom patches. - -You can help us fix this issue by contributing and maintaining these packages yourself. diff --git a/src/content/docs/de/welcome.mdx b/src/content/docs/de/welcome.mdx deleted file mode 100644 index ec093bf7..00000000 --- a/src/content/docs/de/welcome.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Welcome -description: "This wiki is meant to be the extended documentation for both end users and developers, so it is separated in those two categories." ---- - -import Alert from "../../../components/Docs/Alert.astro"; - -Willkommen im Ultramarine Linux Wiki! Dieses Wiki dient als Dokumentation für den allgemeinen Benutzer, jedoch auch für Entwickler des Projektes. Somit werden alle Artikel in eine dieser zwei Kategorien eingeteilt. - -Diese Hauptseite dient der Einführung der Linux Distribution und ihrer Philosophie und sollte von einem neuen Nutzer als Einstiegspunkt zuerst gelesen werden. - - - Die deutsche Übersetzung ist momentan noch in Arbeit. Bitte zur englischen - Version mit dem Menü oben rechts wechseln. Danke! - - -## Allgemeine Philosophie - -Ultramarine Linux ist der spirituelle Nachfolger zu Korora Linux, mit dem Ziel, ein Betriebssystem zu erstellen welches einfach funktioniert (engl. "it just works"). Mit einigen Anpassungen wird die Fedora-Erfahrung für neue und erfahrene Benutzer gleichermaßen verbessert. Diese Anpassungen können hauptsächlich auch durch ein Skript manuell erzielt werden, jedoch benötigt man dafür extra Aufwand (den wir mit diesem Betriebssystem verhindern wollen). Außerdem sind einige der geplanten Funktionen ohne ein separates ISO Abbild nicht möglich. - -## Team - -- 🇹🇭 Cappy Ishihara (Anonym) - Project lead, Release Engineer -- 🇩🇪 Trobonox (Anonym) - Documentation, Web Developer, UI/UX Designer -- 🇮🇳 Vihag Chaturvedi - Community Manager, Documentation -- 🇮🇩 Mo (Anonym) - Additional Support, Consulting -- 🇵🇱 Toru Ishikawa (Anonym) - Infrastructure SIG diff --git a/src/content/docs/en/anywhere/enterprise.mdx b/src/content/docs/en/anywhere/enterprise.mdx deleted file mode 100644 index 2efcabbe..00000000 --- a/src/content/docs/en/anywhere/enterprise.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Data Centre, Enterprise, and HPC (Anywhere)" -description: "Data Centre, Enterprise, and HPC in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change. - - -These images will be built for constant runtime, and include/exclude fitting packages for server usecases. If you'd like to suggest a platform, drop us a line in [our chats](/en/community/community). - -## Implementation - -- Refined OOTB cockpit experience -- CLI only option -- Advanced installer features -- Advanced networking options -- Package suite more attuned to a server usecase -- Default filesystem changed to ZFS -- Potential improved RAID and non-RAID architecture implementation -- Cluster support -- A whole lot more... diff --git a/src/content/docs/en/anywhere/steamdeck.mdx b/src/content/docs/en/anywhere/steamdeck.mdx deleted file mode 100644 index 95a37316..00000000 --- a/src/content/docs/en/anywhere/steamdeck.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Valve Steam Deck (Anywhere)" -description: "Steam Deck in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -We don't have any handhelds. So for now (and potentially forever) we recommend checking out [Bazzite](https://bazzite.gg/), it shares a base with Ultramarine, has Terra, and is made by our partners at Universal Blue. diff --git a/src/content/docs/en/anywhere/surface.mdx b/src/content/docs/en/anywhere/surface.mdx deleted file mode 100644 index f6375579..00000000 --- a/src/content/docs/en/anywhere/surface.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Microsoft Surface -description: "Information about Ultramarine Linux on Microsoft Surfaces" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Microsoft Surface support is provided using the [Linux Surface team's](https://github.com/linux-surface/linux-surface) Surface kernel and packages/software. - -## Supported Devices - -| Device | Surface Image Required? | Notes | Fyra has This | -| ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| Surface Pro 1 | No | | ✓ | -| Surface Pro 2 | No | Identical to Pro 1 | | -| Surface Pro 3 | Yes | Boots without, but things may be broken | ✓ | -| Surface Pro 4 | Yes | | ✓ | -| Surface Pro (5th Generation) | Yes | Nearly identical to Pro 4 | ✓ | -| Surface Pro 6 | Yes | Nearly identical to 5th gen | | -| Surface Pro 7 | Yes | | | -| Surface Pro 7+ | Yes | | | -| Surface Pro 8 | Yes | | | -| Surface Pro 9 | Yes | Must disable Secure Core in BIOS to boot from USB storage | | -| Surface 3 | Yes | Battery and touch will not work without Surface Kernel | | -| Surface Go | No | Cameras and LTE will not work without Surface Kernel | ✓ | -| Surface Go 2 | No | Same as Surface Go | ✓ | -| Surface Go 3 | No | May need Secure Boot disabled to boot properly. | | -| Surface Go 4 | Yes | UFS Storage, requires some [manual intervention](https://github.com/linux-surface/linux-surface/wiki/Surface-Go-4) to get working | | -| Surface Book | Yes | NVIDIA needed for some SKUs, fans may not work | ✓ | -| Surface Book 2 | Yes | NVIDIA needed for some SKUs, fans may not work | ✓ | -| Surface Book 3 | Yes | NVIDIA needed for some SKUs. Additionally, surface_aggregator and associated kernel modules NEED to be in initramfs | | -| Surface Laptop | Yes | Some thermal issues due to bad sensor readings | | -| Surface Laptop 2 | Yes | surface_aggregator and associated kernel modules NEED to be in initramfs | | -| Surface Laptop 3 | Yes | surface_aggregator and associated kernel modules NEED to be in initramfs | | -| Surface Laptop 4 | Yes | surface_aggregator and associated kernel modules NEED to be in initramfs. Video is VERY unstable on AMD and Intel models | | -| Surface Laptop 5 | Yes | Hibernation and shutdown are broken, ACPI is generally messed up on here. surface_aggregator and associated kernel modules NEED to be in initramfs | | -| Surface Laptop Go | Yes | Touchpad may stop working when resuming from suspend. Intel PSR causes tearing. Fans may not work | ✓ | -| Surface Laptop Go 2 | Yes | | | -| Surface Laptop Go 3 | Yes | No data, we assume surface_aggregator is required | | -| Surface Studio | Yes | No data, we assume surface_aggregator is required | | -| Surface Studio 2 | Yes | No data, we assume surface_aggregator is required | | -| Surface Studio 2+ | Yes | No data, we assume surface_aggregator is required | | -| Surface Laptop Studio | Yes | GPU may be limited to 10W | | -| Surface Laptop Studio 2 | Yes | | | - -Please review the [Linux Surface wiki page](https://github.com/linux-surface/linux-surface/wiki) for your device, there may be further important imformation there regarding additional setup and usage. - -## Cameras - -All packages and configuration needed to enable (lib)camera support is included. Camera support for some models is still a work in progress upstream. The Surface Pro 7, Intel Surface Laptop 3, and the Surface Book 3 use an IPU4, which is not at all supported at this time. Feature matrix, troubleshooting, and more information can be found [here](https://github.com/linux-surface/linux-surface/wiki/Camera-Support). - -#### Notes - -- We do not and will **NEVER** support the Surface 1, 2, or RT. -- We do not support the Surface Pro X or Windows DevKit, and probably won't. If you'd like to change this you can [donate hardware](/en/contributing/contributorguide/#hardware). -- We do not support the "Copilot+ PC" Surfaces **YET**. - -#### [Next Up: Raspberry Pi →](/en/anywhere/rpi) - -#### [← Back To: Ultramarine Anywhere](/en/anywhere/anywhere) diff --git a/src/content/docs/en/anywhere/tegra.mdx b/src/content/docs/en/anywhere/tegra.mdx deleted file mode 100644 index 970f28c8..00000000 --- a/src/content/docs/en/anywhere/tegra.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: "NVIDIA Tegra (Anywhere)" -description: "NVIDIA Tegra devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -Most of the team has a modern Tegra device, most commonly, the Nintendo Switch. -There is interest in running Ultramarine on these devices, but we haven’t started work on a port yet. - -We're tracking the progress of the [Switchroot](https://switchroot.org/) project, which aims to bring Linux to the Nintendo Switch and -other Tegra-based SoCs, such as the Jetson/Xavier/Orin series, the NVIDIA Shield and more. - -The boot process for Tegra devices is similar to other ARM-based Android devices, but with slight differences, especially -for the Nintendo Switch since it uses a completely custom firmware, due to Nintendo's security measures. -We'll be mostly documenting the process for the Switch, but the same principles apply to other Tegra devices. - -## Nintendo Switch - -The Switch loads from a 32GB (or 64GB on the OLED model) eMMC, which is a detachable module. - -Older revisions of the Switch with the X1 SoC (the original 2017 launch model, AKA the "White Box" or "Erista" SoC) -are the most compatible with Linux, since the hardware support for the X1 itself has been mainlined in the Linux kernel. -This model is vulnerable to [CVE-2018-6242 (Fusée Gelée)](https://nvd.nist.gov/vuln/detail/cve-2018-6242) which allows for arbitrary code execution in the boot ROM. - -Newer revisions of the Switch with the X1+ SoC (the 2019 revision, AKA "Red Box" or "Mariko" SoC) and later models -like the Lite and OLED models (also codenamed "Aula") are not vulnerable to Fusée Gelée, and require a different exploit which is a combination -of eMMC interception and a reset glitch to load a custom bootloader. This requires hardware modifications and is not as straightforward as the original exploit. - -"Mariko" SoCs are also not yet supported by the mainline Linux kernel, and require a custom kernel to boot. - -The most common bootloader payload used to run arbitrary code on the Switch is [hekate](https://github.com/ctcaer/hekate), -a custom bootloader that provides a graphical boot menu and partition manager. It can also be used to dump the eMMC storage data and -create an "emuMMC” (a virtualized eMMC partition that can be used to run a backup image of HorizonOS, the stock firmware -without modifying the actual eMMC data.) - -## Implementation - -The Switchroot boot process creates a boot menu entry in Hekate that loads [U-Boot], which in turn reads a custom boot script that does the following: - -1. (If the user is on a Switch Lite) loads the calibration data for the embedded analog sticks -2. Loads the device tree blobs (DTB) for the Switch from the SD card -3. Sets up Linux kernel command line arguments (if configured to do so) - - Disables the touch screen tuning parameters (optional) - - Disables HDMI CEC auto-negotiation (optional) - - Disables WiFi VHT80 bonding (if running the mainline kernel) - - Force-enables NVENC/NVDEC support and sets the memory address for the framebuffer - -4. Finally, loads the Linux kernel and the initramfs from the SD card - -If the boot process fails at any point, the script waits for 10 seconds and then reboots the device. - -## Ultramarine Notes - -To properly support BLS ([Boot Loader Specification]) on the Switch, we want to slightly modify the U-Boot script to instead -chainload another bootloader (such as GRUB, systemd-boot or [Submarine]) which can then read the BLS configurations and present -the user with the boot menu options. - -[Horizon OS]: https://en.wikipedia.org/wiki/Nintendo_Switch_system_software -[U-Boot]: https://en.wikipedia.org/wiki/Das_U-Boot -[Submarine]: https://github.com/FyraLabs/submarine -[Boot Loader Specification]: https://uapi-group.org/specifications/specs/boot_loader_specification/ \ No newline at end of file diff --git a/src/content/docs/en/chromebook/armbeta.mdx b/src/content/docs/en/chromebook/armbeta.mdx deleted file mode 100644 index 174ef8f3..00000000 --- a/src/content/docs/en/chromebook/armbeta.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: ARM Chromebook Beta Program -description: "Closed program for running our beta images for certain ARM chromebooks" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -NOTE - Not all ARM devices are currently supported. This is a Beta program, proceed at your own risk. - -Welcome to the ARM Chromebook Beta Program! We are looking for technically-versed people to test our Ultramarine Chromebook beta images for ARM. - -This is a closed program, please join and ping @Owen in the [Discord](https://discord.com/invite/5fdPuxTg5Q) or [Matrix](https://matrix.to/#/#hub:fyralabs.com) (most prefered), or email him at owen@fyralabs.com, to apply. - -Currently supported ARM Chromebook beta devices (if you have an unsupported device and are willing to use it for image testing, let us know!): - -All Kukui (mt8183) family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 311 (C722/C722T) | willow | -| Acer Chromebook 311 (CB311-11H/CB311-11HT) | kenzo | -| Acer Chromebook 314 (CB314-2H/CB314-2HT) | cozmo | -| Acer Chromebook Spin 311 (CP311-3H) | juniper | -| Acer Chromebook Spin 311 (R722T) | pico | -| Asus Chromebook CZ1 | cerise | -| Asus Chromebook Detachable CM3 (CM3000) | kakadu | -| Asus Chromebook Detachable CZ1 | katsu | -| Asus Chromebook Flip CM3 (CM3200, MT8183) | damu | -| Asus Chromebook Flip CZ1 | stern | -| HP Chromebook 11a | kappa | -| HP Chromebook 11MK G9 EE | esche | -| HP Chromebook x360 11MK G3 EE | burnet | -| Lenovo 100e Chromebook 2nd Gen MTK 2 | makomo | -| Lenovo 10e Chromebook Tablet | kodama | -| Lenovo IdeaPad 3 Chromebook (MT8183) | fennel14 | -| Lenovo IdeaPad Duet Chromebook | krane | -| Lenovo IdeaPad Flex 3 Chromebook (MT8183) | fennel | - -Source: https://wiki.postmarketos.org/wiki/Google_Kukui_Chromebook_(google-kukui) - -All Asurada (mt8192) family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 514 (CB514-2H / CB514-2HT) | spherion | -| ASUS Chromebook Flip CM3 (CM3200, MT8192) | hayato | - -Source: https://wiki.postmarketos.org/wiki/Google_Asurada_Chromebook_(google-asurada) - -All Trogdor (sc7180) family Chromebooks: - -| Model name/number | Codename | -| --------------------------------------------- | ------------- | -| Acer Chromebook 511 | limozeen | -| Acer Chromebook Spin 513 | lazor | -| Dynabook Chromebook C1 | pompom | -| HP Fortis 11 G9 Q Chromebook | kingoftown | -| Libera-Merdeka Chromebook C100/C110/C120/C150 | pazquel | -| Orbic Chromebook 4G | pazquel | -| Acer Chromebook Tab 510 | quackingstick | -| HP Chromebook X2 | coachz | -| Lenovo IdeaPad Duet 3 | wormdingler | -| Lenovo IdeaPad Duet 5 | homestar | - -Source: https://wiki.postmarketos.org/wiki/Google_Trogdor_Chromebook_(google-trogdor) - -Follow-up instructions, guide, and dedicated discord channel will be provided after acceptance. diff --git a/src/content/docs/en/chromebook/chromebook.mdx b/src/content/docs/en/chromebook/chromebook.mdx deleted file mode 100644 index a9c544e9..00000000 --- a/src/content/docs/en/chromebook/chromebook.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Getting Started with Chromebook Edition -description: "Introduction to Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -### Welcome to Ultramarine Chromebook Edition! - -With the help from out friends over at the [Chrultrabook Project](https://docs.chrultrabook.com/), we built a no-hassle way to boot full Ultramarine Linux onto your Chromebook! - -These pages will get you everything you need to know about what Ultramarine Chromebook is, how it works, how you can install it, and even how you can help us out. - -If you would like more info about Ultramarine Chromebook and it's release, take a peak at the [Release post](link) - -#### [Next Up: Getting Chromebook Edition →](getting) diff --git a/src/content/docs/en/chromebook/postinstall.mdx b/src/content/docs/en/chromebook/postinstall.mdx deleted file mode 100644 index 0f043330..00000000 --- a/src/content/docs/en/chromebook/postinstall.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Post-Installation -description: "Things to do after installing Ultramarine Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -#### [Next Up: ARM Chromebooks (Beta) →](armbeta) - -#### [← Back To: Installing to a Chromebook](preparing) diff --git a/src/content/docs/en/community/codeofconduct.mdx b/src/content/docs/en/community/codeofconduct.mdx deleted file mode 100644 index 37b44b31..00000000 --- a/src/content/docs/en/community/codeofconduct.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Code of Conduct -description: "Rules for interacting in the Ultramarine Community" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Summary - -Community members are expected to treat each other with the utmost respect, regardless of sexuality, gender, race, creed, nationality, or caste. - -Essentially, if you wouldn't say or do it to someone close to you, don't say or do it here. - -If you don't follow the rules, Fyra Labs reserves the right to ban you (temporarily or permanently) from participating in the project or community. - -If you need to report an incident, contact [**Cappy Ishihara.**](mailto:cappy@fyralabs.com) - -## 0. Employee Conduct - -Employees of Fyra Labs are held to a higher standard than outlined by this document. Employees should review the policy in their onboarding packet, or internal Outline instance for more details. - -## 1. Purpose - -A major goal of Fyra Labs is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). - -This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. - -We invite all those who participate in this community to help us create safe and positive experiences for everyone. - -## 2. Open [Source/Culture/Tech] Citizenship - -A supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. - -Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. - -If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. - -## 3. Expected Behavior - -The following behaviors are expected and requested of all community members: - -- Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. -- Exercise consideration and respect in your speech and actions. -- Attempt collaboration before conflict. -- Refrain from demeaning, discriminatory, or harassing behavior and speech. -- Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. -- Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. - -## 4. Unacceptable Behavior - -The following behaviors are considered harassment and are unacceptable within our community: - -- Violence, threats of violence or violent language directed against another person. -- Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. -- Posting or displaying sexually explicit or violent material. -- Posting or threatening to post other people's personally identifying information ("doxing"). -- Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. -- Inappropriate photography or recording. -- Inappropriate physical contact. You should have someone's consent before touching them. -- Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. -- Deliberate intimidation, stalking or following (online or in person). -- Advocating for, or encouraging, any of the above behavior. -- Sustained disruption of community events, including talks and presentations. - -## 5. Weapons Policy - -No weapons will be allowed at Fyra Labs events, community spaces, or in other spaces covered by the scope of this Code of Conduct. Weapons include but are not limited to guns, explosives (including fireworks), and large knives such as those used for hunting or display, as well as any other item used for the purpose of causing injury or harm to others. Anyone seen in possession of one of these items will be asked to leave immediately, and will only be allowed to return without the weapon. Community members are further expected to comply with all state and local laws on this matter. - -## 6. Consequences of Unacceptable Behavior - -Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. - -Anyone asked to stop unacceptable behavior is expected to comply immediately. - -If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). - -## 7. Reporting Guidelines - -If you are subject to or witness unacceptable behavior from employees of Fyra Labs, or have any other concerns, please use the [External Human Resources Form](https://airtable.com/shrCMi4X3Xp3ITMJz) - -If you are subject to or witness unacceptable behavior from other members of this community, or have any other concerns, you should email [Fyra Labs Contact](mailto:contact@fyralabs.com). - -Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. - -## 8. Addressing Grievances - -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should contact us with a concise description of your grievance, contact information can be found below. Your grievance will be decided at the sole discretion of Fyra Labs. - -## 9. Scope - -We expect all community participants who are not employed by or independent contractors of Fyra Labs to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business. - -This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. - -## 10. Contact Info - -If you feel further action is needed for an incident, contact one or both of these people: - -[**Owen Zimmerman, CBO**](mailto:owen@fyralabs.com) - -Owen is your first point of contact if an incident is not handled as it happens. - -[**Jaiden Riordan, COO**](mailto:jade@fyralabs.com) - -If your grievance requires additional attention, or you wish to appeal an earlier decision, please contact Jaiden. - -[**Legal Email**](mailto:legal@fyralabs.com) - -Legal concerns and documents should be sent to this address, we will not accept legal documents in any way except to this address or by US Mail. - -## 11. License and Attribution - -The Code of Conduct for Fyra Labs Projects is derived from the Citizen Code of Conduct distributed by [Stumptown Syndicate](http://stumptownsyndicate.org) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). - -Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). - -#### [Next Up: Ultramarine Linux System Requirements →](/en/setup/requirements) - -#### [← Back To: Join the Community](/en/community/community) diff --git a/src/content/docs/en/community/community.mdx b/src/content/docs/en/community/community.mdx deleted file mode 100644 index 84b6a01c..00000000 --- a/src/content/docs/en/community/community.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Join the Community! -description: "Community Information" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Ultramarine Linux has an active community of users, tinkerers, developers, and everyone in between. - -Our community (like our code) is open to everyone. Here's some of the official spaces: - -### Discord - -The Fyra Labs Discord is for all of our projects. We have lively discussions and build great things together. You can get support as a user and as a contributor here. - -[Join the Fyra Labs Chat →](https://fyralabs.com/discord) - -### Matrix - - -We're closing our Matrix rooms due to a myriad of issues. [Learn more here →](https://blog.fyralabs.com/dropping-matrix/) - - - -### Socials - -Ultramarine Linux is on the Fediverse, Bluesky, and Twitter. These accounts will include important updates about features, bugs, and downtime. - -[Follow Ultramarine on the Fediverse →](https://fedi.fyralabs.com/@ultramarine) - -[Follow Ultramarine on Bluesky →](https://bsky.app/profile/did:plc:fnur6qx57ynsgg4x6psfrj7i) - -[Follow Ultramarine on Twitter →](https://twitter.com/UltramarineProj) - -### Reddit - -The Ultramarine Subreddit is a more asynchronous way to interact with the community. It offers the same great things in a more reddit-y way. - -[Join the Ultramarine Reddit →](https://reddit.com/r/ultramarine) - -## Our Philosophy - -We believe that the Fyra Community is larger than just Fyra (the organization). Part of this is interacting with the rest of our community. We feel that this allows us to better judge the desires and needs of our users (and we love talking to all of you). - -#### [Next Up: Code of Conduct →](/en/community/codeofconduct) - -#### [← Back To: Welcome](/en/welcome) diff --git a/src/content/docs/en/contributing/hacking.mdx b/src/content/docs/en/contributing/hacking.mdx deleted file mode 100644 index ebb5ef41..00000000 --- a/src/content/docs/en/contributing/hacking.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Code Contributions -description: "A step-by-step guide to hacking on Ultramarine Linux components" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -One of the most noticeable contributions you can make is code contributions. Whether it's building a new feature or fixing a bug, contributing code is a great way to make a noticeable difference to the operating system itself. - -This page serves as a step-by-step guide to hacking on Ultramarine Linux components. - -## Find Something to Work On - -There's no shortage of things to work on in Ultramarine Linux. From a feature you think would be cool, to something on our issue tracker, to an entirely new project in the Ultramarine ecosystem. - -For example, Nvidia drivers, this is an issue with most Linux distributions that Ultramarine solves. - -This problem can be anything from a tiny papercut to a massive structural change. There's no such thing as a bad idea. If you're having trouble finding something to work on, [ask around in our community](/en/community/community), we're always happy to help. - -## Gather Information - -If you're fixing an issue, what's the cause? If you're building a feature, what's the goal? What's the best way to implement it? - -A great place to gather information is within our [community](/en/community/community), simply ask and see what users, contributors, and developers think. - -## Getting the Ultramarine Toolchain - -If you're contributing to an existing component, simply get the tools needed for it (we're slowly adding a list to our repositories.) - -If you're building a completely new feature, we recommend [Rust](https://www.rust-lang.org/) or [Go](https://go.dev) for features without a GUI. - -If you're building with a GUI, we recommend using [libhelium](https://github.com/tau-os/libhelium), you can find more information here. - -Get to work! Make a fork of a project and tinker away! - - -
-**Big Changes** - -For especially big changes, or, major features, ask for help. We'll help you refine and build your idea. - -
-
- -## Writing the Code - -Write the code! Make sure to continuously test your solution as you go. This will help you catch bugs early and make sure your changes are on the right track. It's also important to document your code when you're done, as this will help other contributors understand your changes. - -Remember, you're not alone, no problem is too big or too small to ask for help. If you have a question or want to work with another contributor, ask in our [community](/en/community/community). - -## Getting into Ultramarine - -After you've tested, it's time to contribute. Simply open a pull request to the appropriate repository and we'll review it. Make sure your pull request is descriptive, outlining the motivation, scope, and implementation of your changes. - -There's three possible outcomes - -- **Approval** - -We approve your solution, be proud as very few PRs get merged without changes. - -- **Request for Changes** - -Something needs to change! Fix a problem or two and you're golden! Most PRs go through this process. - -- **Denial** - -This doesn't happen very often, sometimes a feature just doesn't align with our plan. It's more likely that we'll simply ask you for changes. - -#### [Next Up: Mirroring →](/en/contributing/mirroring) - -#### [← Back To: Contributing](/en/contributing/contributorguide) diff --git a/src/content/docs/en/contributing/mirroring.mdx b/src/content/docs/en/contributing/mirroring.mdx deleted file mode 100644 index 9ed3cb75..00000000 --- a/src/content/docs/en/contributing/mirroring.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Mirroring -description: "A guide of how you can mirror Ultramarine Linux, making downloads faster for everyone" ---- - -Mirroring allows you to contribute by hosting packages closer to users, making downloads faster, more reliable, and reducing load on Fyra Labs' infrastructure. - -When users update or install packages, they'll hit our mirror director service, [Tetsudou](https://github.com/terrapkg/tetsudou), which will calculate an optimal set of mirrors to download updates from. - -## Requirements - -- A publicly accessible server with good uptime -- A domain name -- A good internet connection (1Gbps or more) -- A moderate amount of disk space (100GB or more) -- Experience with server administration - -## Mirroring using Terra Mirror Scripts - -We provide a mirror script (and accessory Docker image) to help you get started. Documentation is available on [GitHub](https://github.com/terrapkg/mirror-script). - -## Mirroring using rsync - -You can also mirror the repositories using the `rsync-ssl` utility. - -```sh -rsync-ssl -avPzr --delete rsync://repos.fyralabs.com/repo/ /path/to/your/mirror -``` - -## Running on a schedule - -Regardless of whether you're using the mirror script or directly calling rsync, you'll need to rerun to keep your mirror up-to-date. We recommend syncing every 5 minutes. - -This is required if you want to submit your mirror to the public list. We will remove mirrors that are not kept up-to-date. - -You can use any method for this, but we recommend systemd timers. A good guide on how to set up a systemd timer can be found [here](https://opensource.com/article/20/7/systemd-timers). - -## Serving your mirror - -All mirrors must be served over HTTPS. You can use a web server of your choosing to serve your mirror, we recommend using [Static Web Server](https://static-web-server.net/) or [Caddy](https://caddyserver.com/). - -## Submitting your mirror - -Once you have your mirror set up, you can submit it to the public mirror list by opening a pull request on the [Tetsudou repository](https://github.com/terrapkg/tetsudou). - -The public mirror configuration is stored in the `repos/` directory. Each JSON file represents a repository that can be mirrored. You can add your mirror in the appropriate JSON files. -If you're mirroring all repositories (the default), you ned to add your mirror to all JSON files. - -Here is an example of an entry: - -```json -{ - "url": "repos.fyralabs.com/terra43", - "asn": 24940, - "continent": "EU", - "country": "DE", - "lat": 50.5597, - "lon": 6.7705, - "protocols": ["https"] -} -``` - -And here is a table of what each field means: -| Field | Meaning | Example | -| ------- | ------------ | ------- | -| url | The URL of your mirror, do not include the protocol. | `repos.fyralabs.com/terra43` | -| asn | Your Autonomous System Number (ASN). | `24940` | -| continent | The shortcode of the continent your mirror is located on. | `EU` | -| country | The shortcode of the country your mirror is located in. | `DE` | -| lat | The latitude of your mirror. | `50.5597` | -| lon | The longitude of your mirror. | `6.7705` | -| protocols | The protocols your mirror supports, only `https` is supported. | `["https"]` | - -### Notes - -- You can use a service like [ipinfo.io](https://ipinfo.io/) to get your ASN, continent, country, latitute, and longitude from your server's IP address. -- The location doesn't have to be exact, but it should be close to your actual location. - -#### [Next Up: Ultramarine Anywhere →](/en/anywhere/anywhere) - -#### [← Back To: Code Contributions](/en/contributing/hacking) diff --git a/src/content/docs/en/linux/filesystem.mdx b/src/content/docs/en/linux/filesystem.mdx deleted file mode 100644 index a34e445e..00000000 --- a/src/content/docs/en/linux/filesystem.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: The File System -description: "An overview of the file system in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -There are a few notable differences in how files work on Linux when compared to Windows or macOS. - -The most noticeable difference is case sensitivity. Windows and macOS are case-insensitive, meaning that `FOLDER` and `Folder` are the same folder. Linux on the other hand is case-sensitive, so `FOLDER` and `Folder` are two different folders. - -In Linux, and more widely, UNIX, everything is a file. Unlike Windows which has other object types to represent physical devices. - -## The File System Hierarchy - -Linux has a standardized file system hierarchy called the [*Filesystem Hierarchy Standard*](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard) (FHS). The FHS is contained within `/` (called root.) Root doesn't only contain normal files, but also physical devices, virtual devices, and various other special files that control the system itself. - -It should also be noted that Linux uses a forward slash (`/`) to represent going deeper in a directory, unlike Windows which uses a backslash (`\`) - -The directory structure is as follows: - -| Directory | Description | -| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| / | The root directory with the all the other directories and files. This is as far back as you can go | -| /bin | Executables and command binares required for a functioning system. Most applications installed from RPM end up here. | -| /boot | The bootloader and files used during early boot process. May usually be in a seperate partition. | -| /dev | Special device files for various purposes (`/dev/sda` for a drive, `/dev/null` for blank data, `/dev/random` for pseudo-random data, `/dev/tty` for terminal sessions, etc). | -| /etc | System-wide settings and configuration files. | -| /home | User files. This is where your stuff lives! | -| /lib | Libraries required for executables in `/bin` to function. May be also named `/lib`. | -| /media | Mount points for when the system mounts removable media, such as USB drives, SD cards, etc. | -| /mnt | Temporary mount points for media. Usually used when manually mounting a drive. | -| /opt | Optional packages that may be installed by the user. Most packages don't actually install here. | -| /proc | Process data and kernel information for inter-process communication managed by the kernel. | -| /root | User data for the root user. Don't confuse this with `/` (root) | -| /sbin | Executables for system tasks. | -| /srv | Shared service data used by server processes, such as web servers and NAS/File servers. | -| /tmp | Temporary data. | -| /usr | Shared application data used by all users. | -| /var | Variable data used by system processes. | - -## The Home Directory - -The home folder is the place where your personal data, and most of your apps are stored. It's a folder located in the `/home` directory named after your username. It is similar to the `Users` folder in Windows. - -In Linux, the home folder is used more than in Windows, as it stores all user-specific data, settings, and the majority of your apps (Flatpaks). The system folders are only used when making system-wide changes or installing applications from DNF or an RPM File. - -## Virtual Memory - -[Virtual memory](https://en.wikipedia.org/wiki/Virtual_memory) is a feature in Linux and other operating systems that allows the system to use a portion of the disk as RAM. This is useful when the system runs out of RAM and needs to use the disk as a temporary storage for data. - -Swap comes with many issues, for example, it can reduce the lifespan of lower-cost SSDs, and is too slow on hard drives. To combat this Ultramarine uses memory compression [(zram specifically)](https://en.wikipedia.org/wiki/Zram). - -By default, we compress to .5x of your physical memory. (e.g. 16gb physical memory=8gb zram) - -Although this may sound magical, it does come at the cost of your CPU working a little bit harder. Luckily this is not very noticeable on modern computers. - -[Learn more about zram →](https://en.wikipedia.org/wiki/Zram) - -## File system formats - -Ultramarine Linux supports a wide variety of file systems, and can be configured to use any of them during installation. - -It currently supports most file systems that are supported by the Linux kernel, including: - -- ext2, ext3, ext4 -- Btrfs -- XFS -- NTFS -- FAT32 - -And extra file system drivers can be installed, such as: - -- ZFS - -Ultramarine's installer is configured to use Btrfs by default. Btrfs is a modern filesystem with snapshots, virtual volumes, journaling, error correction and compression. - -By default, the installer will use all the available space on the disk. 500mb is dedicated to the EFI boot partition (2mb on BIOS systems, 16mb on x86 Chromebooks, and 64mb on ARM Chromebooks), 1gb for /boot, a Btrfs volume uses the rest of the space on the selected disks. -It then creates 2 subvolumes, one for the root directory `/`, and one for the home directory `/home`, which will share the same space but have different filesystem settings. - -### Remote Filesystems - -Ultramarine Linux can also mount remote file systems from a remote server or NAS, using the NFS, SFTP, SMB, and WebDAV protocols. - -#### [Next Up: Device Files →](../linux/devicefiles) - -#### [← Back To: What is Linux?](../linux/overview) diff --git a/src/content/docs/en/linux/permissions.mdx b/src/content/docs/en/linux/permissions.mdx deleted file mode 100644 index 4c67df00..00000000 --- a/src/content/docs/en/linux/permissions.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Permissions -description: "How permissions work on Linux." ---- - -On Linux, permissions are used to determine who can read, write, and execute files, or do certain actions. - -Users are separated into various groups with different IDs, and each file or action can be assigned a permission level. - -A user can be assigned a permission level that is higher than the permission level of the group they are in. And users in a group can do certain things that other users cannot. - -However, users in UNIX-like systems are more akin to a principal, as these "users" may not actually be a person, but a program. - -Files are owned by a user and can be assigned a permission level. The user who owns the file can modify the file and modify the permissions of the file. - -Permission levels are displayed in octal and are represented by several digits. The first digit is the owner, the second is the group, and the third is the other users. Permissions range from 0 to 7, with 0 being no access, and 7 being full access. - -## The Root User - -The root user (or the superuser) is a special user that grants access to all files and actions. It is akin to the Administrator on Windows. - -To execute commands as a superuser, use the `sudo` command, followed by the command you want to execute. - -```bash -sudo dnf install vim # This will install vim as the root user -``` - -#### [Next Up: Software and Package Management →](/en/linux/software) - -#### [← Back To: Device Files](/en/linux/devicefiles) diff --git a/src/content/docs/en/linux/securityprivacy.mdx b/src/content/docs/en/linux/securityprivacy.mdx deleted file mode 100644 index 56cd977b..00000000 --- a/src/content/docs/en/linux/securityprivacy.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Security and Privacy -description: "How Ultramarine keeps you safe" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Mandatory Access Controls - -Ultramarine uses SELinux, a software that implements Mandatory Access Controls. This prevents applications (and users) from accessing files they shouldn't be able to. - -Users are usually required to have root access to modify system files, and even then, SELinux may prevent you from doing so unless you have set the correct contexts for the files. - -By default, SELinux is in "Enforcing" mode, which means that it will prevent you (and others) from modifying system files unless you have the correct permissions. This shouldn't cause any issues. If you would like to disable SELinux you can run `sudo setenforce 0`. We don't recommend this as it makes your system less secure. - -[Learn more about SELinux →](https://www.redhat.com/en/topics/linux/what-is-selinux) - -[Learn more about Permissions →](/en/linux/permissions) - -## Privilege Control - -Ultramarine includes polkit, a tool used to manage privilege elevation. If you've ever gotten a graphical password prompt on your system, you've interacted with polkit. - - - -Use the `pkexec` command instead of `sudo` to give polkit a try. - - - -polkit also manages communication between privileged and non privileged applications. - -## Disk Encryption - -Ultramarine offers the option to encrypt your entire disk at install time. This protects your data from physical attacks and theft. - -## Sandboxing - -When you install an app as a Flatpak, it's contained within a sandbox, meaning it can't see what other apps are doing, and can't see files it isn't allowed to. - -## Restricted Memory Access - -Ultramarine and Fedora restrict access to physical memory. This should prevent most memory injection attacks. - -#### [Next Up: Ultramarine Release Notes, Ultramarine 42 Upgrades →](/en/release/42-upgrades) - -#### [← Back To: SSH](/en/linux/ssh) diff --git a/src/content/docs/en/linux/shell.mdx b/src/content/docs/en/linux/shell.mdx deleted file mode 100644 index f7408978..00000000 --- a/src/content/docs/en/linux/shell.mdx +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: The Shell -description: "How the shell works in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -The shell is a command line interface to the operating system. It is a program that allows you to directly execute commands and interact on deeper level. - -You may be familiar with bash from other Linux distributions. Ultramarine uses the [zsh](https://en.wikipedia.org/wiki/Z_shell) instead of bash. We also use the [Starship Prompt](https://starship.rs/) to provide additional convenience features like displaying the current git branch. - - -
- To learn more about shell scripting, you can watch this Bash introduction - video by Fireship here: - - NOTE: The Z shell is mostly compatible with Bash, so most of the knowledge you - will learn will be mostly applicable in Ultramarine Linux. -
-
- -## Interacting with the Shell - -To start using the shell, open the Terminal app. - -![The GNOME Terminal](/assets/terminal.png) - -You will be greeted with a prompt, simply type in the command you want to execute, and press `Enter⏎`. - -To change directories, type `cd` followed by the path you want to change to. - -```zsh -cd /home/user/Documents -``` - -To list the contents of a directory, type `ls` followed by the path of the directory of which you want to list the contents of. - -```zsh -ls /home/user/Documents -``` - -The directory path is an optional argument. Running `ls` with no arguments will print the contents of the current working directory (the folder you `cd`ed into). - -The `ls` command, especially, has a lot of useful flags (i.e. execute `ls -a`, `-a` being the flag). Below is a table of the most important flags for `ls`. - -| Flag | Modification | -| :--- | :---------------------------------------------------------------------------- | -| `-a` | List all files in a directory, including hidden files which begin with a `.`. | -| `-d` | List specified directories without listing their content (try `ls -d /`). | -| `-t` | Sort the output in the order of modification time; latest first. | -| `-r` | Sort output in reverse order. | -| `-l` | List one file per line. Also display information about the files listed. | - -The output of `ls -l` includes columns of information about each file in the following order: file type, permissions, number of symlinks, file owner, file size, date of last modification, and file name. - -``` -total 4 -drwxr-xr-x 2 bob bob 4096 Jan 1 13:00 dir --rw-r--r-- 1 bob bob 0 Jan 1 12:00 file --rwxrwxrwx 1 ann ann 1337 Jan 1 11:00 file2 -``` - -Symbolic links (symlinks) are, as the name would imply, links between files. Changes to files are synced between symlinks. To create a symlink between two files, type `ln`, followed by the `-s` flag and two arguments: one being the original file, and the other being the path to the new symlink. - -```zsh -ln -s file newfile -``` - -From now on, when `file` is changed, the change will also be applied to the linked `newfile`. - -To read a file to the terminal, type `cat` followed by the path to the file. - -```zsh -cat /home/user/Documents/README.md -``` - -To delete a file, type `rm` followed by the path to the file. - -```zsh -rm /home/user/Documents/README.md -``` - -To delete a full directory, recursively delete it by typing `rm -r` followed by the path to the directory. - -```zsh -rm -r /home/user/Documents -``` - - - Most users will usually execute `rm -rf` instead of `rm -r`. The `-f` flag is - used to force the deletion of a file or directory. - - -To create a new file, type `touch` followed by the path to the file. - -```zsh -touch /home/user/Documents/newfile.txt -``` - -To create a new directory, type `mkdir` followed by the path to the directory. - -```zsh -mkdir /home/user/Documents/newdir -``` - - - To create a new directory inside of another new directory (i.e. - `.../newdir/newdir2`), execute `mkdir` with the `-p` flag. - - -To move or rename a file or directory, type `mv` followed by the path to the file or directory, and then the new path. - -```zsh -mv /home/user/Documents/newfile.txt /home/user/Documents/newfile2.txt -``` - -To copy a file and optionally rename the copy, type `cp` followed by the path of the file, and then the path to the new file. - -```zsh -cp file newfile -``` - - - To copy a directory, type `cp` with the `-r` (recursive) flag. - - -For both the `cp` and `mv` commands, you may move multiple files into a directory at once. The target directory must exist. - -```zsh -mv file file2 dir dir2 /path/to/target/dir/ -cp -r file file2 dir dir2 /path/to/target/dir/ -``` - -To know more about each command, open the manual by typing `man` followed by what you want to learn about - -``` -man sudo -``` - -This will open `less`, an app that allows you to read through long lines of text as a scrollable page. - -To exit `less` press `q`. - -Most commands will also have a `-h` or `--help` flag, which tells you more about the command. - -## The Pipeline - -Linux offers a way for inter-process communication through pipes. - -The pipeline you to transfer data from one process to another, and is used to execute commands in parallel. - -```zsh -echo "Hello World" | wc -w -``` - -This calls the `wc` (word count) command, which counts the number of words in the text. Then pipes the output of `echo` to it, which then outputs the number of words. This is a very simple example of a pipeline. - -A named pipe is created by using `>` instead of `|`. - -```zsh -echo "Hello World" > pipe.txt -``` - -This pipes the output of `echo` to the named pipe `pipe.txt`, which is now a file. - -## Executing a File - -To execute a program, you must first make sure that the file is executable. This is done by using the `chmod` command. - -```bash -chmod +x /path/to/exec -``` - -Then you can execute the file by directly pointing to it. - -```bash -/path/to/exec -``` - -For files in your current folder, you must use `./` before the file name. - -```bash -./exec -``` - - - Executables are often moved into a directories listed in the `$PATH` variable - (run `echo $PATH`). The filenames of executables in `$PATH` can be executed as - commands (i.e. `custom-command` will run `/usr/local/bin/custom-command`) - - -#### [Next Up: SSH →](/en/linux/ssh) - -#### [← Back To: Software and Package Management](/en/linux/software) diff --git a/src/content/docs/en/linux/software.mdx b/src/content/docs/en/linux/software.mdx deleted file mode 100644 index ee4521d4..00000000 --- a/src/content/docs/en/linux/software.mdx +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Software and Package Management -description: "How to manage software on Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -There are many different ways to install software on Linux. - -## The Package Manager - -Unlike Windows, most software for Ultramarine is stored in online collections of software called repositories. You can browse and install software (packages) from these repositories using something called a package manager. - -### Flatpaks - -Flatpak is the primary package manager for regular apps. It installs applications in a sandbox, keeping them separate from anything they don't need to access. - -Flatpaks can be installed from **Software** on Budgie, GNOME, and Xfce, and **Discover** on Plasma. - -You can browse the available software in these app stores, or on the [Flathub website](https://flathub.org/). - -Most desktop apps should be installed as a Flatpak, but in some cases, like with Steam, IDEs, or other apps that require access to the system, they may not work. The following sections will help with software in other formats. - -### Software Downloaded from the Internet - -Sometimes, the software you need may come as a package file downloaded from the internet. - -#### RPM Packages - -To install RPMs simply double-click the downloaded file in the file manager. - -#### AppImages - -1. Install AppImage Launcher from **Software** or **Discover**. - -2. Double-click the AppImage file and you're done! - - - -AppImages are not automatically updated and may have issues communicating with other apps and the system. We recommend looking for a Flatpak or RPM instead. - - - -### Snap - -Snap is a package manager made by Canonical. It contains a large amount of proprietary applications that you may not be able to find elsewhere. - - - -Snap may cause your system to run noticeably slower! - - - -To get started, install Snap. - -```bash -sudo dnf install snapd -``` - -Then, verify snap is working - -```bash -sudo snap install helloworld -helloworld -``` - - - -Snap packages can load slowly and may not work on editions other than GNOME. We recommend avoiding Snaps. - - - -### DNF - -Ultramarine uses the DNF package manager. While this package manager primarily handles system software (like the kernel, and your desktop environment) it can install user apps as well. - -```bash -sudo dnf install steam # Install Steam -``` - -You can also install groups of packages, like full desktop environments or a suite of tools for music production, using the `dnf groupinstall` command. - -```bash -sudo dnf groupinstall "Audio Production" # installs multiple packages at once, in this case a suite of music/audio production tools -``` - -For a full list of available groups, run `sudo dnf group list` - -#### [Next Up: The Shell →](/en/linux/shell) - -#### [← Back To: Permissions](/en/linux/permissions) diff --git a/src/content/docs/en/linux/ssh.mdx b/src/content/docs/en/linux/ssh.mdx deleted file mode 100644 index 7a86c274..00000000 --- a/src/content/docs/en/linux/ssh.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: SSH Secure Shell -description: "An overview of the SSH utility." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Secure Shell ("SSH") is a tool used to access a shell on a remote device. - -## SSH overview - -SSH uses a client/server model where one computer acts as an SSH server[^1] and allows other computers to connect. - -![Example SSH Client and Server](/assets/ssh.png) - -## Connecting to an SSH Server - -To access a device remotely, the `ssh` command is run from [the shell](/en/linux/shell), mostly used with this format: - -```zsh -ssh [username@] -``` - -If you don't specify a username then SSH will attempt to connect you using the username with which you are logged in. Here are some examples: - -- `ssh myuser@myserver.com` - - This will attempt to connect to the server at myserver.com using the username myuser -- `ssh myuser@192.168.1.2` - - This is just like the example above except you can also specify an IP address instead of a hostname -- `ssh myserver.com` - - This will attempt to connect to the SSH server at myserver.com using your current username - -When using any of the above commands, once connected to the remote server you'll be prompted for a password. - -## Running Your Own SSH Server - -Start by installing the SSH server: - -```zsh -sudo dnf install openssh-server -``` - -Then start the server using: - -```zsh -systemctl enable --now sshd -``` -You will be prompted to enter your password, enter it. - -Once the above command is run, your machine will begin listening for incoming connections on port 22. You can verify that the SSH server application started correctly by using the command - -```zsh -systemctl status sshd -``` - -You should see output similar to this: - -```zsh -● sshd.service - OpenSSH server daemon - Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) - Drop-In: /usr/lib/systemd/system/service.d - └─10-timeout-abort.conf - Active: active (running) since Sun 2024-04-07 14:00:20 EDT; 44min ago - Docs: man:sshd(8) - man:sshd_config(5) - Main PID: 1065 (sshd) - Tasks: 1 (limit: 4396) - Memory: 156.0K - CPU: 50ms - CGroup: /system.slice/sshd.service - └─1065 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups" - -Apr 07 14:00:20 ultramarine systemd[1]: Starting sshd.service - OpenSSH server daemon... -Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on 0.0.0.0 port 22. -Apr 07 14:00:20 ultramarine sshd[1065]: Server listening on :: port 22. -Apr 07 14:00:20 ultramarine systemd[1]: Started sshd.service - OpenSSH server daemon. -``` - -Check for the field that says `Active: active (running)` to ensure that the SSH server is listening for incoming connections. - -If you'd like to stop the SSH server, you can do so with - -```zsh -sudo systemctl stop sshd -``` - -You should see output similar to this: - -```zsh - -○ sshd.service - OpenSSH server daemon - Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled) - Drop-In: /usr/lib/systemd/system/service.d - └─10-timeout-abort.conf - Active: inactive (dead) since Sun 2024-04-07 14:50:24 EDT; 3s ago - Duration: 50min 4.206s - Docs: man:sshd(8) - man:sshd_config(5) - Process: 1065 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS) - Main PID: 1065 (code=exited, status=0/SUCCESS) - CPU: 58ms - -Apr 07 14:50:24 ultramarine systemd[1]: Stopping sshd.service - OpenSSH server daemon... -Apr 07 14:50:24 ultramarine sshd[1065]: Received signal 15; terminating. -Apr 07 14:50:24 ultramarine systemd[1]: sshd.service: Deactivated successfully. -Apr 07 14:50:24 ultramarine systemd[1]: Stopped sshd.service - OpenSSH server daemon. -``` - -#### [← Back To: Software and Package Management](/en/linux/software) - -[^1]### A Note about the Word "Server" -It's common to hear the word "server" used but not understand exactly what is meant. Here are a couple examples of how "server" can be used: - -- It can refer to a physical machine somewhere - - Ex: Our email server lost power over the weekend. -- It can refer to a specific _application_ running on one machine (or even a number of machines across the world!) - - Ex: The SSH server is up so that users can connect. - -In this guide we'll try to make it clear to which we're referring. - -#### [Next Up: Security and Privacy →](/en/linux/securityprivacy) - -#### [← Back To: The Shell](/en/linux/shell) diff --git a/src/content/docs/en/release/41-upgrades.mdx b/src/content/docs/en/release/41-upgrades.mdx deleted file mode 100644 index 1d265d83..00000000 --- a/src/content/docs/en/release/41-upgrades.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Early Upgrades for Ultramarine 41 -description: "A temporary notice for the 40 to 41 upgrade path." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -We're proud to announce that upgrades to Ultramarine Linux 41 (Cyberia) are ready right now in your edition's app store! - - - In Ultramarine 40, the `dnf` command uses dnf5, which may break certain - release upgrades. Upgrade graphically, or use `dnf4`. - - - - Raspberry Pi users should wait to upgrade, we will have more information for - you soon. - - -Ultramarine 41 comes with the usual desktop and under-the-hood changes for our existing users. In addition, Flagship and Xfce Edition are switching to Slick greeter from LightDM-GTK, this will happen automatically when you upgrade. - -This release also comes with umcli, more information to come! - -We know this seems lackluster, but a lot of our changes are for new installs and hardware enablement this time around, so stay tuned! - -## Upgrading - -Unlike previous releases, everything is now handled in your edition's app store. If you're on Flagship, GNOME, or Xfce, it's called Software. On Plasma, it's called Discover. - -You may need to update your copy of Ultramarine 40 before the upgrade will become available. - -## Command Line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf4 system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf4 upgrade --refresh -sudo dnf4 install dnf-plugin-system-upgrade -sudo dnf4 system-upgrade download --releasever=41 -sudo dnf4 system-upgrade reboot -``` - -## Wallpaper Contest - -Congratulations to im.j for submitting the team's favorite wallpaper, and winning the community wallpaper contest with 'Paradise'! This wallpaper will be available after you upgrade. - -![](/assets/paradise.png) - -Left: Light Mode | Right: Dark Mode - -If your favourite submission didn't win, don't fret, they'll be available in an extras package soon! - -## Getting Support - -If you need any help please reach out in [one of our chats.](/en/community/community/) diff --git a/src/content/docs/en/release/42-upgrades.mdx b/src/content/docs/en/release/42-upgrades.mdx deleted file mode 100644 index dce818d4..00000000 --- a/src/content/docs/en/release/42-upgrades.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Upgrades for Ultramarine 42 -description: "A temporary notice for the 41 to 42 upgrade path." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -We're proud to announce that upgrades to Ultramarine Linux 42 (Heart of Gold) are ready right now in your edition's app store! - -Ultramarine 42 comes with the usual desktop and under-the-hood changes for our existing users. - -## Upgrading - -Per usual, everything is handled in your edition's app store. If you're on Flagship, GNOME, or Xfce, it's called Software. On Plasma, it's called Discover. - -You may need to update your copy of Ultramarine 41 before the upgrade will become available. - -## Command Line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf install dnf-plugin-system-upgrade -sudo dnf system-upgrade download --releasever=42 -sudo dnf offline reboot -``` - -### Upgrading Ultramarine WSL System Versions - -WSL works a bit differently, to upgrade Ultramarine 41 WSL, run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf distro-sync --releasever=42 -``` - -## Getting Support - -If you need any help please reach out in [one of our chats.](/en/community/community/) - -#### [Next Up: Errata →](/en/release/errata) - -#### [← Back To: Linux Concepts, Security and Privacy →](/en/linux/securityprivacy) diff --git a/src/content/docs/en/release/upgrade-to-ultramarine-40.mdx b/src/content/docs/en/release/upgrade-to-ultramarine-40.mdx deleted file mode 100644 index 5bad807c..00000000 --- a/src/content/docs/en/release/upgrade-to-ultramarine-40.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Upgrade to Ultramarine 40 -description: "A temporary notice for the 39 to 40 upgrade path." ---- - -This page is a temporary notice for upgrading Ultramarine 39 to 40. -For this release cycle, we've decided to release an upgrade path before the full distribution release. -This should let existing users enjoy the new set of packages in 40 sooner. -A full blog post detailing changes will be published for the full distribution release. - -## Flagship, GNOME, and KDE Editions - -You can use the editon's graphical app store to upgrade your system to 40. -On Flagship and GNOME, this will be GNOME Software, while on KDE, this will be Plasma Discover. - -You might need to update your system normally before the upgrade to 40 shows up in the app store. - -## Pantheon Edition - -The Pantheon upgrade path isn't ready yet. -While all of the required packages are in the UM and Terra repositories, the Pantheon desktop environment is broken for a variety of reasons. -We are currently working with upstream and other partners to resolve this, but it's possible that Pantheon may be skipped, deprecated, or deferred until mid-cycle. -If you are interested in contributing to Ultramarine Pantheon, please join [our chats](en/community/community) and let us know! - -## Command line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf install dnf-plugin-system-upgrade -sudo dnf system-upgrade download --releasever=40 -sudo dnf system-upgrade reboot -``` diff --git a/src/content/docs/en/setup/bioskeys.mdx b/src/content/docs/en/setup/bioskeys.mdx deleted file mode 100644 index b42540a0..00000000 --- a/src/content/docs/en/setup/bioskeys.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: BIOS Keys -description: "How to enter the BIOS or Boot Menu on various Computers" ---- - -These are the keys (or combination of keys) used to enter the boot menu or UEFI/BIOS settings on different computers. - -| Manufacturer | UEFI/BIOS | Boot Menu | Notes | -| ---------------------- | ------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Acer | F2 or Del | Esc, F9, F12 | | -| ASRock | Del, F2 | F11 | | -| ASUS | F2 or Del | Esc, F8 | | -| Chromebooks (UEFI ROM) | Esc | - | Requires [mrchromebox UEFI Full ROM] firmware (coreboot) to be flashed. Boot menu can be accessed from the UEFI menu. | -| Dell | F2 | F12 | | -| Dell (Alienware) | F2 | F12 | | -| Dell (Tablets) | Volume Down+Power | Volume Up+Power | | -| ECS | Del | F7 | | -| EVGA | Del | F7 | | -| Gateway | Del, F1, F2 | F12 | | -| Gigabyte | Del, F2 | F12 | This includes Aorus motherboards | -| GMKtec | Esc, Del | F7 | | -| HP | Esc, F10 | Esc, F9 | | -| HP (Compaq) | F10 | F9 | | -| Huawei | F2 | F12 | | -| Intel | F2 | F10 | | -| Lenovo (Desktops) | F1 | F12 | | -| Lenovo (Laptops) | F1+Enter, F2 (or Fn+F2), Novo Button | F12, Novo Button | | -| Lenovo (ThinkPad) | F1, Startup Interrupt Menu | F12, Startup Interrupt Menu | You can (and may need to) access the BIOS/UEFI and boot menus from the Startup Interrupt Menu, which is accessed by pressing Enter (or ThinkVantage when present). | -| Macs (Intel) | - | Hold Option (⌥) or Alt | You can change NVRAM variables inside the OS. If you know what you're doing, power to you. | -| MSI | Del | F11 | | -| Microsoft (Surface) | Hold Volume Up | - | There is a boot menu available in the UEFI Settings. Volume Up should be held after a reboot is initiated. | -| Origin PC | F2 | F2 | | -| Panasonic (Toughbook) | F2 | Del | There is a boot menu in the 'exit' screen of the bios. | -| Panasonic (Let's Note) | F2, Del | Enter | | -| Razer | Del, F1 | Esc, F12 | | -| Samsung | F2 | F10 | | -| Sony (Vaio) | F1, F2, F3, Assist | Esc, F10, F11, Assist | Use the Assist Button when the computer is fully off, not in the process of booting. | -| Supermicro | Del, F4, F11 | F11 | | -| System76 | F2 | F7 | | -| Toshiba | F2 | F12 | | -| Sharp (Dynabook) | F2 | F12 | Some Toshibas will be branded as Dynabook, this is because Sharp recently purchased the brand. The BIOS keys are the same. | -| TUXEDO | Esc, F2 | F7 | | -| Vaio | F3, F4 | F11 | | -| Zotac | Del | F8 | | - -#### [Next Up: Installation →](/en/setup/installation) - -#### [← Back To: Getting Ultramarine](/en/setup/getting) - -[mrchromebox UEFI Full ROM]: https://docs.chrultrabook.com/docs/firmware/about.html#rw-legacy diff --git a/src/content/docs/en/setup/broadcom-realtek.mdx b/src/content/docs/en/setup/broadcom-realtek.mdx deleted file mode 100644 index 5f7dc33e..00000000 --- a/src/content/docs/en/setup/broadcom-realtek.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Broadcom and Realtek Networking -description: "Information about Broadcom and Realtek Networking on Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Some computers with specific Broadcom or Realtek chipsets may require additional drivers to be installed. These should be automatically installed if you were connected to the internet during installation. - -We can't include these by default as they may break other WiFi devices. - -You'll need to connect to the internet, you can do this via Ethernet or USB tethering from your phone. iPhones will automatically tether over USB when connected, Android phones may require you to switch the USB mode. - -On Broadcom, install `broadcom-wl` and `kmod-wl` - -```shell -sudo dnf install kmod-wl broadcom-wl -``` - -On Realtek, install `kmod-wl` only - -```shell -sudo dnf install kmod-wl -``` - -Then reboot! - -#### [Next Up: NVIDIA →](/en/setup/nvidia) - -#### [← Back To: Post-Installation](/en/setup/postinstall) diff --git a/src/content/docs/en/setup/post-advanced.mdx b/src/content/docs/en/setup/post-advanced.mdx deleted file mode 100644 index 3f072a28..00000000 --- a/src/content/docs/en/setup/post-advanced.mdx +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Advanced Post-Installation Steps -description: Learn how to further configure your Ultramarine Linux installation. ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Use systemd-boot as the bootloader - -Ultramarine Linux currently still uses GRUB as the default bootloader for compatibility reasons. However, if you have a UEFI system, you can simply switch to -systemd-boot, which is a more modern bootloader. - - - This step is optional. You can skip this step if you don't want to use - systemd-boot. Make sure to back up your data and have a live USB ready in case - something goes wrong. Incorrectly configuring a new bootloader can make your - OS unbootable. - - -1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after [Setting up Secure Boot](#set-up-secure-boot) -2. Remove GRUB from protected packages: - -```bash -sudo rm /etc/dnf/protected.d/grub* -``` - -3. Start uninstalling GRUB: - -```bash -sudo dnf remove -y grubby grub2\* memtest86\* && sudo rm -rf /boot/grub2 && sudo rm -rf /boot/loader -``` - -4. Install unsigned systemd-boot binaries and the `sdubby` tool: - -```bash -sudo dnf install systemd-boot-unsigned sdubby -``` - -5. Install systemd-boot to the ESP: - -```bash -# Copy your current cmdline options just in case -cat /proc/cmdline | cut -d ' ' -f 2- | sudo tee /etc/kernel/cmdline -# Install systemd-boot -sudo bootctl install -# Now, reinstall and regenerate the current kernel entry -sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz -# Reinstall the kernel again, just in case we need to trigger some hooks -sudo dnf reinstall -y kernel-core -``` - -6. Reboot your system and make sure it boots correctly, run `sudo bootctl` to check if the boot process is correct. -7. (Optional) Proceed to [Set up Secure Boot](#set-up-secure-boot) if you want to re-enable Secure Boot. - -## Set up Secure Boot - -[Secure Boot] is a UEFI security protocol that secures the boot process by ensuring that -only signed executables are allowed to boot. While Ultramarine Linux's bootloader shim is signed by Microsoft and Red Hat, -you may want to use a different bootloader (i.e systemd-boot or rEFInd) or kernel. In that case, you will need to manually enroll -and sign the files with your own keys. - -Fortunately, there's a tool to automate this called [sbctl]. You can install it from the Terra repository: - - - `sbctl` is only available on Ultramarine/Fedora 40 and later. - - -```bash -sudo dnf install sbctl -``` - -After installing `sbctl`, you can use it to enroll, sign, and manage your Secure Boot keys. For example, to generate a new key and enroll it in your UEFI firmware: - -```bash -# Generate a new key -sudo sbctl create-keys -# Enroll the key -sudo sbctl enroll-keys -``` - -You can then use `sbctl sign` to sign your kernel, initramfs, and bootloader binaries. For example: - -```bash -# Sign the kernel -sudo sbctl sign /boot/vmlinuz-$(uname -r) -``` - -However, once you have installed sbctl, it should've already set up a hook to sign the kernel, initramfs and bootloader binaries automatically on kernel updates. - -After signing the necessary files and enrolling them in your firmware, you can re-enable Secure Boot in your UEFI settings. - -[Secure Boot]: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot -[sbctl]: https://github.com/Foxboron/sbctl - -#### [Next Up: Broadcom and Realtek Networking →](/en/setup/broadcom-realtek) - -#### [← Back To: Post-Installation](/en/setup/postinstall) diff --git a/src/content/docs/en/setup/postinstall.mdx b/src/content/docs/en/setup/postinstall.mdx deleted file mode 100644 index eea5ded1..00000000 --- a/src/content/docs/en/setup/postinstall.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Post-Installation -description: "Things to do after installing Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Creating a User Account - -After Ultramarine is installed and you've rebooted into it, you'll be greeted with the out of box experience, Taidan. - -You'll be guided through a setup process from here, configure your system as you please. -Welcome to Ultramarine Linux! - -## Install NVIDIA Drivers - -If you were connected to the Internet during installation NVIDIA drivers were installed automatically. -If this didn't happen or you missed the chance to enable them on first boot, you can install them with these commands: - -```bash -sudo dnf update # Update the system first, the drivers may not work if you don't. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - -Then, reboot your system. - - - You MUST wait until the process is finished before rebooting. Rebooting too - early might result in a broken driver installation! This may take upwards of - 15 minutes! You can check the progress by running `sudo akmods` - - -### Use NVIDIA Graphics Card as the primary card on Optimus Laptops - -This change is is completely optional. You can skip this step if you don't -want to use your NVIDIA Graphics Card as the primary card, or you do not use a -dual-GPU laptop connected to an external monitor. It may also cause issues -with some applications, such as Steam and Bottles. - -Run the following commands to make your NVIDIA Graphics Card the primary Graphics Card: - -```bash -sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf -sudo sed -i '10i\ Option "PrimaryGPU" "yes"' /etc/X11/xorg.conf.d/nvidia.conf # Add PrimaryGPU = yes to the 10th line of the file. -``` - -Then reboot your system. - -## Install Codecs - -Ultramarine Linux includes codecs for most of the media you'll come across. **You shouldn't need to install any additional codecs.** Most of these packages below should be installed by default, excluding -the VLC and MPV media players, and the `libdvdcss` library. - -However, if you find yourself in the situation where you do not have those codecs (if you converted for example), or require additional codecs other than we have provided (i.e obscure formats, or proprietary codecs not included in any repositories), you can look into the following packages: - -- `x264` and `x265` for better H.264 and HEVC video support - Developed by the VideoLAN (VLC) project. -- [FFmpeg](https://ffmpeg.org/) (`ffmpeg`) - A cross-platform multimedia framework that can manipulate, convert and transcode to and from various media formats. -- [VLC Media Player](https://www.videolan.org/vlc/) (`vlc`) - A free and open-source media player that can play most multimedia files, can also be used to test out the codecs' functionality. -- [MPV](https://mpv.io/) (`mpv`) - A free and open-source media player that can also play most multimedia files. Can be used as a lightweight alternative to VLC. -- [libvpx](https://www.webmproject.org/) (`libvpx`) - A free and open-source codec for VP8 and VP9 video formats. -- [libdvdcss](https://www.videolan.org/developers/libdvdcss.html) (`libdvdcss`) - A library that can be used to read encrypted DVDs. This is not legal in some countries, so please check your local laws before using it. We also do not provide decryption keys for any encrypted DVDs. -- [Opus](https://opus-codec.org/) (`opus`) - A free and open-source audio codec that can be used for both speech and music. Should be installed by default. -- [OpenH264](https://www.openh264.org/) (`openh264`) - A free and open-source codec for H.264 video formats. Should be installed by default, required for WebRTC and partially Firefox. -- [aptX](https://www.aptx.com/) (`pipewire-codec-aptx`) - A proprietary codec for high-quality audio streaming over Bluetooth. Required for wireless Bluetooth audio devices that support it. -- `nv-codec-headers` - NVIDIA's codec headers for encoding and decoding video on NVIDIA GPUs. Required for hardware-accelerated video encoding and decoding on NVIDIA GPUs. May not be used by default assuming you do not have an NVIDIA GPU. -- [LAME](https://lame.sourceforge.io/) (`lame`) - A free and open-source MP3 encoder. Required for encoding MP3 files. -- `PackageKit-gstreamer-plugin` - PackageKit plugin that helps you install the above codec packages using GNOME Software/KDE Discover. - -## Set up Backups - -You may want to back up your files to an external volume, you can use [Pika Backup] or [Déjà Dup] to do so. - -Instructions are available on the [Pika Backup] and [Déjà Dup] websites. - -[Déjà Dup]: https://wiki.gnome.org/Apps/DejaDup -[Pika Backup]: https://apps.gnome.org/PikaBackup/ - -# Advanced Tweaks - -These are tweaks that you probably don't care about, if you don't know what you're doing, skip this section. - -## Use systemd-boot as the Bootloader - -Ultramarine uses GRUB as its bootloader for compatibility reasons. However, if you have a UEFI system, you may switch to -systemd-boot, a modern bootloader. It may even speed up boot! - - - This step is optional. You can skip this step if you don't want to use - systemd-boot. Make sure to back up your data and have a live USB ready in case - something goes wrong. Incorrectly configuring a new bootloader can make your - OS unbootable. - - -1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after you [sign systemd-boot with your own keys.](#secure-boot-with-systemd-boot) -2. Remove GRUB from protected packages: - -```bash -sudo rm /etc/dnf/protected.d/grub* -``` - -3. Start uninstalling GRUB: - -```bash -sudo dnf remove -y grubby grub2\* memtest86\* && sudo rm -rf /boot/grub2 && sudo rm -rf /boot/loader -``` - -4. Install unsigned systemd-boot binaries and the `sdubby` tool: - -```bash -sudo dnf install systemd-boot-unsigned sdubby -``` - -5. Install systemd-boot to the ESP: - -```bash -# Copy your current cmdline options just in case -cat /proc/cmdline | cut -d ' ' -f 2- | sudo tee /etc/kernel/cmdline -# Install systemd-boot -sudo bootctl install -# Now, reinstall and regenerate the current kernel entry -sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz -# Reinstall the kernel again, just in case we need to trigger some hooks -sudo dnf reinstall -y kernel-core -``` - -6. Reboot your system and make sure it boots correctly, run `sudo bootctl` to check if the boot process is correct. -7. (Optional) proceed to [Set up Secure Boot](#secure-boot-with-systemd-boot) if you want to re-enable Secure Boot. - -### Secure Boot with systemd-boot - -If you switch to systemd-boot your bootloader will no longer have Red Hat's signing keys, breaking secure boot. If you'd like to keep using secure boot, you can sign systemd-boot with your own keys. - -Fortunately, there's a tool to automate this called sbctl. You can install it from the Terra repository: - -```bash -sudo dnf install sbctl -``` - -After installing `sbctl`, you can use it to enroll, sign, and manage your Secure Boot keys. For example, to generate a new key and enroll it in your UEFI firmware: - -```bash -# Generate a new key -sudo sbctl create-keys -# Enroll the key -sudo sbctl enroll-keys -``` - -You can then use `sbctl sign` to sign your kernel, initramfs, and bootloader binaries. For example: - -```bash -# Sign the kernel -sudo sbctl sign /boot/vmlinuz-$(uname -r) -``` - -However, once you have installed sbctl, it should've already set up a hook to sign the kernel, initramfs and bootloader binaries automatically on kernel updates. - -After signing the necessary files and enrolling them in your firmware, you can re-enable Secure Boot in your UEFI settings. - -#### [Next Up: Broadcom and Realtek Networking →](/en/setup/broadcom-realtek) - -#### [← Back To: Installation](/en/setup/installation) diff --git a/src/content/docs/en/setup/readymade.mdx b/src/content/docs/en/setup/readymade.mdx deleted file mode 100644 index 1b79da59..00000000 --- a/src/content/docs/en/setup/readymade.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Installation with Readymade Preview -description: "A guide on how to install Ultramarine Linux with the upcoming new installer " ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -After booting into the live system, you will see a dialog box asking you whether to start the installer or continue with the live system. - -![The Welcome Dialog box](/assets/welcome-window.png) - -You can pick whichever you want, and you'll be able to start the installer later by opening the `Install to Hard Drive` application. - -#### [Next Up: Post-installation →](/en/setup/postinstall) - -#### [← Back To: Getting Ultramarine](/en/setup/getting) diff --git a/src/content/docs/en/setup/requirements.mdx b/src/content/docs/en/setup/requirements.mdx deleted file mode 100644 index b7eaf1aa..00000000 --- a/src/content/docs/en/setup/requirements.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: System Requirements -description: "Minimum Requirements for Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Recommended Specifications for Standard PCs - -These are our suggestions for the most basic (daily-driveable) system: - -- 4GB of RAM (8GB or more recommended) -- 64-bit processor (x86_64/amd64) -- 20GB of free disk space (32GB or more recommended) -- Internet connection (for downloading the ISO image, updates, and additional drivers) -- A computer that supports booting from a USB drive -- A USB drive (for creating the bootable media) - -## Minimum Specifications for Raspberry Pi - -- Raspberry Pi 3 or newer -- 4GB of RAM **OR** 1GB of RAM without a desktop environment -- 16GB Class 10 MicroSD Card -- See the [anywhere page](/en/anywhere/rpi) - -## Minimum Specifications for ARM Devices Using UEFI - -- 64-bit processor (aarch64) -- 4GB of RAM -- 16GB of Storage - -## Minimum Requirements - -These requirements are the **_bare minimum_** to run Ultramarine Linux. Using Ultramarine on a computer of this caliber will not be a good time. - -- 1gb of RAM -- 64-bit processor (x86_64 **OR** aarch64) -- 10GB of disk space - -#### [Next Up: Getting Ultramarine →](/en/setup/getting) - -#### [← Back To: Code of Conduct](/en/community/codeofconduct) diff --git a/src/content/docs/en/usage/gaming.mdx b/src/content/docs/en/usage/gaming.mdx deleted file mode 100644 index a8970c28..00000000 --- a/src/content/docs/en/usage/gaming.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Gaming on Ultramarine -description: "Extra instructions for gaming on Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -While Ultramarine Linux is not primarily optimized for gaming, it is still a great platform for gaming, as it already has some performance optimizations applied out of the box, and can be further optimized with some tweaks. - -# Performance - -Gaming performance on Linux will usually be similar (or sometimes even faster) than on Windows, as the Linux kernel is more lightweight and has better memory management. However, some games may not run as well on Linux due to poor optimization or lack of support for Linux. - -Running games under Wine/Proton may help in some cases, but it may also causes issues. Your mileage may vary depending on the game. - -You can refer to [ProtonDB](https://www.protondb.com) to check if your game is compatible with Proton, and to see what tweaks are needed to make it work. - -# Gaming Platforms - -There are several gaming platforms available on Linux. But the most supported one is Steam, which comes with a native Linux client and has a large library of games that support Linux, as well as Proton for running some Windows-only games. - -## Steam - -[Steam](https://steampowered.com) is a great PC gaming platform, and it has native support for Linux. Many game publishers publish their games on Steam, and some even natively support Linux. Steam offers discounts for games published on their platform, and also has a built-in overlay for chatting with friends, taking screenshots, and more. - -Steam runs on the Chromium Embedded Framework (CEF), which essentially means that most of the UI is created using web technologies. - -You can install Steam in 2 ways: - -1. Install the `steam` package from the RPM Fusion repository. (system-wide) -2. Install the Steam flatpak from Flathub. (user-only) - -The first option is recommended, as it has better system integration. However, the second option is also available if you are running Ultramarine OSTree/Kanopy/CoreOS, or if you want to keep Steam isolated from the rest of the system. - -## itch.io - -[itch.io](https://itch.io) is a platform for indie games, and it has a native Linux client. It has a large library of indie games, and some of them are available for free. You can install the itch.io client as a Flatpak from [Flathub](https://flathub.org/apps/io.itch.itch). - -## Epic Games Store, GOG, and Amazon Games - -The Epic Games Store, GOG, and Amazon Games do not have native Linux clients, but you can use the [Heroic Games Launcher](#heroic-games-launcher) to install and run games from these platforms on Linux. - -## EA Desktop/Origin - -EA Desktop (formerly known as Origin) does not have a native Linux client, but you can either use the [Lutris](#lutris) client to install and run games from EA Desktop, or manually install the EA Desktop client using Wine/Proton. - -Using a [Bottles](#bottles) prefix is recommended for EA Desktop, as it allows you to manage a dedicated prefix for all your EA games. - -## Ubisoft Connect/Uplay - -If you still own games on Ubisoft Connect (formerly known as Uplay), you may be able to run some of them on Linux using Wine/Proton. However, some games may not work due to Ubisoft's anti-cheat software. - -See the [Lutris](#lutris) or [Bottles](#bottles) sections for more information on running Ubisoft Connect games on Linux. - -Simply download the Ubisoft Connect client from the official website, and try running it using Wine/Proton. - -### Proton - -If your game does not support Linux, or the Linux version happens to be inferior to the Windows version, you can use Steam's Proton compatibility layer to run Windows games on Linux. Proton is based on Wine, and it is developed by Valve. - -If the game you're trying to play doesn't work on Proton, check back in a week, it's quite possible that it will work after Proton updates or active work from Valve. - -### Slow Download Speeds - -There have been recent reports of slow download speeds on Steam due to issues with the Steam client and HTTP/2, see the relevant [Steam for Linux issue](https://github.com/ValveSoftware/steam-for-linux/issues/10248) for more information. - -If you are experiencing slow download speeds and aren't sure why, you can try disabling HTTP/2 in Steam by adding the following lines to the `~/.steam/steam/steam_dev.cfg` file and restarting steam: - -```plaintext -@nClientDownloadEnableHTTP2PlatformLinux 0 -@fDownloadRatelmprovement ToAddAnother Connection 1.0 -``` - -## Heroic Games Launcher - -The Heroic Games Launcher is a native Linux client for the Epic Games Store and GOG Galaxy. It supports downloading and installing native Linux games from GOG, and running Windows-only games from both GOG and Epic Games Store using Wine/Proton. - -## Lutris - -Lutris is a game launcher for Linux. It supports installing and managing your game library from various sources, including Steam, GOG, EA Origin, and its own community-provided installers. It also supports running Windows-only games using Wine/Proton. - -### EA Desktop - -Games that use EA's Origin platform or EA Desktop can be run using Lutris. You can install the EA Desktop client using the Lutris installer, and then install your games from there. - -### Epic Games Store - -Please refer to the [Heroic Games Launcher](#heroic-games-launcher) section. - -## Bottles - -Bottles is a tool for managing Wine prefixes. It is similar to Lutris, but is more focused on creating and managing Wine prefixes for multiple applications rather than creating each prefix for a single game or application. - -Installing Bottles is only supported as a Flatpak. Any other version of bottles is not supported by the Ultramarine Linux Team. - -## Known Incompatible Games - -These games are known to not work on Ultramarine due to various reasons, such as anti-cheat software, DRM, or API incompatibilities: - -| Game | Anti-Cheat implementation | Reason (if applicable) | Notes | -| --------------------------------------------------- | ------------------------- | ------------------------------- | ---------------------------------------------- | -| _Apex Legends_ | Easy Anti-Cheat | - | Support for Proton recently removed | -| _Fortnite_ | Easy Anti-Cheat, BattlEye | - | Officially unsupported according to Epic Games | -| _Honkai Impact 3rd_ | Tencent Anti-Cheat Expert | - | [^1] | -| _Honkai: Star Rail_ | HoYoProtect | - | [^1] | -| _Infinity Nikki_ | Tencent Anti-Cheat Expert | - | [^1] [^2] | -| _Strinova_ | Tencent Anti-Cheat Expert | - | [^1] [^2] | -| _Phantasy Star Online 2: New Genesis_ (Japan) | Easy Anti-Cheat | - | [^2] | -| _Tom Clancy's Rainbow Six Siege_ | BattlEye, MouseTrap | - | - | -| _The Crew 2_ | Easy Anti-Cheat | - | - | -| _Watch_Dogs_ | Easy Anti-Cheat | - | Single-Player only | -| _Watch_Dogs 2_ | Easy Anti-Cheat | - | Single-Player only | -| _Watch_Dogs: Legion_ | Easy Anti-Cheat | - | Single-Player only | -| _Valorant_ | Vanguard | - | - | -| _League of Legends_ | Vanguard | - | - | -| _Battlefield V_ | EA Anti-Cheat | - | - | -| _Battlefield 2042_ | EA Anti-Cheat | - | - | -| _Need for Speed Unbound_ | EA Anti-Cheat | - | - | -| _Command & Conquer Red Alert 3 & Uprising_ | - | SAGE 2 Path resolver is broken | [^3] | -| _Command & Conquer 3: Tiberium Wars & Kane's Wrath_ | - | SAGE 2 Path resolver is broken | [^3] | -| _Command & Conquer_ games up to _Yuri's Revenge_ | - | DirectDraw compatibility issues | [^4] | - -For more information on other games, you can refer to the [ProtonDB](https://www.protondb.com) website for compatibility reports. - -[^1]: There may be workarounds for these games, but they are not officially supported and you may risk getting banned for its use. The recommended way to play these games is to play on a mobile device or a Windows machine. -[^2]: These games have a known whitelist for the Steam Deck specifically, but does not guarantee that it will work on other Linux systems. -[^3]: You may run this game if you install the game in a path that does not contain periods (e.g. `~/Games/` instead of `~/.local/share/Steam/`). -[^4]: You may need to install DDrawCompat or CnC-DDraw to run this game properly, as it has compatibility issues even with Windows systems. You may also use CnCNet to apply the aforementioned fixes and enable multiplayer. - -#### [Next Up: Localization →](/en/usage/l10n) - -#### [← Back To: Ultramarine Anywhere, Windows Subsystem for Linux](/en/anywhere/wsl) diff --git a/src/content/docs/en/usage/hop.mdx b/src/content/docs/en/usage/hop.mdx deleted file mode 100644 index 1951d302..00000000 --- a/src/content/docs/en/usage/hop.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Switching Desktop Editions -description: "Add/remove the DE/edition with Ultramarine Hop." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Hop is a graphical application -that enables users of Ultramarine to switch between editions or install -multiple desktop environments on their system. - -The source code is available on [GitHub]. - -## Installation - -The package name is `ultramarine-hop` but it is also aliased as `hop`. This -package is available directly in Ultramarine repositories. - -```sh -sudo dnf install hop -``` - -## Using Hop - -1. Open the launcher (usually by pressing `winkey`/`Meta`/`Super`). -2. Type `hop`. `Ultramarine Hop` should pop up as the first option. -3. Select the option. A dialog asking for privileges will pop out. Type in your - password to continue. -4. Select the corresponding action you would like to perform. - - if you would like to add a new desktop environment to your system, click - the first option. This will download and install an extra desktop - environment onto your system. - - if you would like to remove an existing desktop environment on your - system, click the middle option. This will remove the selected desktop - environment from your system. You may only select this option if you have - more than 2 desktop environments installed, otherwise this option will be - greyed out. - - if you would like to switch to another edition, select the last option. -5. Select the corresponding desktop environment / edition. - -[GitHub]: https://github.com/Ultramarine-Linux/hop - -#### [Next Up: umcli →](/en/usage/umcli) - -#### [← Back To: Keyboard Configuration](/en/usage/keyboard-cfg) diff --git a/src/content/docs/en/usage/keyboard-cfg.mdx b/src/content/docs/en/usage/keyboard-cfg.mdx deleted file mode 100644 index 9b96d658..00000000 --- a/src/content/docs/en/usage/keyboard-cfg.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Keyboard Configuration -description: How you may configure your keyboard. ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Layouts - -The default keyboard layout is English (US). You may change the keyboard layout in your desktop's settings. - -If you would like to type in another language, we have a dedicated [localization guide](/en/usage/l10n#inputting-in-another-language). - -## Key remapping - -`keyd` is a key remapping daemon that remaps keys at the kernel level, allowing it to be desktop agnostic and even work in TTY. - -### Steps for simple configuration - -1. Make sure you are a system administrator (i.e. you can run sudo) -2. Create a file `/etc/keyd/default.conf` and paste the example configuration below into it. Save the file. -3. Install `keyd` (from [Terra]): `sudo dnf install keyd` - -Every time you have changed your configurations, you will need to reload them using `sudo keyd reload` - -### Example configuration - -```ini -[ids] - -* - -[main] - -# Maps capslock to escape when pressed and control when held. -capslock = overload(control, esc) - -# Remaps the escape key to capslock -esc = capslock -``` - -Lines starting with a `#` are comments, they will be ignored by `keyd`. - -For more information, read the [Quickstart](https://github.com/rvaiya/keyd?tab=readme-ov-file#quickstart) section from upstream. - -### Advanced configurations - -`keyd` supports more advanced configurations, including - -- Mapping macros -- Key timeouts -- Custom layers / modifier keys (keys that can change behaviours of other keys when held, like shift, ctrl, alt, meta/winkey) - -[Learn More at keyd's Documentation ->](https://github.com/rvaiya/keyd/blob/master/docs/keyd.scdoc) - -[Terra]: https://terra.fyralabs.com - -#### [Next Up: Switching Desktop Editions →](/en/usage/hop) - -#### [← Back To: Localization](/en/usage/l10n) diff --git a/src/content/docs/en/usage/um40-dnf5.mdx b/src/content/docs/en/usage/um40-dnf5.mdx deleted file mode 100644 index d2bc1e4e..00000000 --- a/src/content/docs/en/usage/um40-dnf5.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Dnf5 Is The Default Package Manager In Ultramarine Linux 40 -description: dnf5 is the default package manager in Ultramarine Linux 40 ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Starting with UM40, `dnf5` will replace `dnf-3` as the default package manager. -This is done via the `dnf5-default-package-manager` package provided by the UM40 repositories. - -## Technical Details - -The `dnf5-default-package-manager` package has a `%triggerin` script for `dnf` and `yum`. When these -2 packages get installed/updated, the script will be executed, which will replace `/usr/bin/dnf` and -`/usr/bin/yum` symlinks to point to `/usr/bin/dnf5` instead of `/usr/bin/dnf-3`. - -This change has been proposed on upstream Fedora, but has been delayed to Fedora 41. However, we've -decided this change should be worth a try on UM40. - -## Effects - -By using `dnf5`, users will be able to install, remove and upgrade packages much faster. End-users -shouldn't need to do anything to adapt to this change. - -Since `dnf5` isn't bug-for-bug compatible with `dnf-3`, programs that rely on `dnf-3` should use the -`dnf-3` or `dnf4` command to use the older version of `dnf`. If you are facing compatibility issues -with some apps that rely on the `dnf` symlink instead of the actual `/usr/bin/dnf-3` binary, you are -advised to report this bug to upstreams (i.e. the apps in concern), not `dnf5` or Ultramarine. - -## FAQ - -### Why `dnf5`? - -- `dnf5` provides better performance over `dnf-3` because it's written in C++ instead of Python. -- We hope this change will push apps in the Fedora neighborhood to switch to `dnf5` and at the same - time discover apps that are poorly maintained/written and rely on `dnf`/`dnf-3`. - -### Does UM40 Remove `dnf`? - -- We do not remove `dnf-3`. We only replace the symlinks for `dnf` and `yum` to point to `dnf5`. - -### Wouldn't that Break Compatiblility? - -- If changing only 2 symlinks actually breaks your workflows, either your workflows are poorly made, - or there are some apps you use that rely on the 2 symlinks, which evinces that those apps are - unfortunately poorly made. Change your workflows to adapt to `dnf5` or replace `dnf` with the - actual `dnf-3` binary; or in the latter case, report the issue to the upstream apps in concern. - -- We expect `dnf5` in the future to be supposedly much more compatible with `dnf-3`. Upstream Fedora - has been working hard on making `dnf5` the replacement for `dnf-3`. There are works in progress to - adapt GNOME software for `dnf5`, and to make `dnf5` much more feature-complete. - -### But Some Features are Missing in `dnf5`! - -- There are efforts on making `dnf5` more feature-complete compared with `dnf-3`. You may help speed - this up by [contributing to upstream](https://github.com/rpm-software-management/dnf5/). diff --git a/src/content/docs/en/usage/umcli.mdx b/src/content/docs/en/usage/umcli.mdx deleted file mode 100644 index 60a74306..00000000 --- a/src/content/docs/en/usage/umcli.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: umcli -description: "How to use umcli" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -umcli is a utility included in Ultramarine. It has many planned features, and this is a list of current and planned ones. - -## Current Features - -Syntax: `um` [global options] command [command options] - -#### Global Options - -`-h`, `--help` -- Display the `um` help screen if not attached to commands. Displays the Command's help page if run before a command. Just running `um` will also show the base `um` help screen. - -#### Commands/Features - -`status` -- Displays information about the system. This includes system version info, hardware overview, disk information, system status, network information, and more. - -- `--upload` -- Creates a shareable link to view your system specs online. This information is end-to-end encrypted, auto-expires in 7 days, and not tied to you in any way. -- `--json` -- Outputs status in JSON format. - -`tweaks` -- Manage Ultramarine Tweaks. Tweaks are Ansible playbooks or arbitrary shell scripts that modify the system following a preset. This can be used to configure specific software, change system settings, and more. - -- `list` -- Lists all available tweaks. -- `enable TWEAK` -- Enables a tweak. -- `disable TWEAK` -- Disables a tweak. -- `run TWEAK` -- Runs a script tweak -- `--yes`, `-y` -- Automatically answer yes to all prompts. Use with caution. - -List of umcli Tweaks: - -| Tweak | Type | Function | Notes | -| -------------------------- | ------ | ----------------------------------------- | ------------------------------------------- | -| cleanup-old-kernels | Oneshot | Remove all but the 2 most recent kernels | | -| mtu-probing | Toggleable | Enable MTU probing | | -| openssl-legacy-negotiation | Toggleable | Use unsafe legacy negotiation for OpenSSL | Should only be used if absolutely necessary | -| sudo-pwfeedback | Toggleable | Add `*` feedback when entering in password during a sudo prompt | | -| cachyos-kernel | Toggleable | Install the [CachyOS kernel](https://wiki.cachyos.org/features/kernel/) via the COPR, and enable as default kernel entry | If you are using Secure Boot, you will need to set up `sbctl` according to the CachyOS specification. More info can be found when enabling the tweak | - -## Planned Features - -- umcli wrapper around the Nix language installer. Also pre-configure nix to instantly be able to have an easy to use experience. -- `umcli upgrade`, potentially a wrapper around the `topgrade` package. Would update everything on the system (system packages, flatpaks, firmware, etc.). -- `um get PACKAGE`. A way to easily install packages that are not in a common package repository, but do distribute their own RPMs, or their own repositories. Based on [deb-get](https://github.com/wimpysworld/deb-get) -- And more! - -#### [Next Up: eduroam →](/en/usage/eduroam) - -#### [← Back To: Switching Ultramarine Desktop Editions](/en/usage/hop) diff --git a/src/content/docs/hi/anywhere/android.mdx b/src/content/docs/hi/anywhere/android.mdx deleted file mode 100644 index ecbe9507..00000000 --- a/src/content/docs/hi/anywhere/android.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Android (Anywhere)" -description: "Android Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change - - -Android Devices are very common, and (most of the time) extremely customizable. We do not have a target release or full plan at this time, but we will support in the (hopefully) near future. - -## Implementation - -We are actively debating wether to do pmOS style ports or Halium (like Ubuntu Touch). Join our [community](/en/community/community) if you wanna discuss this! \ No newline at end of file diff --git a/src/content/docs/hi/anywhere/anywhere.mdx b/src/content/docs/hi/anywhere/anywhere.mdx deleted file mode 100644 index 20acab54..00000000 --- a/src/content/docs/hi/anywhere/anywhere.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Ultramarine Anywhere -description: "Our goal is to run Ultramarine Linux on as many devices as possible" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -One of the major focuses of the Ultramarine project is to bring Linux to as many people as possible. -A major part of this is supporting as many devices as possible, through our Ultramarine Anywhere Initiative. -By contributing to Ultramarine Anywhere, you can help us bring Linux to more devices and more people. - - - The pages about this program are more technical than the rest of the wiki. Do - not follow the instructions on these pages unless you know what you're doing. - - -#### If you have any suggestions or comments regarding these pages, don't hesitate to [reach out](/en/community/community). - -## Completed - -Platforms in the **Completed** category are fully supported in Ultramarine and available to use right now! - -- [Microsoft Surface](/en/anywhere/surface) -- [Raspberry Pi 3, 4, and 400](/en/anywhere/rpi) -- [Windows Subsystem for Linux](/en/anywhere/wsl) - -## In Progress - -Platforms in the **In Progress** category are being actively worked on, and will be released soon. For more updates or contributions, check out our [socials](https://fyralabs.com/contact/). - -- [Chromebooks](/en/anywhere/chromebook) -- [XR and Spatial Computing](/en/anywhere/xr) -- [Raspberry Pi 5](/en/anywhere/rpi) -- [Apple Silicon Macs](/en/anywhere/applesilicon) - -## Planned - -Devices in the **Planned** category are being brainstormed, researched, or experimented with, and will (probably) be worked on in the near future. - -- [Android Devices](/en/anywhere/android) -- [Data Centre, Enterprise, and HPC](/en/anywhere/enterprise) -- [RISC-V](/en/anywhere/riscv) - -## Wishlist - -Devices in the **Wishlist** category are platforms we would like to support one day, but are very much up in the air and have not been worked on. - -- [Smart TV Devices](/en/anywhere/ott) -- [Thin Clients](/en/anywhere/thin) -- [Steam Deck](/en/anywhere/steamdeck) -- [Nintendo Switch](/en/anywhere/tegra) -- [NVIDIA Shield](/en/anywhere/tegra) -- [NVIDIA Jetson Microcomputers](/en/anywhere/tegra) - -#### [Next Up: Microsoft Surface →](/en/anywhere/surface) - -#### [← Back To: Ultramarine Contributions, Mirroring](/en/contributing/mirroring) diff --git a/src/content/docs/hi/anywhere/applesilicon.mdx b/src/content/docs/hi/anywhere/applesilicon.mdx deleted file mode 100644 index 0ff33784..00000000 --- a/src/content/docs/hi/anywhere/applesilicon.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Apple Silicon Macs (Anywhere)" -description: "Apple Silicon in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change - - -We are working on porting the Asahi Linux installer to work with Ultramarine. Images that can boot from an external drive that already has Asahi installed are also being worked on. - -## Implementation - -- Potential GUI installer (Readymade from inside macOS?) diff --git a/src/content/docs/hi/anywhere/chromebook.mdx b/src/content/docs/hi/anywhere/chromebook.mdx deleted file mode 100644 index 0f5bdbdf..00000000 --- a/src/content/docs/hi/anywhere/chromebook.mdx +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: "Chromebook (Anywhere)" -description: "Chromebooks in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **In Progress Phase**. All information on - this page is subject to change. Do not follow any instructions unless you know - what you're doing. - - -Chromebooks were an obvious target for Ultramarine Anywhere, despite being mostly -standard hardware, they have custom EC and strange firmware. - -Chromebook support in Ultramarine Linux is provided in partnership with the [Chrultrabook Project](https://chrultrabook.com). - -# x86 - -## How it Works - -Ultramarine Chromebook Edition uses a special bootloader called [Submarine](https://developer.fyralabs.com/submarine) to load the kernel. - -Under the hood, Submarine is an incredibly minimal Linux OS based on [u-root](https://github.com/u-root/u-root), it's only really usable for debug and booting a full distribution. Once Submarine is loaded, we use [LinuxBoot](https://www.linuxboot.org/) to boot a full copy of Ultramarine (and hopefully more distros in the future). - -Now for the big question, how do we do this without modifying the firmware? We take advantage of the way Depthcharge (the ChromeOS firmware) works. We store Submarine in a 16MiB partition on disk, this is normally used by ChromeOS to store a full ChromeOS Kernel and initramfs. Depthcharge doesn't actually check if the contents of the partition are a valid kernel, it just checks for a GPT Header and runs whatever code is found in the partition, in our case, Submarine. - -By default, Depthcharge will only boot code with Google's signing keys, we get around this by enabling the built-in ChromeOS developer mode. - -To summarise, we boot a tiny Linux distribution (Submarine) and use it to launch Ultramarine's vmlinuz and initramfs using kexec. - -## Userland Changes - -Devices in Ultramarine Anywhere try to stick very closely to the standard Ultramarine userland, sometimes we have to deviate from this to make the experience better. - -### Audio Support - -We use WeirdTreeThing's [audio script](https://github.com/WeirdTreeThing/chromebook-linux-audio) and kernel patch to make audio work properly. - -### Default Partitions - -On Chromebooks, we disable swap to extend the life of the eMMC found in most Chromebooks. We create a 16MiB partition containing [Submarine](https://developer.fyralabs.com/submarine) at the start of the disk instead of `/boot/EFI` and `/boot` - -### Keyboard Mapping - -We use [keyd](https://github.com/rvaiya/keyd) to map keys on Chromebooks. - -## Feature Matrix - -| Feature | Functionality | Notes | -| ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| Booting | Working | With [Submarine](https://developer.fyralabs.com/submarine) or [UEFI](https://docs.chrultrabook.com/docs/firmware/) | -| WiFi | Working | | -| Ethernet | Working | | -| Bluetooth | Working | | -| Display | Working | | -| Graphics | Working | | -| Storage | Working | | -| USB | Working | | -| SD | Working | | -| Ports | Working | | -| Power | Working | | -| Touch | Working | | -| Pen | Partial | USI and Wacom Pens work, others may not | -| Audio | Partial | May require [additional setup](https://github.com/WeirdTreeThing/chromebook-linux-audio). Some Chromebooks may not work due to controller issues | -| Keyboard | Working | Some models may have issues on older kernels | -| Touchpad | Working | | -| Webcam | Working | | -| Lid Switch | Partial | Some models may have issues | -| Tablet Mode | Partial | Same reason as lid switch | - -## Unsupported Devices - -| Device | Reason | -| --------- | ------------------------------------------------------------------------------------------------------ | -| Mario | Firmware limitations | -| Alex | Firmware limitations | -| ZGB | Firmware limitations | -| Stumpy | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | -| Lumpy | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | -| Parrot | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | -| Butterfly | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | -| Link | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | -| Stout | Boot partition size limitation (this can be [corebooted](https://docs.chrultrabook.com/docs/firmware/)) | - -These are among the first few generations of Chromebooks, and either use an unsupported firmware, or have limitations preventing us from booting a partition large enough to fit Submarine. - -## Installation - -Ultramarine on Chromebook will be released soon, installation guide for that will be found on a separate menu in this wiki at the time of release. - -## Manual Installation - Note that Ultramarine Chromebook Edition will be a much easier experience once released - - - This method is more technical than our usual wiki content, proceed if you know what you're - doing. We are not responsible for brickage, thermonuclear war, the death of a - pet, etc. - - -This guide assumes you are on x86 and have [Developer Mode](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_mode.md#dev-mode) and [USB Booting Enabled](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md#boot-from-your-usb-disk). We also assume you are using GParted for partitioning tasks. There are alterations you could make to these instructions and still get the same result, this is just what we think is the easiest way. - -### Raw (.img) images: - -1. Download, decompress, and flash an [Ultramarine Raw Image](https://images.fyralabs.com/images/ultramarine/) with a desktop environment (for example, flagship-base-disk-x86_64.img), to a USB Drive or SD Card smaller then the internal disk of your Chromebook. -2. Create a 16MB partition at the END of the disk (for proper resizing after installation). In GParted, do this by making a new partition in the unallocated space, and dragging it all the way to the right while still in the 'Create new Partition' menu. If GParted gives you a 'Libparted Warning,' select 'Fix.' -3. Flash the [submarine-x86.kpart](https://nightly.link/FyraLabs/submarine/workflows/build/main/submarine-x86_64.zip) file to the new partition. -4. Set the partition flags with cgpt (may have to install `vboot-utils`). - -``` -sudo cgpt add -i -t kernel -P 15 -T 1 -S 1 /dev/sdX -``` - -5. Boot the image on the Chromebook. - -You're now inside the Ultramarine install on your USB/SD card. Slowness and lag is expected behavior and does not reflect how Ultramarine will run from internal storage. - -6. Use `dd` to copy the contents of the USB/SD card to the internal storage of the Chromebook. - - - You do NOT need to resize the root filesystem, it should do this automatically upon first boot. Depending on the size of your Chromebook's internal storage, you may need to move the Submarine partition to the end of the disk again, after it is copied to internal. - - -If you need help with `dd` syntax, here are some pointers - - -You're most likely using a USB stick to install to an eMMC Chromebook, which is the command listed below. If you would like to see what devices you have, run `lsblk` in the terminal. If both show as the same device type, remember the USB/SD Card should be the smaller one. To see what different devices present as, go [here](/en/linux/devicefiles/#block-devices). - -``` -dd if=/dev/sda of=/dev/mmcblk0 bs=4M status=progress -``` - -'if' is the input file. '/dev/sda' is the USB stick. 'of' is the output file. '/dev/mmcblk0' is the Chromebook's internal eMMC storage. 'bs=4M' changes the block size from the default 512Bs to 4MBs (makes it transfer faster). 'status=progress' shows the transfer progress in real time. - -If you're using other devices, adjust accordingly. If your're using an SD card to install to eMMC, or a USB stick to install to UFS, both devices will show as 'mmcblkX' (mmcblk 0/1/2), and 'sdX' (sd a/b/c). Adjust the numbers/letters accordingly. - -7. Once `dd` is done, verify the Submarine partition on the internal storage shows 'ChromeOS Kernel' as a flag. You can use the Disks app on Flagship, GNOME, and Xfce, or, KDE Partition Manager on KDE. Simply select the disk and partition, the label should appear under the logical view. - -### ISO Images: - -1. Flash an [Ultramarine ISO Image](https://ultramarine-linux.org/download/) to a USB Drive or SD Card. -2. Flash submarine.bin to another USB Drive or SD Card. -3. Plug in both drives you just flashed to the Chromebook (a USB hub works!). -4. Boot to the installer's live emvironment by pressing Ctrl+U (You shouldn't boot to a boot option that lists a kernel version (ex ultramarine-linux-6.10.0-X-X-X), just boot to 'Ultramarine Linux _EDITION_.' If you still have ChromeOS on the internel disk, it is likely that this will be the 14th entry, if not, it may be the 3rd). If it does not boot, restart and try a different Ultramarine Linux entry. -5. In the live enviornment of the ISO, install as normal. -6. Once the install is done, return to the live environment desktop. Make a new 16MiB ext4 partition, this can be done by resizing the 'root' partition (the largest one). -7. flash [submarine.kpart](https://nightly.link/FyraLabs/submarine/workflows/build/main/submarine-x86_64.zip) to the new partition, and set flags with cgpt (may have to install `vboot-utils`). - -``` -cgpt add -i -t kernel -P 15 -T 1 -S 1 /dev/sdX -``` - -11. Done! - - - Once Ultramarine has been successfully installed onto your Chromebook's internal disk, rebooting will take you back to the ChromeOS recovery screen. To boot to Ultramarine, select 'Boot to Internal Disk' or press Ctrl+D - - -## ARM - -ARM Chromebooks are in heavy development. If you'd like to help test, check out the [ARM Beta Program](/en/chromebook/armbeta). diff --git a/src/content/docs/hi/anywhere/ott.mdx b/src/content/docs/hi/anywhere/ott.mdx deleted file mode 100644 index 6d7d45a2..00000000 --- a/src/content/docs/hi/anywhere/ott.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Smart TV Devices" -description: "Smart TV Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -Smart TV boxes often run Android, which means we can use Halium to port Ultramarine to the unlockable ones. See [the Android page.](/en/anywhere/android) - -This may be limited to FireOS devices as many of them are vulnerable to [mtk-su](https://xdaforums.com/t/amazing-temp-root-for-mediatek-armv8-2020-08-24.3922213/). If you are knowledgable about Smart TV modding/running alternative operating systems, please reach out [here](/en/community/community). diff --git a/src/content/docs/hi/anywhere/riscv.mdx b/src/content/docs/hi/anywhere/riscv.mdx deleted file mode 100644 index 370a12ad..00000000 --- a/src/content/docs/hi/anywhere/riscv.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "RISC-V (Anywhere)" -description: "RISC-V Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -We plan to port to RISC-V architecture as soon as we can get the hardware. If you are a hardware vendor producing RISC-V devices or have a spare RISC-V device, please [reach out](mailto:contact@fyralabs.com) if you'd like to support the Ultramarine RISC-V port. diff --git a/src/content/docs/hi/anywhere/rpi.mdx b/src/content/docs/hi/anywhere/rpi.mdx deleted file mode 100644 index 5d9e6597..00000000 --- a/src/content/docs/hi/anywhere/rpi.mdx +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: "Raspberry Pi (Anywhere)" -description: "Raspberry Pi in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -### Ultramarine Linux currently supports the Raspberry Pi 3 and 4/400. For information on other Pis, see [below](/en/anywhere/rpi#raspberry-pi-5). - -## Selecting a Drive - -The drive you use deeply affects the experience you will have on Ultramarine. - -### Raspberry Pi 3 Series - -Raspberry Pi 3 Series support only microSD cards. Your storage device must be 16GB or larger. - -You should also look for a class 10 SDHC or SDXC microSD. - -### Raspberry Pi 4 Series - -Raspberry Pi 4 Series support microSD cards and USB storage. Your storage device must be 16GB or larger. - -The best experience will be with an SSD connected over an adapter. A USB 3.0 flash drive will be on-par to slightly better then a microSD card. All of the options are good, it's up to your needs. - -## Flashing the Image - -If you're using a Raspberry Pi 4/400, you can skip these steps and use -[Raspberry Pi Imager instead](/en/anywhere/rpi#raspberry-pi-imager). -First, you will need to decompress it. - -- On Linux, run `unzstd *FILENAME.img.zst*`, you may need to install the `zstd` package -- On Windows 11 or ChromeOS, zstd is natively supported. Decompress like you would a Zip file. -- On Windows 10, use 7zip or WinRaR -- On macOS, install `zstd` from [Homebrew](https://brew.sh/) (`brew install zstd`), then `unzstd *FILENAME.img.zst*`. - -Grab a USB stick or SD Card! Use a flasher program to flash Ultramarine to your storage device. [balenaEtcher](https://www.balena.io/etcher/) is an easy cross-platform choice. - -![](/assets/balenaetcher.png) - -Simply select the .img file, the device you're using, and click flash. - -You can also use the Disks application on Flagship, Xfce, and GNOME editions. - -## Raspberry Pi Imager - -- Install [Raspberry Pi Imager](https://www.raspberrypi.com/software/). Note that this should be packaged in your distribution, and it also available on other operating systems, and the Raspberry Pi firmware. We also do not recommend using the flatpak, since it can have permissions trouble when flashing the disk. -- Open Raspberry Pi Imager, select 'Choose Device,' then select 'Raspberry Pi 4.' -- Select 'Choose OS' then scroll down to 'Other General-Purpose OS,' select 'Ultramarine Linux,' then select your edition of choice. -- Select 'Choose Storage,' and select your storage device you would like to flash to. Double check you have the correct device selected, as this is a destructive operation. -- Select 'Next,' then select 'Yes.' -- Once the flash and validation is complete, remove your disk, and insert it into your Raspberry Pi 4. - -![](/assets/rpi-imager.png) - -Your Imager app should look something like this when ready to flash. - -## First Boot - -On first boot, the root file system will automatically be expanded, and you’ll be prompted with a user creation screen. Create your user and you’ll be ready to go! - -That’s it! You’re ready to enjoy Ultramarine on your Raspberry Pi! We’re working hard on making the experience better so stay tuned! - -Raspberry Pi is a very popular series of SBCs. They are cheap, easy to get, run Linux well, and have a large ecosystem of expansion cards (Hats and Bonnets) and accessories. - -Fedora has upstream support for the Pi 4, 400, and 3. Ultramarine Anywhere intends to extend support to the Zero 2 and 5. - -## Packages - -We have Raspberry Pi packages packaged in [Terra](https://terra.fyralabs.com/). We are working on packaging as many as we can, currently included packages: - -- [rpi-utils](https://github.com/raspberrypi/utils), a collection of miscellaneous tools for Raspberry Pis. You may install these individually, or all together as `rpi-utils` -- [rpi-update](https://github.com/raspberrypi/rpi-update), a script to update Raspberry Pi firmware. -- [Picotool](https://github.com/raspberrypi/picotool), a tool for working with RP2040/RP2350 devices. - -We also have a collection of Raspberry Pi's desktop application: - -- [Piclone](https://github.com/raspberrypi-ui/piclone), Utility to back up a Raspberry Pi to an SD card. -- [Bookshelf](https://github.com/raspberrypi-ui/bookshelf), A browser for Raspberry Pi Press publications. -- [Raindrop](https://github.com/raspberrypi-ui/raindrop), Graphical display configurator for Raspberry Pi, using arandr and wlrandr. - -To install any of these: - -``` -dnf install PACKAGENAME -``` - -### Notes - -- RPi4B has a 1GB and 2GB model, we suggest against running a desktop environment on these (Xfce may be alright). -- RPi3B has only 1GB of RAM, and the 3A only has 512MB, we suggest against running a desktop environment (Xfce may be alright). -- The Pi 4 series has native USB boot support. Your experience may be better with a fast USB Drive or SSD connected through an adapter. See [this article](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#usb-mass-storage-boot) for more info. -- If using a USB drive on a Pi 4, ensure it's USB 3.0 or newer and plugged into a USB 3.0 (blue) port. 2.0 will be a significantly worse experience than a microSD. -- If using a microSD card, we recommend using a Class 10 microSD card, your experience will be significantly better than lower classes. -- Your storage device will need to be larger than 9GB (the image is 8.59GB). We suggest 16GB so you have space for software. - -# (Currently) Unsupported Raspberry Pi Devices - -## Raspberry Pi 5 - -The Raspberry Pi 5 is not currently supported in Fedora. We are packaging the official Raspberry Pi kernel (which will also provide a better experience on the other Pi models). - -## Raspberry Pi Zero, 1, and 2 - - - These devices are **Not Supported** due to 32bit CPUs. - - -#### [Next Up: Windows Subsystem for Linux →](/en/anywhere/wsl) - -#### [← Back To: Microsoft Surface](/en/anywhere/surface) diff --git a/src/content/docs/hi/anywhere/steamdeck.mdx b/src/content/docs/hi/anywhere/steamdeck.mdx deleted file mode 100644 index 95a37316..00000000 --- a/src/content/docs/hi/anywhere/steamdeck.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Valve Steam Deck (Anywhere)" -description: "Steam Deck in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -We don't have any handhelds. So for now (and potentially forever) we recommend checking out [Bazzite](https://bazzite.gg/), it shares a base with Ultramarine, has Terra, and is made by our partners at Universal Blue. diff --git a/src/content/docs/hi/anywhere/thin.mdx b/src/content/docs/hi/anywhere/thin.mdx deleted file mode 100644 index b66e279d..00000000 --- a/src/content/docs/hi/anywhere/thin.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Thin Clients (Anywhere)" -description: " Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -Thin client images would be fun, and frankly pretty easy. - -## Implementation - -Very minimal environment with only required packages. OOTB connection protocols (ICA, RDP/VNC, SNMP...) and easy to use installer with connection options built in. - -Minimal login screen with an option for branding, might include device management software. - -Tools and encouragement for enthusiasts. diff --git a/src/content/docs/hi/anywhere/wsl.mdx b/src/content/docs/hi/anywhere/wsl.mdx deleted file mode 100644 index 70ca451f..00000000 --- a/src/content/docs/hi/anywhere/wsl.mdx +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: "Windows Subsystem for Linux" -description: "Ultramarine for Windows Subsystem for Linux (WSL)" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -[Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/about) is a feature in Windows 10 and 11 that, in essence, is a Linux system as a Windows application. - -Ultramarine only supports WSL2. WSL2 is essentially a "lightweight utility virtual machine" running through Hyper-V, Microsoft's hypervisor. This gives Ultramarine full access to the Windows filesystem, and direct hardware access, with performance similar to that of bare metal Linux. - -It is possible to install and run graphical Linux applications, and even full desktop environments. We plan to make running a desktop environment through Ultramarine WSL easier in the future. - -## System Requirements - -WSL2, and by extension Ultramarine WSL, needs the following: - -- Windows 10 (Version 2004/Build 19041), or Windows 11. IPv6 may have issues in Windows 10. -- Hardware Virtualization enabled. All pre-installed Windows 11 computers come with Virtualization enabled. - -To determine your virtualization status, look in Task Manager -> Performance tab -> CPU, and find virtualization information. You can also open a command prompt or PowerShell window and run the following command: - -``` -systeminfo.exe -``` - -Locate the 'Hyper-V Requirements' section, near the bottom. Within that section, locate 'Virtualization Enabled In Firmware: yes/no.' If yes, you are good to go. If no, you will need to enable it in your UEFI/BIOS. - -## Enabling Virtualization - -- Power off your device. -- Press the power button, then press your [BIOS key](/en/setup/bioskeys). -- Locate the virtualization option. This can be in various places depending on the motherboard/manufacturer. Typically, this will be in the CPU configuration menu. Check with your manufacturer if you need help. -- Save and exit. There will typically be a dedicated key to do this, or a select option on the main or exit page. - -Hardware virtualization should now be enabled, and you can proceed to installation. - -## Installing Ultramarine WSL - -### Install using the Microsoft Store - -Open the Microsoft Store, and search 'Ultramarine Linux' in the Microsoft Store app, or use [this link](https://apps.microsoft.com/detail/9PBPG2RDMZB9?hl=en-us&gl=US&ocid=pdpshare) - -Select 'Ultramarine Linux,' verify the author is Fyra Labs, and then select 'Get.' - -After this, Ultramarine WSL will appear as a Windows app. You can select 'Open' from the Microsoft Store window. - -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! - -### Install with WinGet - -Before installing with WinGet, you must install WSL itself. To do this, run the following command in an Administrator PowerShell Window or Windows Command Prompt: - -``` -wsl --install -``` - -Note — this will also install the default Ubuntu WSL distribution. - -After WSL is installed, we can install Ultramarine. Open a PowerShell Window or Windows Command Prompt, and enter the following command: - -``` -winget install ultramarine -``` - -After this, Ultramarine WSL will appear as a Windows application. This will install everything needed for WSL, and Ultramarine WSL, assuming the requirements are met. - -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! - -### Install from the Command Line - -Before installing through the command line, you must install WSL itself. To do this, run the following command in an Administrator PowerShell Window or Windows Command Prompt: - -``` -wsl --install -``` - -Note — this will also install the default Ubuntu WSL distribution. - -After WSL is installed, we can install Ultramarine. Open a non-admin PowerShell Window or Windows Command Prompt, and enter the following command (for x86_64 users): - -``` -curl https://images.fyralabs.com/images/ultramarine/42/ports-wsl-wsl-x86_64.tar.gz -o ultramarine.wsl; wsl --install --from-file ultramarine.wsl -``` - -For aarch64 users: - -``` -curl https://images.fyralabs.com/images/ultramarine/42/ports-wsl-wsl-aarch64.tar.gz -o ultramarine.wsl; wsl --install --from-file ultramarine.wsl -``` - -This command will download the latest available Ultramarine WSL build, output the file as `ultramarine.wsl`, then install `ultramarine.wsl` with WSL. - -Be sure to replace the file name in the URL to match your architecture. If you are on x86_64, you don't need to change anything. If you're using AArch64 (Windows on ARM), change to `wsl-wsl-aarch64.wsl`. - -After this, Ultramarine WSL will appear as a Windows application. This will install everything needed for WSL, and Ultramarine WSL, assuming the requirements are met. - -You're now ready for the [Post-Installation](/en/anywhere/wsl#post-installation) section! - -## Post-installation - -Ultramarine WSL may take a few minutes to start up for the first time, as Windows installs the required files. - -### Creating a User and Password - -When WSL finishes starting. you will be prompted to enter a username and password. This does not need to be the same as your Windows username and password. - -### Updating - -It is always recommended to update a fresh install. To do this, please run the following command: - -``` -sudo dnf upgrade -``` - -### Setting your Default WSL Distro as Ultramarine - -To change your default WSL distro to Ultramarine, run the following command: - -``` -wsl --setdefault Ultramarine -``` - -If Ultramarine is not detected, you can run the following command to list all installed WSL distros: - -``` -wsl -l -``` - -Then, replace `Ultramarine` in the setdefault command with the listed name. - -### Hardware Acceleration - -Starting with Ultramarine WSL 42, hardware acceleration packages are included by default. - -If you upgraded from 41 to 42, you may need to enable the terra-mesa repository to install the needed packages. -Run the following command to enable the repo: - -```sh -sudo sed -i '0,/enabled=0/s/enabled=0/enabled=1/' /etc/yum.repos.d/terra-mesa.repo -``` - -And then install the `mesa-vulkan-drivers` package: - -```sh -sudo dnf install mesa-vulkan-drivers -``` - -This will install everything you need for hardware acceleration through Ultramarine WSL. - -### Version Upgrading - -To version upgrade Ultramarine WSL, check the instructions [here](/en/release/42-upgrades#upgrading-ultramarine-wsl-system-versions). - -## More Information - -Microsoft has vast resources about WSL, here are some helpful links: - -General WSL information: https://learn.microsoft.com/en-us/windows/wsl/about - -Basic WSL commands: https://learn.microsoft.com/en-us/windows/wsl/basic-commands#set-default-wsl-version - -Best Practices: https://learn.microsoft.com/en-us/windows/wsl/setup/environment - -Frequently Asked Questions: https://learn.microsoft.com/en-us/windows/wsl/faq - -#### [Next Up: Gaming on Ultramarine →](/en/usage/gaming) - -#### [← Back To: Raspberry Pi](/en/anywhere/rpi) diff --git a/src/content/docs/hi/anywhere/xr.mdx b/src/content/docs/hi/anywhere/xr.mdx deleted file mode 100644 index c3477099..00000000 --- a/src/content/docs/hi/anywhere/xr.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "XR and Spatial Computing" -description: "XR and Spatial Computing in the Ultramarine Anywhere Initiative" ---- - -We are working on providing full support for [Stardust XR](https://stardustxr.org/). - -### Packages - -All core Stardust XR components are packaged in the [Terra repository](https://terra.fyralabs.com/) (shipped with Ultramarine): - -- [stardust-xr-armillary](https://repology.org/project/stardust-xr-armillary/versions) -- [stardust-xr-atmosphere](https://repology.org/project/stardust-xr-atmosphere/versions) -- [stardust-xr-black-hole](https://repology.org/project/stardust-xr-black-hole/versions) -- [stardust-xr-comet](https://repology.org/project/stardust-xr-comet/versions) -- [stardust-xr-flatland](https://repology.org/project/stardust-xr-flatland/versions) -- [stardust-xr-gravity](https://repology.org/project/stardust-xr-gravity/versions) -- [stardust-xr-magnetar](https://repology.org/project/stardust-xr-magnetar/versions) -- [stardust-xr-non-spatial-input](https://repology.org/project/stardust-xr-non-spatial-input/versions) -- [stardust-xr-protostar](https://repology.org/project/stardust-xr-protostar/versions) -- [stardust-xr-server](https://repology.org/project/stardust-xr-server/versions) -- [stardust-xr-telescope](https://repology.org/project/stardust-xr-telescope/versions) - -To install all of these packages: - -``` -sudo dnf group install stardust-xr -``` -To install these packages on an RPM-OSTree/bootc based system: -``` -sudo rpm-ostree install stardust-xr-armillary stardust-xr-atmosphere stardust-xr-black-hole stardust-xr-comet stardust-xr-flatland stardust-xr-gravity stardust-xr-magnetar stardust-xr-non-spatial-input stardust-xr-protostar stardust-xr-server stardust-xr-telescope -``` - -Then, run `telescope` in your terminal, or `telescope -f` for flatscreen mode. - -For further information, check out [the Stardust XR docs](https://stardustxr.org/docs/get-started/What-is-Stardust). diff --git a/src/content/docs/hi/chromebook/armbeta.mdx b/src/content/docs/hi/chromebook/armbeta.mdx deleted file mode 100644 index 174ef8f3..00000000 --- a/src/content/docs/hi/chromebook/armbeta.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: ARM Chromebook Beta Program -description: "Closed program for running our beta images for certain ARM chromebooks" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -NOTE - Not all ARM devices are currently supported. This is a Beta program, proceed at your own risk. - -Welcome to the ARM Chromebook Beta Program! We are looking for technically-versed people to test our Ultramarine Chromebook beta images for ARM. - -This is a closed program, please join and ping @Owen in the [Discord](https://discord.com/invite/5fdPuxTg5Q) or [Matrix](https://matrix.to/#/#hub:fyralabs.com) (most prefered), or email him at owen@fyralabs.com, to apply. - -Currently supported ARM Chromebook beta devices (if you have an unsupported device and are willing to use it for image testing, let us know!): - -All Kukui (mt8183) family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 311 (C722/C722T) | willow | -| Acer Chromebook 311 (CB311-11H/CB311-11HT) | kenzo | -| Acer Chromebook 314 (CB314-2H/CB314-2HT) | cozmo | -| Acer Chromebook Spin 311 (CP311-3H) | juniper | -| Acer Chromebook Spin 311 (R722T) | pico | -| Asus Chromebook CZ1 | cerise | -| Asus Chromebook Detachable CM3 (CM3000) | kakadu | -| Asus Chromebook Detachable CZ1 | katsu | -| Asus Chromebook Flip CM3 (CM3200, MT8183) | damu | -| Asus Chromebook Flip CZ1 | stern | -| HP Chromebook 11a | kappa | -| HP Chromebook 11MK G9 EE | esche | -| HP Chromebook x360 11MK G3 EE | burnet | -| Lenovo 100e Chromebook 2nd Gen MTK 2 | makomo | -| Lenovo 10e Chromebook Tablet | kodama | -| Lenovo IdeaPad 3 Chromebook (MT8183) | fennel14 | -| Lenovo IdeaPad Duet Chromebook | krane | -| Lenovo IdeaPad Flex 3 Chromebook (MT8183) | fennel | - -Source: https://wiki.postmarketos.org/wiki/Google_Kukui_Chromebook_(google-kukui) - -All Asurada (mt8192) family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 514 (CB514-2H / CB514-2HT) | spherion | -| ASUS Chromebook Flip CM3 (CM3200, MT8192) | hayato | - -Source: https://wiki.postmarketos.org/wiki/Google_Asurada_Chromebook_(google-asurada) - -All Trogdor (sc7180) family Chromebooks: - -| Model name/number | Codename | -| --------------------------------------------- | ------------- | -| Acer Chromebook 511 | limozeen | -| Acer Chromebook Spin 513 | lazor | -| Dynabook Chromebook C1 | pompom | -| HP Fortis 11 G9 Q Chromebook | kingoftown | -| Libera-Merdeka Chromebook C100/C110/C120/C150 | pazquel | -| Orbic Chromebook 4G | pazquel | -| Acer Chromebook Tab 510 | quackingstick | -| HP Chromebook X2 | coachz | -| Lenovo IdeaPad Duet 3 | wormdingler | -| Lenovo IdeaPad Duet 5 | homestar | - -Source: https://wiki.postmarketos.org/wiki/Google_Trogdor_Chromebook_(google-trogdor) - -Follow-up instructions, guide, and dedicated discord channel will be provided after acceptance. diff --git a/src/content/docs/hi/chromebook/getting.mdx b/src/content/docs/hi/chromebook/getting.mdx deleted file mode 100644 index 5529745e..00000000 --- a/src/content/docs/hi/chromebook/getting.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Getting Chromebook Edition -description: "Getting started with installing Ultramarine Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Minimum System Requirements - -1GB RAM, 8GB storage, 16MB boot partition (essentially any 2017 or newer ChromeOS device). List of ChromeOS device boot partition sizes can be found [here](https://raw.githubusercontent.com/alpernebbi/depthcharge-tools/master/depthcharge_tools/boards.ini) - -## Choosing Your Edition - -Ultramarine Chromebook comes in 4 variants: - -- **Flagship Edition**: Our default and most popular variant. Choose Flagship if you'd like a familiar and stylish experience. -- **KDE Edition**: Our second most popular variant. Choose KDE if you'd like a simply customisable experience. -- **GNOME Edition**: Elegant and Modern. Choose GNOME if you'd like a simple, unique experience. -- **Pantheon Edition**: Thoughtful and graceful. Choose Pantheon if you'd like a refined experience. - -Ultramarine Linux is distributed with image files available for download from [our website](https://ultramarine-linux.org/download/chromebook). - - - Fyra Labs cannot guarantee the safety or quality of images downloaded from - sites other than our website or FOSSTorrents - - -## Verifying the Safety of an Ultramarine ISO (Recommended) - -Ultramarine ISO images have a matching `CHECKSUM` file that can be checked against the image itself. - -They can be downloaded by clicking the `View Checksum` button on the [download page](https://ultramarine-linux.org/download/chromebook). - -### Verifying the Checksum on Linux and macOS - -You can use the following commands to check the integrity of the images: - -```bash -sha256sum -b /path/to/ultramarine.img # Generate the checksum for the image -cat /path/to/CHECKSUM # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the Checksum on ChromeOS - -You can use the [ChromeOS Linux Container](https://chromeos.dev/en/linux) to verify the image on ChromeOS - -```bash -sha256sum -b /path/to/ultramarine.img # Generate the checksum for the image -cat /path/to/CHECKSUM # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the Checksum on Windows - -In Powershell, run this command: - -```powershell -CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 -# Open the CHECKSUM file with Notepad and compare the checksum -``` - -## Creating the Installer - -### Download [balenaEtcher](https://www.balena.io/etcher/) to create a bootable media from the img image. - -![](/assets/balenaetcher.png) - -Simply select the img file, a device to use for the installer, and click flash. - -#### [Next Up: Installing to a Chromebook →](preparing) - -#### [← Back To: Getting Started](chromebook) - -## Footnotes - -- The Anaconda installer is very complex and hard to work with, we are working on a new installer that is easier to use and more reliable. -- Since Fedora 37, Fedora's official support for the Pantheon desktop environment has been dropped due to compatibility issues and the Pantheon port is now maintained by the Ultramarine Linux team. This means that the Pantheon desktop environment is only available through Ultramarine Linux, or Fedora with Terra enabled. -- Ultramarine's Budgie edition provides a close to stock Budgie experience, with a custom theme. Unlike Fedora's Budgie Spin, which provides a completely custom layout and experience. diff --git a/src/content/docs/hi/chromebook/postinstall.mdx b/src/content/docs/hi/chromebook/postinstall.mdx deleted file mode 100644 index 0f043330..00000000 --- a/src/content/docs/hi/chromebook/postinstall.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Post-Installation -description: "Things to do after installing Ultramarine Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -#### [Next Up: ARM Chromebooks (Beta) →](armbeta) - -#### [← Back To: Installing to a Chromebook](preparing) diff --git a/src/content/docs/hi/chromebook/preparing.mdx b/src/content/docs/hi/chromebook/preparing.mdx deleted file mode 100644 index 56f27d94..00000000 --- a/src/content/docs/hi/chromebook/preparing.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Installing to a Chromebook -description: "Steps to be done on the Chromebook" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Before we insert the installer, we will need to do a few things with your ChromeOS device. - -### 1. Back up your data (optional) - -Step 2 will wipe all local data from your device, If you have any files you wish to save or move to Ultramarine Chromebook, back up your data off the device, either to the cloud or locally. For a small number of files, we recommend backing up to Google Drive, or another cloud storage provider. For a larger number of files, we recommend backing up to an external storage medium, such as a USB flash drive or other external drive. - -If you choose to back up with Google Drive, you will be prompted to add your Google Drive to the Ultramarine Chromebook file explorer during setup to easily access and redownload your data. - -### 2. Enable developer mode - -Enabling developer mode will wipe your data - -#### Developer mode on Chromebooks (ChromeOS laptops only): - -1. Shut down the device, then hold Esc + + ⏻ [power] to enter Recovery mode. -2. When you see a screen that says 'ChromeOS is missing or damaged,' press Ctrl+D. -3. You may be prompted with 'To turn OS verification off, press enter,' press Enter. -4. A screen saying 'OS verification is off, press space to re-enable' should appear, press Ctrl+D. - Your system is now transitioning into Developer Mode! (This may take a few minutes) -5. After it has transitioned, press Control+D to boot back into ChromeOS as a developer. You are now ready for step 3 - -#### Developer Mode on Chromeboxes and Chromebases (ChromeOS Desktops and All-in-ones): - - - Not all monitors will work with the Chromebox OS Verification screens. This - typically happens if the monitor has a resolution greater then 1080p. If your - Chromebox appeared to boot (lights on) but does not output anything, you can - attempt to continue without a display. - - -1. Shut down the device, then insert a paper clip (SIM ejector tool works great too!) into the RECOVERY BUTTON (small hole usually near the I/O, see your hardware documentation for exact location) and reboot. You will then be greeted with the "OS Verification is turned off" screen. -2. Plug in a keyboard and press Ctrl+D. You may be prompted with 'To turn OS verification off, press RECOVERY BUTTON,' press RECOVERY BUTTON. -3. A screen saying 'OS verification is off, press space to re-enable' should appear, press Ctrl+D. - Your system is now transitioning into Developer Mode! (This may take a few minutes). -4. After it has transitioned, press Control+D to boot back into ChromeOS as a developer. You are now ready for step 3. - -#### Developer Mode on ChromeOS Tablets: - -1. Shut down the device, then press and hold Power+Volume-Up+Volume-Down for 3-5 seconds, then release to invoke recovery mode. This is a bit finicky, and may take a few tries, but the screen will turn white and display a screen saying "Please insert a recovery USB stick." soon after button release. -2. To boot to Developer mode, simultaneously press Volume-Up+Volume-Down, or navigate to 'Developer Options' with the volume buttons, and select it with the power button. then select 'Boot From Internal Disk using the volume buttons and power button.' - Your system is now transitioning into Developer Mode! (This may take a few minutes). -3. After it has transitioned, again navigate to 'Developer Options,' then 'Boot From Internal Disk.' Plug in a keyboard, and you are now ready for step 3. - -If you have any problems with these steps, refer to [this guide](https://chromium.googlesource.com/chromiumos/docs/+/main/debug_buttons.md#Firmware-Keyboard-Interface) or request support in our [discord](https://discord.com/invite/5fdPuxTg5Q). - -### 3. Enable USB booting - -1. In Developer mode ChromeOS, press Ctrl+Alt+F2 [right arrow key]. -2. Type in 'Chronos' for the login (there is no password). -3. Enter this command: - -``` -enable_dev_usb_boot -``` - -4. You should have an output saying 'SUCCESS: Booting and self-assigned kernel from SSD/USB/SDCard slot in enabled.' Plug in your Ultramarine Chromebook installer and restart the device. If needed, press Ctrl+alt+F1 [Left arrow key] to leave the terminal. -5. The device will boot to the recovery screen. Upon reaching it, press ctrl+U> to boot from USB/SD. - -### 4. Boot from USB/SD - -#### [Next Up: Post-Install →](postinstall) - -#### [← Back To: Getting Chromebook Edition](getting) diff --git a/src/content/docs/hi/chromebook/terminology.mdx b/src/content/docs/hi/chromebook/terminology.mdx deleted file mode 100644 index 4a6fd3dd..00000000 --- a/src/content/docs/hi/chromebook/terminology.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Chromebook Terminology -description: "Get to Know Chromebook Terms" ---- - -The Chromebook Community, (and Google themselves) have made terminology for many of the practices and quirks of Chrome hardware. - -### Chromium OS - -Where the magic happens. Just like Chrome proper, Chrome OS is a derivative of the open source Chromium OS. - -### Chrome OS - -The consumer variant of Chromium OS found on all Chrome devices. - -### Write Protect (WP) - -Usually refers to Firmware Write Protect (FW_WP), a feature of Chromebooks that marks a region of the ROM that holds firmware as read-only. It is possible (and rather easy) to remove the protection on most Chromebooks. [1] - -#### Cr50/Battery WP - -One of the methods for implementing write protect, WP is enabled when a battery is connected, and disabled when the battery is removed. [1] - -#### WP Switch - -This is just a toggle, not much to explain here. [1] - -#### WP Screw - -The primary implementation of write protect on older devices, a screw shorts a connection, WP can be disabled by removing the short. Most of the time the screw is removed, but you could in theory place Kapton tape over the pad. [1] - -### Closed Case Debugging (CCD) - -Allows people with cr50 to disable WP without opening the device. This requires a special cable called suzyQ. [1] [2] - -### Verified Boot - -Tamper protection, it's signing essentially. [3] - -### Developer Mode - -Loosens verified boot and gives you the ability to enable USB/SD boot and elevate to root. - -### ChromeEC - -EC Refers to a lot of things, and it's honestly better to read the [official docs](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/README.md#Terminology) on this one. - -### Depthcharge - -Depthcharge is the stock firmware on your Chromebook. Unless you somehow have an original Chromebook - -#### Depthcharge Manipulation - -A method to run Linux on Chromebooks without modifying the stock firmware by tricking said firmware (Depthcharge) into booting a Linux kernel. This is what we are using. - -### altFW/Custom Firmware [5] - -altFW is the Chrultrabook Project's name for custom firmware. - -#### Coreboot/Full ROM - -Coreboot replaces the original firmware on your Chromebook with full UEFI. - -#### RW_Legacy - -RW_Legacy allows you to use the included BIOS on your Chromebook. - -#### Firmware Utility Script/MrChromebox's Script - -A popular tool used to manage and install custom firmware - -### Auto Update Expiration - -When Google stops providing updates for a Chromebook. Usually 10 years after the release. You can see a list of [AUE Dates here](https://support.google.com/chrome/a/answer/6220366?hl=en). - -### Codename - -Refers to a specific Chromebook, this may be the same as the board name (For example: Caroline and Chell are also the board name for their respective models) - -### Board Name - -Refers to the motherboard, these may be shared across Chromebooks (For example: Hana (board) is used on hana, maple, sycamore, and telesu) - -### Baseboard - -Exactly what it sounds like, a board that acts as the base for others (For example: Caroline, Chell, and Cave are all based on Glados, see the reference) - -### Chrultrabook - -Our partners in crime. Chrultrabook builds drivers and other tools for Chrome hardware. The name is a portmanteau from "*Chr*omebook to *Ultra*book" - -### Chromebook Plus - -Google's branding for Chromebooks at what would be the entry level for standard laptops [4] - -### Premium Chromebook - -Kinda official term to refer to higher spec Chromebooks. The Pixelbooks, Framework, and some of the nicer HPs fall into this category - -### Gaming Chromebook - -No real definition besides an RGB keyboard, specs and price are all over the place - -#### [← Back To: ARM Chromebooks (Beta)](armbeta) - -### Footnotes - -[1: Firmware Overview and Porting Guide > Firmware / EC Write Protection](https://www.chromium.org/chromium-os/firmware-porting-guide/firmware-ec-write-protection/) - -[2: CrOS EC > Google Security Chip (GSC) Case Closed Debugging (CCD)](https://chromium.googlesource.com/chromiumos/platform/ec/+/cr50_stab/docs/case_closed_debugging_gsc.md) - -[3: Design Documents > Verified Boot](https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot/) - -[4: Chromebook Plus: more performance and AI capabilities](https://blog.google/products/chromebooks/chromebook-plus/) - -[5: Chrultrabook Docs > Firmware > Types of Firmware](https://docs.chrultrabook.com/docs/firmware/about.html) diff --git a/src/content/docs/hi/contributing/contributorguide.mdx b/src/content/docs/hi/contributing/contributorguide.mdx deleted file mode 100644 index 125cb86f..00000000 --- a/src/content/docs/hi/contributing/contributorguide.mdx +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Contributing -description: "Getting started with contributing to Ultramarine Linux" ---- - -Ultramarine is built with our community. From polls and community engagement to community-built software, we involve our community in everything we do. - -## Code - -Ultramarine Linux is open source. Because of this, anyone can add to, copy, or distribute the code that makes up Ultramarine. - -This applies to all of the code that Fyra Labs writes with the community, and most of the code from Fedora. - -Sadly, some components, especially device drivers, may be (in a way) held hostage by their authors. This means we cannot see or fix the code. - -Check out the [Development Page](/en/contributing/hacking) to get started! - -## Packaging - -Ultramarine includes the Terra repository, which is a community collection of software that isn't in Fedora's repositories. Contributing packages for Terra allows you to help Ultramarine and other Fedora-based distro users get the software they need. To get started, see the [Terra documentation](https://developer.fyralabs.com/terra/contributing). - -## Bug Hunting - -This part is easy, just use Ultramarine and report bugs as you find them. You can report general issues to [Ultramarine-Linux/ultramarine](https://github.com/Ultramarine-Linux/ultramarine), or ask in [one of our chats] where to report. - -## Design - -New and existing Ultramarine-specific components require user-friendly and visually appealing designs. If you would like to help out with design, join [one of our chats] and ask where you can help. - -## Documentation - -Documentation allows people to understand how to use Ultramarine. Our main source of documentation is the wiki you're currently reading. If you would like to contribute to the wiki, you can make a pull request to the [Ultramarine-Linux/wiki](https://github.com/Ultramarine-Linux/wiki) repository. If you need help or want to discuss changes, please join [one of our chats]. - -## Testing - -Many parts of Ultramarine need testing before release. Here's a list of our current pre-release programs: - -- [ARM Chromebook Beta Program](/en/chromebook/armbeta) -- [Ultramarine Atomic Open Beta](https://github.com/ultramarine-linux/ostree-config) - -We announce new programs frequently, [join our chat] or [follow us on socials] to stay up to date. - -## Finance - -You can [sponsor us on Github](https://github.com/sponsors/FyraLabs)! - -Your sponsorship helps us continue and dedicate more time to our work, allowing us to develop and ship technology that can make a difference for you (and many others.) Now, of course, don't forget there's also some sweet and useful benefits (with even more coming soon) in it for you :3 - -For those without a GitHub account, we also have [a PayPal page where you can sponsor us](https://www.paypal.com/donate/?hosted_button_id=FE3SHU5U4CL5C). Please note that because we can't reward perks automatically via PayPal, you'll need to ping staff in our chats, so we can manually award them. - -## Outreach - -Ultramarine is always looking for new users, contributors, and community members. -We employ a variety of channels to reach out to new people, including social media, events, and partnerships. -If you'd like to help us grow, join [one of our chats] and ask where you can help. - -## Hardware - -One of Ultramarine's major focuses is to support as many hardware platforms as possible, our formal initiative for this is [Ultramarine Anywhere](/en/hardware/anywhere). -We're always looking for people with knowledge of different and niche hardware platforms to help us expand our support. -Hardware donations are also appreciated, especially Chromebooks and RISC-V boards, as they're a major focus of this program. - -If you'd like to help out in this area please join [one of our chats] and ask where you can help. - -## Translations - -Translations allow Ultramarine to be used by people around the world. You can lend us your expertise to get Ultramarine in your language. - -### This Wiki - -Reach out in [one of our chats] and we'll make you a branch. - -### The Installer and other Ultramarine Components - -Head to [Fyra Weblate](https://weblate.fyralabs.com) to get started translating. - -### Desktops - -Each desktop environment handles their own translations for the desktop itself and their included apps. Please see the [Upstream Contributions](#upstream-contributions) section for more information. - -## Upstream Contributions - -Ultramarine is built on top of many open source and libre software projects, with similar goals and contribution needs to Ultramarine. Our community regularly contributes to these upstream projects, and we encourage you to do the same. - -Here is a list of important upstream projects to Ultramarine, with links to their contribution pages: - -- [Fedora](https://docs.fedoraproject.org/en-US/project/join/) -- [Budgie](https://docs.buddiesofbudgie.org/organization/getting-involved/) -- [GNOME](https://welcome.gnome.org/) -- [KDE](https://community.kde.org/Get_Involved) -- [XFCE](https://docs.xfce.org/contribute/start) - -[one of our chats]: /en/community/community -[join our chat]: /en/community/community -[follow us on socials]: /en/community/community - -#### [Next Up: Code Contributions →](/en/contributing/hacking) - -#### [← Back To: NVIDIA](/en/setup/nvidia) diff --git a/src/content/docs/hi/contributing/hacking.mdx b/src/content/docs/hi/contributing/hacking.mdx deleted file mode 100644 index ebb5ef41..00000000 --- a/src/content/docs/hi/contributing/hacking.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Code Contributions -description: "A step-by-step guide to hacking on Ultramarine Linux components" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -One of the most noticeable contributions you can make is code contributions. Whether it's building a new feature or fixing a bug, contributing code is a great way to make a noticeable difference to the operating system itself. - -This page serves as a step-by-step guide to hacking on Ultramarine Linux components. - -## Find Something to Work On - -There's no shortage of things to work on in Ultramarine Linux. From a feature you think would be cool, to something on our issue tracker, to an entirely new project in the Ultramarine ecosystem. - -For example, Nvidia drivers, this is an issue with most Linux distributions that Ultramarine solves. - -This problem can be anything from a tiny papercut to a massive structural change. There's no such thing as a bad idea. If you're having trouble finding something to work on, [ask around in our community](/en/community/community), we're always happy to help. - -## Gather Information - -If you're fixing an issue, what's the cause? If you're building a feature, what's the goal? What's the best way to implement it? - -A great place to gather information is within our [community](/en/community/community), simply ask and see what users, contributors, and developers think. - -## Getting the Ultramarine Toolchain - -If you're contributing to an existing component, simply get the tools needed for it (we're slowly adding a list to our repositories.) - -If you're building a completely new feature, we recommend [Rust](https://www.rust-lang.org/) or [Go](https://go.dev) for features without a GUI. - -If you're building with a GUI, we recommend using [libhelium](https://github.com/tau-os/libhelium), you can find more information here. - -Get to work! Make a fork of a project and tinker away! - - -
-**Big Changes** - -For especially big changes, or, major features, ask for help. We'll help you refine and build your idea. - -
-
- -## Writing the Code - -Write the code! Make sure to continuously test your solution as you go. This will help you catch bugs early and make sure your changes are on the right track. It's also important to document your code when you're done, as this will help other contributors understand your changes. - -Remember, you're not alone, no problem is too big or too small to ask for help. If you have a question or want to work with another contributor, ask in our [community](/en/community/community). - -## Getting into Ultramarine - -After you've tested, it's time to contribute. Simply open a pull request to the appropriate repository and we'll review it. Make sure your pull request is descriptive, outlining the motivation, scope, and implementation of your changes. - -There's three possible outcomes - -- **Approval** - -We approve your solution, be proud as very few PRs get merged without changes. - -- **Request for Changes** - -Something needs to change! Fix a problem or two and you're golden! Most PRs go through this process. - -- **Denial** - -This doesn't happen very often, sometimes a feature just doesn't align with our plan. It's more likely that we'll simply ask you for changes. - -#### [Next Up: Mirroring →](/en/contributing/mirroring) - -#### [← Back To: Contributing](/en/contributing/contributorguide) diff --git a/src/content/docs/hi/linux/devicefiles.mdx b/src/content/docs/hi/linux/devicefiles.mdx deleted file mode 100644 index 0c9ca3a9..00000000 --- a/src/content/docs/hi/linux/devicefiles.mdx +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Device Files -description: "Overview of various device files in /dev" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - These files are an actual representation of all your hardware devices - according to how your drivers see them. Please do not modify or delete these - files unless you know what you are doing. - - -Device files are special files that exist as an interface for your system to interact with hardware. -They are located in the `/dev` directory, which is a temporary virtual filesystem that is created by Linux on boot. - -## Block Devices - -Block devices are devices that store buffered data as [blocks](). - -These files are essentially the low-level interface to your storage devices. They are usually to be mounted to a directory in order to be used, -similarly to how Windows automatically assigns drive letters to storage devices. - -Newer Windows versions also support mounting devices as directories, but they are not commonly used. - -There are various types of block devices, but the most common ones are: - -- SATA, PATA/IDE, SAS, SCSI, UFS, or USB devices (`/dev/sd*`) -- NVMe Drives (`/dev/nvme*`) -- MMC devices (`/dev/mmcblk*`) - Memory cards that use the MultiMediaCard standard, such as SD cards or eMMC. -- Device mappers (`/dev/mapper/*`) - A special feature of the Linux kernel that allows you to create virtual block devices from other block devices. -- Loop devices (`/dev/loop*`) - Virtual loopback devices that allow you to mount files as block devices. - -## Pseudo-devices - -Pseudo-devices are devices that do not actually exist but are used by the kernel to provide an interface for various features. - -The most common pseudo-devices are: - -- `/dev/null` - A special empty file that discards all data written to it. -- `/dev/zero` - A special file that returns an infinite stream of null bytes when read. -- `/dev/random`, `/dev/urandom` - Special files that return an infinite stream of random data. -- `/dev/full` - A special empty file that always returns a "disk full" error when written to. -- `/dev/ptmx` - A pseudo-terminal master used to create virtual terminals. -- `/dev/tty*` - A virtual terminal that is used to interact with the system. Back in the day, there were also actual [physical terminals](https://en.wikipedia.org/wiki/Computer_terminal) that were connected to the system via a serial port. Nowadays, these files are used to represent virtual terminals, as computer terminals were replaced by actual computers running remote desktop software such as SSH, VNC or RDP. -- `/dev/pts/*` - A virtual terminal slave used to create virtual terminals. -- `/dev/shm/*` - A shared memory segment used by the kernel to share data between processes. -- `/dev/stdin`, `/dev/stdout`, `/dev/stderr` - Standard input, output and error streams. Used to redirect input and output from and to other files, similar to how programs output data directly to the terminal. Can be redirected using [pipelines](/en/linux/shell#the-pipeline). - -# Interacting with Devices - -You can interact with device files like you would with any other file, but there are also special tools that are used to interact with them. - -The `cat` command can be used to read data from a file and output it to `/dev/stdout` (standard output), which is usually the terminal. - -```sh -cat /dev/urandom -``` - -This will output an infinite stream of random garbage to the terminal, which will make it unusable until you press `Ctrl+C` to stop the command. You might also need to restart your terminal emulator if it happens to output -a specific combination of characters that breaks it. - -## Block Devices - -To list all block devices, you can use `lsblk` to list them in a tree-like format: - -```sh -$ lsblk -NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS -sda 8:0 0 931.5G 0 disk -├─sda1 8:1 0 600M 0 part /boot/efi -├─sda2 8:2 0 1G 0 part /boot -└─sda3 8:3 0 929.9G 0 part -zram0 252:0 0 8G 0 disk [SWAP] -nvme0n1 259:0 0 119.2G 0 disk -└─nvme0n1p1 259:1 0 119.2G 0 part /var/lib/docker/btrfs - /home - /var - / -``` - -## Explaining the Output: - -`sda*` is the main disk of the system, which is a 1TB SATA SSD. It has 3 partitions, `sda1`, `sda2` and `sda3`. `sda1` is the EFI partition, `sda2` is the boot partition and `sda3` is the root partition. - -In this specific case, it is configured in a Btrfs spanned (JBOD) volume, which in this case combines both `sda3` and `nvme0n1p1` into a single volume. - - - Ultramarine Linux's installer, *Anaconda* will automatically configure your - disks in a Btrfs spanned volume by default when multiple disks are selected. - - -`nvme0n1` is a 128GB NVMe SSD that is used as a cache for the Btrfs volume. It has a single partition, `nvme0n1p1`, which is mounted to `/var/lib/docker/btrfs`, `/home`, `/var` and `/`. - -`zram0` is a special ramdisk that is used as a pagefile (swap) for the system. It makes uses of the [zram](https://en.wikipedia.org/wiki/Zram) kernel module to create a compressed RAM disk. - -The mountpoints at `/boot` is used for storing Linux kernel images, and `/boot/efi` is used for storing EFI bootloaders. - -`/var` stores extra variable data, `/home` is a dedicated partition for storing user data and `/` is the root partition, which can be compared to the `C:\` drive on Windows. - -`/var/lib/docker/btrfs` is the directory where [Docker] stores its data. Docker is a containerization software that allows you to run applications in isolated environments. -Since we are using Btrfs, Docker will use Btrfs subvolumes to store its data. For other filesystems, Docker will use other methods to store its data. - -### Manipulating Block Devices - -You can use `fdisk` to do various operations on block devices, such as creating partitions, formatting them and more. - -```sh -fdisk /dev/sda -``` - - - **NEVER** run the following commands on any actual systems! These commands **ANNIHILATE your system WITHOUT CONFIRMATION**, - causing **IRREVERSIBLE DAMAGES** to your system! - -If you want to test out these commands for whatever reason, please _make sure (and double check) you are ONLY doing this in a virtual environment._ - - - -As an example, you can use the following command to do a zero-filled format of a disk called `/dev/sda` by simply using a pipe: - -```sh -cat /dev/zero > /dev/sda -``` - -...Or shred the entire disk with random data: - -```sh -cat /dev/urandom > /dev/sda -``` - -All of these commands will do destructive operations on your disk, so please be careful when using them. - -You can also use the [`dd`]() tool to read and write data to block devices, create disk images and even clone disks directly. - -For example, you can create a backup image (ghost image) of your disk by using the following command: - -```sh -dd if=/dev/sda of=/path/to/backup.img -``` - -...Or clone your disk to another disk: - -```sh -dd if=/dev/sda of=/dev/sdb -``` - -You can find more information about `dd` [here](https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html). - -#### [Next Up: Permissions →](/en/linux/permissions) - -#### [← Back To: The Filesystem](/en/linux/filesystem) - -[Docker]: https://en.wikipedia.org/wiki/Docker_(software) diff --git a/src/content/docs/hi/linux/overview.mdx b/src/content/docs/hi/linux/overview.mdx deleted file mode 100644 index b48f0b2b..00000000 --- a/src/content/docs/hi/linux/overview.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: What is Linux? -description: "A general overview of Linux concepts." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Linux refers to a family of operating systems with one common feature: the Linux kernel. - -Linux is distributed differently than Windows or macOS. Multiple (separate) groups take the Linux kernel and combine it with other software before distributing it as a distinct operating system. These compilations are called "distributions" (but we'll shorten that to distro.) - -Ultramarine Linux is based on another distribution of Linux called Fedora. See ["Why does this distro exist?"](/en/welcome#why-does-this-distro-exist-what-difference-does-it-have-other-than-just-fedora-with-rpmfusion) for more on that. - -## Why use Linux? - -People use Linux on the desktop for all sorts of reasons. For our purposes, we'll split this into four categories: Customization, Freedom, Security, Privacy. - -### Customization - -Linux is incredibly customizable. You can change anything from the way your desktop icons look to the way apps load and the behavior of the device itself. Ultramarine provides easy ways to do this, like theme support, power management profiles (in most editions) and in [umcli](/en/usage/umcli/). - -### Freedom - -When we say freedom, we mean it in two ways. This is often described as "free as in beer" V.S. "free as in speech". Linux will cost you no money, and will allow you to do essentially whatever you'd like. - -For example: Edge cannot be removed from a Windows computer. Meanwhile on Linux, there is no such limitation. Essential apps like the file manager can be exchanged for one of many alternatives. Complete freedom. - -### Security - -Linux is more secure by design, with features like mandatory access controls (MACs) and stricter permissions, you can learn more about those features on the [Permissions](/en/linux/securityprivacy) page. - -Linux is also resistant to many common viruses due to these features (and inexperienced developers.) While it can be argued that developers simply do not target Linux, it's actually because most software comes from moderated collections (repositories) rather than the internet. - -### Privacy - -It's no secret that the big three of operating systems are watching what you do in some way. Linux vendors tend not to do this, and even if they do, you can easily switch to an alternative or simply disable the telemetry. - -## How is Ultramarine Different? - -Ultramarine Linux is designed to get a lot of the configuration out of the way. We include extra components (like media codecs and drivers) that many other distributions don't include. - -Ultramarine is built on Fedora, the base for Red Hat's Enterprise Linux. This means that the software backing Ultramarine has been built with the stability needed for mission critical systems. - - -
- If you'd like a crash course on the basics, this video should cover a lot of - what the following pages will cover - -
-
- -#### [Next Up: The Filesystem →](/en/linux/filesystem) - -#### [← Back To: eduroam](/en/usage/eduroam/) diff --git a/src/content/docs/hi/release/41-upgrades.mdx b/src/content/docs/hi/release/41-upgrades.mdx deleted file mode 100644 index 1d265d83..00000000 --- a/src/content/docs/hi/release/41-upgrades.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Early Upgrades for Ultramarine 41 -description: "A temporary notice for the 40 to 41 upgrade path." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -We're proud to announce that upgrades to Ultramarine Linux 41 (Cyberia) are ready right now in your edition's app store! - - - In Ultramarine 40, the `dnf` command uses dnf5, which may break certain - release upgrades. Upgrade graphically, or use `dnf4`. - - - - Raspberry Pi users should wait to upgrade, we will have more information for - you soon. - - -Ultramarine 41 comes with the usual desktop and under-the-hood changes for our existing users. In addition, Flagship and Xfce Edition are switching to Slick greeter from LightDM-GTK, this will happen automatically when you upgrade. - -This release also comes with umcli, more information to come! - -We know this seems lackluster, but a lot of our changes are for new installs and hardware enablement this time around, so stay tuned! - -## Upgrading - -Unlike previous releases, everything is now handled in your edition's app store. If you're on Flagship, GNOME, or Xfce, it's called Software. On Plasma, it's called Discover. - -You may need to update your copy of Ultramarine 40 before the upgrade will become available. - -## Command Line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf4 system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf4 upgrade --refresh -sudo dnf4 install dnf-plugin-system-upgrade -sudo dnf4 system-upgrade download --releasever=41 -sudo dnf4 system-upgrade reboot -``` - -## Wallpaper Contest - -Congratulations to im.j for submitting the team's favorite wallpaper, and winning the community wallpaper contest with 'Paradise'! This wallpaper will be available after you upgrade. - -![](/assets/paradise.png) - -Left: Light Mode | Right: Dark Mode - -If your favourite submission didn't win, don't fret, they'll be available in an extras package soon! - -## Getting Support - -If you need any help please reach out in [one of our chats.](/en/community/community/) diff --git a/src/content/docs/hi/release/42-upgrades.mdx b/src/content/docs/hi/release/42-upgrades.mdx deleted file mode 100644 index dce818d4..00000000 --- a/src/content/docs/hi/release/42-upgrades.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Upgrades for Ultramarine 42 -description: "A temporary notice for the 41 to 42 upgrade path." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -We're proud to announce that upgrades to Ultramarine Linux 42 (Heart of Gold) are ready right now in your edition's app store! - -Ultramarine 42 comes with the usual desktop and under-the-hood changes for our existing users. - -## Upgrading - -Per usual, everything is handled in your edition's app store. If you're on Flagship, GNOME, or Xfce, it's called Software. On Plasma, it's called Discover. - -You may need to update your copy of Ultramarine 41 before the upgrade will become available. - -## Command Line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf install dnf-plugin-system-upgrade -sudo dnf system-upgrade download --releasever=42 -sudo dnf offline reboot -``` - -### Upgrading Ultramarine WSL System Versions - -WSL works a bit differently, to upgrade Ultramarine 41 WSL, run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf distro-sync --releasever=42 -``` - -## Getting Support - -If you need any help please reach out in [one of our chats.](/en/community/community/) - -#### [Next Up: Errata →](/en/release/errata) - -#### [← Back To: Linux Concepts, Security and Privacy →](/en/linux/securityprivacy) diff --git a/src/content/docs/hi/release/diff-fedora.mdx b/src/content/docs/hi/release/diff-fedora.mdx deleted file mode 100644 index c3410550..00000000 --- a/src/content/docs/hi/release/diff-fedora.mdx +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Differences with Fedora -description: "Known differences and changes compared with Fedora" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -This page documents Ultramarine Linux's significant changes compared with a typical Fedora workstation setup. - -Changes listed below are non-exhaustive and cumulative, meaning each section contains changes from all the sections below it. - -### Emoji meanings - -- 📦 This is packaged in [Terra] -- 🛳️ This ships existing Fedora packages -- 🔥 This is a significant change/improvement - -## Ultramarine 42 - -- 🔥 Many Taidan fixes and new pages/features -- 📦 Use netto for network connection in Taidan -- Properly enable terra-mesa repo for all images -- 📦 `umcli` tweaks feature included ootb -- 📦 Surface images switch to upstream surface-dtx-daemon package -- WSL gains hardware acceleration, proper Ultramarine shell configs, and some packages ported over from Ultramarine proper. -- Update preset systemd services -- A towel is included with every install -- Reduce initramfs size -- Only keep 2 kernel versions at a time - -## Ultramarine 41 - -- 🔥 Switched to Taidan, our out-of-box experience -- 🔥 All raw images (including Pi) switched to Btrfs -- 🔥 Move many core desktop apps to Flatpak -- 🔥 WSL support -- 🔥 Surface Images -- 🛳️ `fastfetch` -- 🛳️ `zstd` -- 📦 `umcli` -- 📦 NVIDIA drivers shipped in [Terra] -- 📦 Codecs shipped in [Terra] - -## Ultramarine 40 - -- 🔥 [Change default package manager to `dnf5`](/en/usage/um40-dnf5) (`dnf5-default-package-manager`) -- Drop Pantheon Edition -- `ultramarine-fun` -- 🛳️ `git` -- 🛳️ XFCE Edition -- Improve key bindings for `zsh` -- Supported by [Raspberry Pi Imager](https://github.com/raspberrypi/rpi-imager) -- Use `ext4` instead of `btrfs` for Raspberry Pis - -## Before Ultramarine 40 - -- Out of box repositories: [Terra], full set of [RPM Fusion], [Flathub] -- IP MTU probing enabled (which fixes [Ubisoft Connect](https://en.wikipedia.org/wiki/Ubisoft_Connect) games) -- [Custom wallpapers](https://github.com/Ultramarine-Linux/backgrounds) 🌇 by Aikoyori -- 📦 [System76 Scheduler](https://github.com/pop-os/system76-scheduler) (significantly better scheduling for low-end devices) - - 📦 [KWin Script for system76-scheduler Integration](https://github.com/maxiberta/kwin-system76-scheduler-integration) -- Numerous popular GNOME extensions - - 🛳️ [AppIndicator/KStatusNotifierItem support](https://github.com/ubuntu/gnome-shell-extension-appindicator) (`gnome-shell-extension-appindicator`) - - 🛳️ [Pop shell extension](https://github.com/pop-os/shell) (`gnome-shell-extension-pop-shell`) - - 🛳️ Support for keyboard selection of windows and workspaces in GNOME Shell (`gnome-shell-extension-windowsNavigator`) - - 🛳️ [Bringing back the app menu](https://github.com/fthx/appmenu-is-back) (`gnome-shell-extension-appmenu-is-back`) - - 📦 [Pop Launcher](https://github.com/pop-os/launcher) (`pop-launcher`) -- 🛳️ Most drivers and codecs -- 🛳️ Guest Desktop Agents (`@guest-desktop-agents`) -- 📦 `sipa-fonts` ([Thai National Fonts](https://en.wikipedia.org/wiki/National_Fonts)) -- 🛳️ Mozc (Japanese Input Method Editor) -- 📦 ~~Pantheon Edition (`@pantheon-desktop`)~~ (deprecated since UM40) -- 📦 [Starship](https://starship.rs) -- Custom Budgie Layout that focuses on simplicity - -(Last Updated October 2025) - -[Terra]: https://terra.fyralabs.com -[RPM Fusion]: https://rpmfusion.org -[Flathub]: https://flathub.org - -#### [← Back To: Errata](/en/release/errata) diff --git a/src/content/docs/hi/release/errata.mdx b/src/content/docs/hi/release/errata.mdx deleted file mode 100644 index a3e0413e..00000000 --- a/src/content/docs/hi/release/errata.mdx +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: Errata -description: "Various known bugs and other issues in Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -This page contains bugs that we can't solve or that are easily solvable by users. We remove them as they are resolved. - -Releases older than 37 will not have their eratta modified as we do not have records of fixing the issues. - -## All Versions - -- Installer scripts may not work - -This is solved by distributors including Ultramarine as a synonym to Fedora. - -## Ultramarine Linux 42 - -### All Editions - -- Nvidia and Surface users may experience a kernel panic after upgrade. - - This is caused by the boot partition running out of space, you can boot into the previous kernel entry and either install `dracut-strip-trigger` (which will break moving drives to another device) or [tell DNF to keep less kernels](https://discussion.fedoraproject.org/t/how-can-i-change-the-number-of-kernels-retained-when-updating-in-fedora/73863/2). - - Since Ultramarine 42, only 2 kernel versions are kept, and `dracut-strip-trigger` should be installed by default. - -- Taidan language switching does not work - -### Plasma Edition - -- Login/Lockscreen wallpaper is white - - This appears to be an upstream issue. Switch the SDDM theme from "Fedora" to anything else (such as Breeze). - -### Flagship Edition - -- Install icon may not be using the Ultramarine icon. - -## Ultramarine Linux 41 - -### All Editions - -- Taidan (out-of-box app) won't launch on VirtualBox and VMWare virtual machines. - - We are [aware of this issue](https://blog.fyralabs.com/advisory-ultramarine-41-and-vmware/) and are solving it in UM42. - -- Taidan won't run again if you power off during or before setup. - -- Nvidia and Surface users may experience a kernel panic after upgrade. - - This is caused by the boot partition running out of space, you can boot into the previous kernel entry and either install `dnf-strip-trigger` (which will break moving drives to another device) or [tell DNF to keep less kernels](https://discussion.fedoraproject.org/t/how-can-i-change-the-number-of-kernels-retained-when-updating-in-fedora/73863/2). - - -## Ultramarine Linux 40 - -### Xfce Edition - -- Login screen wallpaper is Fedora's - - This is a small issue with our tweaks not being applied. We should have this fixed in an update soon. - -### Pantheon Edition - -- Pantheon is upgraded but login does not work - - We are still debating Pantheon's fate, but as of now Pantheon is not included in Ultramarine 40 and probably will stay that way. - -### All Editions - -- Flathub not included in new installs - - Our builder had dnf weakdeps disabled, causing `ultramarine-repos-extras` to not be installed. This was fixed in UM40.1. - -- Raw images don't have a Plymouth theme - - Fixed in UM40.1. - -- Manpages not included - - Our builder follows the dnf config of the host system. Fedora container images have a dnf flag enabled that removes manpages, this was inherited by Ultramarine images. This was fixed in UM40.2. - -- Translation and Localization issues - - Similarly to the last issue, Fedora containers only include English locale data, this was inherited by UM images and fixed in UM40.2. - -- Fedora bookmarks still included - - We removed the Fedora bookmarks and replaced them with `ultramarine-phony-bookmarks`. As the name implies, there are no bookmarks. - -- dnf5 not set as default - - We intended to switch to dnf5 with UM40, but something went wrong and the change wasn't shipped. This was fixed in UM40.2 - -- Firmware missing on GNOME Edition - - A team member erroneously pushed a flag that disabled the installation of weak dependencies, and forgot to remove the flag later. - -[Instructions for getting 40.1 and 40.2 fixes ->](https://blog.fyralabs.com/ultramarine-linux-40-hotfixes/) - -## Ultramarine Linux 39 (EOL) - -### Pre-release Images - -- We accidentally released pre-release versions of Ultramarine. - - A small handful of users and reviewers got their hands on these images. These images do not reflect the final release, if you used one and it was buggy, we invite you to try the final release, as many of the bugs were fixed. - -### Budgie Edition - -- Budgie wallpapers may be installed instead of Ultramarine wallpapers. - -### Package Groups - -- Misspelled "environment" as "enviroment". - -This is now fixed in Ultramarine 39 and has been backported to 38. - -## Ultramarine Linux 37 (EOL) - -### Pantheon - -- The wallpaper is not set by default. Please set your own wallpaper. - -## Ultramarine 36 (EOL) - -### Applications - -- Firefox Still Includes Fedora Bookmarks - - Firefox depends on fedora-bookmarks. You can simply remove the bookmarks yourself - -### Installer - -- Anaconda Shows a Warning about the System Being Pre-Release - -Anaconda can't find product information about Ultramarine and assumes it's a pre-release version of Fedora or RHEL. - -### Package Management - -- DNF Tells the User There Are No Repositories Available for a COPR Project - -This is due to the fact that the DNF Copr plugin detects the OS ID `/etc/os-release` file, and Ultramarine uses a custom code instead of `fedora`. - -A workaround is to also specify the Fedora buildroot when trying to add a Copr repository. - -### GNOME Edition - -- Pop!\_Shell launcher - -The Pop!\_Shell launcher is not included. This can be fixed by installing the `pop-launcher` package. - -### Cutefish Edition - -- SDDM Displaying Black Screen - -SDDM may display a black screen when starting up. This is a known issue, but there is no known fix as of yet. (Possibly an upstream bug, help needed.) - -### Pantheon Edition - -- Missing Switchboard (Settings) menus - -This was caused by missing Pantheon Switchboard modules, which are not included in Ultramarine Linux due to time constraints. - -You can help us fix this issue by offering to maintain these packages ourselves, or by [contributing to help submit them to upstream Fedora.](https://fedoraproject.org/wiki/SIGs/Pantheon) - -### OSTree Edition (EOL) - -- Missing Tweaks from the Standard Releases - -As the standard release includes a script to modify the system, due to the nature of OSTree, we are unable to include these tweaks unless we rebuild all major packages with our custom patches. - -#### [Next Up: Differences with Fedora →](/en/release/diff-fedora) - -#### [← Back To: Ultramarine 42 Upgrades →](/en/release/42-upgrades) diff --git a/src/content/docs/hi/release/upgrade-to-ultramarine-40.mdx b/src/content/docs/hi/release/upgrade-to-ultramarine-40.mdx deleted file mode 100644 index 5bad807c..00000000 --- a/src/content/docs/hi/release/upgrade-to-ultramarine-40.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Upgrade to Ultramarine 40 -description: "A temporary notice for the 39 to 40 upgrade path." ---- - -This page is a temporary notice for upgrading Ultramarine 39 to 40. -For this release cycle, we've decided to release an upgrade path before the full distribution release. -This should let existing users enjoy the new set of packages in 40 sooner. -A full blog post detailing changes will be published for the full distribution release. - -## Flagship, GNOME, and KDE Editions - -You can use the editon's graphical app store to upgrade your system to 40. -On Flagship and GNOME, this will be GNOME Software, while on KDE, this will be Plasma Discover. - -You might need to update your system normally before the upgrade to 40 shows up in the app store. - -## Pantheon Edition - -The Pantheon upgrade path isn't ready yet. -While all of the required packages are in the UM and Terra repositories, the Pantheon desktop environment is broken for a variety of reasons. -We are currently working with upstream and other partners to resolve this, but it's possible that Pantheon may be skipped, deprecated, or deferred until mid-cycle. -If you are interested in contributing to Ultramarine Pantheon, please join [our chats](en/community/community) and let us know! - -## Command line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf install dnf-plugin-system-upgrade -sudo dnf system-upgrade download --releasever=40 -sudo dnf system-upgrade reboot -``` diff --git a/src/content/docs/hi/setup/broadcom-realtek.mdx b/src/content/docs/hi/setup/broadcom-realtek.mdx deleted file mode 100644 index 5f7dc33e..00000000 --- a/src/content/docs/hi/setup/broadcom-realtek.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Broadcom and Realtek Networking -description: "Information about Broadcom and Realtek Networking on Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Some computers with specific Broadcom or Realtek chipsets may require additional drivers to be installed. These should be automatically installed if you were connected to the internet during installation. - -We can't include these by default as they may break other WiFi devices. - -You'll need to connect to the internet, you can do this via Ethernet or USB tethering from your phone. iPhones will automatically tether over USB when connected, Android phones may require you to switch the USB mode. - -On Broadcom, install `broadcom-wl` and `kmod-wl` - -```shell -sudo dnf install kmod-wl broadcom-wl -``` - -On Realtek, install `kmod-wl` only - -```shell -sudo dnf install kmod-wl -``` - -Then reboot! - -#### [Next Up: NVIDIA →](/en/setup/nvidia) - -#### [← Back To: Post-Installation](/en/setup/postinstall) diff --git a/src/content/docs/hi/setup/getting.mdx b/src/content/docs/hi/setup/getting.mdx deleted file mode 100644 index 1ba4d4ba..00000000 --- a/src/content/docs/hi/setup/getting.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Getting Ultramarine Linux -description: "Getting started with installing Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## System Requirements - -If your computer could run Windows 7 well, chances are it'll run Ultramarine Linux. You should check the [System Requirements](/en/hardware/requirements) to make sure - -## Choosing Your Edition - -Ultramarine Linux comes in 4 variants: - -- **Flagship Edition**: Our default and most popular variant. Choose Flagship if you'd like a familiar and stylish experience. -- **Plasma Edition**: Our second most popular variant. Choose Plasma if you'd like a simply customisable experience. -- **GNOME Edition**: Elegant and Modern. Choose GNOME if you'd like a simple, unique experience. -- **Xfce Edition**: Lightweight and Configurable. Choose Xfce if you'd like a lighter experience. - -Check the [System Requirements](/en/hardware/requirements) to make sure your hardware is supported. - -Ultramarine Linux is distributed in various formats available for download from [our website](https://ultramarine-linux.org). - - - Fyra Labs cannot guarantee the safety or quality of images downloaded from - sites other than our website or FOSSTorrents - - -### Microsoft Surface Devices - -Ultramarine is available with Microsoft Surface support out of the box. -Downloads can be found on our website, and more information can be found [here](../anywhere/surface). - -### Windows Subsystem for Linux - -Ultramarine offers a WSL build/application. -This can be found on the microsoft store, with `winget`, or can be installed with an offline script found on it's anywhere page [here](../anywhere/wsl). - -### Raw Images and Raspberry Pi - -Ultramarine is also available as a raw (or preinstalled) image. These images come with a desktop preinstalled and are intended to be flashed directly to the drive your device will boot from (like an SSD or an SD card.) - -These can be found in the [Raw Image](https://images.fyralabs.com/images/ultramarine) sections of the download page. - - - If you're using a Raspberry Pi 4, you can skip these steps and use Raspberry - Pi Imager! Either insert an empty microSD and press shfit at startup, or use - it on another device. - - -## Verifying the Safety of an Ultramarine Image (Recommended) - -Ultramarine images have a matching checksum file that can be checked against the image itself. - -They can be downloaded by clicking the `View checksum` button on the [download page](https://ultramarine-linux.org/download/). - -### Verifying the Checksum on Linux and macOS - -You can use the following commands to check the integrity of the image: - -```bash -sha256sum -b /path/to/ultramarine.iso # Generate the checksum for the image -cat /path/to/checksum # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the Checksum on Windows - -In Powershell, run this command: - -```powershell -CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 -# Open the checksum file with Notepad and compare the checksum -``` - - - If you're using a Raspberry Pi, stop here and go to the [Raspberry Pi - instructions](/en/anywhere/rpi) - - -## Creating the Installer - -Grab a USB stick! Use a flasher program to create an installer from the image. [balenaEtcher](https://www.balena.io/etcher/) is an easy cross-platform choice. - -![](/assets/balenaetcher.png) - -You can also use [Fedora Media Writer](https://github.com/FedoraQt/MediaWriter), or the Disks application on Flagship, Xfce, and GNOME editions. - - - Rufus has been known to cause issues with Ultramarine images. - - -## Booting the Installer - -After flashing the image to your installer, you can boot to Ultramarine Linux by plugging in the installer and restarting your computer. - -Most computers have a special key that can be used to select a boot device, or to enter the setup screen. This varies from brand to brand, check the [BIOS Keys Page](/en/hardware/bioskeys) for how to enter the boot menu on your machine. - - - If you're currently using Windows 10 (or newer) head to the recovery section - of settings and select "Advanced Restart". Once there, select "Use a Device". - - - - If you're currently using Linux, you may be able to enter the BIOS by running - `sudo systemctl reboot --firmware` - - -## Footnotes - -- The Anaconda installer is very complex and hard to work with, we are working on a new installer that is easier to use and more reliable. -- Ultramarine's Budgie edition provides a close to stock Budgie experience, with a custom theme. Unlike Fedora's Budgie Spin, which provides a completely custom layout and experience. - -#### [Next Up: BIOS Keys →](/en/setup/bioskeys) - -#### [← Back To: System Requirements](/en/setup/requirements) - diff --git a/src/content/docs/hi/setup/installation.mdx b/src/content/docs/hi/setup/installation.mdx deleted file mode 100644 index 99b839ac..00000000 --- a/src/content/docs/hi/setup/installation.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Installation -description: "A guide on how to install Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -After booting into the live system, you will see a dialog box asking you whether to start the installer or continue with the live system. - -![The Welcome Dialog box](/assets/welcome-window.png) - -You can pick whichever you want, and you'll be able to start the installer later by opening the `Install to Hard Drive` application. - -## Language Selection - -![The Language Selection Screen](/assets/anaconda-1.png) - -After starting the installer, you will be greeted with a language selection screen. Simply choose the language and keyboard layout you would like to use. - -## The Anaconda Hub & Spoke Model - -![Anaconda Hub](/assets/anaconda-2.png) - -Anaconda uses a hub and spoke model. You can configure your installation in any order you want, but you will need to complete all the options before you can continue. - -### Keyboard Layouts - -![Anaconda Keyboard Layout](/assets/anaconda-3.png) - -Press the `+` button to add a new keyboard layout, then pick and search for the keyboard layout you prefer. - -Once you have selected the keyboard layout, you can press the `Done` button on the top left to go back to the hub. - -### Time & Date - -![](/assets/anaconda-4.png) - -The Time & Date selection screen has a world map where you can click on your location on the map to set your timezone. - - - -By default, the time is set from your IP address geolocation. If you're using a VPN or proxy this may not be accurate. - - - -### Storage - -![](/assets/anaconda-5.png) - -This is where you select where you want Ultramarine to be installed, you can have the installer automatically partition your disk, or, select a custom layout. - -By default, Ultramarine uses [Btrfs](https://en.wikipedia.org/wiki/Btrfs) on standard computers. - - - We recommend encrypting your disk for added security. Simply select the - "Encrypt" checkbox, you will be prompted to enter a new password after - pressing done, and the password you provided to the installer on every boot. - - -#### Custom Partitioning - -![](/assets/anaconda-6.png) - -In this mode, you can have Anaconda automatically setup partitions for you, or, manually configure the layout of the disk. - -On UEFI-based systems, you need a partition mounted as `/boot/EFI` and another mounted as `/`. - -On BIOS-based systems, you need a `BIOSBoot` partition, a partition mounted as `/boot` and another mounted as `/`. - -#### Advanced Partitioning - -![](/assets/anaconda-7.png) - -In this mode, Anaconda uses a tool called blivet-gui for you to manually partition your drive. This mode provides more freedom, so make sure you know what you're doing. - ---- - -After completing your system configuration, press the `Begin Installation` button to continue. The installation process will start and may take a few minutes. - - - This process is **IRREVERSIBLE**. If you manage to stop the installer before - it finishes, you will end up with a broken system.
To fix this, you - will have to reinstall Ultramarine Linux or your preferred operating system. -
- -After the installation process is complete, Anaconda will prompt you to exit. You can reboot your device from the live environment. - -Next you'll set up your system. - -#### [Next Up: Post-Installation →](/en/setup/postinstall) - -#### [← Back To: BIOS Keys](/en/setup/bioskeys) diff --git a/src/content/docs/hi/setup/nvidia.mdx b/src/content/docs/hi/setup/nvidia.mdx deleted file mode 100644 index ac291cbc..00000000 --- a/src/content/docs/hi/setup/nvidia.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: NVIDIA Drivers -description: "Information about NVIDIA Graphics on Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -For computers with NVIDIA graphics cards, you have two choices for drivers. - -#### Noveau Driver - -[The Noveau driver](https://nouveau.freedesktop.org/) is a fully open-source driver for NVIDIA graphics cards. It's built into Ultramarine so you can use your GPU instantly. - -Despite how good this sounds, modern NVIDIA GPUs will suffer performance issues and screen tearing under the Noveau driver. - -Older NVIDIA GPUs work well with the Noveau driver (and may only work with Noveau.) - -#### Proprietary Driver - -This is our recommended solution. Proprietary drivers support all of the features and performance of your GPU. They are automatically installed during installation if you are connected to the internet. - -If drivers weren't installed, or you switched to an NVIDIA GPU, you can install drivers by opening the "Software" app and searching for "NVIDIA" or by running the following commands in terminal: - -```bash -sudo dnf update # Update the system first, the drivers may not work right if you don't. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - - - You MUST wait until the process is finished before rebooting. Rebooting too - early might result in a broken installation! This may take upwards of 15 - minutes! - - -#### [Next Up: Contributing →](/en/contributing/contributorguide) - -#### [← Back To: Broadcom and Realtek Networking](/en/setup/broadcom-realtek) diff --git a/src/content/docs/hi/setup/post-advanced.mdx b/src/content/docs/hi/setup/post-advanced.mdx deleted file mode 100644 index 3f072a28..00000000 --- a/src/content/docs/hi/setup/post-advanced.mdx +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Advanced Post-Installation Steps -description: Learn how to further configure your Ultramarine Linux installation. ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Use systemd-boot as the bootloader - -Ultramarine Linux currently still uses GRUB as the default bootloader for compatibility reasons. However, if you have a UEFI system, you can simply switch to -systemd-boot, which is a more modern bootloader. - - - This step is optional. You can skip this step if you don't want to use - systemd-boot. Make sure to back up your data and have a live USB ready in case - something goes wrong. Incorrectly configuring a new bootloader can make your - OS unbootable. - - -1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after [Setting up Secure Boot](#set-up-secure-boot) -2. Remove GRUB from protected packages: - -```bash -sudo rm /etc/dnf/protected.d/grub* -``` - -3. Start uninstalling GRUB: - -```bash -sudo dnf remove -y grubby grub2\* memtest86\* && sudo rm -rf /boot/grub2 && sudo rm -rf /boot/loader -``` - -4. Install unsigned systemd-boot binaries and the `sdubby` tool: - -```bash -sudo dnf install systemd-boot-unsigned sdubby -``` - -5. Install systemd-boot to the ESP: - -```bash -# Copy your current cmdline options just in case -cat /proc/cmdline | cut -d ' ' -f 2- | sudo tee /etc/kernel/cmdline -# Install systemd-boot -sudo bootctl install -# Now, reinstall and regenerate the current kernel entry -sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz -# Reinstall the kernel again, just in case we need to trigger some hooks -sudo dnf reinstall -y kernel-core -``` - -6. Reboot your system and make sure it boots correctly, run `sudo bootctl` to check if the boot process is correct. -7. (Optional) Proceed to [Set up Secure Boot](#set-up-secure-boot) if you want to re-enable Secure Boot. - -## Set up Secure Boot - -[Secure Boot] is a UEFI security protocol that secures the boot process by ensuring that -only signed executables are allowed to boot. While Ultramarine Linux's bootloader shim is signed by Microsoft and Red Hat, -you may want to use a different bootloader (i.e systemd-boot or rEFInd) or kernel. In that case, you will need to manually enroll -and sign the files with your own keys. - -Fortunately, there's a tool to automate this called [sbctl]. You can install it from the Terra repository: - - - `sbctl` is only available on Ultramarine/Fedora 40 and later. - - -```bash -sudo dnf install sbctl -``` - -After installing `sbctl`, you can use it to enroll, sign, and manage your Secure Boot keys. For example, to generate a new key and enroll it in your UEFI firmware: - -```bash -# Generate a new key -sudo sbctl create-keys -# Enroll the key -sudo sbctl enroll-keys -``` - -You can then use `sbctl sign` to sign your kernel, initramfs, and bootloader binaries. For example: - -```bash -# Sign the kernel -sudo sbctl sign /boot/vmlinuz-$(uname -r) -``` - -However, once you have installed sbctl, it should've already set up a hook to sign the kernel, initramfs and bootloader binaries automatically on kernel updates. - -After signing the necessary files and enrolling them in your firmware, you can re-enable Secure Boot in your UEFI settings. - -[Secure Boot]: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot -[sbctl]: https://github.com/Foxboron/sbctl - -#### [Next Up: Broadcom and Realtek Networking →](/en/setup/broadcom-realtek) - -#### [← Back To: Post-Installation](/en/setup/postinstall) diff --git a/src/content/docs/hi/setup/postinstall.mdx b/src/content/docs/hi/setup/postinstall.mdx deleted file mode 100644 index eea5ded1..00000000 --- a/src/content/docs/hi/setup/postinstall.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Post-Installation -description: "Things to do after installing Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Creating a User Account - -After Ultramarine is installed and you've rebooted into it, you'll be greeted with the out of box experience, Taidan. - -You'll be guided through a setup process from here, configure your system as you please. -Welcome to Ultramarine Linux! - -## Install NVIDIA Drivers - -If you were connected to the Internet during installation NVIDIA drivers were installed automatically. -If this didn't happen or you missed the chance to enable them on first boot, you can install them with these commands: - -```bash -sudo dnf update # Update the system first, the drivers may not work if you don't. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - -Then, reboot your system. - - - You MUST wait until the process is finished before rebooting. Rebooting too - early might result in a broken driver installation! This may take upwards of - 15 minutes! You can check the progress by running `sudo akmods` - - -### Use NVIDIA Graphics Card as the primary card on Optimus Laptops - -This change is is completely optional. You can skip this step if you don't -want to use your NVIDIA Graphics Card as the primary card, or you do not use a -dual-GPU laptop connected to an external monitor. It may also cause issues -with some applications, such as Steam and Bottles. - -Run the following commands to make your NVIDIA Graphics Card the primary Graphics Card: - -```bash -sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf -sudo sed -i '10i\ Option "PrimaryGPU" "yes"' /etc/X11/xorg.conf.d/nvidia.conf # Add PrimaryGPU = yes to the 10th line of the file. -``` - -Then reboot your system. - -## Install Codecs - -Ultramarine Linux includes codecs for most of the media you'll come across. **You shouldn't need to install any additional codecs.** Most of these packages below should be installed by default, excluding -the VLC and MPV media players, and the `libdvdcss` library. - -However, if you find yourself in the situation where you do not have those codecs (if you converted for example), or require additional codecs other than we have provided (i.e obscure formats, or proprietary codecs not included in any repositories), you can look into the following packages: - -- `x264` and `x265` for better H.264 and HEVC video support - Developed by the VideoLAN (VLC) project. -- [FFmpeg](https://ffmpeg.org/) (`ffmpeg`) - A cross-platform multimedia framework that can manipulate, convert and transcode to and from various media formats. -- [VLC Media Player](https://www.videolan.org/vlc/) (`vlc`) - A free and open-source media player that can play most multimedia files, can also be used to test out the codecs' functionality. -- [MPV](https://mpv.io/) (`mpv`) - A free and open-source media player that can also play most multimedia files. Can be used as a lightweight alternative to VLC. -- [libvpx](https://www.webmproject.org/) (`libvpx`) - A free and open-source codec for VP8 and VP9 video formats. -- [libdvdcss](https://www.videolan.org/developers/libdvdcss.html) (`libdvdcss`) - A library that can be used to read encrypted DVDs. This is not legal in some countries, so please check your local laws before using it. We also do not provide decryption keys for any encrypted DVDs. -- [Opus](https://opus-codec.org/) (`opus`) - A free and open-source audio codec that can be used for both speech and music. Should be installed by default. -- [OpenH264](https://www.openh264.org/) (`openh264`) - A free and open-source codec for H.264 video formats. Should be installed by default, required for WebRTC and partially Firefox. -- [aptX](https://www.aptx.com/) (`pipewire-codec-aptx`) - A proprietary codec for high-quality audio streaming over Bluetooth. Required for wireless Bluetooth audio devices that support it. -- `nv-codec-headers` - NVIDIA's codec headers for encoding and decoding video on NVIDIA GPUs. Required for hardware-accelerated video encoding and decoding on NVIDIA GPUs. May not be used by default assuming you do not have an NVIDIA GPU. -- [LAME](https://lame.sourceforge.io/) (`lame`) - A free and open-source MP3 encoder. Required for encoding MP3 files. -- `PackageKit-gstreamer-plugin` - PackageKit plugin that helps you install the above codec packages using GNOME Software/KDE Discover. - -## Set up Backups - -You may want to back up your files to an external volume, you can use [Pika Backup] or [Déjà Dup] to do so. - -Instructions are available on the [Pika Backup] and [Déjà Dup] websites. - -[Déjà Dup]: https://wiki.gnome.org/Apps/DejaDup -[Pika Backup]: https://apps.gnome.org/PikaBackup/ - -# Advanced Tweaks - -These are tweaks that you probably don't care about, if you don't know what you're doing, skip this section. - -## Use systemd-boot as the Bootloader - -Ultramarine uses GRUB as its bootloader for compatibility reasons. However, if you have a UEFI system, you may switch to -systemd-boot, a modern bootloader. It may even speed up boot! - - - This step is optional. You can skip this step if you don't want to use - systemd-boot. Make sure to back up your data and have a live USB ready in case - something goes wrong. Incorrectly configuring a new bootloader can make your - OS unbootable. - - -1. Make sure you turn off Secure Boot in your UEFI settings for now, You can re-enable it later after you [sign systemd-boot with your own keys.](#secure-boot-with-systemd-boot) -2. Remove GRUB from protected packages: - -```bash -sudo rm /etc/dnf/protected.d/grub* -``` - -3. Start uninstalling GRUB: - -```bash -sudo dnf remove -y grubby grub2\* memtest86\* && sudo rm -rf /boot/grub2 && sudo rm -rf /boot/loader -``` - -4. Install unsigned systemd-boot binaries and the `sdubby` tool: - -```bash -sudo dnf install systemd-boot-unsigned sdubby -``` - -5. Install systemd-boot to the ESP: - -```bash -# Copy your current cmdline options just in case -cat /proc/cmdline | cut -d ' ' -f 2- | sudo tee /etc/kernel/cmdline -# Install systemd-boot -sudo bootctl install -# Now, reinstall and regenerate the current kernel entry -sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz -# Reinstall the kernel again, just in case we need to trigger some hooks -sudo dnf reinstall -y kernel-core -``` - -6. Reboot your system and make sure it boots correctly, run `sudo bootctl` to check if the boot process is correct. -7. (Optional) proceed to [Set up Secure Boot](#secure-boot-with-systemd-boot) if you want to re-enable Secure Boot. - -### Secure Boot with systemd-boot - -If you switch to systemd-boot your bootloader will no longer have Red Hat's signing keys, breaking secure boot. If you'd like to keep using secure boot, you can sign systemd-boot with your own keys. - -Fortunately, there's a tool to automate this called sbctl. You can install it from the Terra repository: - -```bash -sudo dnf install sbctl -``` - -After installing `sbctl`, you can use it to enroll, sign, and manage your Secure Boot keys. For example, to generate a new key and enroll it in your UEFI firmware: - -```bash -# Generate a new key -sudo sbctl create-keys -# Enroll the key -sudo sbctl enroll-keys -``` - -You can then use `sbctl sign` to sign your kernel, initramfs, and bootloader binaries. For example: - -```bash -# Sign the kernel -sudo sbctl sign /boot/vmlinuz-$(uname -r) -``` - -However, once you have installed sbctl, it should've already set up a hook to sign the kernel, initramfs and bootloader binaries automatically on kernel updates. - -After signing the necessary files and enrolling them in your firmware, you can re-enable Secure Boot in your UEFI settings. - -#### [Next Up: Broadcom and Realtek Networking →](/en/setup/broadcom-realtek) - -#### [← Back To: Installation](/en/setup/installation) diff --git a/src/content/docs/hi/setup/readymade.mdx b/src/content/docs/hi/setup/readymade.mdx deleted file mode 100644 index 1b79da59..00000000 --- a/src/content/docs/hi/setup/readymade.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Installation with Readymade Preview -description: "A guide on how to install Ultramarine Linux with the upcoming new installer " ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -After booting into the live system, you will see a dialog box asking you whether to start the installer or continue with the live system. - -![The Welcome Dialog box](/assets/welcome-window.png) - -You can pick whichever you want, and you'll be able to start the installer later by opening the `Install to Hard Drive` application. - -#### [Next Up: Post-installation →](/en/setup/postinstall) - -#### [← Back To: Getting Ultramarine](/en/setup/getting) diff --git a/src/content/docs/hi/setup/requirements.mdx b/src/content/docs/hi/setup/requirements.mdx deleted file mode 100644 index b7eaf1aa..00000000 --- a/src/content/docs/hi/setup/requirements.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: System Requirements -description: "Minimum Requirements for Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Recommended Specifications for Standard PCs - -These are our suggestions for the most basic (daily-driveable) system: - -- 4GB of RAM (8GB or more recommended) -- 64-bit processor (x86_64/amd64) -- 20GB of free disk space (32GB or more recommended) -- Internet connection (for downloading the ISO image, updates, and additional drivers) -- A computer that supports booting from a USB drive -- A USB drive (for creating the bootable media) - -## Minimum Specifications for Raspberry Pi - -- Raspberry Pi 3 or newer -- 4GB of RAM **OR** 1GB of RAM without a desktop environment -- 16GB Class 10 MicroSD Card -- See the [anywhere page](/en/anywhere/rpi) - -## Minimum Specifications for ARM Devices Using UEFI - -- 64-bit processor (aarch64) -- 4GB of RAM -- 16GB of Storage - -## Minimum Requirements - -These requirements are the **_bare minimum_** to run Ultramarine Linux. Using Ultramarine on a computer of this caliber will not be a good time. - -- 1gb of RAM -- 64-bit processor (x86_64 **OR** aarch64) -- 10GB of disk space - -#### [Next Up: Getting Ultramarine →](/en/setup/getting) - -#### [← Back To: Code of Conduct](/en/community/codeofconduct) diff --git a/src/content/docs/hi/usage/eduroam.mdx b/src/content/docs/hi/usage/eduroam.mdx deleted file mode 100644 index 9ce6e972..00000000 --- a/src/content/docs/hi/usage/eduroam.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: eduroam -description: "Extra instructions for getting Eduroam working." ---- - -eduroam is a federated identity service for WiFi networks at universities, colleges, and research institutions. Many schools around the world offer eduroam, meaning that a student from Thailand can pay a visit to a university in the US and have free internet without getting new credentials. - -## Configuring eduroam on Ultramarine - -We recommend using eduroam's CAT tool, as it simplifies setup and automatically connects you to hotspots outside of your home institution. - -Go to the [eduroam CAT website](https://cat.eduroam.org) and press the large download button, you'll be presented with a list of suggested institutions and a search bar, find your institution and select it. -![Download Page](/assets/eduroam/selectschool.png) -If your institution is a part of a larger system, it may not be listed on it's own. Like in this example, Minnesota State is comprised of many institutions, and acts as one for eduroam. - -Now you can press the eduroam button to download your installer. -![Download Page](/assets/eduroam/download.png) - -Your download should start automatically, and you'll be presented with helpdesk information just in case. -![Download Page](/assets/eduroam/downloaded.png) - -Now that CAT is downloaded, open a terminal and run the downloaded file with `python3 eduroam-linux-xxxxx.py`. -![Running CAT](/assets/eduroam/terminal.png) - -The installer may look different depending on what edition you're on, but all of them look the same. It may present you with policy and other information, if it goes off the screen, you can use Vim bindings or the tab key to highlight a button, and enter to select it. -![Running CAT](/assets/eduroam/installer.png) - -Final step! Enter your credentials (usually your institution-issued email address). -![Running CAT](/assets/eduroam/creds.png) - -You're done! Just visit any eduroam hotspot and you'll be automatically connected. -![Running CAT](/assets/eduroam/done.png) - -If you need further support, we recommend contacting your institution's helpdesk, or hopping into one of [our chats](/en/community/community/). - -#### [Next Up: Linux Concepts: What is Linux? →](/en/linux/overview) - -#### [← Back To: umcli](/en/usage/umcli) diff --git a/src/content/docs/hi/usage/gaming.mdx b/src/content/docs/hi/usage/gaming.mdx deleted file mode 100644 index a8970c28..00000000 --- a/src/content/docs/hi/usage/gaming.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Gaming on Ultramarine -description: "Extra instructions for gaming on Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -While Ultramarine Linux is not primarily optimized for gaming, it is still a great platform for gaming, as it already has some performance optimizations applied out of the box, and can be further optimized with some tweaks. - -# Performance - -Gaming performance on Linux will usually be similar (or sometimes even faster) than on Windows, as the Linux kernel is more lightweight and has better memory management. However, some games may not run as well on Linux due to poor optimization or lack of support for Linux. - -Running games under Wine/Proton may help in some cases, but it may also causes issues. Your mileage may vary depending on the game. - -You can refer to [ProtonDB](https://www.protondb.com) to check if your game is compatible with Proton, and to see what tweaks are needed to make it work. - -# Gaming Platforms - -There are several gaming platforms available on Linux. But the most supported one is Steam, which comes with a native Linux client and has a large library of games that support Linux, as well as Proton for running some Windows-only games. - -## Steam - -[Steam](https://steampowered.com) is a great PC gaming platform, and it has native support for Linux. Many game publishers publish their games on Steam, and some even natively support Linux. Steam offers discounts for games published on their platform, and also has a built-in overlay for chatting with friends, taking screenshots, and more. - -Steam runs on the Chromium Embedded Framework (CEF), which essentially means that most of the UI is created using web technologies. - -You can install Steam in 2 ways: - -1. Install the `steam` package from the RPM Fusion repository. (system-wide) -2. Install the Steam flatpak from Flathub. (user-only) - -The first option is recommended, as it has better system integration. However, the second option is also available if you are running Ultramarine OSTree/Kanopy/CoreOS, or if you want to keep Steam isolated from the rest of the system. - -## itch.io - -[itch.io](https://itch.io) is a platform for indie games, and it has a native Linux client. It has a large library of indie games, and some of them are available for free. You can install the itch.io client as a Flatpak from [Flathub](https://flathub.org/apps/io.itch.itch). - -## Epic Games Store, GOG, and Amazon Games - -The Epic Games Store, GOG, and Amazon Games do not have native Linux clients, but you can use the [Heroic Games Launcher](#heroic-games-launcher) to install and run games from these platforms on Linux. - -## EA Desktop/Origin - -EA Desktop (formerly known as Origin) does not have a native Linux client, but you can either use the [Lutris](#lutris) client to install and run games from EA Desktop, or manually install the EA Desktop client using Wine/Proton. - -Using a [Bottles](#bottles) prefix is recommended for EA Desktop, as it allows you to manage a dedicated prefix for all your EA games. - -## Ubisoft Connect/Uplay - -If you still own games on Ubisoft Connect (formerly known as Uplay), you may be able to run some of them on Linux using Wine/Proton. However, some games may not work due to Ubisoft's anti-cheat software. - -See the [Lutris](#lutris) or [Bottles](#bottles) sections for more information on running Ubisoft Connect games on Linux. - -Simply download the Ubisoft Connect client from the official website, and try running it using Wine/Proton. - -### Proton - -If your game does not support Linux, or the Linux version happens to be inferior to the Windows version, you can use Steam's Proton compatibility layer to run Windows games on Linux. Proton is based on Wine, and it is developed by Valve. - -If the game you're trying to play doesn't work on Proton, check back in a week, it's quite possible that it will work after Proton updates or active work from Valve. - -### Slow Download Speeds - -There have been recent reports of slow download speeds on Steam due to issues with the Steam client and HTTP/2, see the relevant [Steam for Linux issue](https://github.com/ValveSoftware/steam-for-linux/issues/10248) for more information. - -If you are experiencing slow download speeds and aren't sure why, you can try disabling HTTP/2 in Steam by adding the following lines to the `~/.steam/steam/steam_dev.cfg` file and restarting steam: - -```plaintext -@nClientDownloadEnableHTTP2PlatformLinux 0 -@fDownloadRatelmprovement ToAddAnother Connection 1.0 -``` - -## Heroic Games Launcher - -The Heroic Games Launcher is a native Linux client for the Epic Games Store and GOG Galaxy. It supports downloading and installing native Linux games from GOG, and running Windows-only games from both GOG and Epic Games Store using Wine/Proton. - -## Lutris - -Lutris is a game launcher for Linux. It supports installing and managing your game library from various sources, including Steam, GOG, EA Origin, and its own community-provided installers. It also supports running Windows-only games using Wine/Proton. - -### EA Desktop - -Games that use EA's Origin platform or EA Desktop can be run using Lutris. You can install the EA Desktop client using the Lutris installer, and then install your games from there. - -### Epic Games Store - -Please refer to the [Heroic Games Launcher](#heroic-games-launcher) section. - -## Bottles - -Bottles is a tool for managing Wine prefixes. It is similar to Lutris, but is more focused on creating and managing Wine prefixes for multiple applications rather than creating each prefix for a single game or application. - -Installing Bottles is only supported as a Flatpak. Any other version of bottles is not supported by the Ultramarine Linux Team. - -## Known Incompatible Games - -These games are known to not work on Ultramarine due to various reasons, such as anti-cheat software, DRM, or API incompatibilities: - -| Game | Anti-Cheat implementation | Reason (if applicable) | Notes | -| --------------------------------------------------- | ------------------------- | ------------------------------- | ---------------------------------------------- | -| _Apex Legends_ | Easy Anti-Cheat | - | Support for Proton recently removed | -| _Fortnite_ | Easy Anti-Cheat, BattlEye | - | Officially unsupported according to Epic Games | -| _Honkai Impact 3rd_ | Tencent Anti-Cheat Expert | - | [^1] | -| _Honkai: Star Rail_ | HoYoProtect | - | [^1] | -| _Infinity Nikki_ | Tencent Anti-Cheat Expert | - | [^1] [^2] | -| _Strinova_ | Tencent Anti-Cheat Expert | - | [^1] [^2] | -| _Phantasy Star Online 2: New Genesis_ (Japan) | Easy Anti-Cheat | - | [^2] | -| _Tom Clancy's Rainbow Six Siege_ | BattlEye, MouseTrap | - | - | -| _The Crew 2_ | Easy Anti-Cheat | - | - | -| _Watch_Dogs_ | Easy Anti-Cheat | - | Single-Player only | -| _Watch_Dogs 2_ | Easy Anti-Cheat | - | Single-Player only | -| _Watch_Dogs: Legion_ | Easy Anti-Cheat | - | Single-Player only | -| _Valorant_ | Vanguard | - | - | -| _League of Legends_ | Vanguard | - | - | -| _Battlefield V_ | EA Anti-Cheat | - | - | -| _Battlefield 2042_ | EA Anti-Cheat | - | - | -| _Need for Speed Unbound_ | EA Anti-Cheat | - | - | -| _Command & Conquer Red Alert 3 & Uprising_ | - | SAGE 2 Path resolver is broken | [^3] | -| _Command & Conquer 3: Tiberium Wars & Kane's Wrath_ | - | SAGE 2 Path resolver is broken | [^3] | -| _Command & Conquer_ games up to _Yuri's Revenge_ | - | DirectDraw compatibility issues | [^4] | - -For more information on other games, you can refer to the [ProtonDB](https://www.protondb.com) website for compatibility reports. - -[^1]: There may be workarounds for these games, but they are not officially supported and you may risk getting banned for its use. The recommended way to play these games is to play on a mobile device or a Windows machine. -[^2]: These games have a known whitelist for the Steam Deck specifically, but does not guarantee that it will work on other Linux systems. -[^3]: You may run this game if you install the game in a path that does not contain periods (e.g. `~/Games/` instead of `~/.local/share/Steam/`). -[^4]: You may need to install DDrawCompat or CnC-DDraw to run this game properly, as it has compatibility issues even with Windows systems. You may also use CnCNet to apply the aforementioned fixes and enable multiplayer. - -#### [Next Up: Localization →](/en/usage/l10n) - -#### [← Back To: Ultramarine Anywhere, Windows Subsystem for Linux](/en/anywhere/wsl) diff --git a/src/content/docs/hi/usage/l10n.mdx b/src/content/docs/hi/usage/l10n.mdx deleted file mode 100644 index a28749e0..00000000 --- a/src/content/docs/hi/usage/l10n.mdx +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: Localization, Internationalization and Multilingualization -description: How to make your system support other languages and even improve the support ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Localization (l10n) and internationalization (i18n) support in Ultramarine Linux is crucial as -half of the project team speaks something other than English natively. This page contains details on -how i18n works and how it can be set up on Ultramarine. - -## Fonts - -Ultramarine should come with fonts for most if not all languages by default. Fonts for CJKV, Thai, -Indic languages are installed out of the box. If you find any glyphs supported by Unicode not -rendered correctly, [file a bug report]. - -### Font Priorities - -Chinese users might experience issues where Japanese fonts are preferred over Chinese ones simply -because the locale code `ja_JP` is before `zh_*` when sorted alphabetically. To solve this issue, -edit `~/.config/fontconfig/fonts.conf` (or `/etc/fonts/local.conf` for global changes): - -```xml - - - - - sans-serif - - Noto Sans CJK TW - Noto Sans - HanaMinA - - - - serif - - Noto Serif CJK TW - Noto Serif - HanaMinA - - - -``` - -## Inputting in Another Language - -You may change your key maps / keyboard layout in the settings applet. Refer to documentations for -your chosen Desktop Environment (DE) or Window Manager (WM) for more details. - -### IMFs, IMEs and IMs - -Special tools are required to type in CJKV (Chinese, Japanese, Korean and Vietnamese) and other -specific languages. - -**Input Method Frameworks (IMFs)** are software that enable users to type in numerous different input -methods. They provide a unified experience and user interface between IMEs and the DE/WM. - -**Input Method Editors (IMEs)** are software that convert user inputs into actual texts in different -languages. - -**Input Methods (IMs)** refer to the actual conversion between the input keys and the output text. IMs -are not actual software; there must be an IME that intercepts the inputted keys and map them into -output texts, where the mapping is specified by the IM. - -As an example, a Japanese KDE user would install `fcitx5-mozc` in order to type Japanese. In this -case, Fcitx5 is the IMF, Mozc is the IME, and the IM can be Romaji or Kana input depending on the -user's preference. - -A Cantonese GNOME user from Hong Kong learning Korean would install `ibus-rime` with Jyutping and -Cangjie support alongside `ibus-hangul` for Korean support. Here, IBus is the IMF, Rime IME provides -support for the Jyutping IM and Cangjie IM, while libhangul IME provides support for the Hangul IM. - -In most typical cases, only 1 IMF is installed in a system. However, multilingual users may choose -to install multiple IMEs so that they can type in multiple languages. - -### Fcitx5 vs IBus - -**IBus** (Intelligent Input Bus) is an IMF usually used in GTK-based desktop environments. If you -are using GNOME/Budgie, you most likely will choose IBus over Fcitx5 due to GNOME Desktop's tight -integration with IBus. Even though IBus's initial release was back in August 2008, releases are -still rather frequent and the project is still being maintained. - -**Fcitx5** is a newer IMF implementation and provides support for many different languages with a -slim core extensible with different addons and IMEs. It is the successor to Fcitx. If you are using -DEs that are not GTK-based (such as KDE Plasma which uses Qt) or any WMs, you should choose Fcitx5. - -There are no strict rules on which one to choose, you can install Fcitx5 even though you use GNOME, -and you can also install IBus on a KDE system. Things come down to personal preferences. - -IBus will not work inside Window Managers. - -### Setting up Fcitx5 on KDE - -1. Install your chosen IMEs (see the table below) alongside `kcm-fcitx5` and `fcitx5-configtool`. - - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. - -2. Enable Fcitx 5: - - - On Wayland (default), go to _Settings > Input Devices > Virtual Keyboard_, and select _Fcitx 5_. - - If Fcitx 5 does not work even after a reboot, try running `im-chooser` and select _Fcitx 5_. - - On X11, install `fcitx5-autostart`. - - If Fcitx 5 does not work even after a reboot, try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=fcitx - QT_IM_MODULE=fcitx - ``` - -3. Head to _Settings > Regional Settings > Input Method_, then start configuring Fcitx 5. - -### Setting up Fcitx5 on Other DEs/WMs - -1. Install your chosen IMEs (see the table below) alongside `fcitx5-configtool`, `fcitx5-autostart`. - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. -2. Fcitx 5 should be enabled via the autostart package. If not, - - - try running `im-chooser` and select _Fcitx 5_. - - try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=fcitx - QT_IM_MODULE=fcitx - ``` - -3. When Fcitx 5 is running, right click on the new "en" icon on the system tray > Settings. -4. Start configuring Fcitx5. - -### Setting up IBus - -1. Install your chosen IMEs (see the table below). -2. On GNOME, Budgie/Flagship and similar DEs, go into Settings > Keyboard. -3. On other DEs, run `ibus-setup`. -4. If IBus does not work correctly, - - try running `im-chooser` and select _IBus_. - - try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=ibus - QT_IM_MODULE=ibus - ``` - -### List of IMEs and IMs - -Credits to Arch Wiki contributors for a [complete list of IMs]. The table is filtered and amended -such that it better represents Ultramarine's support on different IMs: - -``` - ┌─────────────────────┬─────────────────────┐ - ↓IM/IME IMF→ │ Fcitx5 │ IBus │ -┌──────────────┴─────────────────────┴─────────────────────┤ -│ CHINESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Rime │ fcitx5-rime │ ibus-rime │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Pinyin │fcitx5-chinese-addons│ ibus-pinyin │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Zhuyin │ fcitx5-chewing │ ibus-chewing │ -│ Libzhuyin │ fcitx5-zhuyin │ ibus-libzhuyin │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Cangjie │ │ ibus-table-chinese- │ -│ Sucheng/Quick│ fcitx5-table-extra⁵ │ {cangjie,quick,scj} │ -│ SmartCangjie │ (and More…) │ /ibus-table-chinese │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Haifeng Wubi │ fcitx5-table-extra⁵ │ ibus-table-chinese- │ -│ Jidian Wubi │ (and More…) │wubi-{haifeng,jidian}│ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Others │ fcitx5-table-extra? │ ibus-table-chinese? │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ JAPANESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Mozc │ fcitx5-mozc │ ibus-mozc │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Anthy¹ │ fcitx5-anthy │ ibus-anthy │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ SKK² │ fcitx5-skk │ ibus-skk │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ KKC³ │ fcitx5-kkc │ ibus-kkc │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ KOREAN │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Libhangul │ fcitx5-hangul │ ibus-hangul │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ VIETNAMESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Unikey │ fcitx5-unikey │ ibus-unikey │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ ViQR │ fcitx5-m17n │ ibus-table-tv │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ INDIC │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ m17n │ fcitx5-m17n │ ibus-m17n │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ OpenBangla │ fcitx5-openbangla │ ibus-openbangla │ -├──────────────┼─────────────────────┼─────────────────────┤ -│Sayura Sinhara│ fcitx5-sayura │ ibus-sayura │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ OTHERS │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Thai │ fcitx5-libthai │ ibus-table-tv │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Math Symbols │ Compose Key⁴? │ibus-table-mathwriter│ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Completion │ *builtin* │ ibus-typing-booster │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Everything │ fcitx5-m17n │ ibus-m17n │ -└──────────────┴─────────────────────┴─────────────────────┘ -``` - -**Notes**: - -1. Anthy (the IM, not IME) is unmaintained, Mozc is usually preferred. -2. https://github.com/ueno/libskk -3. https://github.com/ueno/libkkc -4. See [#Compose Key](#compose-key). There is also LaTeX support in `fcitx5-m17n`. -5. See below for more IMs supported by `fcitx5-table-extra`. - -#### List of IMs Supported by `fcitx5-table-extra` - - - Due to a bug in Fedora packaging, you need to also install - `fcitx5-chinese-addons` alongside `fcitx5-table-extra` in order for things to - take effect. - - -- boshiamy -- cangjie-large -- cangjie3 -- cangjie5 -- cantonese -- cantonhk -- easy-large -- jyutping-table -- quick-classic -- quick3 -- quick5 -- scj6 -- stroke5 -- t9 -- wu -- wubi-large -- wubi98-large -- wubi98-pinyin -- wubi98-single -- wubi98 -- zhengma-large -- zhengma-pinyin -- zhengma - -#### List of Packages for `ibus-table*` - -- `ibus-table-code`: Ibus-Tables for Latex, CNS11643 & Emoticons -- `ibus-table-cyrillic`: Ibus-Tables for Cyrillic -- `ibus-table-extraphrase`: Extra phrase for ibus-table -- `ibus-table-latin`: Ibus-Tables for Latin -- `ibus-table-mathwriter`: Ibus-Tables for Unicode mathematics symbols -- `ibus-table-mongol`: Ibus-Tables for Mongol Script -- `ibus-table-others`: Various tables for IBus-Table -- `ibus-table-translit`: Ibus-Tables for Russian Translit -- `ibus-table-tv`: Ibus-Tables for Thai and Viqr (Vietnamese) -- `ibus-table-chinese`: Chinese input tables for IBus -- `ibus-table-chinese-array`: Array input methods -- `ibus-table-chinese-cangjie`: Cangjie based input methods -- `ibus-table-chinese-cantonese`: Cantonese input methods -- `ibus-table-chinese-cantonyale`: Cantonese input method based on yale romanization -- `ibus-table-chinese-easy`: Easy input method -- `ibus-table-chinese-erbi`: Erbi input method -- `ibus-table-chinese-quick`: Quick-to-learn input methods -- `ibus-table-chinese-scj`: Smart Cangjie -- `ibus-table-chinese-stroke5`: Stroke 5 input method -- `ibus-table-chinese-wu`: Wu pronunciation input method -- `ibus-table-chinese-wubi-haifeng`: Haifeng Wubi input method -- `ibus-table-chinese-wubi-jidian`: Jidian Wubi 86 input method, JiShuang 6.0 -- `ibus-table-chinese-yong`: YongMa input method - -#### Rime - -[Rime](https://rime.im/) is an input method engine / IME for typing Chinese. It supports a wide -range of IMs and is highly customizable. - -You may refer to [ArchWiki](https://wiki.archlinux.org/title/Rime) regarding how Rime could be -configured. Note that Fedora/Ultramrine does not provide `rime-*` packages in our repositories. -You will need to use [plum](https://github.com/rime/plum) (aka. `rime-install`) to install schemas. -`rime-install` defaults to `ibus`; append `rime_frontend=fcitx-rime` to the front of the command if -you are using Fcitx5: - -``` -rime_frontend=fcitx-rime bash rime-install rime-aca/rime-cangjie6 -``` - -### Compose Key - -See [Compose Key on Wikipedia](https://en.wikipedia.org/wiki/Compose_key) and -[on ArchWiki](https://wiki.archlinux.org/title/Compose_key). - -## Translations - -Users that speak less popular languages might face issues where their system shows text in English -even though the language settings are configured properly. Do not report this issue to us. This is -due to lack of translation efforts from upstream (either the DE/WM or the app in concern). You may -help by visiting the translation platform provided by upstream and be a translator. Your -contributions would improve the entire Linux ecosystem experience for minorities. - -### Ultramarine Components - -If projects/software provided by Ultramarine (such as the Readymade installer) are untranslated -in your language, or you would likt to provide them, please visit -[our Weblate translation platform](https://weblate.fyralabs.com/). - -There are cases where your language is not shown in the list of languages. This might be because no -one has made efforts on translating the software, or it is not supported by the i18n libraries used -by the software. For example, there is no Cantonese language option in Readymade because the i18n -library provided by GNOME desktop does not support it. In this case, you should report this issue -to the upstream library. If you have a hard time determining where to report, you may join one of -our communities and reach out. - -[file a bug report]: https://github.com/Ultramarine-Linux/ultramarine/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=%5BBUG%5D+Issue+Report -[complete list of IMs]: https://wiki.archlinux.org/title/Input_method#List_of_available_input_method_editors - -#### [Next Up: Keyboard Configuration →](/en/usage/keyboard-cfg) - -#### [← Back To: Gaming](/en/usage/gaming) diff --git a/src/content/docs/hi/usage/um40-dnf5.mdx b/src/content/docs/hi/usage/um40-dnf5.mdx deleted file mode 100644 index d2bc1e4e..00000000 --- a/src/content/docs/hi/usage/um40-dnf5.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Dnf5 Is The Default Package Manager In Ultramarine Linux 40 -description: dnf5 is the default package manager in Ultramarine Linux 40 ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Starting with UM40, `dnf5` will replace `dnf-3` as the default package manager. -This is done via the `dnf5-default-package-manager` package provided by the UM40 repositories. - -## Technical Details - -The `dnf5-default-package-manager` package has a `%triggerin` script for `dnf` and `yum`. When these -2 packages get installed/updated, the script will be executed, which will replace `/usr/bin/dnf` and -`/usr/bin/yum` symlinks to point to `/usr/bin/dnf5` instead of `/usr/bin/dnf-3`. - -This change has been proposed on upstream Fedora, but has been delayed to Fedora 41. However, we've -decided this change should be worth a try on UM40. - -## Effects - -By using `dnf5`, users will be able to install, remove and upgrade packages much faster. End-users -shouldn't need to do anything to adapt to this change. - -Since `dnf5` isn't bug-for-bug compatible with `dnf-3`, programs that rely on `dnf-3` should use the -`dnf-3` or `dnf4` command to use the older version of `dnf`. If you are facing compatibility issues -with some apps that rely on the `dnf` symlink instead of the actual `/usr/bin/dnf-3` binary, you are -advised to report this bug to upstreams (i.e. the apps in concern), not `dnf5` or Ultramarine. - -## FAQ - -### Why `dnf5`? - -- `dnf5` provides better performance over `dnf-3` because it's written in C++ instead of Python. -- We hope this change will push apps in the Fedora neighborhood to switch to `dnf5` and at the same - time discover apps that are poorly maintained/written and rely on `dnf`/`dnf-3`. - -### Does UM40 Remove `dnf`? - -- We do not remove `dnf-3`. We only replace the symlinks for `dnf` and `yum` to point to `dnf5`. - -### Wouldn't that Break Compatiblility? - -- If changing only 2 symlinks actually breaks your workflows, either your workflows are poorly made, - or there are some apps you use that rely on the 2 symlinks, which evinces that those apps are - unfortunately poorly made. Change your workflows to adapt to `dnf5` or replace `dnf` with the - actual `dnf-3` binary; or in the latter case, report the issue to the upstream apps in concern. - -- We expect `dnf5` in the future to be supposedly much more compatible with `dnf-3`. Upstream Fedora - has been working hard on making `dnf5` the replacement for `dnf-3`. There are works in progress to - adapt GNOME software for `dnf5`, and to make `dnf5` much more feature-complete. - -### But Some Features are Missing in `dnf5`! - -- There are efforts on making `dnf5` more feature-complete compared with `dnf-3`. You may help speed - this up by [contributing to upstream](https://github.com/rpm-software-management/dnf5/). diff --git a/src/content/docs/hi/welcome.mdx b/src/content/docs/hi/welcome.mdx deleted file mode 100644 index 8df69a5a..00000000 --- a/src/content/docs/hi/welcome.mdx +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: "स्वागत है" -description: "यह विकी एंड यूज़र्स और डेवलपर्स दोनों के लिए एक्स्टेंडेड डॉक्यूमेंटेशन है, इसलिए इसे दो कैटेगॉरीज में अलग किया गया है।" ---- - -import Alert from "../../../components/Docs/Alert.astro"; - -ultramarine विकी में आपका स्वागत है! यह विकी उपयोगकर्ताओं को ultramarine linux में सहज होने में मदद करने के लिए डिज़ाइन की गई है। - -डेवलपर और पैकेज मेंटेनर डॉक्यूमेंटेशन अब [Fyra Developer](https://developer.fyralabs.com) पर है। - -यदि आप योगदान करना चाहते हैं, तो [Contributing Section](/en/contributing/contributorguide) पर जाएँ। - -इस पेज पर आप प्रोजेक्ट के बारे में पढ़ सकते हैं, इसलिए अगर आप महत्वपूर्ण कॉन्सेप्ट्स और हमारी फिलॉसॉफी से परिचित होना चाहते हैं, तो इसे पहले पढ़ें! - -अगर आप ultramarine linux इंस्टॉल करना चाहते हैं, तो [Getting Ultramarine](/en/setup/getting) सेक्शन पर जाएँ। - -## जनरल फिलॉसॉफी - -ultramarine linux का मुख्य लक्ष्य तुरंत उपयोग करने योग्य अनुभव प्रदान करना है, जबकि तकनीकी नवाचारों के साथ अपडेट रहना है। ये मानक हैं जिनका हम पालन करने की कोशिश करते हैं: - -### ultramarine प्रैक्टिकल है। - -कई डिस्ट्रो के विपरीत, जो अपने आइडियोलॉजी के साथ कड़ा पालन करते हैं (जो पूरी तरह ठीक है), ultramarine एक (लगभग) पूरी तरह से फ्री सिस्टम भेजते हुए भी सबसे आसान मॉडल पर काम करता है। इसका मतलब है कि हम यूज़र के लिए इसे आसान बनाने की कोशिश करते हैं, भले ही हमें कुछ प्रॉपायटरी ड्राइवर्स और कोडेसेस भेजने पड़ें, जिन्हें कुछ डिस्ट्रो आउट-ऑफ-बॉक्स comfortable नहीं मानते। - -### ultramarine प्रोग्रेसिव है। - -हम मानते हैं कि linux क्षेत्र में हालिया नवाचार उपयोगकर्ता और डेवलपर अनुभव को काफी बेहतर बनाने में सहायक हैं। Flatpak और XDG Portals जैसी तकनीकें डेवलपर्स को हमारे उपयोगकर्ताओं के लिए बेहतर अनुभव प्रदान करने में मदद करती हैं। अपस्ट्रीम में किया गया काम हमारे उपयोगकर्ताओं के अनुभव को बेहतर बनाता है, और ultramarine इकोसिस्टम में किया गया काम; जैसे कि ऐक्सेंट रंग और Chromebook समर्थन, बड़े linux इकोसिस्टम को बेहतर बनाता है। यह एक जीत-जीत की स्थिति है। - -### ultramarine फ्रेंडली है। - -जबकि एडवांस यूज़र्स के लिए कुछ सेटिंग्स ट्वीक करना और 3rd पार्टी रिपॉजिटरीज से कुछ पैकेज इंस्टॉल करना ट्रिवियल लग सकता है, linux (या केवल Fedora) में नए लोगों को यह पता लगाने में कई घंटे लग सकते हैं कि उन्हें कौनसे पैकेज चाहिए और उन्हें कहां से ढूंढना है। ultramarine नए और पुराने यूज़र्स को जल्दी से सेटअप और रन करने की सुविधा देता है। - -### ultramarine एक्सेसिबल है। - -हम मानते हैं कि सॉफ़्टवेयर को आपको वहीं मिलना चाहिए जहां आप हैं। ultramarine इसे बेहतर अनुभव बनाकर, अपने सॉफ़्टवेयर को स्थानीयकृत करके और आपके मौजूदा हार्डवेयर पर चलाकर पूरा करता है। - -## FAQ - -### माइग्रेशन स्क्रिप्ट क्या करती है? - -माइग्रेशन स्क्रिप्ट RPMFusion, Terra रिपॉजिटरी और हमारे साइनिंग कीज़ इंस्टॉल करती है, फिर एक मौजूदा Fedora इंस्टॉलेशन के ऊपर ultramarine linux इंस्टॉलेशन का बेयर मिनिमम इंस्टॉल करती है (Fedora रिलीज़ पैकेजेस को ultramarine वाले पैकेजेस से स्वैप करते हुए)। - -स्क्रिप्ट केवल ultramarine linux को काम करने के लिए जरूरी बेयर मिनिमम इंस्टॉल करती है, क्योंकि हम आपके वर्तमान सिस्टम में अतिरिक्त ब्लोट नहीं जोड़ना चाहते। - -माइग्रेट होने के बाद, आप ultramarine की लेटेस्ट और बेहतरीन फीचर्स पाएंगे जैसे ही हम उन्हें बिल्ड करेंगे! - -### क्या ultramarine सिर्फ Fedora है अतिरिक्त डेस्कटॉप एन्वायरमेंट्स के साथ? - -नहीं, ultramarine सिर्फ Fedora नहीं है अतिरिक्त डेस्कटॉप एन्वायरमेंट्स के साथ। हमारा लक्ष्य यूज़र एक्सपीरियंस को बेहतर बनाना है ताकि नए और एडवांस यूज़र्स के लिए सही तरीके से काम करे। - -### Cutefish का क्या हुआ? - -Cutefish अब अपस्ट्रीम में मेंटेन नहीं होता। इसी कारण हमने ultramarine 37 में Cutefish का सपोर्ट बंद करने का फैसला किया। - -### Pantheon का क्या हुआ? - -Pantheon एडिशन UM40 में हटा दिया गया। डाउनलोड्स कुछ समय से लगातार घट रहे थे और डेस्कटॉप बस स्टार्ट नहीं हो रहा था, इसलिए इसे अफसोस के साथ हटा दिया गया। - -### क्या आप (यहाँ डेस्कटॉप डालें) एडिशन जोड़ सकते हैं? - -सरल शब्दों में कहें तो, शायद। हमें नई एडिशन को निम्नलिखित कुछ आवश्यकताओं को पूरा करना होता है: - -- सक्रिय रूप से मेंटेन किया जा रहा हो (पिछले एक साल में रिलीज़ हुआ हो, और अगली रिलीज़ की योजना हो) -- सक्रिय रूप से मेंटेन किया जा रहा हो (पिछले एक साल में रिलीज़ हुआ हो, और अगली रिलीज़ की योजना हो) -- एक काम करने वाला Wayland सेशन या उसे लागू करने की एक उचित योजना हो - -आदर्श रूप से, किसी भी नई एडिशन में निम्नलिखित भी होना चाहिए: - -- एक्सेसेबिलिटी टूलिंग्स -- डिस्ट्रीब्यूशन अपग्रेड्स के लिए सपोर्ट वाला एक नेटिव ऐप स्टोर -- एक्सेंट कलर और कलर स्कीम सेटिंग पोर्टल्स के लिए सपोर्ट - -अगर fedora में डेस्कटॉप एनवायरनमेंट उपलब्ध है, तो आप उसे मैन्युअली भी इंस्टॉल कर सकते हैं - -#### लेकिन (Cutefish का पुनरुद्धार डालें) के बारे में क्या? - -हम Cutefish के पुनरुद्धारों को शामिल करने का इरादा नहीं रखते क्योंकि वे आमतौर पर बहुत कम समय तक टिकते हैं। - -### क्या ultramarine मेरा डेटा ट्रैक या कलेक्ट करता है? - -अभी के लिए, हम जो एकमात्र डेटा कलेक्ट करते हैं वह यह है कि किसी पैकेज को Terra या ultramarine रिपॉजिटरी से [DNF Counting](https://docs.fedoraproject.org/en-US/infra/sysadmin_guide/dnf-counting/) का उपयोग करके कितनी बार डाउनलोड किया गया है। यह जानकारी आप या आपके कंप्यूटर से जुड़ी नहीं होती। - -Fyra Labs (जो ultramarine के पीछे की कंपनी है) किसी भी यूज़र की स्पष्ट अनुमति के बिना ऐसा कोई डेटा कलेक्ट नहीं करती जिसे किसी व्यक्ति से जोड़ा जा सके। - -### क्या ultramarine सेमी-रोलिंग है? - -नहीं। ultramarine और fedora सेमी-रोलिंग या रोलिंग नहीं हैं। इसके बजाय, वे स्थिर (stable) रिलीज़ स्कीम का उपयोग करते हैं। -ब्रेकिंग चेंजेज़ वाले अपडेट मुख्य रिलीज़ के लिए रोल आउट किए जाते हैं। माइनर अपडेट/पॉइंट अपडेट बैकवर्ड-कम्पैटिबल होते हैं। सरल शब्दों में, ultramarine में सिस्टम कॉम्पोनेंट्स तभी अपडेट किए जाते हैं जब वे कम्पैटिबिलिटी को ब्रेक न करें। - -हालाँकि, ultramarine Linux में Terra, RPM Fusion और Flathub शामिल हैं। - -- Terra एक RPM रिपॉजिटरी है जिसे Fyra Labs प्रदान करती है, और यह मुख्य रूप से रोलिंग रिलीज़ स्कीम का उपयोग करती है। -- RPM Fusion fedora के लिए एक और (बहुत लोकप्रिय) थर्ड-पार्टी रिपॉजिटरी है। यह स्थिर रिलीज़ स्कीम का उपयोग करती है। -- Flathub एक क्रॉस-डिस्ट्रो Flatpak रिपॉजिटरी है। इस रिपॉजिटरी के अपडेट का fedora/ultramarine के रिलीज़ साइकिल से कोई लेना-देना नहीं है। सख्ती से कहें तो, Flathub के पैकेज रोलिंग हैं क्योंकि उन्हें अपस्ट्रीम द्वारा एक संस्करण जारी करने पर अपडेट किया जाता है। - -### अगर कुछ पैकेजेज़ मिड-साइकिल में अपडेट होते हैं, तो क्या इसका मतलब है कि ultramarine अस्थिर या असुरक्षित है (जैसे कि Debian की तुलना में)? - -नहीं। ultramarine में पैकेजेज़ मिड-साइकिल में अपडेट होते हैं, लेकिन ये अपडेट्स सिर्फ नॉन-ब्रेकिंग चेंजेज़ शामिल करते हैं। किसी अपडेट के कारण आपका कंप्यूटर मिड-साइकिल में टूटने की संभावना लगभग शून्य है। - -- fedora/ultramarine में पैकेजेज़ मिड-रिलीज़ के दौरान अपडेट होते हैं, लेकिन ये अपडेट्स सिर्फ नॉन-ब्रेकिंग चेंजेज़ ही शामिल करते हैं। आपके कंप्यूटर के मिड-रिलीज़ में किसी अपडेट से टूटने की संभावना लगभग शून्य है। -- यह सच है कि ultramarine और fedora में डेबियन जैसी डिस्ट्रोज़ की तुलना में अपडेट्स अधिक बार आते हैं, और कुछ हद तक वे थोड़ा अधिक अस्थिर हो सकते हैं। लेकिन fedora/ultramarine का रिलीज़ साइकिल ऐसा बनाया गया है कि ऑपरेटिंग सिस्टम सामान्य उपयोग के लिए पर्याप्त रूप से स्थिर बना रहे। दुनिया भर में लाखों fedora डिवाइसेज़ बिना टूटे सही से काम कर रहे हैं, जो fedora की उच्च स्थिरता को दर्शाता है। डेबियन का रिलीज़ साइकिल इसके विपरीत बहुत धीमा है, जो कई बार अनावश्यक झंझटें पैदा कर सकता है। -- कुछ डिस्ट्रोज़ स्थिर रिलीज़ साइकिल को चरम तक ले जाते हैं। ये डिस्ट्रोज़ सर्वर्स के लिए डिज़ाइन किए गए हैं जो कई सालों तक चलते हैं, और अपडेट्स को महीनों या सालों तक विलंबित करते हैं। ऐसे डिस्ट्रोज़ का उपयोग करने वाले पीसी यूज़र्स कई चीज़ों से वंचित रह सकते हैं — जैसे नए फीचर्स, बग फिक्सेस, और सिक्योरिटी पैचेस। उचित ज्ञान और प्रबंधन के बिना, ये सिस्टम fedora/ultramarine से भी अधिक असुरक्षित हो सकते हैं। - -### ultramarine को अपडेट्स लागू करने के लिए मुझे रीबूट क्यों करना पड़ता है? - -ultramarine को वास्तव में अपडेट्स लागू करने के लिए रीबूट करने की आवश्यकता नहीं है। आप अधिकांश सिस्टम अपडेट्स बिना रीबूट किए आसानी से लागू कर सकते हैं, बस यह कमांड चलाकर: - -```bash -sudo dnf upgrade -``` - -हालांकि, कुछ अपडेट्स को प्रभावी होने के लिए रीबूट की आवश्यकता हो सकती है। ये आमतौर पर क्रिटिकल पाथ अपडेट्स होते हैं जो प्रमुख सिस्टम कॉम्पोनेंट्स को प्रभावित कर सकते हैं, जैसे कि कर्नेल, स्टैंडर्ड लाइब्रेरी, ग्राफिकल शेल, या आवश्यक सिस्टम सर्विसेज़। - -डिफ़ॉल्ट रूप से, ultramarine _PackageKit_ का उपयोग करके ऑटोमेटिक अपडेट करेगा, जो _Offline Updates_ फीचर का उपयोग करके अपडेट्स लागू करेगा, और इसके लिए रीबूट आवश्यक हो सकता है। ultramarine अपडेट्स लागू करने के बाद आपको रीबूट करने का संकेत दे सकता है ताकि सभी अपडेट सही ढंग से लागू हों, लेकिन आप बाद में किसी भी समय रीबूट करने का विकल्प चुन सकते हैं। - - - -यह अभी भी सलाह दी जाती है कि अपडेट्स लागू करने के बाद अपने सिस्टम को रीबूट करें ताकि यह सुनिश्चित हो सके कि सभी अपडेट्स सही ढंग से लागू हुए हैं, खासकर यदि आपने कुछ समय से अपने सिस्टम को रीबूट नहीं किया है। - - - -### ultramarine क्यों (अन्य डिस्ट्रो के बजाय) - -- पर्फ़ॉर्मेंस - - fedora(जिस डिस्ट्रो पर ultramarine आधारित है) में अन्य डिस्ट्रो की तुलना में बेहतरीन IO प्रदर्शन होता है। - - BTRFS डिफ़ॉल्ट फाइल सिस्टम है, एक अपेक्षाकृत उच्च प्रदर्शन वाला फाइल सिस्टम जिसमें स्नैपशॉट जैसी सुविधाएँ हैं। आप अपनी फाइलें एक सेकंड से भी कम समय में बैकअप कर सकते हैं (अन्य फाइल सिस्टम जैसे ext4 के विपरीत)। - - हम हल्के डेस्कटॉप एनवायरनमेंट्स जैसे Budgie (Flagship Edition) और Xfce शामिल करते हैं। ये सुंदर दिखते हैं, अच्छी तरह काम करते हैं और तेज़ हैं। -- प्राइवेसी - - हम आपका निजी/व्यक्तिगत डेटा ट्रैक या इकट्ठा नहीं करते। - - हमें यह भी नहीं पता कि कितने Ultramarine डिवाइस हैं (कुछ कंपनियों के विपरीत)। -- सिक्योरिटी - - सिक्योरिटी अपडेट जल्दी प्रदान किए जाते हैं (कुछ अन्य डिस्ट्रो की तुलना में)। - - SELinux डिफ़ॉल्ट रूप से सक्रिय है। -- कस्टमाइजेशन - - आपके लिए चुनने के लिए कई डेस्कटॉप एनवायरनमेंट्स उपलब्ध हैं। - - हमारे पास डिफ़ॉल्ट रूप से ऐसे ऐपलेट्स इंस्टॉल किए गए हैं जो आपके डेस्कटॉप कस्टमाइजेशन में मदद करते हैं। -- यूज़ेबिलिटी - - आपको कभी भी कमांड लाइन छूने की आवश्यकता नहीं है। - - यदि कुछ स्थितियों में कमांड लाइन की आवश्यकता हो और ऐसी स्थितियाँ अन्य सामान्य उपयोगकर्ताओं में भी उत्पन्न हो सकती हैं, तो आपको [इस बग की रिपोर्ट](https://github.com/Ultramarine-Linux/ultramarine) करनी चाहिए। - - ultramarine के डिफ़ॉल्ट सेटिंग्स समझदारी से चुने गए हैं। - - लोकप्रिय प्रोग्राम जो आपको शायद चाहिए, डिफ़ॉल्ट रूप से इंस्टॉल किए गए हैं, जैसे LibreOffice, Firefox, ड्राइवर्स आदि। - - हम ऐसे रिपॉजिटरीज शामिल करते हैं जो लोकप्रिय सॉफ़्टवेयर प्रदान करते हैं। - - आप ऐप स्टोर से और भी कई ऐप्स इंस्टॉल कर सकते हैं। इन्हें समर्पित टीमों द्वारा सावधानीपूर्वक सत्यापित किया गया है। - - Fedora और RPM Fusion रिपॉजिटरीज का उपयोग किया जाता है और लाखों लोगों द्वारा भरोसेमंद हैं। - - Terra की समीक्षा Fyra Labs और Ultramarine Project द्वारा की जाती है। [आप हमारी सुरक्षा नीति](https://github.com/terrapkg/packages/blob/f39/SECURITY.md) - - Flathub का उपयोग पूरे Linux/BSD इकोसिस्टम के उपयोगकर्ता करते हैं। यदि आप ऐप स्टोर से ऐप्स इंस्टॉल करते हैं, तो आप शायद Flathub से ऐप्स इंस्टॉल कर रहे हैं, जो रन होने पर आपके सिस्टम एनवायरनमेंट से अलग रहते हैं, जिससे हमले कम सफल होते हैं। - - -### ultramarine क्यों (Windows की बजाय) - -- परफॉर्मेंस - - Windows आपके कंप्यूटर को कई अलग-अलग संभावित रूप से अनचाहे प्रोग्राम्स से भर देता है जो आपके कंप्यूटर को धीमा कर देते हैं। ultramarine ऐसा नहीं करता। - - Ultramarine कुछ हल्के डेस्कटॉप एनवायरनमेंट्स (जैसे Budgie/Flagship और Xfce) प्रदान करता है, जो तेज चलते हैं। - - Ultramarine नई टेक्नोलॉजीज़ का उपयोग करता है जो बैकवर्ड्स कंपैटिबिलिटी के कारण Windows में उपलब्ध नहीं हैं। ये टेक्नोलॉजीज़ बेहतर परफॉर्मेंस देती हैं। - - उदाहरण के लिए, टास्क शेड्यूलर्स, फाइल सिस्टम्स, शेल्स आदि। - - अधिकांश आधुनिक सर्वर (जिनमें बड़े वेब सर्वर भी शामिल हैं) Linux का उपयोग करते हैं क्योंकि यह बहुत तेज है। -- प्राइवेसी - - हम आपके निजी डेटा को कभी भी कलेक्ट या ट्रैक नहीं करते क्योंकि वह स्टोरेज की बर्बादी है। - - हमें यह भी नहीं पता कि कितने Ultramarine डिवाइस हैं (कुछ कंपनियों के विपरीत)। - - जब आप Windows सेटअप करते हैं, तो आपको एक बहुत लंबा लाइसेंस स्वीकार करना पड़ता है। जबकि हमारे इंस्टॉलर में लाइसेंस एग्रीमेंट का कोई पेज ही नहीं है। - - Ultramarine ओपन सोर्स है। कोई भी सोर्स कोड की समीक्षा करके देख सकता है कि हम आपका डेटा ट्रैक या कलेक्ट करते हैं या नहीं। हम ऐसा नहीं करते। -- सिक्योरिटी - - सिक्योरिटी अपडेट्स Windows की तुलना में कहीं अधिक तेज होते हैं। - - अपडेट्स के लिए रीबूट की आवश्यकता नहीं होती। - - वर्तमान कम लोकप्रियता के कारण मालवेयर, वायरस आदि द्वारा Linux को निशाना बनाए जाने की संभावना बहुत कम होती है। - - हमारा ओपन सोर्स मॉडल किसी के लिए भी बग्स या वल्नरेबिलिटीज़ को पहचानना और उन्हें जल्दी ठीक करना बहुत आसान बनाता है। -- स्टेबिलिटी - - Ultramarine एक स्टेबल रिलीज़ साइकिल का उपयोग करता है। अपडेट्स आपके कंप्यूटर को खराब नहीं करेंगे। - - जब सिस्टम अपग्रेड से आपके कंप्यूटर को नुकसान पहुंचने की संभावना होती है, तो हम आपको इसके बारे में चेतावनी देते हैं। - - हम लोगों को सलाह देते हैं कि वे सपोर्ट से संपर्क करें ताकि यह जांच सकें कि अपग्रेड वास्तव में सिस्टम को नुकसान पहुंचा सकता है या नहीं। - - हमारी सपोर्ट टीम सिस्टम अपग्रेड के दौरान किसी भी संभावित समस्या को हल करने में आपकी मदद कर सकती है। - - और सबसे महत्वपूर्ण बात, आप चाहें तो बिल्कुल अपग्रेड न करने का विकल्प भी चुन सकते हैं! निर्णय आपका है। - - लाखों IoT डिवाइस Linux का उपयोग करते हैं। यदि कुछ खराब हो जाए, तो पूरा इंटरनेट प्रभावित हो सकता है। इंटरनेट Linux की स्टेबिलिटी पर भरोसा करता है, आपको भी करना चाहिए। -- कस्टमाइजेशन और यूज़ेबिलिटी - - आपके पास चुनने के लिए कई डेस्कटॉप एनवायरनमेंट्स हैं। उनमें से कुछ हल्के हैं और कुछ आकर्षक हैं। - - Ultramarine आपके पूरे डेस्कटॉप अनुभव को कस्टमाइज करने के कई तरीके प्रदान करता है। आपके कंप्यूटर पर आपका पूरा नियंत्रण होता है। - - हम आपसे विकल्प कभी नहीं छिपाते — बल्कि हम उन्हें आपके लिए और आसान बनाते हैं। - - यदि आपको Ultramarine पर कुछ विशेष कस्टमाइजेशन करना कठिन लगता है, तो यह एक डिज़ाइन की कमी है और आपको हमें अपना फीडबैक भेजना चाहिए (जैसे [GitHub](https://github.com/Ultramarine-Linux/ultramarine) के माध्यम से)।) - - हम पुराने और नए हार्डवेयर दोनों का उचित रूप से सपोर्ट करते हैं, और आपके कंप्यूटर पर एक परफॉर्मेंट और पर्सनलाइज्ड सिस्टम सेटअप करने के लिए कई टूल्स प्रदान करते हैं। - - Ultramarine की डिफॉल्ट सेटिंग्स इस तरह बनाई गई हैं कि आप अपने कंप्यूटर का उपयोग जितनी जल्दी हो सके शुरू कर सकें। - - Ultramarine एक ऐप स्टोर के साथ आता है। आप समर्पित टीमों द्वारा रिव्यू किए गए प्रोग्राम्स को बहुत आसानी से इंस्टॉल कर सकते हैं। - - यदि आप चाहते हैं कि कुछ प्रोग्राम्स ऐप स्टोर में शामिल किए जाएं, तो आपको हमें फीडबैक भेजना चाहिए। - -## Team - -इन लोगों और कम्युनिटी के साथ मिलकर बनाया गया! - -- Pornpipat "Cappy" Popum -- Lleyton "Lea" Gray -- Madomado -- Jaiden Riordan -- Owen Zimmerman -- June Fish -- Aikoyori -- Trobonox -- Mo -- Toru Ishikawa - -[टीम से मिलें →](https://fyralabs.com/about/#Meet:~:text=benefit%20of%20all.-,Meet%20the%20Team) - -#### [अगला: Join the Community →](/en/community/community) - - diff --git a/src/content/docs/zh_hant/anywhere/android.mdx b/src/content/docs/zh_hant/anywhere/android.mdx deleted file mode 100644 index a23190a6..00000000 --- a/src/content/docs/zh_hant/anywhere/android.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Android (Anywhere)" -description: "Android Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change - - -Android Devices are very common, and (most of the time) extremely customiseable. We do not have a target release or full plan at this time, but we will support in the (hopefully) near future. - -## Implementation - -We intend to use Halium for porting as it provides better hardware support. diff --git a/src/content/docs/zh_hant/anywhere/applesilicon.mdx b/src/content/docs/zh_hant/anywhere/applesilicon.mdx deleted file mode 100644 index 027a299f..00000000 --- a/src/content/docs/zh_hant/anywhere/applesilicon.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Apple Silicon Macs (Anywhere)" -description: "Apple Silicon in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change - - -We plan to use the Asahi script/patches from upstream. This will happen sometime in the near future. - -## Implementation - -- Potential GUI installer (Readymade from inside macOS) diff --git a/src/content/docs/zh_hant/anywhere/chromebook.mdx b/src/content/docs/zh_hant/anywhere/chromebook.mdx deleted file mode 100644 index 28ed1a96..00000000 --- a/src/content/docs/zh_hant/anywhere/chromebook.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: "Chromebook (Anywhere)" -description: "Chromebooks in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **In Progress Phase**. All information on - this page is subject to change. Do not follow any instructions unless you know - what you're doing. - - -Chromebooks were an obvious target for Ultramarine Anywhere, despite being mostly -standard hardware, they have custom EC and strange firmware. - -Chromebook support in Ultramarine Linux is provided in partnership with the [Chrultrabook Project](https://chrultrabook.com). - -# x86 - -All x86 Chromebooks that use Depthcharge are supported by Ultramarine Chromebook Edition. - -## How it Works - -Ultramarine Chromebook Edition uses a special bootloader called [Submarine](https://developer.fyralabs.com/submarine) to load the kernel. - -Under the hood, Submarine is an incredibly minimal Linux OS based on [u-root](https://github.com/u-root/u-root), it's only really usable for debug and booting a full distribution. Once Submarine is loaded, we use [LinuxBoot](https://www.linuxboot.org/) to boot a full copy of Ultramarine (and hopefully more distros in the future). - -Now for the big question, how do we do this without modifying the firmware? We take advantage of the way Depthcharge (the ChromeOS firmware) works. We store Submarine in a 16MiB partition on disk, this is normally used by ChromeOS to store a full ChromeOS Kernel and initramfs. Depthcharge doesn't actually check if the contents of the partition are a valid kernel, it just checks for a GPT Header and runs whatever code is found in the partition, in our case, Submarine. - -By default, Depthcharge will only boot code with Google's signing keys, we get around this by enabling the built-in ChromeOS developer mode. - -To summarise, we boot a tiny Linux distribution (Submarine) and use it to launch Ultramarine's vmlinuz and initramfs using kexec. - -## Userland Changes - -Devices in Ultramarine Anywhere try to stick very closely to the standard Ultramarine userland, sometimes we have to deviate from this to make the experience better. - -### Audio Support - -We use WeirdTreeThing's [audio script](https://github.com/WeirdTreeThing/chromebook-linux-audio) to make audio work properly. - -### Default Partitions - -On Chromebooks, we use F2FS (in lieu of Btrfs) and disable swap to extend the life of the eMMC storage found in many Chromebooks. We also create one 16MiB partition containing [Submarine](https://developer.fyralabs.com/submarine) at the start of the disk instead of `/boot/EFI`. - -### Keyboard Mapping - -We use [keyd](https://github.com/rvaiya/keyd) to map keys on Chromebooks. - -## Feature Matrix - -| Feature | Functionality | Notes | -| ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| Booting | Working | With [Submarine](https://developer.fyralabs.com/submarine) or [UEFI](https://docs.chrultrabook.com/docs/firmware/) | -| WiFi | Working | | -| Ethernet | Working | | -| Bluetooth | Working | | -| Display | Working | | -| Graphics | Working | | -| Storage | Working | | -| USB | Working | | -| SD | Working | | -| Ports | Working | | -| Power | Working | | -| Touch | Working | | -| Pen | Partial | USI and Wacom Pens work, others may not | -| Audio | Partial | May require [additional setup](https://github.com/WeirdTreeThing/chromebook-linux-audio). Some Chromebooks may not work due to controller issues | -| Keyboard | Working | Some models may have issues on older kernels | -| Touchpad | Working | | -| Webcam | Working | | -| Lid Switch | Partial | Some models may have issues | -| Tablet Mode | Partial | Same reason as lid switch | - -## Unsupported Devices - -| Device | Reason | -| --------- | ----------------------------------------------------------------------------------------- | -| Mario | Firmware Limitations | -| Alex | Firmware Limitations | -| ZGB | Firmware Limitations | -| Stumpy | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | -| Lumpy | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | -| Parrot | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | -| Butterfly | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | -| Link | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | -| Stout | Boot Partition Size Limitation (This can be [Corebooted](https://docs.chrultrabook.com/)) | - -These are among the first few generations of Chromebooks, and either use an unsupported proprietary firmware, or have firmware limitations which prevents booting a partition large enough to fit submarine (newer Chromebooks have larger size limitations). - -## Installation - -Prebuilt images with userland tweaks will be available in the near future - -## Manual Installation - NOT RECOMMENDED - - - This method is **NOT RECOMMENDED**. Only do this if you know what you're doing - and need to test. We are not responsible for brickage, thermonuclear war, the - death of a pet, etc. - - -This guide assumes you have [Developer Mode](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_mode.md#dev-mode) and [USB Booting Enabled](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md#boot-from-your-usb-disk) - -1. Flash an [Ultramarine Raw Image](https://images.fyralabs.com/images/ultramarine/39/) to a USB Drive -2. Delete the first partition on the disk -3. Create a 16MB ext4 partition -4. Flash the submarine.kpart file to the partition -5. Set the partition flags with cgpt - -``` -cgpt add -i -t kernel -P 15 -T 1 -S 1 /dev/sdX -``` - -6. Boot the image on the Chromebook - -You're now inside a minimal Ultramarine system, from here you can install a desktop (also `NetworkManager-wifi`) and use Ultramarine from the external disk. If you'd like to install, you'll need to install and configure Anaconda. [Our Kickstarts can be found on Github.](https://github.com/Ultramarine-Linux/build-scripts/tree/main/kickstarts) - -7. On the internal disk, create a 16MiB ext4 partition BEFORE the standard partitions -8. Install Ultramarine normally -9. After the installation is complete, flash the submarine.kpart file to the 16MiB partition you created -10. Set the partition flags with cgpt - -``` -cgpt add -i -t kernel -P 15 -T 1 -S 1 /dev/sdX -``` - -11. Done! - -## ARM - -ARM Chromebooks are in heavy development. If you'd like to help test, check out the [ARM Beta Program](/en/chromebook/armbeta). diff --git a/src/content/docs/zh_hant/anywhere/enterprise.mdx b/src/content/docs/zh_hant/anywhere/enterprise.mdx deleted file mode 100644 index b60369e4..00000000 --- a/src/content/docs/zh_hant/anywhere/enterprise.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Data Centre, Enterprise, and HPC (Anywhere)" -description: "Data Centre, Enterprise, and HPC in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change. - - -We plan on making server images, GUI and CLI. These images will be built for constant runtime, and include/exclude fitting packages for server usecases. If you'd like to suggest a platform, drop us a line in [our chats](/en/community/community). - -## Implementation - -- Refined OOTB cockpit excperience -- CLI only option -- Advanced installer features -- Advanced networking options -- Package suite more attuned to a server usecase -- Default filesystem changed to ZFS -- Potential improved RAID and non-RAID architecture implementation... -- Cluster support -- A whole lot more... diff --git a/src/content/docs/zh_hant/anywhere/ott.mdx b/src/content/docs/zh_hant/anywhere/ott.mdx deleted file mode 100644 index 0f10673b..00000000 --- a/src/content/docs/zh_hant/anywhere/ott.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Smart TV Devices" -description: "Smart TV Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -Smart TV boxes often run Android, which means we can use Halium to port Ultramarine to the unlockable ones. - -This may be limited to FireOS devices as many of them are vulnerable to [mtk-su](https://xdaforums.com/t/amazing-temp-root-for-mediatek-armv8-2020-08-24.3922213/). If you are knowledgable about Smart TV modding/running alternative operating systems, please reach out [here](/en/community/community). diff --git a/src/content/docs/zh_hant/anywhere/riscv.mdx b/src/content/docs/zh_hant/anywhere/riscv.mdx deleted file mode 100644 index 370a12ad..00000000 --- a/src/content/docs/zh_hant/anywhere/riscv.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "RISC-V (Anywhere)" -description: "RISC-V Devices in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -We plan to port to RISC-V architecture as soon as we can get the hardware. If you are a hardware vendor producing RISC-V devices or have a spare RISC-V device, please [reach out](mailto:contact@fyralabs.com) if you'd like to support the Ultramarine RISC-V port. diff --git a/src/content/docs/zh_hant/anywhere/rpi.mdx b/src/content/docs/zh_hant/anywhere/rpi.mdx deleted file mode 100644 index acfd1a18..00000000 --- a/src/content/docs/zh_hant/anywhere/rpi.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "Raspberry Pi (Anywhere)" -description: "Raspberry Pi in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Raspberry Pi is a very popular series of SBCs. They are cheap, easy to get, run Linux well, and have a large ecosystem of expansion cards (Hats and Bonnets) and accessories. - -Fedora has upstream support for the Pi 4, 400, and 3. Ultramarine Anywhere intends to extend support to the Zero 2 and 5. - -## Raspberry Pi 5 - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change. - - -The Raspberry Pi 5 is not currently supported in Fedora. We intend to package the official Raspberry Pi kernel (which should also provide a better experience on the other Pi models.) - -## Raspberry Pi 4 and 400 - -The Raspberry Pi 4 and 400 have had support in Ultramarine Linux since UM39, and desktop images since UM40. We use the Fedora kernels and boot proccess. - -### Notes - -- RPi4B has a 1GB and 2GB model, we suggest against running a desktop environment on these (Xfce may be alright.) -- RPi400 does not have support for WiFi in Ultramarine, this is an upstream issue. -- The Pi 4 series has native USB boot support. Your experience may be better with a fast USB Drive or SSD connected through an adapter. See [this article](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#usb-mass-storage-boot) for more info. -- If using a microSD card, we reccomend using a Class 10 microSD card, your experience will be signifcantly better than lower classes. -- If using a USB drive, ensure it's USB 3.0 or newer, 2.0 will be a signifcantly worse experience than a microSD. -- Your storage device will need to be larger than 9GB (the image is 8.59GB) We suggest 16GB so you have space for software. - -### Installing - -1. Grab any aarch64 [Raw Image](TBD) from our downloads page. -2. Flash it to your microSD card or drive with [balenaEtcher](https://etcher.io) or [Raspberry Pi Imager](https://flathub.org/apps/org.raspberrypi.rpi-imager) -3. Expand the root partition to fill the entire storage device. We reccomend using Gparted, get it from your edition's app store. -4. Insert the storage device into your Pi and boot up! The default login is ultramarine (password is the same.) Please change your password once logged in. - -## Raspberry Pi 3 - -The Raspberry Pi 3 has had support in Ultramarine Linux since UM39, and desktop images since UM40. We use the Fedora kernels and boot proccess. - -### Notes - -- RPi3B has only 1GB of RAM, and the 3A only has 512MB, we suggest against running a desktop environment (Xfce may be alright.) -- Your microSD card will need to be larger than 9GB (the image is 8.59GB) We suggest 16GB so you have space for software. -- We reccomend using a Class 10 microSD card, your experience will be signifcantly better than lower classes. - -### Installing - -1. Grab any aarch64 [Raw Image](TBD) from our downloads page. -2. Flash it to your microSD card with [balenaEtcher](https://etcher.io) or [Raspberry Pi Imager](https://flathub.org/apps/org.raspberrypi.rpi-imager) -3. Expand the root partition to fill the entire microSD. We reccomend using Gparted, get it from your edition's app store. -4. Insert the microSD card into your Pi and boot up! The default login is ultramarine (password is the same.) Please change your password once logged in. - -## Raspberry Pi Zero 2 - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change. - - -## Raspberry Pi 1, 2, and Zero - - - These devices are **Not Supported** due to 32bit CPUs. We include them in this - page to avoid questions. - diff --git a/src/content/docs/zh_hant/anywhere/steamdeck.mdx b/src/content/docs/zh_hant/anywhere/steamdeck.mdx deleted file mode 100644 index 69592f22..00000000 --- a/src/content/docs/zh_hant/anywhere/steamdeck.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Valve Steam Deck (Anywhere)" -description: "Steam Deck in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -We plan to make Steam Deck images, as well as other handhelds and HTPCs. Work will begin once we have the hardware needed. Maybe a custom UI is in order... diff --git a/src/content/docs/zh_hant/anywhere/thin.mdx b/src/content/docs/zh_hant/anywhere/thin.mdx deleted file mode 100644 index fc29ef3a..00000000 --- a/src/content/docs/zh_hant/anywhere/thin.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Thin Clients (Anywhere)" -description: " Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Wishlist Phase**. All information on this - page is subject to change. - - -Thin client images would be fun, and frankly pretty easy. - -## Implementation - -Very minimal environment with only required packages. OOTB connection protocols (ICA, RDP/VNC, SNMP...) and easy to use installer with connection options built in. - -Minimal login screen with an option for branding, might include device managment software. - -Tools and encouragment for enthusiasts. diff --git a/src/content/docs/zh_hant/anywhere/xr.mdx b/src/content/docs/zh_hant/anywhere/xr.mdx deleted file mode 100644 index 98f685a4..00000000 --- a/src/content/docs/zh_hant/anywhere/xr.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "XR and Spatial Computing" -description: "XR and Spatial Computing in the Ultramarine Anywhere Initiative" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - This device type is still in the **Planning Phase**. All information on this - page is subject to change. - - -Would use [StardustXR](https://stardustxr.org/). Our packaging effort can be found [here.](https://github.com/Ultramarine-Linux/stardustxr) diff --git a/src/content/docs/zh_hant/chromebook/armbeta.mdx b/src/content/docs/zh_hant/chromebook/armbeta.mdx deleted file mode 100644 index 7db29178..00000000 --- a/src/content/docs/zh_hant/chromebook/armbeta.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: ARM Chromebook Beta Program -description: "Closed program for running our beta images for certain ARM chromebooks" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -NOTE - Not all ARM devices are currently supported. This is a Beta program, proceed at your own risk. - -Welcome to the ARM Chromebook Beta Program! We are looking for technically-versed people to test our Ultramarine Chromebook beta images for ARM. - -This is a closed program, please contact Owen Zimmerman at owen@fyralabs.com, or join and ping @Owen in the [discord](https://discord.com/invite/5fdPuxTg5Q) to apply. - -Currently supported ARM Chromebook beta devices (if you have an unsupported device and are willing to use it for image testing, let us know!): - -All Kukui family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 311 (C722/C722T) | willow | -| Acer Chromebook 311 (CB311-11H/CB311-11HT) | kenzo | -| Acer Chromebook 314 (CB314-2H/CB314-2HT) | cozmo | -| Acer Chromebook Spin 311 (CP311-3H) | juniper | -| Acer Chromebook Spin 311 (R722T) | pico | -| Asus Chromebook CZ1 | cerise | -| Asus Chromebook Detachable CM3 (CM3000) | kakadu | -| Asus Chromebook Detachable CZ1 | katsu | -| Asus Chromebook Flip CM3 (CM3200, MT8183) | damu | -| Asus Chromebook Flip CZ1 | stern | -| HP Chromebook 11a | kappa | -| HP Chromebook 11MK G9 EE | esche | -| HP Chromebook x360 11MK G3 EE | burnet | -| Lenovo 100e Chromebook 2nd Gen MTK 2 | makomo | -| Lenovo 10e Chromebook Tablet | kodama | -| Lenovo IdeaPad 3 Chromebook (MT8183) | fennel14 | -| Lenovo IdeaPad Duet Chromebook | krane | -| Lenovo IdeaPad Flex 3 Chromebook (MT8183) | fennel | - -Source: https://wiki.postmarketos.org/wiki/Google_Kukui_Chromebook_(google-kukui) - -All Oak family Chromebooks: - -| Model name/number | Codename | -| -------------------------------------------- | -------- | -| Acer Chromebook R13 | elm | -| Asus Chromebook C202X | hana | -| Lenovo 100e Chromebook 2nd Gen (MTK) | hana | -| Lenovo 300e Chromebook | hana | -| Lenovo 300e Chromebook 2nd Gen (MTK) | hana | -| Lenovo Chromebook C330 | hana | -| Lenovo Chromebook S330 | hana | -| Lenovo Flex 11 Chromebook | hana | -| Lenovo IdeaPad Flex 3 Chromebook (CB-11M735) | hana | -| Lenovo N23 Yoga Chromebook | hana | -| Poin2 Chromebook 11C | hana | -| Poin2 Chromebook 14 | hana | - -Source: https://wiki.postmarketos.org/wiki/Google_Oak_Chromebook_(google-oak) - -All Asurada family Chromebooks: - -| Model name/number | Codename | -| ------------------------------------------ | -------- | -| Acer Chromebook 514 (CB514-2H / CB514-2HT) | spherion | -| ASUS Chromebook Flip CM3 (CM3200, MT8192) | hayato | - -Source: https://wiki.postmarketos.org/wiki/Google_Asurada_Chromebook_(google-asurada) - -Follow-up instructions and guide will be provided after acceptance. - -Contact [Owen Zimmerman](mailto:owen@fyralabs.com) for additional information - -#### [Next Up: Terminology →](terminology) - -#### [← Back To: Post-Install](postinstall) diff --git a/src/content/docs/zh_hant/chromebook/chromebook.mdx b/src/content/docs/zh_hant/chromebook/chromebook.mdx deleted file mode 100644 index a9c544e9..00000000 --- a/src/content/docs/zh_hant/chromebook/chromebook.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Getting Started with Chromebook Edition -description: "Introduction to Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -### Welcome to Ultramarine Chromebook Edition! - -With the help from out friends over at the [Chrultrabook Project](https://docs.chrultrabook.com/), we built a no-hassle way to boot full Ultramarine Linux onto your Chromebook! - -These pages will get you everything you need to know about what Ultramarine Chromebook is, how it works, how you can install it, and even how you can help us out. - -If you would like more info about Ultramarine Chromebook and it's release, take a peak at the [Release post](link) - -#### [Next Up: Getting Chromebook Edition →](getting) diff --git a/src/content/docs/zh_hant/chromebook/getting.mdx b/src/content/docs/zh_hant/chromebook/getting.mdx deleted file mode 100644 index 5529745e..00000000 --- a/src/content/docs/zh_hant/chromebook/getting.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Getting Chromebook Edition -description: "Getting started with installing Ultramarine Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Minimum System Requirements - -1GB RAM, 8GB storage, 16MB boot partition (essentially any 2017 or newer ChromeOS device). List of ChromeOS device boot partition sizes can be found [here](https://raw.githubusercontent.com/alpernebbi/depthcharge-tools/master/depthcharge_tools/boards.ini) - -## Choosing Your Edition - -Ultramarine Chromebook comes in 4 variants: - -- **Flagship Edition**: Our default and most popular variant. Choose Flagship if you'd like a familiar and stylish experience. -- **KDE Edition**: Our second most popular variant. Choose KDE if you'd like a simply customisable experience. -- **GNOME Edition**: Elegant and Modern. Choose GNOME if you'd like a simple, unique experience. -- **Pantheon Edition**: Thoughtful and graceful. Choose Pantheon if you'd like a refined experience. - -Ultramarine Linux is distributed with image files available for download from [our website](https://ultramarine-linux.org/download/chromebook). - - - Fyra Labs cannot guarantee the safety or quality of images downloaded from - sites other than our website or FOSSTorrents - - -## Verifying the Safety of an Ultramarine ISO (Recommended) - -Ultramarine ISO images have a matching `CHECKSUM` file that can be checked against the image itself. - -They can be downloaded by clicking the `View Checksum` button on the [download page](https://ultramarine-linux.org/download/chromebook). - -### Verifying the Checksum on Linux and macOS - -You can use the following commands to check the integrity of the images: - -```bash -sha256sum -b /path/to/ultramarine.img # Generate the checksum for the image -cat /path/to/CHECKSUM # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the Checksum on ChromeOS - -You can use the [ChromeOS Linux Container](https://chromeos.dev/en/linux) to verify the image on ChromeOS - -```bash -sha256sum -b /path/to/ultramarine.img # Generate the checksum for the image -cat /path/to/CHECKSUM # Check the checksum - -# Now you can compare the checksum -``` - -### Verifying the Checksum on Windows - -In Powershell, run this command: - -```powershell -CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 -# Open the CHECKSUM file with Notepad and compare the checksum -``` - -## Creating the Installer - -### Download [balenaEtcher](https://www.balena.io/etcher/) to create a bootable media from the img image. - -![](/assets/balenaetcher.png) - -Simply select the img file, a device to use for the installer, and click flash. - -#### [Next Up: Installing to a Chromebook →](preparing) - -#### [← Back To: Getting Started](chromebook) - -## Footnotes - -- The Anaconda installer is very complex and hard to work with, we are working on a new installer that is easier to use and more reliable. -- Since Fedora 37, Fedora's official support for the Pantheon desktop environment has been dropped due to compatibility issues and the Pantheon port is now maintained by the Ultramarine Linux team. This means that the Pantheon desktop environment is only available through Ultramarine Linux, or Fedora with Terra enabled. -- Ultramarine's Budgie edition provides a close to stock Budgie experience, with a custom theme. Unlike Fedora's Budgie Spin, which provides a completely custom layout and experience. diff --git a/src/content/docs/zh_hant/chromebook/postinstall.mdx b/src/content/docs/zh_hant/chromebook/postinstall.mdx deleted file mode 100644 index 0f043330..00000000 --- a/src/content/docs/zh_hant/chromebook/postinstall.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Post-Installation -description: "Things to do after installing Ultramarine Chromebook Edition" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -#### [Next Up: ARM Chromebooks (Beta) →](armbeta) - -#### [← Back To: Installing to a Chromebook](preparing) diff --git a/src/content/docs/zh_hant/chromebook/preparing.mdx b/src/content/docs/zh_hant/chromebook/preparing.mdx deleted file mode 100644 index 56f27d94..00000000 --- a/src/content/docs/zh_hant/chromebook/preparing.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Installing to a Chromebook -description: "Steps to be done on the Chromebook" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Before we insert the installer, we will need to do a few things with your ChromeOS device. - -### 1. Back up your data (optional) - -Step 2 will wipe all local data from your device, If you have any files you wish to save or move to Ultramarine Chromebook, back up your data off the device, either to the cloud or locally. For a small number of files, we recommend backing up to Google Drive, or another cloud storage provider. For a larger number of files, we recommend backing up to an external storage medium, such as a USB flash drive or other external drive. - -If you choose to back up with Google Drive, you will be prompted to add your Google Drive to the Ultramarine Chromebook file explorer during setup to easily access and redownload your data. - -### 2. Enable developer mode - -Enabling developer mode will wipe your data - -#### Developer mode on Chromebooks (ChromeOS laptops only): - -1. Shut down the device, then hold Esc + + ⏻ [power] to enter Recovery mode. -2. When you see a screen that says 'ChromeOS is missing or damaged,' press Ctrl+D. -3. You may be prompted with 'To turn OS verification off, press enter,' press Enter. -4. A screen saying 'OS verification is off, press space to re-enable' should appear, press Ctrl+D. - Your system is now transitioning into Developer Mode! (This may take a few minutes) -5. After it has transitioned, press Control+D to boot back into ChromeOS as a developer. You are now ready for step 3 - -#### Developer Mode on Chromeboxes and Chromebases (ChromeOS Desktops and All-in-ones): - - - Not all monitors will work with the Chromebox OS Verification screens. This - typically happens if the monitor has a resolution greater then 1080p. If your - Chromebox appeared to boot (lights on) but does not output anything, you can - attempt to continue without a display. - - -1. Shut down the device, then insert a paper clip (SIM ejector tool works great too!) into the RECOVERY BUTTON (small hole usually near the I/O, see your hardware documentation for exact location) and reboot. You will then be greeted with the "OS Verification is turned off" screen. -2. Plug in a keyboard and press Ctrl+D. You may be prompted with 'To turn OS verification off, press RECOVERY BUTTON,' press RECOVERY BUTTON. -3. A screen saying 'OS verification is off, press space to re-enable' should appear, press Ctrl+D. - Your system is now transitioning into Developer Mode! (This may take a few minutes). -4. After it has transitioned, press Control+D to boot back into ChromeOS as a developer. You are now ready for step 3. - -#### Developer Mode on ChromeOS Tablets: - -1. Shut down the device, then press and hold Power+Volume-Up+Volume-Down for 3-5 seconds, then release to invoke recovery mode. This is a bit finicky, and may take a few tries, but the screen will turn white and display a screen saying "Please insert a recovery USB stick." soon after button release. -2. To boot to Developer mode, simultaneously press Volume-Up+Volume-Down, or navigate to 'Developer Options' with the volume buttons, and select it with the power button. then select 'Boot From Internal Disk using the volume buttons and power button.' - Your system is now transitioning into Developer Mode! (This may take a few minutes). -3. After it has transitioned, again navigate to 'Developer Options,' then 'Boot From Internal Disk.' Plug in a keyboard, and you are now ready for step 3. - -If you have any problems with these steps, refer to [this guide](https://chromium.googlesource.com/chromiumos/docs/+/main/debug_buttons.md#Firmware-Keyboard-Interface) or request support in our [discord](https://discord.com/invite/5fdPuxTg5Q). - -### 3. Enable USB booting - -1. In Developer mode ChromeOS, press Ctrl+Alt+F2 [right arrow key]. -2. Type in 'Chronos' for the login (there is no password). -3. Enter this command: - -``` -enable_dev_usb_boot -``` - -4. You should have an output saying 'SUCCESS: Booting and self-assigned kernel from SSD/USB/SDCard slot in enabled.' Plug in your Ultramarine Chromebook installer and restart the device. If needed, press Ctrl+alt+F1 [Left arrow key] to leave the terminal. -5. The device will boot to the recovery screen. Upon reaching it, press ctrl+U> to boot from USB/SD. - -### 4. Boot from USB/SD - -#### [Next Up: Post-Install →](postinstall) - -#### [← Back To: Getting Chromebook Edition](getting) diff --git a/src/content/docs/zh_hant/chromebook/terminology.mdx b/src/content/docs/zh_hant/chromebook/terminology.mdx deleted file mode 100644 index 4a6fd3dd..00000000 --- a/src/content/docs/zh_hant/chromebook/terminology.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Chromebook Terminology -description: "Get to Know Chromebook Terms" ---- - -The Chromebook Community, (and Google themselves) have made terminology for many of the practices and quirks of Chrome hardware. - -### Chromium OS - -Where the magic happens. Just like Chrome proper, Chrome OS is a derivative of the open source Chromium OS. - -### Chrome OS - -The consumer variant of Chromium OS found on all Chrome devices. - -### Write Protect (WP) - -Usually refers to Firmware Write Protect (FW_WP), a feature of Chromebooks that marks a region of the ROM that holds firmware as read-only. It is possible (and rather easy) to remove the protection on most Chromebooks. [1] - -#### Cr50/Battery WP - -One of the methods for implementing write protect, WP is enabled when a battery is connected, and disabled when the battery is removed. [1] - -#### WP Switch - -This is just a toggle, not much to explain here. [1] - -#### WP Screw - -The primary implementation of write protect on older devices, a screw shorts a connection, WP can be disabled by removing the short. Most of the time the screw is removed, but you could in theory place Kapton tape over the pad. [1] - -### Closed Case Debugging (CCD) - -Allows people with cr50 to disable WP without opening the device. This requires a special cable called suzyQ. [1] [2] - -### Verified Boot - -Tamper protection, it's signing essentially. [3] - -### Developer Mode - -Loosens verified boot and gives you the ability to enable USB/SD boot and elevate to root. - -### ChromeEC - -EC Refers to a lot of things, and it's honestly better to read the [official docs](https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/README.md#Terminology) on this one. - -### Depthcharge - -Depthcharge is the stock firmware on your Chromebook. Unless you somehow have an original Chromebook - -#### Depthcharge Manipulation - -A method to run Linux on Chromebooks without modifying the stock firmware by tricking said firmware (Depthcharge) into booting a Linux kernel. This is what we are using. - -### altFW/Custom Firmware [5] - -altFW is the Chrultrabook Project's name for custom firmware. - -#### Coreboot/Full ROM - -Coreboot replaces the original firmware on your Chromebook with full UEFI. - -#### RW_Legacy - -RW_Legacy allows you to use the included BIOS on your Chromebook. - -#### Firmware Utility Script/MrChromebox's Script - -A popular tool used to manage and install custom firmware - -### Auto Update Expiration - -When Google stops providing updates for a Chromebook. Usually 10 years after the release. You can see a list of [AUE Dates here](https://support.google.com/chrome/a/answer/6220366?hl=en). - -### Codename - -Refers to a specific Chromebook, this may be the same as the board name (For example: Caroline and Chell are also the board name for their respective models) - -### Board Name - -Refers to the motherboard, these may be shared across Chromebooks (For example: Hana (board) is used on hana, maple, sycamore, and telesu) - -### Baseboard - -Exactly what it sounds like, a board that acts as the base for others (For example: Caroline, Chell, and Cave are all based on Glados, see the reference) - -### Chrultrabook - -Our partners in crime. Chrultrabook builds drivers and other tools for Chrome hardware. The name is a portmanteau from "*Chr*omebook to *Ultra*book" - -### Chromebook Plus - -Google's branding for Chromebooks at what would be the entry level for standard laptops [4] - -### Premium Chromebook - -Kinda official term to refer to higher spec Chromebooks. The Pixelbooks, Framework, and some of the nicer HPs fall into this category - -### Gaming Chromebook - -No real definition besides an RGB keyboard, specs and price are all over the place - -#### [← Back To: ARM Chromebooks (Beta)](armbeta) - -### Footnotes - -[1: Firmware Overview and Porting Guide > Firmware / EC Write Protection](https://www.chromium.org/chromium-os/firmware-porting-guide/firmware-ec-write-protection/) - -[2: CrOS EC > Google Security Chip (GSC) Case Closed Debugging (CCD)](https://chromium.googlesource.com/chromiumos/platform/ec/+/cr50_stab/docs/case_closed_debugging_gsc.md) - -[3: Design Documents > Verified Boot](https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot/) - -[4: Chromebook Plus: more performance and AI capabilities](https://blog.google/products/chromebooks/chromebook-plus/) - -[5: Chrultrabook Docs > Firmware > Types of Firmware](https://docs.chrultrabook.com/docs/firmware/about.html) diff --git a/src/content/docs/zh_hant/community/codeofconduct.mdx b/src/content/docs/zh_hant/community/codeofconduct.mdx deleted file mode 100644 index 1f89fbc2..00000000 --- a/src/content/docs/zh_hant/community/codeofconduct.mdx +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Code of Conduct -description: "Rules for interacting in the Ultramarine Community" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Summary - -Community members are expected to treat each other with the utmost respect, regardless of sexuality, gender, race, creed, nationality, or caste. - -Essentially, if you wouldn't say or do it to someone close to you, don't say or do it here. - -If you don't follow the rules, Fyra Labs reserves the right to ban you (temporarily or permanently) from participating in the project or community. - -If you need to report an incident, contact [**Cappy Ishihara.**](mailto:cappy@fyralabs.com) - -## 0. Employee Conduct - -Employees of Fyra Labs are held to a higher standard than outlined by this document. Employees should review the policy in their onboarding packet, or internal Outline instance for more details. - -## 1. Purpose - -A major goal of Fyra Labs is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). - -This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. - -We invite all those who participate in this community to help us create safe and positive experiences for everyone. - -## 2. Open [Source/Culture/Tech] Citizenship - -A supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. - -Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. - -If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. - -## 3. Expected Behavior - -The following behaviors are expected and requested of all community members: - -- Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. -- Exercise consideration and respect in your speech and actions. -- Attempt collaboration before conflict. -- Refrain from demeaning, discriminatory, or harassing behavior and speech. -- Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. -- Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. - -## 4. Unacceptable Behavior - -The following behaviors are considered harassment and are unacceptable within our community: - -- Violence, threats of violence or violent language directed against another person. -- Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. -- Posting or displaying sexually explicit or violent material. -- Posting or threatening to post other people's personally identifying information ("doxing"). -- Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. -- Inappropriate photography or recording. -- Inappropriate physical contact. You should have someone's consent before touching them. -- Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. -- Deliberate intimidation, stalking or following (online or in person). -- Advocating for, or encouraging, any of the above behavior. -- Sustained disruption of community events, including talks and presentations. - -## 5. Weapons Policy - -No weapons will be allowed at Fyra Labs events, community spaces, or in other spaces covered by the scope of this Code of Conduct. Weapons include but are not limited to guns, explosives (including fireworks), and large knives such as those used for hunting or display, as well as any other item used for the purpose of causing injury or harm to others. Anyone seen in possession of one of these items will be asked to leave immediately, and will only be allowed to return without the weapon. Community members are further expected to comply with all state and local laws on this matter. - -## 6. Consequences of Unacceptable Behavior - -Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. - -Anyone asked to stop unacceptable behavior is expected to comply immediately. - -If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). - -## 7. Reporting Guidelines - -If you are subject to or witness unacceptable behavior from employees of Fyra Labs, or have any other concerns, please use the [External Human Resources Form](https://airtable.com/shrCMi4X3Xp3ITMJz) - -If you are subject to or witness unacceptable behavior from other members of this community, or have any other concerns, you should email [Fyra Labs Contact](mailto:contact@fyralabs.com). - -Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. - -## 8. Addressing Grievances - -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should contact us with a concise description of your grievance, contact information can be found below. Your grievance will be decided at the sole discretion of Fyra Labs. - -## 9. Scope - -We expect all community participants who are not employed by or independent contractors of Fyra Labs to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business. - -This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. - -## 10. Contact info - -[**Cappy Ishihara, Product Lead**](mailto:cappy@fyralabs.com) - -Cappy is your first point of contact if an incident is not handled as it happens. - -[**Owen Zimmerman, Ultramarine Chromebook Project Manager**](mailto:owen@fyralabs.com) - -Contact Owen if the grievance occurred in a pre-release space. - -[**Jaiden Riordan, COO**](mailto:jade@fyralabs.com) - -If your grievance requires additional attention, or you wish to appeal an earlier decision, please contact Jaiden. - -[**Legal Email**](mailto:legal@fyralabs.com) - -Legal concerns and documents should be sent to this address, we will not accept legal documents in any way except to this address or by US Mail. - -## 11. License and attribution - -The Code of Conduct for Fyra Labs Projects is derived from the Citizen Code of Conduct distributed by [Stumptown Syndicate](http://stumptownsyndicate.org) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). - -Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). diff --git a/src/content/docs/zh_hant/community/community.mdx b/src/content/docs/zh_hant/community/community.mdx deleted file mode 100644 index 31bb873a..00000000 --- a/src/content/docs/zh_hant/community/community.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: 參與社羣! -description: "Community Information" ---- -import Alert from "../../../../components/Docs/Alert.astro"; - -Ultramarine Linux 有一個積極的社羣,包括不同的使用者、開發人員等。 - -正如我們的軟件,我們的社羣也是開發的。以下是我們其中官方的空間: - -### Discord - -我們所有的開發項目都在 Fyra Labs Discord。這裏有活躍交流,我們都在這裏做不同的東西。使用者、貢獻人員及開發者都可以在此得到支援。 - -[加入 Fyra Labs Discord →](https://discord.gg/5fdPuxTg5Q) - -### Matrix - -同樣地,您可以到 Matrix 參與 Fyra Labs 的社羣! - -所有的貢獻頻道亦已經被同步,您可以在這裏加入我們,一起貢獻社羣。 - -[加入 Fyra Labs Space →](https://matrix.to/#/#hub:fyralabs.com) - -### Reddit - -Ultramarine Subreddit 是一個比較非同步的社羣參與方式。 - -[加入 r/ultramarine →](https://reddit.com/r/ultramarine) - -### 其他 - -Ultramarine Linux 也在 Twitter 和 Fediverse (聯邦宇宙)中。這些帳號會有重要的即時資訊,例如下網情況、新功能和錯誤等。 - -[在聯邦宇宙跟蹤 Ultramarine →](https://fedi.fyralabs.com/@ultramarine) - -[在 Twitter 跟蹤 Ultramarine →](https://twitter.com/UltramarineProj) - -## 我們的準則 - -我們認為 Fyra 社羣遠比 Fyra Labs 的個體大。我們的社羣正是在與其他相關的社羣有不同的交流。我們覺得這可以令我們更容易判別使用者的慾望及需要(我們也很喜歡跟您們談談)。 diff --git a/src/content/docs/zh_hant/contributing/contributorguide.mdx b/src/content/docs/zh_hant/contributing/contributorguide.mdx deleted file mode 100644 index c879c98b..00000000 --- a/src/content/docs/zh_hant/contributing/contributorguide.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: 貢獻指南 -description: "Getting started with contributing to Ultramarine Linux" ---- - -Ultramarine 是我們的社羣所建立的。從選票到社羣交流甚至社羣所建立的軟件,社羣永遠都在我們心目中。 - -## 原碼 - -Ultramarine Linux 的原碼是開放的——所有人都能夠更改,複製或發佈屬於 Ultramarine 的原碼。 - -這亦包括 Fyra Labs 與其社羣,以及 Fedora 所建立的原始碼。 - -可惜,一些組件(例如驅動程式)可能由它們的原創者所擁有,導致我們無法改善它們的原碼。 - -詳請可到[原碼貢獻](/zh_hant/contributing/hacking)開始您的旅程! - -## 軟件包 - -Ultramarine 的系統裏已安裝了 Terra,這是一個社羣維護的軟件庫,裏面有 Fedora 本來沒有的軟件包。 -貢獻至 Terra 能讓您令 Ultramarine 及其他 Fedora 的系統使用者更容易得到需要的軟件。 -詳請可到 [Terra 文檔(英)](https://developer.fyralabs.com/terra/contributing)。 - -## 錯誤及問題回報 - -這部分最容易了,您只需要使用 Ultramarine 的時候找到問題就可以在 [Ultramarine-Linux/ultramarine](https://github.com/Ultramarine-Linux/ultramarine) 或者以其他[聯絡]方式向我們報告。 - -## 設計 - -新的以及現有的 Ultramarine 組件亦需要有好的使用者體驗及良好的設計。若果想幫忙設計,請[聯絡]我們。 - -## 文檔 - -文檔能讓使用者了解如何使用 Ultramarine。我們主要的文檔正正就是您現在正在閱讀的 wiki。 -若果想向此 wiki 貢獻,可以到 [Ultramarine-Linux/wiki]。您亦可以以不同[聯絡]方式跟我們討論。 - -## 測試 - -Ultramarine 有很多不同的部件(由其在發佈前)需要林林總總的測試。以下是我們的發佈前程式: - -- [ARM Chromebook Beta Program](/zh_hant/chromebook/armbeta) -- [Ultramarine Atomic Open Beta](https://github.com/ultramarine-linux/ostree-config) - -我們亦會經常宣佈新的程式,您可以以不同的[聯絡]方式得到最新資訊。 - -## 資金 - -您可以在 GitHub [資助我們](https://github.com/sponsors/FyraLabs)。 - -您的資助可以令我們繼續獻出更多時間工作,促使我們開發並發佈更好的技術,改善不少人的生活。資助人亦會得到不同的福利。 - -## 擴展 - -Ultramarine 亦不斷尋找更多使用者、貢獻人員以及社羣成員。 -我們以不同方式向不同人溝通,包括社交媒體、參與項目、合夥等。 -有興趣幫忙擴展 Ultramarine 的可以[聯絡]我們。 - -## 硬件 - -Ultramarine 的其中一個目標正是要支持更多的平台,詳見 [Ultramarine Anywhere](/zh_hant/hardware/anywhere)。 -我們正在尋找對其他較小人用的平台有較深了解、有不同學問的不同人士,以助我們擴展平台支持。 -我們亦非常感謝硬件捐贈,由其是 Chromebook 和 RISC-V,因為它們是這個項目的焦點之一。 - -有興趣的人請[聯絡]我們。 - -## 翻譯 - -翻譯可令 Ultramarine 能夠被世界各地不同人士使用。您可以令 Ultramarine 得到不同語言的支援。 - -### 這個 wiki - -你可以[聯絡]我們,或者到 [Ultramarine-Linux/wiki]。 - -### 安裝應用程式及其他部件 - -請到 [Fyra Weblate](https://weblate.fyralabs.com) 進行翻譯。 - -### 桌面 - -每一個桌面環境有他們各自的翻譯的地方。請查看[#上流貢獻]。 - -## 上流貢獻 - -Ultramarine 是建於很多不同開放原碼、非專利、有近似或共同目標及需要的軟件項目。我們的社羣會定期貢獻至這些上流項目。 - -以下是一些對 Ultramarine 較重要的上流項目: - -- [Fedora](https://docs.fedoraproject.org/en-US/project/join/) -- [Budgie](https://docs.buddiesofbudgie.org/organization/getting-involved/) -- [GNOME](https://welcome.gnome.org/) -- [Pantheon](https://docs.elementary.io/contributor-guide) -- [KDE](https://community.kde.org/Get_Involved) -- [XFCE](https://docs.xfce.org/contribute/start) - -[聯絡]: /zh_hant/community/community -[Ultramarine-Linux/wiki]: https://github.com/Ultramarine-Linux/wiki diff --git a/src/content/docs/zh_hant/development/developing-for-ultramarine.mdx b/src/content/docs/zh_hant/development/developing-for-ultramarine.mdx deleted file mode 100644 index e518ab72..00000000 --- a/src/content/docs/zh_hant/development/developing-for-ultramarine.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Developing for Ultramarine -description: "Things to get started on developing in Ultramarine." ---- -### This Page Will Be Moving to [**Fyra Developer**](https://developer.fyralabs.com) Soon! - -Ultramarine Linux aims to be a developer-friendly environment for all kinds of developers. In this article, we will cover the basics of how to get started developing in Ultramarine. - -If you would like to develop your own software, you can get started with the section below. - -If you would like to develop **for** Ultramarine, you can get started with the [Developing for Ultramarine](#developing-for-ultramarine) section. - -## Getting Started - -Ultramarine comes with the [Python programming language](https://www.python.org/) out of the box, which is also required for most Fedora -software, including the DNF package manager itself. - -### Setting up Rust - -To set up Rust in your environment, you can install the Rust and Cargo package from the Fedora repositories. - -```zsh -sudo dnf install rustc cargo -``` - -You can also use the `rustup` installer from the [Rust website](https://www.rust-lang.org/tools/install). This will install Rust in your local environment. - -## Developing for Ultramarine - -Our team uses [Visual Studio Code](https://code.visualstudio.com/), which is an open-source (mostly source-available) IDE that is available for both Windows, macOS, and Linux. - -If you, however, do not prefer to use the official Microsoft distribution of Visual Studio Code, you can also use [VSCodium](https://www.vscodium.com/), which is a free alternative distribution of Visual Studio Code. Or you can also use the [Official open-source build of Visual Studio Code](https://github.com/microsoft/vscode) here. - -There are also other supported IDEs and software we recommend using for development, such as: - -- [JetBrains CLion](https://www.jetbrains.com/clion/) (Native applications with C/C++, or Rust) -- [JetBrains PyCharm](https://www.jetbrains.com/pycharm/) for Python development. -- [GNOME Builder](https://wiki.gnome.org/Apps/Builder) for GNOME and GTK development. -- [Qt Creator](https://www.qt.io/product/development-tools) for Qt development. - -And other text editors you can use, such as: - -- [VIM](https://www.vim.org/) -- [Emacs](https://www.gnu.org/software/emacs/) -- [Micro](https://micro-editor.github.io/) -- [Neovim](https://neovim.io/) -- [Helix](https://helix-editor.com/) - -These text editors come with a minimal set of features, so you may want to install plugins for them, and configure them to your liking. - -Our preferred programming languages are Python, Vala, and Rust, and our preferred GUI library is Helium. - -To build packages for Ultramarine, see [Using Andaman](/en/development/anda). - -### UI development - -It is recommended to follow the [Helium Human Interface Guidelines](https://developer.fyralabs.com/helium/hig/introduction) for UI development for Ultramarine apps. These guidelines should not be considered a be-all end-all, it is perfectly acceptable to deviate from the guidelines (or not follow them at all) if it limits aspects of your app. - -### Build systems - -For build systems, we prefer using the programming language's native build system. For example, if you're using Rust, you can use the Rust's native Cargo build system. And in the case of Python, you can use the standard Python setuptools, which consists of either a `setup.py` file or a `pyproject.toml` file. - -For cases where using a native build system does not fit the needs of the application, we have a prioritized list of build systems that we recommend using: - -- [Meson](https://mesonbuild.com/) -- [CMake](https://cmake.org/) -- [GNU Autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html) -- A written makefile or simple shell script diff --git a/src/content/docs/zh_hant/development/ux-guide.mdx b/src/content/docs/zh_hant/development/ux-guide.mdx deleted file mode 100644 index 87844502..00000000 --- a/src/content/docs/zh_hant/development/ux-guide.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: UX Guidelines -description: "Guidelines for how the Ultramarine Linux experience should be designed." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -### The Helium Human Interface Guidelines Can Be Found on [**Fyra Developer**](https://developer.fyralabs.com/helium/hig) - -We recommend the Helium Human Interface Guidelines. They're built in house to provide a modern and friendly experience. They were originally designed for the Helium UI Library but you can apply the principles to any UI libraries nonetheless. - -These guidelines are not a be-all-end-all and you are free to ignore parts or add your own ideals. It's your app after all :P diff --git a/src/content/docs/zh_hant/hardware/anywhere.mdx b/src/content/docs/zh_hant/hardware/anywhere.mdx deleted file mode 100644 index 04a2d805..00000000 --- a/src/content/docs/zh_hant/hardware/anywhere.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Ultramarine Anywhere -description: "Our goal is to run Ultramarine Linux on as many devices as possible" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -One of the major focuses of the Ultramarine project is to bring Linux to as many people as possible. -A major part of this is supporting as many devices as possible, through our Ultramarine Anywhere program. -By contributing to Ultramarine Anywhere, you can help us bring Linux to more devices and more people. - - - The pages about this program are more technical than the rest of the wiki. Do - not follow the instructions on these pages unless you know what you're doing. - - -#### If you have any suggestions or comments regarding these pages, don't hesitate to [reach out](/en/community/community). - -## In Progress - -- [Ultramarine Chromebook Edition](/en/anywhere/chromebook) - -## Planned - -- [Raspberry Pi 5](/en/anywhere/rpi) -- [Apple Silicon Macs](/en/anywhere/applesilicon) -- [XR and Spatial Computing](/en/anywhere/xr) -- [Android Devices](/en/anywhere/android) -- [Data Centre, Enterprise, and HPC](/en/anywhere/enterprise) - -## Completed - -- [Raspberry Pi 3, 4, and 400](/en/anywhere/rpi) - -## Wishlist - -- [Smart TV Devices](/en/anywhere/ott) -- [Thin Clients](/en/anywhere/thin) -- [RISC-V](/en/anywhere/riscv) -- [Steam Deck](/en/anywhere/steamdeck) diff --git a/src/content/docs/zh_hant/hardware/bioskeys.mdx b/src/content/docs/zh_hant/hardware/bioskeys.mdx deleted file mode 100644 index 7f306873..00000000 --- a/src/content/docs/zh_hant/hardware/bioskeys.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: BIOS Keys -description: "How to enter the BIOS or Boot Menu on various Computers" ---- - -These are the keys (or combination of keys) used to enter the boot menu or UEFI/BIOS settings on different computers. - -| Manufacturer | UEFI/BIOS | Boot Menu | Notes | -| ----------------- | --------------------- | ------------------------ | ------------------------------------------------------------------------------------------ | -| Acer | F2 or Del | Esc, F9, F12 | | -| Aorus | Del, F2 | F12 | | -| ASRock | Del, F2 | F11 | | -| ASUS | F2 or Del | Esc, F8 | | -| Compaq | F10 | F9 | | -| Dell | F12 | F11 | | -| Dell (Tablets) | Volume Down+Power | Volume Up+Power | | -| ECS | Del | F7 | | -| EVGA | Del | F7 | | -| Gateway | Del, F1, F2 | F12 | | -| Gigabyte | Del, F2 | F12 | | -| HP | ESC, F10 | Esc, F9 | | -| Intel | F2 | F10 | | -| ThinkPads | - | F12, Enter, ThinkVantage | You can access the BIOS or UEFI menu from the boot menu | -| Lenovo (Desktops) | F1 | F12 | | -| Lenovo (Laptops) | F1+Enter, Novo Button | F12, Novo Button | | -| MSI | Del | F11 | | -| Microsoft | Volume Up+Power | - | There is a boot menu available in the UEFI Settings | -| Origin PC | F2 | F2 | | -| Samsung | F2 | F10 | | -| Toshiba | F2 | F12 | | -| Intel Macs | - | Hold Option (⌥) or Alt | You can change NVRAM variables inside the OS. If you know what you're doing, power to you. | -| Zotac | Del | F8 | | diff --git a/src/content/docs/zh_hant/hardware/nvidia.mdx b/src/content/docs/zh_hant/hardware/nvidia.mdx deleted file mode 100644 index d5833de2..00000000 --- a/src/content/docs/zh_hant/hardware/nvidia.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: NVIDIA Drivers -description: "Information about NVIDIA Graphics on Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -For computers with NVIDIA graphics cards, you have two choices for drivers. - -#### Noveau Driver - -[The Noveau driver](https://nouveau.freedesktop.org/) is a fully open-source driver for NVIDIA graphics cards. It's built into Ultramarine so you can use your GPU instantly. - -Despite how good this sounds, modern NVIDIA GPUs will suffer performance issues and screen tearing under the Noveau driver. - -Older NVIDIA GPUs work well with the Noveau driver (and may only work with Noveau.) - -#### Proprietary Driver - -This is our recommended solution. Proprietary drivers support all of the features and performance of your GPU. They are automatically installed during installation if you are connected to the internet. - -If drivers weren't installed, or you switched to a NVIDIA GPU, you can install drivers by opening the "Software" app and searching for "NVIDIA" or by running the following commands in terminal: - -```bash -sudo dnf update # Update the system first, the drivers may not work right if you don't. -sudo dnf install akmod-nvidia # Install the NVIDIA kernel module. -``` - - - You MUST wait until the process is finished before rebooting. Rebooting too - early might result in a broken installation! This may take upwards of 15 - minutes! - diff --git a/src/content/docs/zh_hant/hardware/requirements.mdx b/src/content/docs/zh_hant/hardware/requirements.mdx deleted file mode 100644 index 37e0c450..00000000 --- a/src/content/docs/zh_hant/hardware/requirements.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: System Requirements -description: "Minimum Requirements for Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Recommended Requirements for Standard PCs - -These are our suggestions for the most basic (daily-driveable) system: - -- 4GB of RAM (8GB or more recommended) -- 64-bit processor (x86_64/amd64) -- 16GB of free disk space (24GB or more recommended) -- Internet connection (for downloading the ISO image, updates, and additional drivers) -- A computer that supports booting from a USB drive -- A USB drive (for creating the bootable media) - -## Minimum Requirements for Raspberry Pi - -- Raspberry Pi 3 or newer -- 4GB of RAM **OR** 2GB of RAM without a desktop environment -- 9GB Class 10 MicroSD Card -- See the [anywhere page](/en/anywhere/rpi) - -## Minimum Requirements for ARM Devices Using UEFI - -- 64-bit processor (aarch64) -- 4GB or RAM -- 16GB of Storage - -## Minimum Requirements - -These requirements are the **_bare minimum_** to run Ultramarine Linux. Using Ultramarine on a computer of this caliber will not be a good time. - -- 1gb of RAM -- 64-bit processor (x86_64 **OR** aarch64) -- 10GB of disk space diff --git a/src/content/docs/zh_hant/hardware/surface.mdx b/src/content/docs/zh_hant/hardware/surface.mdx deleted file mode 100644 index a5d0c8a8..00000000 --- a/src/content/docs/zh_hant/hardware/surface.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Microsoft Surface -description: "Information about Ultramarine Linux on Microsoft Surfaces" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Surfaces require a special kernel to work properly under Ultramarine. - -These are currently provided by the Surface Linux team, start by adding their repository - -```shell -sudo dnf config-manager \ - --add-repo=https://pkg.surfacelinux.com/fedora/linux-surface.repo -``` - -Then, install the kernel and it's dependencies - -```shell -sudo dnf install --allowerasing kernel-surface iptsd libwacom-surface -``` - -If you want to use secure boot, you need to install `surface-secureboot`, enable 3rd party keys in the EFI settings, and enroll the key in cert-manager. This does not work well on some devices, so we recommend disabling secure boot. - -We intend to make this easier in future releases. - -Some Surface models may not boot with a stock copy of Ultramarine Linux. If this is the case for your device, you have to install the kernel before leaving the live environment. - -1. Ensure your internal storage is mounted, Anaconda should leave it mounted by default. - -2. Check the root partition, it should be mounted as `/mnt/sysroot` - -3. Chroot into the installed system - -``` -sudo chroot /mnt/sysroot -``` - -4. Follow the above instructions - -5. Run `dracut -f` to make sure the new kernel is installed as the initramfs. - -6. Exit the chroot and reboot! diff --git a/src/content/docs/zh_hant/installation/getting.mdx b/src/content/docs/zh_hant/installation/getting.mdx deleted file mode 100644 index 2cef7e71..00000000 --- a/src/content/docs/zh_hant/installation/getting.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: 取得 Ultramarine Linux -description: "Getting started with installing Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## 系統要求 - -若果您的電腦能夠運行微軟的 Windows 7,它很大可能亦能運行 Ultramarine Linux。您可以檢查電腦是否符合[硬件要求](/zh_hant/hardware/requirements)。 - -## 版本 - -Ultramarine Linux 有 4 個版本︰ - -- **Budgie**(即 Budgie)︰我們最受歡迎的版本,適合追求一個熟悉及酷的系統的使用者。 -- **Plasma**︰我們第二最受歡迎的版本,適合追求一個容易改製的體驗的使用者。 -- **GNOME**︰優雅而新淨,適合追求一個簡單而獨特的體驗的使用者。 -- **Xfce**︰輕便而容易改製,適合追求一個輕快的體驗的使用者。 - -您可以檢查[系統要求](/zh_hant/hardware/requirements)以確認您的裝置是否被支持。 - -[我們的網站](https://ultramarine-linux.org)裏提供不同格式及不同版本的 Ultramarine Linux。 - - - Fyra Labs 並不能確保上述網站及 FOSSTorrents 以外所提供的映射的安全性。 - - -{/* ### Atomic - -Ultramarine Linux also comes in Atomic versions. Ultramarine Atomic works similarly to Fedora Silverblue, CoreOS, and other OSTree-based operating systems. This variant is made for users who want a stable, immutable system that is easy to recover from. -We see immutability as the future of Linux systems. Ideally, this will become the standard edition in the future. - -These builds are currently in beta. If you are planning to test them, please join our [Discord](https://discord.gg/5fdPuxTg5Q) or [Matrix](https://matrix.to/#/#hub:fyralabs.com) community first and let us know. We'll be happy to receive feedback and assist you. - -[Try Ultramarine Atomic →](https://nightly.link/Ultramarine-Linux/ostree-config/workflows/ci-isos.yaml/main?preview) - -(The "Home" and "Base" images are copies of [tauOS](https://tauos.co) - These **ARE NOT READY FOR DAILY USE!!**) - -### Raw Images and Raspberry Pi - -Ultramarine is also availible as a raw (or preinstalled) image. These images come with a desktop preinstalled and are intended to be flashed directly to the drive your device will boot from (like an SSD or an SD card.) - -These can be found in the [Raw Image](https://images.fyralabs.com/images/ultramarine/40/) sections of the download page. */} - -{/* ### Chromebook Edition */} - -{/* Ultramarine is available for most x86 ChromeOS devices. See the [Chromebook Edition section](/en/chromebook/chromebook) for more information. */} - -{/* ### Kanopy */} - -{/* **Ultramarine Kanopy** is an upcoming variant of Ultramarine Linux, which is made for servers and cloud computing. It is currently in development and does not have a release date yet, but we plan to target Qx '2x */} -{/* It will be based on Ultramarine OSTree and is designed as a simple and easy-to-use server operating system, with a focus on containerized applications with a simple, easy-to-use web interface as a competitor to TrueNAS SCALE, OpenMediaVault, and other similar operating systems. */} - -## 確認映射安全性(建議) - -每一個映像都各自有一個*核對和*(checksum),供下載後可作映射核對之用。 - -在[下載頁](https://ultramarine-linux.org/download/)按下`View checksum`後即可下載核對和。 - -### 在 Linux 和 MacOS 核對 - -以下的指令能夠檢查映射是否完整無誤: - -```bash -sha256sum -b /path/to/ultramarine.iso -cat /path/to/checksum -``` - -### 在 Windows 核對 - -以 Powershell 執行下列指令: - -```powershell -CertUtil -hashfile PATH\TO\ULTRAMARINE.ISO SHA256 -``` -再利用 Notepad 打開核對和的檔案進行比較。 - - - Raspberry Pi 的使用者請至:[Raspberry Pi 安裝過程](/zh_hant/installation/rpi) - - -## 製造安裝介質 - -利用一個映射寫入工具,將已下載的映射寫入一個 USB 記憶棒(或其他方便的媒體),以製造安裝介質。建議使用適合不同平台的 [balenaEtcher](https://www.balena.io/etcher/)。 - -![](/assets/balenaetcher.png) - -您亦可以使用 [Fedora Media Writer](https://github.com/FedoraQt/MediaWriter),或在 Budgie、Xfce 及 GNOME 版本上的硬盤工具。 - - - 已知 Rufus 並不能寫入 Ultramarine 的映射。 - - -## 啟動安裝介質 - -寫入映射後,您可以插入媒體並重啟電腦,以啟動安裝介質。 - -大部分電腦有特別的按鍵,以讓使用者選取作啟動用的媒體或進入初始化介面。不同牌子會有不同的按鍵,詳請請至:[BIOS 按鍵](/zh_hant/hardware/bioskeys)以了解如何進入上述畫面。 - - - 如果您正在使用 Windows 10 或更加新的版本,請進入設定中的復原畫面並選擇「進階重啟」。重啟後,請選擇「使用其他媒體」。 - - - - Linux 的使用者可能可以執行以下指令進入 BIOS︰ - `sudo systemctl reboot --firmware` - - -#### [下一頁:安裝過程 →](/zh_hant/installation/installation) - -## Footnotes - -- The Anaconda installer is very complex and hard to work with, we are working on a new installer that is easier to use and more reliable. -- Since Fedora 37 the Ultramarine team has maintained Pantheon, in Ultramarine 40 we will be dropping Pantheon due to major issues with the experience. -- Ultramarine's Budgie edition provides a close to stock Budgie experience, with a custom theme. Unlike Fedora's Budgie Spin, which provides a completely custom layout and experience. diff --git a/src/content/docs/zh_hant/installation/installation.mdx b/src/content/docs/zh_hant/installation/installation.mdx deleted file mode 100644 index c6e9781c..00000000 --- a/src/content/docs/zh_hant/installation/installation.mdx +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: 安裝過程 -description: "A guide on how to install Ultramarine Linux" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -電腦啟動至安裝介質後,您會看見一個視窗詢問您要開始安裝還是要試用 Ultramarine。 - -![The Welcome Dialog box](/assets/welcome-window.png) - -若果選擇試用,您可以之後開啟「Install to Hard Drive」的應用開始安裝。 - -## 語言 - -![The Language Selection Screen](/assets/anaconda-1.png) - -開啟安裝應用後,你可以選擇您想使用的語言及鍵盤配置。 - -## The Anaconda Hub & Spoke Model - -![Anaconda Hub](/assets/anaconda-2.png) - -Anaconda uses a hub and spoke model. You can configure your installation in any order you want, but you will need to complete all the options before you can continue. - -### Keyboard Layouts - -![Anaconda Keyboard Layout](/assets/anaconda-3.png) - -Press the `+` button to add a new keyboard layout, then pick and search for the keyboard layout you prefer. - -Once you have selected the keyboard layout, you can press the `Done` button on the top left to go back to the hub. - -### Time & Date - -![](/assets/anaconda-4.png) - -The Time & Date selection screen has a world map where you can click on your location on the map to set your timezone. - - - -By default, the time is set from your IP address geolocation. If you're using a VPN or proxy this may not be accurate. - - - -### 系統存放位置 - -![](/assets/anaconda-5.png) - -您可以在這裏選擇 Ultramarine 的安裝位置,或者讓安裝應用自動選擇安裝的設定,或者自己設定安裝的配置。 - -Ultramarine 預設使用 [Btrfs](https://en.wikipedia.org/wiki/Btrfs)。Chromebook 電腦的預設為 ext4,因為 Btrfs 有機會縮短 Chromebook 裏面 EMMC 的壽命。 - - - 建議加密硬盤,以加強安全。選取「Encrypt」之後,再輸入一個新的密碼並按「Done」後,你的硬盤就會被加密。 - 每次啟動電腦時,使用者就需要輸入密碼。 - - -#### 自定義硬盤分割 - -![](/assets/anaconda-6.png) - -在這個模式中,您可以自行更改硬盤分區的設定。 - -在 UEFI 的系統裏,您需要一個分別掛載到 `/boot/EFI` 和 `/` 的分區。 - -在 BIOS 的系統裏,您需要一個 `BIOSBoot` 的分區掛載到 `/boot`,以及另一個掛載到 `/` 的分區。 - -#### 進階分割 - -![](/assets/anaconda-7.png) - -這個模式允許您利用 blivet-gui 手動分割您的硬盤。這給您更大自由,所以請確保您知道您在做甚麼! - -### 網絡 - -![](/assets/anaconda-8.png) - -您可以在這裏設定您的主機名,即是一個網絡中唯一標識您這台機器的名稱。 - -### 用戶 - -![](/assets/anaconda-9.png) - -您必須在這裏設定您的用戶。安裝後這將會是系統的管理員。 - -您亦可以按「Advanced」以進行進階設定,包括您的資料位罝、用戶 ID 等。 - - - -您必須輸入一個密碼,否則一些應用會不能正常運行。 - - - - - -輸入了不安全的密碼就需要按兩次「Done」以繼續。 - - - ---- - -完成上述設定後就可以按「Begin Installation」繼續。安裝的過程大約需要幾分鐘。 - - - 這是**不可逆轉**的:在安裝過程中強制停止安裝應用會令你得到一個不能正常運作的系統。
- 你將會需要重新安裝 Ultramarine Linux 或其他系統,以取得一個正常運行的系統。 -
- -安裝完成後,你就可以直接重啟電腦。 - -歡迎使用 Ultramarine Linux! - -#### [下一頁:安裝之後… →](/en/installation/postinstall) - -#### [← 上一頁:取得 Ultramarine Linux](/en/installation/getting) diff --git a/src/content/docs/zh_hant/installation/readymade.mdx b/src/content/docs/zh_hant/installation/readymade.mdx deleted file mode 100644 index 502306c3..00000000 --- a/src/content/docs/zh_hant/installation/readymade.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Installation with Readymade Preview -description: "A guide on how to install Ultramarine Linux with the upcoming new installer " ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -After booting into the live system, you will see a dialog box asking you whether to start the installer or continue with the live system. - -![The Welcome Dialog box](/assets/welcome-window.png) - -You can pick whichever you want, and you'll be able to start the installer later by opening the `Install to Hard Drive` application. - -#### [Next Up: Post-installation →](/en/installation/postinstall) - -#### [← Back To: Getting Ultramarine](/en/installation/getting) diff --git a/src/content/docs/zh_hant/installation/rpi.mdx b/src/content/docs/zh_hant/installation/rpi.mdx deleted file mode 100644 index 90c0858c..00000000 --- a/src/content/docs/zh_hant/installation/rpi.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Raspberry Pi 安裝過程 -description: "How to install Ultramarine Linux on the Raspberry Pi" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## System Requirements - -Ultramarine Linux supports the Raspberry Pi 3 and 4. Please see the [Anywhere page](/en/anywhere/rpi) for more information. - -## Selecting a Drive - -The drive you use deeply affects the experience you will have on Ultramarine. - -### Raspberry Pi 3 - -Raspberry Pi 3 supports only microSD cards. Your microSD card must be 9GB or larger, but we suggest 16GB or more so you'll have some space for software. - -You should also look for a class 10 SDHC or SDXC microSD. - -### Raspberry Pi 4 and 400 - -Raspberry Pi 4 supports microSD cards and USB storage. Your storage device must be 9GB or larger, but we suggest 16GB or more so you'll have some space for software. - -The best experience will be with a SATA SSD connected over an adapter. A USB 3.0 flash drive will be slightly better to on-par with a nice microSD card. All of the options are good, it's up to your needs. - -## Flashing the Image - -Grab a USB stick! Use a flasher program to flash Ultramarine to your storage device. [balenaEtcher](https://www.balena.io/etcher/) is an easy cross-platform choice. - -![](/assets/balenaetcher.png) - -Simply select the raw.xz file (you don't need to decompress it), the device you're using, and click flash. - -You can also use the Disks application on Budgie, Xfce, and GNOME editions. - - - Ultramarine will be available in Raspberry Pi Imager and the Network Install - feature in the near furure. - - -## Expanding the Root Filesystem - - - This is not possible on Windows or macOS. We are figuring out a way to do this - on first boot. - - -If you haven't already, install GParted as an RPM [from your app store](/en/linux/software). - -Start by opening GParted, it may prompt you to fix the GPT, make sure you select "Fix." If you don't the expand will fail. -![](/assets/gparted/gpt.png) - -Now select the device you just flashed. -![](/assets/gparted/disk.png) - -Then, right click the last partition on the disk, and select "Resize/Move." -![](/assets/gparted/part.png) - -You'll be presented with this menu, you can change partition sizes from here. -![](/assets/gparted/resizemenu.png) - -Simply drag the right side of the partition as far right as you can, then click done. -![](/assets/gparted/fillwhole.png) - -Now, check your work, make sure you used the right disk. -![](/assets/gparted/checkwork.png) - -Then click the green check in the top menu and confirm the changes. -![](/assets/gparted/apply.png) - -Sit back and wait, this may take upwards of five minutes. -![](/assets/gparted/progress.png) - -You're done now! You can exit this menu and eject your drive, you're ready to plug it into your Pi! -![](/assets/gparted/done.png) - -## First Boot - -On first boot, you'll be prompted with a user creation screen. Create your user and you'll be ready to go! - -That's it! You're ready to enjoy Ultramarine on your Raspberry Pi! We're working hard on making the experience better so stay tuned! diff --git a/src/content/docs/zh_hant/linux/devicefiles.mdx b/src/content/docs/zh_hant/linux/devicefiles.mdx deleted file mode 100644 index bff43af2..00000000 --- a/src/content/docs/zh_hant/linux/devicefiles.mdx +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Device Files -description: "Overview of various device files in /dev" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - - - These files are an actual representation of all your hardware devices - according to how your drivers see them. Please do not modify or delete these - files unless you know what you are doing. - - -Device files are special files that exist as an interface for your system to interact with hardware. -They are located in the `/dev` directory, which is a temporary virtual filesystem that is created by Linux on boot. - -## Block Devices - -Block devices are devices that store buffered data as [blocks](). - -These files are essentially the low-level interface to your storage devices. They are usually to be mounted to a directory in order to be used, -similarly to how Windows automatically assigns drive letters to storage devices. - -Newer Windows versions also support mounting devices as directories, but they are not commonly used. - -There are various types of block devices, but the most common ones are: - -- SATA, PATA/IDE, SAS, SCSI or USB disks (`/dev/sd*`) -- NVMe Drives (`/dev/nvme*`) -- Device mappers (`/dev/mapper/*`) - A special feature of the Linux kernel that allows you to create virtual block devices from other block devices. -- Loop devices (`/dev/loop*`) - Virtual loopback devices that allow you to mount files as block devices. -- MMC devices (`/dev/mmcblk*`) - Memory cards that use the MultiMediaCard standard, such as SD cards. - -## Pseudo-devices - -Pseudo-devices are devices that do not actually exist but are used by the kernel to provide an interface for various features. - -The most common pseudo-devices are: - -- `/dev/null` - A special empty file that discards all data written to it. -- `/dev/zero` - A special file that returns an infinite stream of null bytes when read. -- `/dev/random`, `/dev/urandom` - Special files that return an infinite stream of random data. -- `/dev/full` - A special empty file that always returns a "disk full" error when written to. -- `/dev/ptmx` - A pseudo-terminal master used to create virtual terminals. -- `/dev/tty*` - A virtual terminal that is used to interact with the system. Back in the day, there were also actual [physical terminals](https://en.wikipedia.org/wiki/Computer_terminal) that were connected to the system via a serial port. Nowadays, these files are used to represent virtual terminals, as computer terminals were replaced by actual computers running remote desktop software such as SSH, VNC or RDP. -- `/dev/pts/*` - A virtual terminal slave used to create virtual terminals. -- `/dev/shm/*` - A shared memory segment used by the kernel to share data between processes. -- `/dev/stdin`, `/dev/stdout`, `/dev/stderr` - Standard input, output and error streams. Used to redirect input and output from and to other files, similar to how programs output data directly to the terminal. Can be redirected using [pipelines](/en/linux/shell#the-pipeline). - -# Interacting with Devices - -You can interact with device files like you would with any other file, but there are also special tools that are used to interact with them. - -The `cat` command can be used to read data from a file and output it to `/dev/stdout` (standard output), which is usually the terminal. - -```sh -cat /dev/urandom -``` - -This will output an infinite stream of random garbage to the terminal, which will make it unusable until you press `Ctrl+C` to stop the command. You might also need to restart your terminal emulator if it happens to output -a specific combination of characters that breaks it. - -## Block Devices - -To list all block devices, you can use `lsblk` to list them in a tree-like format: - -```sh -$ lsblk -NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS -sda 8:0 0 931.5G 0 disk -├─sda1 8:1 0 600M 0 part /boot/efi -├─sda2 8:2 0 1G 0 part /boot -└─sda3 8:3 0 929.9G 0 part -zram0 252:0 0 8G 0 disk [SWAP] -nvme0n1 259:0 0 119.2G 0 disk -└─nvme0n1p1 259:1 0 119.2G 0 part /var/lib/docker/btrfs - /home - /var - / -``` - -## Explaining the Output: - -`sda*` is the main disk of the system, which is a 1TB SATA SSD. It has 3 partitions, `sda1`, `sda2` and `sda3`. `sda1` is the EFI partition, `sda2` is the boot partition and `sda3` is the root partition. - -In this specific case, it is configured in a Btrfs spanned (JBOD) volume, which in this case combines both `sda3` and `nvme0n1p1` into a single volume. - - - Ultramarine Linux's installer, *Anaconda* will automatically configure your - disks in a Btrfs spanned volume by default when multiple disks are selected. - - -`nvme0n1` is a 128GB NVMe SSD that is used as a cache for the Btrfs volume. It has a single partition, `nvme0n1p1`, which is mounted to `/var/lib/docker/btrfs`, `/home`, `/var` and `/`. - -`zram0` is a special ramdisk that is used as a pagefile (swap) for the system. It makes uses of the [zram](https://en.wikipedia.org/wiki/Zram) kernel module to create a compressed RAM disk. - -The mountpoints at `/boot` is used for storing Linux kernel images, and `/boot/efi` is used for storing EFI bootloaders. - -`/var` stores extra variable data, `/home` is a dedicated partition for storing user data and `/` is the root partition, which can be compared to the `C:\` drive on Windows. - -`/var/lib/docker/btrfs` is the directory where [Docker] stores its data. Docker is a containerization software that allows you to run applications in isolated environments. -Since we are using Btrfs, Docker will use Btrfs subvolumes to store its data. For other filesystems, Docker will use other methods to store its data. - -### Manipulating Block Devices - -You can use `fdisk` to do various operations on block devices, such as creating partitions, formatting them and more. - -```sh -fdisk /dev/sda -``` - - - **NEVER** run the following commands on any actual systems! These commands **ANNIHILATE your system WITHOUT CONFIRMATION**, - causing **IRREVERSIBLE DAMAGES** to your system! - -If you want to test out these commands for whatever reason, please _make sure (and double check) you are ONLY doing this in a virtual environment._ - - - -As an example, you can use the following command to do a zero-filled format of a disk called `/dev/sda` by simply using a pipe: - -```sh -cat /dev/zero > /dev/sda -``` - -...Or shred the entire disk with random data: - -```sh -cat /dev/urandom > /dev/sda -``` - -All of these commands will do destructive operations on your disk, so please be careful when using them. - -You can also use the [`dd`]() tool to read and write data to block devices, create disk images and even clone disks directly. - -For example, you can create a backup image (ghost image) of your disk by using the following command: - -```sh -dd if=/dev/sda of=/path/to/backup.img -``` - -...Or clone your disk to another disk: - -```sh -dd if=/dev/sda of=/dev/sdb -``` - -You can find more information about `dd` [here](https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html). - -#### [← Back To: The Filesystem](/en/linux/filesystem) - -#### [Next Up: Permissions →](/en/linux/permissions) - -[Docker]: https://en.wikipedia.org/wiki/Docker_(software) diff --git a/src/content/docs/zh_hant/linux/filesystem.mdx b/src/content/docs/zh_hant/linux/filesystem.mdx deleted file mode 100644 index 5f471cfe..00000000 --- a/src/content/docs/zh_hant/linux/filesystem.mdx +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: The File System -description: "An overview of the file system in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -There are a few notable differences in how files work on Linux when compared to Windows or macOS. - -The most noticeable difference is case sensitivity. Windows and macOS are case-insensitive, meaning that `FOLDER` and `Folder` are the same folder. Linux on the other hand is case-sensitive, so `FOLDER` and `Folder` are two different folders. - -In Linux, and more widely, UNIX, everything is a file. Unlike Windows which has other object types to represent physical devices. - -## The File System Hierarchy - -Unlike Windows, Linux has a standardized file system hierarchy (FSH.) The FSH is contained within `/` (often called root.) They not only contain normal files, but also physical devices, virtual devices, and various other special files that control the system itself. - -It should also be noted that Linux uses a forward slash (`/`) to represent going deeper in a directory, unlike Windows which uses a backslash (`\`) - -The directory structure is as follows: - -| Directory | Description | -| :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| / | The root directory with the all the other directories and files. This is as far back as you can go | -| /bin | Executables and command binares required for a functioning system. Most applications installed from RPM end up here. | -| /boot | The bootloader and files used during early boot process. May usually be in a seperate partition. | -| /dev | Special device files for various purposes (`/dev/sda` for a drive, `/dev/null` for blank data, `/dev/random` for pseudo-random data, `/dev/tty` for terminal sessions, etc). | -| /etc | System-wide settings and configuration files. | -| /home | User files. This is where your stuff lives! | -| /lib | Libraries required for executables in `/bin` to function. May be also named `/lib`. | -| /media | Mount points for when the system mounts removable media, such as USB drives, SD cards, etc. | -| /mnt | Temporary mount points for media. Usually used when manually mounting a drive. | -| /opt | Optional packages that may be installed by the user. Most packages don't actually install here. | -| /proc | Process data and kernel information for inter-process communication managed by the kernel. | -| /root | User data for the root user. Don't confuse this with `/` (root) | -| /sbin | Executables for system tasks. | -| /srv | Shared service data used by server processes, such as web servers and NAS/File servers. | -| /tmp | Temporary data. | -| /usr | Shared application data used by all users. | -| /var | Variable data used by system processes. | - -## The Home Directory - -The home folder is the place where all your personal data, and most of your apps are stored. It is a directory that is located under the `/home` directory, followed by your username. It is similar to the `Users` folder in Windows. - -In Linux, the home folder is usually more extensively used than in Windows, as it stores all user-specific data, settings, and the majority of your applications (Flatpaks). The system folders are only used when making system-wide changes or installing applications from DNF or an RPM File. - -## Virtual Memory - -[Virtual memory](https://en.wikipedia.org/wiki/Virtual_memory) is a feature in Linux and other operating systems that allows the system to use a portion of the disk as RAM. This is useful when the system runs out of RAM and needs to use the disk as a temporary storage for data. - -On Windows, this is called a "Page file", and on Linux, it is called a "Swap file". The swap file is usually located at `/swapfile` or as a dedicated partition on the disk. - -Swap comes with many issues, for example, it can reduce the lifespan of lower-cost SSDs, and may be too slow on hard drives. To combat this Ultramarine uses memory compression [(zram specifically)](https://en.wikipedia.org/wiki/Zram). - -By default, we match the amount of physical memory you have. (Which is the maximum) - -Although this may sound magical, it does come at the cost of your CPU working a little bit harder. Luckily this is not very noticeable on modern computers. - -[Learn more about zram →](https://en.wikipedia.org/wiki/Zram) - -## File system formats - -Ultramarine Linux supports a wide variety of file systems, and can be configured to use any of them during installation. - -It currently supports most file systems that are supported by the Linux kernel, including: - -- ext2, ext3, ext4 -- Btrfs -- XFS -- NTFS -- FAT32 - -And extra file system drivers can be installed, such as: - -- ZFS - -The Ultramarine Linux installer will be configured to use the BTRFS file system by default, as it is the most modern file system that is supported by the Linux kernel, and has many features that are useful for desktop users, such as snapshots, virtual volumes, journalling, error correction and compression. - -By default, it will use up all the available space on the disk. It uses a small portion of the spaces for the EFI bootloader partition, and create a BTRFS JBOD array using the rest of all the available space on all selected disks. -It then creates 2 subvolumes, one for the root directory `/`, and one for the home directory `/home`, which will share the same space but have different filesystem settings. - -So unless specified otherwise, the installer will use all your disks to create a JBOD (spanned) array, which may be undesirable if you do not want to risk losing all your data if one of the disks fail. - -Most server installations will use XFS or ZFS, as they have better performance and reliability for servers, and are more suitable for RAID arrays. - -### Remote Filesystems - -Ultramarine Linux can also mount remote file systems from a remote server or NAS, using the NFS, (S)FTP, SMB, and WebDAV protocols. - -#### [← Back To: What is Linux?](../overview) - -#### [Next Up: Device Files →](../devicefiles) diff --git a/src/content/docs/zh_hant/linux/overview.mdx b/src/content/docs/zh_hant/linux/overview.mdx deleted file mode 100644 index e2f804a4..00000000 --- a/src/content/docs/zh_hant/linux/overview.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: What is Linux? -description: "A general overview of Linux concepts." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Linux refers to a family of operating systems with one common feature: the Linux kernel. - -Linux is distributed uniquely compared to Windows or macOS. Multiple (seperate) groups take the Linux kernel and combine it with tons of other software before distrbuting it as a distinct operating system. These compilations are called "distributions" (but we'll shorten that to distro.) - -Ultramarine Linux is based on another disribution of Linux called Fedora. See ["Why does this distro exist?"](/en/welcome#why-does-this-distro-exist-what-difference-does-it-have-other-than-just-fedora-with-rpmfusion) for more on that. - -## Why use Linux? - -People use Linux on the desktop for all sorts of reasons. For our purposes, we'll split this into four categories: Customization, Freedom, Security, Privacy. - -### Customization - -Linux is incredibly customizable. You can change anything from the way your desktop icons look to the way apps load and the behavior of the device itself. Ultramarine provides easy ways to do this, like theme support, power management profiles (in most editions) and the upcoming tweak tool. - -### Freedom - -When we say freedom, we mean it in two ways. This is often described as "free as in beer" V.S. "free as in speech". Linux will cost you no money, and will allow you to do essentially whatever you'd like. - -For example: Edge cannot be removed from a Windows computer. Meanwhile on Linux, there is no such limitation. Essential apps like the file manager can be exchanged for one of many alternatives. Complete freedom. - -### Security - -Linux is more secure by design, with features like Mandatory Access Controls and stricter permissions, you can learn more about those features on the [Permissions](/en/linux/securityprivacy) page. - -Linux is also resistant to many common viruses due to these features (and inexperienced developers.) This is becoming less true as Linux marketshare grows, but you are significantly less likely to get an incidental virus on Linux than Windows. - -### Privacy - -It's no secret that the big three of operating systems are watching what you do in some way. Linux vendors tend not to do this, and even if they do, you can easily switch to a compatible alternative or simply disable the telemetry. - -## How is Ultramarine Different? - -Ultramarine Linux is designed to get a lot of the configuration out of the way. We include extra components (like media codecs and drivers) that many other distrbutions don't include. - -Ultramarine is built on Fedora, the base for Red Hat's Enterprise Linux. This means that the software backing Ultramarine has been built with the stability needed for mission critical systems. - - -
- If you'd like a crash course on the basics, this video should cover a lot of - what the following pages will cover - -
-
- -#### [Next Up: The Filesystem →](../filesystem) diff --git a/src/content/docs/zh_hant/linux/permissions.mdx b/src/content/docs/zh_hant/linux/permissions.mdx deleted file mode 100644 index c0c76b34..00000000 --- a/src/content/docs/zh_hant/linux/permissions.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Permissions -description: "How permissions work on Linux." ---- - -On Linux, permissions are used to determine who can read, write, and execute files, or do certain actions. - -Users are separated into various groups with different IDs, and each file or action can be assigned a permission level. - -A user can be assigned a permission level that is higher than the permission level of the group they are in. And users in a group can do certain things that other users cannot. - -However, users in UNIX-like operating are more akin to a principal, as these "users" may not actually be a person, but a program. - -Files are owned by a user and can be assigned a permission level. The user who owns the file can modify the file and modify the permissions of the file. - -Permission levels are displayed in octal and are represented by several digits. The first digit is the owner, the second is the group, and the third is the other users. Permissions range from 0 to 7, with 0 being no access, and 7 being full access. - -## The Root User - -The root user (or the superuser) is a special user that grants access to all files and actions. It is akin to the Administrator on Windows. - -To execute commands as the root user, use the `sudo` command, followed by the command you want to execute. - -```bash -sudo dnf install vim # This will install vim as the root user -``` - -#### [← Back To: Device Files](/en/linux/devicefiles) - -#### [Next Up: Software and Package Management →](/en/linux/software) diff --git a/src/content/docs/zh_hant/linux/securityprivacy.mdx b/src/content/docs/zh_hant/linux/securityprivacy.mdx deleted file mode 100644 index 1f1e6526..00000000 --- a/src/content/docs/zh_hant/linux/securityprivacy.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Security and Privacy -description: "How Ultramarine keeps you safe" ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -## Mandatory Access Controls - -Ultramarine Linux uses SELinux, a software that implements Mandatory Access Control. This prevents applications (and users) from accessing files they shouldn't be able to. - -Users will usually be required to have root access to modify system files, and even then, SELinux may prevent you from doing so unless you have set the correct contexts for the files. - -By default, SELinux is in "Enforcing" mode, which means that it will prevent you from modifying system files unless you have the correct permissions. This shouldn't cause any issues. If you would like to disable SELinux you can run`sudo setenforce 0`. We don't recommend this as it makes your system less secure. - -[Learn more about SELinux →](https://www.redhat.com/en/topics/linux/what-is-selinux) - -[Learn more about Permissions →](/en/linux/permissions) - -## Privilege Control - -Ultramarine Linux includes polkit, a tool used to manage privilege elevation. If you've ever gotten a graphical password prompt on your system, you've interacted with polkit. - - - -Use the `pkexec` command instead of `sudo` to give polkit a try. - - - -polkit also manages communication between privileged and non privileged applications. - -## Disk Encryption - -Ultramarine Linux offers the option to encrypt your entire disk at install time. This protects your data from physical attacks and theft. - -## Sandboxing - -When you install an app as a Flatpak, it's contained within a sandbox, meaning it can't see what other apps are doing, and can't see files it isn't allowed to. - -## Restricted Memory Access - -Ultramarine Linux and Fedora restrict access to physical memory. This should prevent most memory injection attacks. - -#### [← Back To: The Shell](/en/linux/shell) diff --git a/src/content/docs/zh_hant/linux/shell.mdx b/src/content/docs/zh_hant/linux/shell.mdx deleted file mode 100644 index 93181051..00000000 --- a/src/content/docs/zh_hant/linux/shell.mdx +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: The Shell -description: "How the shell works in Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -The shell is a command line interface to the operating system. It is a program that allows you to directly execute commands and interact on deeper level. - -You may be familiar with Bash from other Linux distributions. Ultramarine uses the [zsh](https://en.wikipedia.org/wiki/Z_shell) instead of bash. We also use [Starship Prompt](https://starship.rs/) to provide additional convenience features like displaying the current git branch. - - -
- To learn more about shell scripting, you can watch this Bash introduction - video by Fireship here: - - NOTE: The Z shell is mostly compatible with Bash, so most of the knowledge you - will learn will be mostly applicable in Ultramarine Linux. -
-
- -## Interacting with the Shell - -To start using the shell, open the Terminal app. - -![The GNOME Terminal](/assets/terminal.png) - -You will be greeted with a prompt, simply type in the command you want to execute, and press `Enter⏎`. - -To change directories, type `cd` followed by the path you want to change to. - -```zsh -cd /home/user/Documents -``` - -To list the contents of a directory, type `ls` followed by the path of the directory of which you want to list the contents of. - -```zsh -ls /home/user/Documents -``` - -The directory path is an optional argument. Running `ls` with no arguments will print the contents of the current working directory (the folder you `cd`ed into). - -The `ls` command, especially, has a lot of useful flags (i.e. execute `ls -a`, `-a` being the flag). Below is a table of the most important flags for `ls`. - -| Flag | Modification | -| :--- | :---------------------------------------------------------------------------- | -| `-a` | List all files in a directory, including hidden files which begin with a `.`. | -| `-d` | List specified directories without listing their content (try `ls -d /`). | -| `-t` | Sort the output in the order of modification time; latest first. | -| `-r` | Sort output in reverse order. | -| `-l` | List one file per line. Also display information about the files listed. | - -The output of `ls -l` includes columns of information about each file in the following order: file type, permissions, number of symlinks, file owner, file size, date of last modification, and file name. - -``` -total 4 -drwxr-xr-x 2 bob bob 4096 Jan 1 13:00 dir --rw-r--r-- 1 bob bob 0 Jan 1 12:00 file --rwxrwxrwx 1 ann ann 1337 Jan 1 11:00 file2 -``` - -Symbolic links (symlinks) are, as the name would imply, links between files. Changes to files are synced between symlinks. To create a symlink between two files, type `ln`, followed by the `-s` flag and two arguments: one being the original file, and the other being the path to the new symlink. - -```zsh -ln -s file newfile -``` - -From now on, when `file` is changed, the change will also be applied to the linked `newfile`. - -To read a file to the terminal, type `cat` followed by the path to the file. - -```zsh -cat /home/user/Documents/README.md -``` - -To delete a file, type `rm` followed by the path to the file. - -```zsh -rm /home/user/Documents/README.md -``` - -To delete a full directory, recursively delete it by typing `rm -r` followed by the path to the directory. - -```zsh -rm -r /home/user/Documents -``` - - - Most users will usually execute `rm -rf` instead of `rm -r`. The `-f` flag is - used to force the deletion of a file or directory. - - -To create a new file, type `touch` followed by the path to the file. - -```zsh -touch /home/user/Documents/newfile.txt -``` - -To create a new directory, type `mkdir` followed by the path to the directory. - -```zsh -mkdir /home/user/Documents/newdir -``` - - - To create a new directory inside of another new directory (i.e. - `.../newdir/newdir2`), execute `mkdir` with the `-p` flag. - - -To move or rename a file or directory, type `mv` followed by the path to the file or directory, and then the new path. - -```zsh -mv /home/user/Documents/newfile.txt /home/user/Documents/newfile2.txt -``` - -To copy a file and optionally rename the copy, type `cp` followed by the path of the file, and then the path to the new file. - -```zsh -cp file newfile -``` - - - To copy a directory, type `cp` with the `-r` (recursive) flag. - - -For both the `cp` and `mv` commands, you may move multiple files into a directory at once. The target directory must exist. - -```zsh -mv file file2 dir dir2 /path/to/target/dir/ -cp -r file file2 dir dir2 /path/to/target/dir/ -``` - -To know more about each command, open the manual by typing `man` followed by what you want to learn about - -``` -man sudo -``` - -This will open `less`, an app that allows you to read through long lines of text as a scrollable page. - -To exit `less` press `q`. - -Most commands will also have a `-h` or `--help` flag, which tells you more about the command. - -## The Pipeline - -Linux offers a way for inter-process communication through pipes. - -The pipeline you to transfer data from one process to another, and is used to execute commands in parallel. - -```zsh -echo "Hello World" | wc -w -``` - -This calls the `wc` (word count) command, which counts the number of words in the text. Then pipes the output of `echo` to it, which then outputs the number of words. This is a very simple example of a pipeline. - -A named pipe is created by using `>` instead of `|`. - -```zsh -echo "Hello World" > pipe.txt -``` - -This pipes the output of `echo` to the named pipe `pipe.txt`, which is now a file. - -## Executing a File - -To execute a program, you must first make sure that the file is executable. This is done by using the `chmod` command. - -```bash -chmod +x /path/to/exec -``` - -Then you can execute the file by directly pointing to it. - -```bash -/path/to/exec -``` - -For files in your current folder, you must use `./` before the file name. - -```bash -./exec -``` - - - Executables are often moved into a directories listed in the `$PATH` variable - (run `echo $PATH`). The filenames of executables in `$PATH` can be executed as - commands (i.e. `custom-command` will run `/usr/local/bin/custom-command`) - - -#### [← Back To: Software and Package Management](/en/linux/software) - -#### [Next Up: Security and Privacy →](/en/linux/securityprivacy) diff --git a/src/content/docs/zh_hant/linux/software.mdx b/src/content/docs/zh_hant/linux/software.mdx deleted file mode 100644 index 77a1f005..00000000 --- a/src/content/docs/zh_hant/linux/software.mdx +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Software and Package Management -description: "How to manage software on Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -There are many different ways to install software on Linux. - -## The Package Manager - -Unlike Windows, most software for Ultramarine Linux is stored in online collections of software called repositories. You can browse and install software (packages) from these repositories using something called a package manager. - -### Flatpaks - -Flatpak is the primary package manager for regular apps. It installs applications in a sandbox, keeping them separate from anything they don't need to access. - -Flatpaks can be installed from **Software** on Budgie and GNOME, **AppCenter** on Pantheon, and **Discover** on KDE. - -You can browse the available software in one of these app stores, or on the [Flathub website](https://flathub.org/). - -Despite most applications being installed from Flatpak, some apps may not work properly, or may not be available at all. The following sections will help with software in other formats. - -### Software Downloaded from the Internet - -Sometimes, the software you need may come as a package file downloaded from the internet. - -#### RPM Packages - -To install RPMs, simply double-click it. - -You can also open a Terminal and run: - -``` -sudo dnf localinstall /path/to/package.rpm -``` - -(Replacing `/path/to/package.rpm` with the real path, it's usually `~/Downloads/package.rpm`) - -#### AppImages - -1. Install AppImage Launcher from **Software** or **Discover**. On Pantheon Edition, run - -``` -sudo dnf install appimagelauncher -``` - -2. Double-click the file and you're done! - -We recommend avoiding AppImages as they are not automatically updated and may have compatibility issues. - -### Snap - -Snap is a package manager made by Canonical for Ubuntu. It contains a large amount of proprietary applications that you may not be able to find elsewhere. - - - -Snap may cause your system to run noticeably slower. - - - -To get started, install Snap. - -```bash -sudo dnf install snapd -``` - -Then, verify snap is working - -```bash -sudo snap install helloworld -helloworld -``` - - - -Snap packages load slowly and may not work at all on editions other than GNOME. We recommend avoiding Snaps. - - - -### DNF - -Ultramarine Linux uses the DNF package manager. While this package manager primarily handles system software (like the kernel, and your desktop environment) it can install user apps as well. - -```bash -sudo dnf install steam # Install Steam -``` - -You can also install groups of packages, like full desktop environments or a suite of tools for music production, using the `dnf groupinstall` command. - -```bash -sudo dnf groupinstall "Audio Production" # installs multiple packages at once, in this case a suite of music/audio production tools -``` - -For a full list of available groups, run `sudo dnf group list` - -#### [← Back To: Permissions](/en/linux/permissions) - -#### [Next Up: The Shell →](/en/linux/shell) diff --git a/src/content/docs/zh_hant/release/errata.mdx b/src/content/docs/zh_hant/release/errata.mdx deleted file mode 100644 index 97cb2da1..00000000 --- a/src/content/docs/zh_hant/release/errata.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Errata -description: "Various known bugs and other issues in Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -This page contains bugs that we can't solve or that are easily solvable by users. We remove them as they are resolved. - -Releases older than 37 will not have their eratta modified as we do not have records of fixing the issues. - -## All Versions - -- Installer scripts may not work - -This is solved by distributors including Ultramarine as a synonym to Fedora. - -### Ultramarine Linux 40 - -### Xfce Edition - -- Login screen wallpaper is Fedora's - - This is a small issue with our tweaks not being applied. We should have this fixed in an update soon. - -### Pantheon Edition - -- Pantheon is upgraded but login does not work - - We are still debating Pantheon's fate, but as of now Pantheon is not included in Ultramarine 40 and probably will stay that way. - -## Ultramarine Linux 39 - -### Pre-release Images - -- We accidentally released pre-release versions of Ultramarine. - - A small handful of users and reviewers got their hands on these images. These images do not reflect the final release, if you used one and it was buggy, we invite you to try the final release, as many of the bugs were fixed. - -### Budgie Edition - -- Budgie wallpapers may be installed instead of Ultramarine wallpapers. - -### Package Groups - -- Misspelled "environment" as "enviroment". - -This is now fixed in Ultramarine 39 and has been backported to 38. - -## Ultramarine Linux 37 (EOL) - -### Pantheon - -- The wallpaper is not set by default. Please set your own wallpaper. - -## Ultramarine 36 (EOL) - -### Applications - -- Firefox Still Includes Fedora Bookmarks - - Firefox depends on fedora-bookmarks. You can simply remove the bookmarks yourself - -### Installer - -- Anaconda Shows a Warning about the System Being Pre-Release - -Anaconda can't find product information about Ultramarine and assumes it's a pre-release version of Fedora or RHEL. - -### Package Management - -- DNF Tells the User There Are No Repositories Available for a COPR Project - -This is due to the fact that the DNF Copr plugin detects the OS ID `/etc/os-release` file, and Ultramarine uses a custom code instead of `fedora`. - -A workaround is to also specify the Fedora buildroot when trying to add a Copr repository. - -### GNOME Edition - -- Pop!\_Shell launcher - -The Pop!\_Shell launcher is not included. This can be fixed by installing the `pop-launcher` package. - -### Cutefish Edition - -- SDDM Displaying Black Screen - -SDDM may display a black screen when starting up. This is a known issue, but there is no known fix as of yet. (Possibly an upstream bug, help needed.) - -### Pantheon Edition - -- Missing Switchboard (Settings) menus - -This was caused by missing Pantheon Switchboard modules, which are not included in Ultramarine Linux due to time constraints. - -You can help us fix this issue by offering to maintain these packages ourselves, or by [contributing to help submit them to upstream Fedora.](https://fedoraproject.org/wiki/SIGs/Pantheon) - -### OSTree Edition - -- Missing Tweaks from the Standard Releases - -As the standard release includes a script to modify the system, due to the nature of OSTree, we are unable to include these tweaks unless we rebuild all major packages with our custom patches. - -You can help us fix this issue by contributing and maintaining these packages yourself. diff --git a/src/content/docs/zh_hant/release/upgrade-to-ultramarine-40.mdx b/src/content/docs/zh_hant/release/upgrade-to-ultramarine-40.mdx deleted file mode 100644 index 0da11d0d..00000000 --- a/src/content/docs/zh_hant/release/upgrade-to-ultramarine-40.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Upgrade to Ultramarine 40 -description: "A temporary notice for the 39 to 40 upgrade path." ---- - -This page is a temporary notice for upgrading Ultramarine 39 to 40. -For this release cycle, we've decided to release an upgrade path before the full distrbution release. -This should let existing users enjoy the new set of packages in 40 sooner. -A full blog post detailing changes will be published for the full distrbution release. - -## Flagship, GNOME, and KDE Editions - -You can use the editon's graphical app store to upgrade your system to 40. -On Flagship and GNOME, this will be GNOME Software, while on KDE, this will be Plasma Discover. - -You might need to update your system normally before the upgrade to 40 shows up in the app store. - -## Pantheon Edition - -The Pantheon upgrade path isn't ready yet. -While all of the required packages are in the UM and Terra repositories, the Pantheon desktop enviroment is broken for a variety of reasons. -We are currently working with upstream and other partners to resolve this, but it's possible that Pantheon may be skipped, deprecated, or defered until mid-cycle. -If you are interested in contributing to Ultramarine Pantheon, please join [our chats](en/community/community) and let us know! - -## Command line - -In case the above doesn't work, you can always upgrade through the command line, using `dnf system-upgrade`. - -Run the following and follow the prompts: - -```sh -sudo dnf upgrade --refresh -sudo dnf install dnf-plugin-system-upgrade -sudo dnf system-upgrade download --releasever=40 -sudo dnf system-upgrade reboot -``` diff --git a/src/content/docs/zh_hant/usage/gaming.mdx b/src/content/docs/zh_hant/usage/gaming.mdx deleted file mode 100644 index 97cb1f12..00000000 --- a/src/content/docs/zh_hant/usage/gaming.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Gaming on Ultramarine -description: "Extra instructions for gaming on Ultramarine Linux." ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Sometimes, you may want some downtime from work and have fun. While Ultramarine Linux is not primarily optimized for gaming, it is still a great platform for gaming, as it already has some performance optimizations applied out of the box, and can be further optimized with some tweaks. - -# Performance - -# Gaming Platforms - -## Steam - -[Steam](https://steampowered.com) is a great PC gaming platform, and it has native support for Linux. Many game publishers publish their games on Steam, and some even natively support Linux. Steam offers discounts for games published on their platform, and also has a built-in overlay for chatting with friends, taking screenshots, and more. - -Steam runs on the Chromium Embedded Framework (CEF), which essentially means that most of the UI is created using web technologies. - -You can install Steam in 2 ways: - -1. Install the `steam` package from the RPM Fusion repository. (system-wide) -2. Install the Steam flatpak from Flathub. (user-only) - -The first option is recommended, as it has better system integration. However, the second option is also available if you are running Ultramarine OSTree/Kanopy/CoreOS, or if you want to keep Steam isolated from the rest of the system. - -### Proton - -If your game does not support Linux, or the Linux version happens to be inferior to the Windows version, you can use Steam's Proton compatibility layer to run Windows games on Linux. Proton is based on Wine, and it is developed by Valve. - -If the game you're trying to play doesn't work on Proton, check back in a week, it's quite possible that it will work after Proton updates or active work from Valve. - -### Slow Download Speeds - -There have been recent reports of slow download speeds on Steam due to issues with the Steam client and HTTP/2, see the relevant [Steam for Linux issue](https://github.com/ValveSoftware/steam-for-linux/issues/10248) for more information. - -If you are experiencing slow download speeds and aren't sure why, you can try disabling HTTP/2 in Steam by adding the following lines to the `~/.steam/steam/steam_dev.cfg` file and restarting steam: - -``` -@nClientDownloadEnableHTTP2PlatformLinux 0 -@fDownloadRatelmprovement ToAddAnother Connection 1.0 -``` - -### Apex Legends - -Apex Legends can run on Linux using Steam's Proton compatibility layer, plus the Easy Anti-Cheat runtime. The game has Linux support for anti-cheat, but the game binaries are Windows only. - -## Heroic Games Launcher - -The Heroic Games Launcher is a native Linux client for the Epic Games Store and GOG Galaxy. It supports downloading and installing native Linux games from GOG, and running Windows-only games from both GOG and Epic Games Store using Wine/Proton. - -## Lutris - -Lutris is a game launcher for Linux. It supports installing and managing your game library from various sources, including Steam, GOG, EA Origin, and its own community-provided installers. It also supports running Windows-only games using Wine/Proton. - -### League of Legends - -League of Legends is a popular MOBA game developed by Riot Games. It is available on Windows, macOS, and Android. It is not officially supported on Linux, but it can be run using a special build of Wine by GloriousEggroll. - -### EA Desktop - -Games that use EA's Origin platform or EA Desktop can be run using Lutris. You can install the EA Desktop client using the Lutris installer, and then install your games from there. - -### Epic Games Store - -Please refer to the [Heroic Games Launcher](#heroic-games-launcher) section. - -## Bottles - -Bottles is a tool for managing Wine prefixes. It is similar to Lutris, but is more focused on creating and managing Wine prefixes for multiple applications rather than creating each prefix for a single game or application. - -Installing Bottles is only supported as a Flatpak. Any other version of bottles is not supported by the Ultramarine Linux Team. - -### Overwatch - -Overwatch is a popular team-based FPS game developed by Blizzard Entertainment. It is available on Windows, macOS, PlayStation 4, Xbox One, and Nintendo Switch. It is not officially supported on Linux, but it can be run using Wine/Proton. - -Overwatch 2 can be run in a Bottles prefix, simply install the game using the Blizzard Battle.net app and run it from the Bottles launcher. - -Overwatch 2 is now also on Steam, and can be run using Proton. - -### Valorant - -Valorant is a popular FPS game developed by Riot Games. It is available on Windows. It will not run on Linux, as it uses a kernel-level anti-cheat software that is not compatible with Wine/Proton. diff --git a/src/content/docs/zh_hant/usage/l10n.mdx b/src/content/docs/zh_hant/usage/l10n.mdx deleted file mode 100644 index 9f31f978..00000000 --- a/src/content/docs/zh_hant/usage/l10n.mdx +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: Localization, Internationalization and Multilingualization -description: How to make your Linux system support other languages and even improve the support ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Localization (l10n) and internationalization (i18n) support in Ultramarine Linux is crucial as -half of the project team speaks something other than English natively. This page contains details on -how i18n works and how it can be set up on Ultramarine. - -# Fonts - -Ultramarine should come with fonts for most if not all languages by default. Fonts for CJKV, Thai, -Indic languages are installed out of the box. If you find any glyphs supported by Unicode not -rendered correctly, [file a bug report]. - -## Font Priorities - -Chinese users might experience issues where Japanese fonts are preferred over Chinese ones simply -because the locale code `ja_JP` is before `zh_*` when sorted alphabetically. To solve this issue, -edit `~/.config/fontconfig/fonts.conf` (or `/etc/fonts/local.conf` for global changes): - -```xml - - - - - sans-serif - - Noto Sans CJK TW - Noto Sans - HanaMinA - - - - serif - - Noto Serif CJK TW - Noto Serif - HanaMinA - - - -``` - -# Inputting in another language - -You may change your key maps / keyboard layout in the settings applet. Refer to documentations for -your chosen Desktop Environment (DE) or Window Manager (WM) for more details. - -## IMFs, IMEs and IMs - -Special tools are required to type in CJKV (Chinese, Japanese, Korean and Vietnamese) and other -specific languages. - -**Input Method Frameworks (IMFs)** are software that enable users to type in numerous different input -methods. They provide a unified experience and user interface between IMEs and the DE/WM. - -**Input Method Editors (IMEs)** are software that convert user inputs into actual texts in different -languages. - -**Input Methods (IMs)** refer to the actual conversion between the input keys and the output text. IMs -are not actual software; there must be an IME that intercepts the inputted keys and map them into -output texts, where the mapping is specified by the IM. - -As an example, a Japanese KDE user would install `fcitx5-mozc` in order to type Japanese. In this -case, Fcitx5 is the IMF, Mozc is the IME, and the IM can be Romaji or Kana input depending on the -user's preference. - -A Cantonese GNOME user from Hong Kong learning Korean would install `ibus-rime` with Jyutping and -Cangjie support alongside `ibus-hangul` for Korean support. Here, IBus is the IMF, Rime IME provides -support for the Jyutping IM and Cangjie IM, while libhangul IME provides support for the Hangul IM. - -In most typical cases, only 1 IMF is installed in a system. However, multilingual users may choose -to install multiple IMEs so that they can type in multiple languages. - -## Fcitx5 vs IBus - -**IBus** (Intelligent Input Bus) is an IMF usually used in GTK-based desktop environments. If you -are using GNOME/Budgie, you most likely will choose IBus over Fcitx5 due to GNOME Desktop's tight -integration with IBus. Even though IBus's initial release was back in August 2008, releases are -still rather frequent and the project is still being maintained. - -**Fcitx5** is a newer IMF implementation and provides support for many different languages with a -slim core extensible with different addons and IMEs. It is the successor to Fcitx. If you are using -DEs that are not GTK-based (such as KDE Plasma which uses Qt) or any WMs, you should choose Fcitx5. - -There are no strict rules on which one to choose, you can install Fcitx5 even though you use GNOME, -and you can also install IBus on a KDE system. Things come down to personal preferences. - - - IBus will not work inside Window Managers. - - -## Setting up Fcitx5 on KDE - -1. Install your chosen IMEs (see the table below) alongside `kcm-fcitx5` and `fcitx5-configtool`. - - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. - -2. Enable Fcitx 5: - - - On Wayland (default), go to _Settings > Input Devices > Virtual Keyboard_, and select _Fcitx 5_. - - If Fcitx 5 does not work even after a reboot, try running `im-chooser` and select _Fcitx 5_. - - On X11, install `fcitx5-autostart`. - - If Fcitx 5 does not work even after a reboot, try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=fcitx - QT_IM_MODULE=fcitx - ``` - -3. Head to _Settings > Regional Settings > Input Method_, then start configuring Fcitx 5. - -## Setting up Fcitx5 on other DEs/WMs - -1. Install your chosen IMEs (see the table below) alongside `fcitx5-configtool`, `fcitx5-autostart`. - - Install `fcitx5-qt` and `fcitx5-gtk` for Qt/GTK support. -2. Fcitx 5 should be enabled via the autostart package. If not, - - - try running `im-chooser` and select _Fcitx 5_. - - try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=fcitx - QT_IM_MODULE=fcitx - ``` - -3. When Fcitx 5 is running, right click on the new "en" icon on the system tray > Settings. -4. Start configuring Fcitx5. - -## Setting up IBus - -1. Install your chosen IMEs (see the table below). -2. On GNOME, Budgie, and similar DEs, go into Settings > Keyboard. -3. On other DEs, run `ibus-setup`. -4. If IBus does not work correctly, - - try running `im-chooser` and select _IBus_. - - try setting the following in `/etc/environment`: - ``` - GTK_IM_MODULE=ibus - QT_IM_MODULE=ibus - ``` - -## List of IMEs and IMs - -Credits to Arch Wiki contributors for a [complete list of IMs]. The table is filtered and amended -such that it better represents Ultramarine's support on different IMs: - -``` - ┌─────────────────────┬─────────────────────┐ - ↓IM/IME IMF→ │ Fcitx5 │ IBus │ -┌──────────────┴─────────────────────┴─────────────────────┤ -│ CHINESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Rime │ fcitx5-rime │ ibus-rime │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Pinyin │fcitx5-chinese-addons│ ibus-pinyin │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Zhuyin │ fcitx5-chewing │ ibus-chewing │ -│ Libzhuyin │ fcitx5-zhuyin │ ibus-libzhuyin │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Cangjie │ │ ibus-table-chinese- │ -│ Sucheng/Quick│ fcitx5-table-extra⁵ │ {cangjie,quick,scj} │ -│ SmartCangjie │ (and More…) │ /ibus-table-chinese │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Haifeng Wubi │ fcitx5-table-extra⁵ │ ibus-table-chinese- │ -│ Jidian Wubi │ (and More…) │wubi-{haifeng,jidian}│ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Others │ fcitx5-table-extra? │ ibus-table-chinese? │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ JAPANESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Mozc │ fcitx5-mozc │ ibus-mozc │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Anthy¹ │ fcitx5-anthy │ ibus-anthy │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ SKK² │ fcitx5-skk │ ibus-skk │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ KKC³ │ fcitx5-kkc │ ibus-kkc │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ KOREAN │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Libhangul │ fcitx5-hangul │ ibus-hangul │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ VIETNAMESE │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Unikey │ fcitx5-unikey │ ibus-unikey │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ ViQR │ fcitx5-m17n │ ibus-table-tv │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ INDIC │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ m17n │ fcitx5-m17n │ ibus-m17n │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ OpenBangla │ fcitx5-openbangla │ ibus-openbangla │ -├──────────────┼─────────────────────┼─────────────────────┤ -│Sayura Sinhara│ fcitx5-sayura │ ibus-sayura │ -├──────────────┴─────────────────────┴─────────────────────┤ -│ OTHERS │ -├──────────────┬─────────────────────┬─────────────────────┤ -│ Thai │ fcitx5-libthai │ ibus-table-tv │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Math Symbols │ Compose Key⁴? │ibus-table-mathwriter│ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Completion │ *builtin* │ ibus-typing-booster │ -├──────────────┼─────────────────────┼─────────────────────┤ -│ Everything │ fcitx5-m17n │ ibus-m17n │ -└──────────────┴─────────────────────┴─────────────────────┘ -``` - -**Notes**: - -1. Anthy (the IM, not IME) is unmaintained, Mozc is usually preferred. -2. https://github.com/ueno/libskk -3. https://github.com/ueno/libkkc -4. See [#Compose Key](#compose-key). There is also LaTeX support in `fcitx5-m17n`. -5. See below for more IMs supported by `fcitx5-table-extra`. - -### List of IMs supported by `fcitx5-table-extra` - -- boshiamy -- cangjie-large -- cangjie3 -- cangjie5 -- cantonese -- cantonhk -- easy-large -- jyutping-table -- quick-classic -- quick3 -- quick5 -- scj6 -- stroke5 -- t9 -- wu -- wubi-large -- wubi98-large -- wubi98-pinyin -- wubi98-single -- wubi98 -- zhengma-large -- zhengma-pinyin -- zhengma - -### List of packages for `ibus-table*` - -- `ibus-table-code`: Ibus-Tables for Latex, CNS11643 & Emoticons -- `ibus-table-cyrillic`: Ibus-Tables for Cyrillic -- `ibus-table-extraphrase`: Extra phrase for ibus-table -- `ibus-table-latin`: Ibus-Tables for Latin -- `ibus-table-mathwriter`: Ibus-Tables for Unicode mathematics symbols -- `ibus-table-mongol`: Ibus-Tables for Mongol Script -- `ibus-table-others`: Various tables for IBus-Table -- `ibus-table-translit`: Ibus-Tables for Russian Translit -- `ibus-table-tv`: Ibus-Tables for Thai and Viqr (Vietnamese) -- `ibus-table-chinese`: Chinese input tables for IBus -- `ibus-table-chinese-array`: Array input methods -- `ibus-table-chinese-cangjie`: Cangjie based input methods -- `ibus-table-chinese-cantonese`: Cantonese input methods -- `ibus-table-chinese-cantonyale`: Cantonese input method based on yale romanization -- `ibus-table-chinese-easy`: Easy input method -- `ibus-table-chinese-erbi`: Erbi input method -- `ibus-table-chinese-quick`: Quick-to-learn input methods -- `ibus-table-chinese-scj`: Smart Cangjie -- `ibus-table-chinese-stroke5`: Stroke 5 input method -- `ibus-table-chinese-wu`: Wu pronunciation input method -- `ibus-table-chinese-wubi-haifeng`: Haifeng Wubi input method -- `ibus-table-chinese-wubi-jidian`: Jidian Wubi 86 input method, JiShuang 6.0 -- `ibus-table-chinese-yong`: YongMa input method - -### Rime - -[Rime](https://rime.im/) is an input method engine / IME for typing Chinese. It supports a wide -range of IMs and is highly customizable. - -You may refer to [ArchWiki](https://wiki.archlinux.org/title/Rime) regarding how Rime could be -configured. Note that Fedora/Ultramrine does not provide `rime-*` packages in our repositories. -You will need to use [plum](https://github.com/rime/plum) (aka. `rime-install`) to install schemas. -`rime-install` defaults to `ibus`; append `rime_frontend=fcitx-rime` to the front of the command if -you are using Fcitx5: - -``` -rime_frontend=fcitx-rime bash rime-install rime-aca/rime-cangjie6 -``` - -## Compose Key - -See [Compose Key on Wikipedia](https://en.wikipedia.org/wiki/Compose_key) and -[on ArchWiki](https://wiki.archlinux.org/title/Compose_key). - -# Translations - -Users that speak less popular languages might face issues where their system shows text in English -even though the language settings are configured properly. Do not report this issue to us. This is -due to lack of translation efforts from upstream (either the DE/WM or the app in concern). You may -help by visiting the translation platform provided by upstream and be a translator. Your -contributions would improve the entire Linux ecosystem experience for minorities. - -## Ultramarine Components - -If projects / software provided by Ultramarine (such as the Readymade installer) are untranslated -in your language, or you would like to improve the translations, please visit -[our Weblate translation platform](https://weblate.fyralabs.com/). - -There are cases where your language is not shown in the list of languages. This might be because no -one has made efforts on translating the software, or it is not supported by the i18n libraries used -by the software. For example, there is no Cantonese language option in Readymade because the i18n -library provided by GNOME Desktop does not support it. In this case, you should report this issue -to the upstream library. If you have a hard time determining where to report, you may join one of -our communities and reach out. - -[file a bug report]: https://github.com/Ultramarine-Linux/ultramarine/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=%5BBUG%5D+Issue+Report -[complete list of IMs]: https://wiki.archlinux.org/title/Input_method#List_of_available_input_method_editors diff --git a/src/content/docs/zh_hant/usage/um40-dnf5.mdx b/src/content/docs/zh_hant/usage/um40-dnf5.mdx deleted file mode 100644 index 0ec69a61..00000000 --- a/src/content/docs/zh_hant/usage/um40-dnf5.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Dnf5 Is The Default Package Manager In Ultramarine Linux 40 -description: dnf5 is the default package manager in Ultramarine Linux 40 ---- - -import Alert from "../../../../components/Docs/Alert.astro"; - -Starting with UM40, `dnf5` will replace `dnf-3` as the default package manager. -This is done via the `dnf5-default-package-manager` package provided by the UM40 repositories. - -## Technical details - -The `dnf5-default-package-manager` package has a `%triggerin` script for `dnf` and `yum`. When these -2 packages get installed/updated, the script will be executed, which will replace `/usr/bin/dnf` and -`/usr/bin/yum` symlinks to point to `/usr/bin/dnf5` instead of `/usr/bin/dnf-3`. - -This change has been proposed on upstream Fedora, but has been delayed to Fedora 41. However, we've -decided this change should be worth a try on UM40. - -## Effects - -By using `dnf5`, users will be able to install, remove and upgrade packages much faster. End-users -shouldn't need to do anything to adapt to this change. - -Since `dnf5` isn't bug-for-bug compatible with `dnf-3`, programs that rely on `dnf-3` should use the -`dnf-3` or `dnf4` command to use the older version of `dnf`. If you are facing compatiblility issues -with some apps that rely on the `dnf` symlink instead of the actual `/usr/bin/dnf-3` binary, you are -advised to report this bug to upstreams (i.e. the apps in concern), not `dnf5` or Ultramarine. - -## FAQ - -### Why `dnf5`? - -- `dnf5` provides better performance over `dnf-3` because it's written in C++ instead of Python. -- We hope this change will push apps in the Fedora neighbourhood to switch to `dnf5` and at the same - time discover apps that are poorly maintained/written and rely on `dnf`/`dnf-3`. - -### Does UM40 remove `dnf`? - -- We do not remove `dnf-3`. We only replace the symlinks for `dnf` and `yum` to point to `dnf5`. - -### Wouldn't that break compatiblility? - -- If changing only 2 symlinks actually breaks your workflows, either your workflows are poorly made, - or there are some apps you use that rely on the 2 symlinks, which evinces that those apps are - unfortunately poorly made. Change your workflows to adapt to `dnf5` or replace `dnf` with the - actual `dnf-3` binary; or in the latter case, report the issue to the upstream apps in concern. - -- We expect `dnf5` in the future to be supposedly much more compatible with `dnf-3`. Upstream Fedora - has been working hard on making `dnf5` the replacement for `dnf-3`. There are works in progress to - adapt GNOME software for `dnf5`, and to make `dnf5` much more feature-complete. - -### But some features are missing in `dnf5`! - -- There are efforts on making `dnf5` more feature-complete compared with `dnf-3`. You may help speed - this up by [contributing to upstream](https://github.com/rpm-software-management/dnf5/). diff --git a/src/content/docs/zh_hant/welcome.mdx b/src/content/docs/zh_hant/welcome.mdx deleted file mode 100644 index 8782cdf3..00000000 --- a/src/content/docs/zh_hant/welcome.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: 歡迎 -description: "This wiki is meant to be the extended documentation for both end users and developers, so it is separated in those two categories." ---- - -歡迎來臨 Ultramarine Wiki!這裏可以令使用者更快有效地使用 Ultramarine Linux。 - -本 Wiki 現正翻譯至中文。若果有興趣成為我們的一份子,請至[本 Wiki 的 GitHub 原碼庫](https://github.com/Ultramarine-Linux/wiki)。 - -開發者及安裝包製作者的檔案位於 [Fyra Developer](https://developer.fyralabs.com) (英)。 -若想開始為 Ultramarine Linux 社羣貢獻,請移玉步至[貢獻部分](/zh_hant/contributing/contributorguide)。 - -若想安裝 Ultramarine Linux,請閱讀:[取得 Ultramarine](/zh_hant/installation/getting)。 - -## 主要總準則 - -Ultramarine Linux 由 Korora Linux 啟發而成,目標是成為一個對不同的技術經驗的人也「總之行 (just works)」的作業系統。 - -為了達成這個目標,我們會遵循下列價值觀: - -### 實用 - -Fedora 比較遵循意識形態 (ideology) ——他們提供一個基本上沒有專利軟件的作業系統。 -相比之下,我們遵循「最少阻力」的運作模式——只要能夠改善使用者體驗,不論是否專利軟件,我們都會願意提供它們,讓使用者一開箱就可以享用。 - -### 創新 - -我們相信 Linux 近期的發展能夠大大改善使用者及開發者體驗:Flatpak、xdg-portals 等科技能讓開發者更容易並更快地提供更好的使用者體驗。 -上流的發展能改善使用者體驗的同時,下流我們的發展,包括主題顏色、Chromebook 支援等,能改善整體 Linux 的生態——這不正是雙贏嘛! - -### 使用者體驗 - -雖然對高階使用者來說,改幾個設定和安裝幾個第三者軟件庫的程式可能易如反掌; -但是對 Linux 甚至 Fedora 的新手來說可能就需要好幾個小時才能找到怎麼做。 -Ultramarine 能讓新和舊的使用者快速地準備一個新系統。 - -## 計劃功能 - -- 歡迎程式 (OOBE) -- 像 YaST 的系統設定程式 - -## 常見問題 - -### 遷徙腳本 (migration script) 具體做甚麼? - -它安裝 RPMFusion、Terra、我們的 PGP 證明鍵、並安裝 Ultramarine Linux 的系統基本組件,取代 Fedora 本身的 `release` 軟件包。 - -為了避免令使用者的系統多了不會用到的軟件,它並不會安裝 Ultramarine Linux 基本組件以外的軟件包。 - -遷徙後,您將會得到我們最新的功能! - -### 這不就是 Fedora 加上了 RPMFusion 嘛,又有甚麼存在價值! - -Ultramarine Linux 是對 Fedora 的法律限制下的沮喪,所衍生出來的產物。 -由於 Fedora (以及 Red Hat) 是一個美國實實,在美國的專利權制度下他們並不能提供一些軟件。 -相比之下,基於泰國的 Ultramarine 並沒有這些版權問題。 - -本團隊旨在令 Fedora 有更好的體驗:使用者可以在 FlatHub、RPMFusion 或 Terra 裏維護任何軟件。 - -我們建議使用者貢獻至本計劃,想了解更多請參考[貢獻指南](/zh_hant/contributing/contributorguide)。 - -### 這不就是 Fedora 加上了幾個新桌面環境嘛! - -不,我們還會在桌面環境上改善系統的使用者體驗,令 Ultramarine 無論是新手還是進階使用者都能用得上手。 - -### Ultramarine 會收集我的資料嗎? - -直至現在,使用者被收集的資料只限於從 Terra 以及 Ultramarine 的軟件庫下載安裝包的次數;這使用了 [DNF Counting](https://docs.fedoraproject.org/en-US/infra/sysadmin_guide/dnf-counting/)。 -這個資料並不會與使用者的電腦掛鉤。 - -Fyra Labs (Ultramarine 背後的團體) 並不會在沒有使用者的同意下收集任何掛鉤個人的資料。 - -### Is Ultramarine semi-rolling? - -**No**. Ultramarine and Fedora are not semi-rolling or rolling. Instead, they use a stable release scheme. -Updates with breaking changes are rolled out only for every stable release version. Minor updates / point updates are guaranteed to be backwards-compatible, i.e. system components in Ultramarine are updated if and only if they do not break compatibility. - -However, Ultramarine Linux includes Terra, RPM Fusion and Flathub. - -- Terra is an RPM repository provided by Fyra Labs, and it mainly uses a rolling release scheme. -- RPM Fusion is another (very popular) third party repository for Fedora. It uses a stable release scheme. -- Flathub is a cross-distro Flatpak repository. Updates in this repository have nothing to do with Fedora/Ultramarine's release cycles. Strictly speaking, packages in Flathub are rolling because they are updated once upstream releases a version. - -### If some packages are updated mid-release, doesn't that mean Ultramarine is unstable/insecure compared to, e.g. Debian? - -**No**. That's an incorrect approach to view if a distribution is secure/stable or not. - -- Packages in Fedora/Ultramarine are updated mid-release, but those updates **only include non-breaking changes**. Your computer has virtually a near-zero chance of breaking mid-release due to an update. -- Undeniably, Ultramarine and Fedora has much more frequent updates compared to distros like Debian, and to some extent, they might be more unstable. However, Fedora/Ultramarine's release cycle makes it so that the operating system is still stable enough for normal use. Millions of Fedora devices across the world run fine without breaking, which demonstrate Fedora's high stability. Debian's release cycle is also arguably too slow and can cause more hassles than necessary. -- Some distros choose to take stable release cycles to an extreme. These distros are designed for servers that will stay up for years by delaying updates for months or even a few years. PC users might miss out a lot by using these distros, including new features, bug fixes, security patches, etc. Without the proper knowledge and management, these systems could be even more insecure than Fedora/Ultramarine. - -### Why Ultramarine (instead of other distros) - -- Performance - - Fedora (the distro Ultramarine is based on) has some of the best IO performance over other distros. - - BTRFS is the default file system, a relatively performant file system with features like snapshots. You can backup your files in less than a second (unlike other file systems like ext4). - - We include lightweight desktop environments such as Budgie (Flagship Edition) and XFCE. They look great, work well and are snappy. -- Privacy - - We don't track/collect your private/personal data. - - We don't even know how many Ultramarine devices there are (unlike some companies). -- Security - - Security updates are provided quickly (unlike some other distros). - - SELinux is active by default. -- Customisations - - There are multiple desktop environments for you to choose from. - - We have applets installed out of the box that help you with further desktop customizations. -- Usability - - You never need to touch the command line. - - If there are cases that require the command line, and those situations might arise to other normal users too, you should [report this bug](https://github.com/Ultramarine-Linux/ultramarine). - - Ultramarine has sane defaults. - - Popular programs that you probably need are installed by default, including LibreOffice, Firefox, drivers, etc. - - We include repositories that provide popular software. - - There are many more apps you can installed from an app store. They are verified carefully by dedicated teams. - - The Fedora and RPM Fusion repositories are used and trusted by millions. - - Terra is reviewed by Fyra Labs and the Ultramarine Project. You can also [take a look at our security policy](https://github.com/terrapkg/packages/blob/f39/SECURITY.md). - - Flathub is used by users across the entire Linux/BSD ecosystem. If you install apps from an app store, you are most likely installing apps from Flathub, which are isolated from your system environment when run, making attacks less likely to succeed. - -### Why Ultramarine (instead of Windows) - -- Performance - - Windows bloats your computer with many different potentially unwanted programs that slow down your computer. Ultramarine does not. - - Ultramarine provides a few lightweight desktop environments (namely Budgie/Flagship and XFCE), which run faster and provide a snappier experience. - - Ultramarine uses newer technologies that are not available on Windows because of backwards compatibility. These technologies brings better performance. - - For example, task schedulers, file systems, shells, etc. - - Most modern servers (including giant web servers) use Linux simply because it's much faster. -- Privacy - - We do not collect/track your private data ever because that's a waste of storage. - - We don't even know how many Ultramarine devices there are (unlike some companies). - - When you setup Windows, you need to accept a very long license. Well, we don't even have a license agreement page in our installer. - - Ultramarine is open source. Anyone can check if we track/collect your data by reviewing the source code. We don't. -- Security - - Security updates are much quicker than Windows. - - Updates don't require reboots. - - It's much more unlikely for malware, viruses, etc. to target Linux due to its current low popularity. - - Our open source model makes it very easy for anyone to spot bugs/vulnerabilities and fix them quicker. -- Stability - - Ultramarine uses a stable release cycle. Updates will not break your computer. - - When there is a chance a system upgrade could break your computer, we warn you about it. - - We advise people to contact support to check if the upgrade could actually break the system. - - Our support team can help you solve any potential issues while performing a system upgrade. - - And most importantly, you could just choose not to upgrade at all! The choice is yours. - - Millions of IoT devices use Linux. If something breaks, the entire Internet collapses. If the Internet trusts Linux's stability, you should too. -- Customizations and Usability - - There are multiple desktop environments for you to choose from. Some of them are lightweight, some of them are fancy. - - Ultramarine provides many ways over how you can customize your entire desktop experience. You have full control over your computer. - - We never hide choices from you — in fact, we make it easier for you. - - If you find some specific customizations hard to perform on Ultramarine, it's a design flaw and you should send your feedback to us (e.g. via [GitHub](https://github.com/Ultramarine-Linux/ultramarine)). - - We support reasonably old and new hardware, and we provide many tools for you to setup a performant, personalized system on your computer. - - Default settings on Ultramarine makes it so that you can start using your computer as soon as possible. - - Ultramarine comes with an app store. You can install programs reviewed by dedicated teams very easily. - - If you want some programs to be included in the app stores, you should send us feedback. - -## Core Team - -- 🇹🇭 Pornpipat "Cappy" Popum - Chief Information Officer, Project Lead, Release Engineer -- 🇩🇪 Trobonox - Documentation, Web Developer, UI/UX Designer -- 🇮🇩 Mo - Low-level developer -- 🇵🇱 Toru Ishikawa - Infrastructure support -- 🇭🇰 Mado - VP of DevOps, Package Maintainer - -[Meet the team →](https://fyralabs.com/about/#Meet:~:text=benefit%20of%20all.-,Meet%20the%20Team) diff --git a/src/env.d.ts b/src/env.d.ts deleted file mode 100644 index b039e209..00000000 --- a/src/env.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// -/// - -interface ImportMetaEnv { - readonly GITHUB_TOKEN: string | undefined; -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} diff --git a/src/languages.ts b/src/languages.ts deleted file mode 100644 index 1a45ceee..00000000 --- a/src/languages.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { KNOWN_LANGUAGES, KNOWN_LANGUAGE_CODES } from "./consts"; -export { KNOWN_LANGUAGES, KNOWN_LANGUAGE_CODES }; - -export const langPathRegex = /\/([a-z_]+)\//; - -export function getLanguageFromURL(pathname: string) { - const langCodeMatch = pathname.match(langPathRegex); - const langCode = langCodeMatch ? langCodeMatch[1] : "en"; - return langCode as (typeof KNOWN_LANGUAGE_CODES)[number]; -} diff --git a/src/layouts/MainLayout.astro b/src/layouts/MainLayout.astro deleted file mode 100644 index 8850c12b..00000000 --- a/src/layouts/MainLayout.astro +++ /dev/null @@ -1,177 +0,0 @@ ---- -import type { MarkdownHeading } from "astro"; -import type { CollectionEntry } from "astro:content"; -import HeadCommon from "../components/HeadCommon.astro"; -import HeadSEO from "../components/HeadSEO.astro"; -import Header from "../components/Header/Header.astro"; -import PageContent from "../components/PageContent/PageContent.astro"; -import LeftSidebar from "../components/LeftSidebar/LeftSidebar.astro"; -import RightSidebar from "../components/RightSidebar/RightSidebar.astro"; -import Footer from "../components/Footer/Footer.astro"; -import { GITHUB_EDIT_URL, SITE } from "../consts"; - -type Props = CollectionEntry<"docs">["data"] & { - headings: MarkdownHeading[]; -}; - -const { headings, ...data } = Astro.props; -const canonicalURL = new URL(Astro.url.pathname, Astro.site); -const currentPage = Astro.url.pathname; -const currentFile = `src/content/docs${currentPage.replace(/\/$/, "")}.mdx`; -const githubEditUrl = `${GITHUB_EDIT_URL}/${currentFile}`; ---- - - - - - - - {`${data.title} | ${SITE.title}`} - - - - - - -
-
- -
- - - -
- -
-