import type { Metadata } from "next" import { getTranslations, getMessages, setRequestLocale } from "next-intl/server" import { Plus } from "lucide-react" 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.postInstall.optional.meta" }) return { title: t("title"), description: t("description"), openGraph: { title: t("ogTitle"), description: t("ogDescription"), type: "article", url: "https://macrimi.github.io/ProxMenux/docs/post-install/optional", images: [ { url: "https://macrimi.github.io/ProxMenux/optional-settings-image.png", width: 1200, height: 630, alt: t("ogImageAlt"), }, ], }, twitter: { card: "summary_large_image", title: t("ogTitle"), description: t("ogDescription"), images: ["https://macrimi.github.io/ProxMenux/optional-settings-image.png"], }, } } type Logo = { name: string; alt: string; src: string } function StepNumber({ number }: { number: number }) { return (
{number}
) } export default async function OptionalSettingsPage({ params, }: { params: Promise<{ locale: string }> }) { const { locale } = await params setRequestLocale(locale) const t = await getTranslations({ locale, namespace: "docs.postInstall.optional" }) const messages = (await getMessages({ locale })) as unknown as { docs: { postInstall: { optional: { ceph: { doesItems: string[] } amd: { doesItems: string[] } ha: { doesItems: string[] } testing: { doesItems: string[] } fastfetch: { doesItems: string[]; customItems: string[]; logos: Logo[] } figurine: { doesItems: string[] } } } } } const cephItems = messages.docs.postInstall.optional.ceph.doesItems const amdItems = messages.docs.postInstall.optional.amd.doesItems const haItems = messages.docs.postInstall.optional.ha.doesItems const testingItems = messages.docs.postInstall.optional.testing.doesItems const fastfetchItems = messages.docs.postInstall.optional.fastfetch.doesItems const fastfetchCustomItems = messages.docs.postInstall.optional.fastfetch.customItems const fastfetchLogos = messages.docs.postInstall.optional.fastfetch.logos const figurineItems = messages.docs.postInstall.optional.figurine.doesItems const code = (chunks: React.ReactNode) => {chunks} const strong = (chunks: React.ReactNode) => {chunks} const em = (chunks: React.ReactNode) => {chunks} return (

{t("title")}

{t.rich("intro", { strong })}

{t("available")}

{t("ceph.title")}

{t("ceph.intro")}

{t("ceph.doesIntro")}

{t("ceph.howUse")}

{t("ceph.automates")}

/etc/apt/sources.list.d/ceph-squid.list # Update package lists apt-get update # Install Ceph pveceph install # Verify installation pveceph status `} />

{t("amd.title")}

{t("amd.intro")}

{t("amd.doesIntro")}

    {amdItems.map((_, idx) => (
  • {t(`amd.doesItems.${idx}`)}
  • ))}

{t("amd.howUse")}

{t("amd.automates")}

> /etc/modprobe.d/kvm.conf echo "options kvm report_ignored_msrs=N" >> /etc/modprobe.d/kvm.conf # Install latest Proxmox VE kernel apt-get install pve-kernel-$(uname -r | cut -d'-' -f1-2) `} />

{t("ha.title")}

{t("ha.intro")}

{t("ha.doesIntro")}

    {haItems.map((_, idx) => (
  • {t(`ha.doesItems.${idx}`)}
  • ))}

{t("ha.howUse")}

{t("ha.automates")}

{t("testing.title")}

{t("testing.intro")}

{t("testing.doesIntro")}

    {testingItems.map((_, idx) => (
  • {t(`testing.doesItems.${idx}`)}
  • ))}

{t("testing.howUse")}

{t("testing.manualIntro")}

{t("testing.noteLabel")} {t("testing.noteBody")}

{t("testing.warnLabel")} {t("testing.warnBody")}

{t("fastfetch.title")}

{t("fastfetch.intro")}

{t("fastfetch.doesLabel")}

    {fastfetchItems.map((_, idx) => (
  • {t.rich(`fastfetch.doesItems.${idx}`, { strong, em })}
  • ))}

{t("fastfetch.importantLabel")}

{t.rich("fastfetch.importantBody", { strong, code })}

{t("fastfetch.customLabel")}

{t.rich("fastfetch.customBody1", { code })}

{t.rich("fastfetch.customBody2", { code })}

{t("fastfetch.customBody3")}

    {fastfetchCustomItems.map((_, idx) => (
  • {t.rich(`fastfetch.customItems.${idx}`, { code })}
  • ))}

{t("fastfetch.examplesLabel")}

{fastfetchLogos.map((logo) => (

{logo.name}

{logo.alt}
))}

{t("fastfetch.automates")}

> ~/.bashrc `} />

{t("figurine.title")}

{t("figurine.intro")}

{t("figurine.doesLabel")}

    {figurineItems.map((_, idx) => (
  • {t(`figurine.doesItems.${idx}`)}
  • ))}

{t("figurine.practicalLabel")}

{t("figurine.practicalBody")}

{t("figurine.exampleLabel")}

{t("figurine.imageAlt")}

{t("figurine.automates")}

/dev/null; then rm -f "/usr/local/bin/figurine" fi # Download and install Figurine version="2.0.0" file="figurine_linux_amd64_v\${version}.tar.gz" url="https://github.com/arsham/figurine/releases/download/v\${version}/\${file}" wget -qO "/tmp/\${file}" "\${url}" tar -xf "/tmp/\${file}" -C "/tmp" mv "/tmp/deploy/figurine" "/usr/local/bin/figurine" chmod +x "/usr/local/bin/figurine" # Create welcome message script cat << 'EOF' > "/etc/profile.d/figurine.sh" /usr/local/bin/figurine -f "3d.flf" $(hostname) EOF chmod +x "/etc/profile.d/figurine.sh" `} />

{t("figurine.outro")}

{t("autoApplication.title")}

{t("autoApplication.body")}

) }