import type { Metadata } from "next" import Image from "next/image" import { getTranslations, getMessages, setRequestLocale } from "next-intl/server" import { Link } from "@/i18n/navigation" import { Terminal, FileCode, ShieldCheck, ExternalLink } from "lucide-react" import { DocHeader } from "@/components/ui/doc-header" import { Callout } from "@/components/ui/callout" import CopyableCode from "@/components/CopyableCode" export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params const t = await getTranslations({ locale, namespace: "docs.installation.meta" }) return { title: t("title"), description: t("description"), openGraph: { title: t("ogTitle"), description: t("ogDescription"), type: "article", url: "https://macrimi.github.io/ProxMenux/docs/installation", }, } } type DuringRow = { package: string; purpose: string } export default async function InstallationPage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params setRequestLocale(locale) const t = await getTranslations({ locale, namespace: "docs.installation" }) const messages = (await getMessages({ locale })) as unknown as { docs: { installation: { during: { rows: DuringRow[] } } } } const duringRows = messages.docs.installation.during.rows const code = (chunks: React.ReactNode) => {chunks} const strong = (chunks: React.ReactNode) => {chunks} const em = (chunks: React.ReactNode) => {chunks} const internalLink = (href: string, className = "text-blue-600 hover:underline") => (chunks: React.ReactNode) => ( {chunks} ) const extlink = (href: string, className = "text-blue-600 hover:underline inline-flex items-center gap-1") => (chunks: React.ReactNode) => ( {chunks} ) return (

{t("stable.heading")}

{t("stable.intro")}

{t("during.heading")}

{t("during.intro")}

{duringRows.map((row, idx) => ( ))}
{t("during.tablePackage")} {t("during.tablePurpose")}
{row.package} {row.purpose}

{t.rich("during.outro", { code, strong })}

{t("during.imageAlt")}

{t("first.heading")}

{t("first.intro")}

{t.rich("first.outro", { postlink: internalLink("/docs/post-install") })}

{t("beta.heading")}

{t.rich("beta.calloutBody", { code })}

{t("beta.intro")}

{t.rich("beta.outro", { code, betalink: internalLink("/docs/settings/beta-program") })}

{t("updating.heading")}

{t.rich("updating.body", { code })}

{t("uninstall.heading")}

{t.rich("uninstall.body", { strong, code, uninstalllink: internalLink("/docs/settings/uninstall-proxmenux"), })}

{t("troubleshoot.heading")}

{t.rich("troubleshoot.virustotalBody", { code, em, issuelink: extlink("https://github.com/MacRimi/ProxMenux/issues/162"), })} {t.rich("troubleshoot.aptBody", { code })} {t.rich("troubleshoot.menuBody", { code })} {t.rich("troubleshoot.stuckBody", { code, strong })} {t.rich("troubleshoot.otherBody", { code, issueslink: extlink("https://github.com/MacRimi/ProxMenux/issues"), })}

{t("next.heading")}

  • {t.rich("next.postInstall", { postlink: internalLink("/docs/post-install") })}
  • {t.rich("next.introduction", { introlink: internalLink("/docs/introduction") })}
  • {t.rich("next.monitor", { monitorlink: internalLink("/docs/settings/proxmenux-monitor") })}

{t("requirements.heading")}

{t.rich("requirements.reqBody", { strong })}
  • {" "} {t.rich("requirements.inspectReview", { sourcelink: extlink( "https://github.com/MacRimi/ProxMenux/blob/main/install_proxmenux.sh", "text-blue-700 hover:underline inline-flex items-center gap-1", ), })}
  • {" "} {t.rich("requirements.inspectCoc", { coclink: extlink( "https://github.com/MacRimi/ProxMenux?tab=coc-ov-file#-2-security--code-responsibility", "text-blue-700 hover:underline inline-flex items-center gap-1", ), })}
) }