complete i18n migration to /[locale]/ with EN+ES content

Full rewrite of the docs site under app/[locale]/ with next-intl
in localePrefix:"always" mode. Every page now exists at both
/en/<path> and /es/<path>; the root / shows a meta-refresh + JS
redirect to /<defaultLocale>/ so GitHub Pages serves something
on the apex URL.

Highlights:
- 107 doc pages migrated to file-per-page JSON namespaces under
  messages/en/ and messages/es/. Spanish content is fully
  translated (no copy-of-English placeholders).
- New documentation for the Active Suppressions section in the
  Settings tab and the per-event Dismiss dropdown in the Health
  Monitor modal.
- New screenshots: dismiss-duration-dropdown.png and an updated
  health-suppression-settings.png.
- Pagefind integrated for client-side search; index is built on
  every CI deploy (not committed).
- RSS feeds: per-locale at /<locale>/rss.xml plus root /rss.xml
  for backward compat.
- Removed the dead app/[locale]/guides/[slug]/ route — every
  guide now has its own static page and no markdown source
  remains.
- Fixed orphan link /guides/nvidia -> /guides/nvidia-manual in
  docs/hardware/nvidia-host.
- Removed obsolete components (footer2, calendar, drawer).

Verified locally with `npm ci && npm run build`: 2804 files in
out/, 231 pages indexed by pagefind, root redirect intact, both
locale roots and the new Active Suppressions docs render OK.
This commit is contained in:
MacRimi
2026-05-31 12:41:10 +02:00
parent 875910b4d7
commit 5ca3463bf6
649 changed files with 83958 additions and 11096 deletions
@@ -0,0 +1,112 @@
{
"meta": {
"title": "Change Release Channel | ProxMenux Documentation",
"description": "Switch ProxMenux between the Stable (main) and Beta (develop) channels in one dialog. Bidirectional, idempotent, runs the official installer for the chosen channel and normalises the Monitor service.",
"ogTitle": "Change Release Channel | ProxMenux Documentation",
"ogDescription": "One Settings option to switch between Stable and Beta channels — no rerunning installers by hand."
},
"header": {
"title": "Change Release Channel",
"description": "One unified Settings option to switch ProxMenux between the Stable (main branch) and Beta (develop branch) channels. The previous one-way 'Deactivate Beta Program' has been replaced by a bidirectional dialog that always offers both directions and runs the official installer for whichever channel you pick.",
"section": "Settings"
},
"intro": {
"title": "What changed",
"body": "Earlier versions of ProxMenux exposed two separate flows — “Deactivate Beta Program” (only visible when beta was active) and a manual rerun of the beta installer to re-join. They are merged into a single <strong>Change Release Channel</strong> entry that is always present, shows the current channel and lets you flip between Stable and Beta in either direction."
},
"why": {
"heading": "Why this option exists",
"intro": "ProxMenux ships from two git branches:",
"items": [
"<strong>Stable</strong> — the <code>main</code> branch. What the README points at, what most operators want, with a slower release cadence and only changes that have already been through beta validation.",
"<strong>Beta</strong> — the <code>develop</code> branch. Newer features and Monitor builds; carries the tag the next stable release will inherit. Some things may not work perfectly — that's the deal you sign up for and the way new features get tested before they ship."
],
"outro": "Hopping between channels used to require remembering the right installer URL, copying it in from the README, and editing <code>config.json</code> by hand if something got out of sync. The unified option does the whole flow as a single guided action."
},
"dialog": {
"heading": "The dialog",
"intro": "From the main menu, <strong>Settings → Change Release Channel</strong>. A two-line menu shows up:",
"options": [
"<code>stable</code> — Stable (main branch)",
"<code>beta</code> — Beta (develop branch)"
],
"behaviour": "The current channel is pre-selected and shown at the top of the menu. Picking the same channel returns a friendly “This release channel is already active” message — the dialog is fully idempotent. Picking a different channel pops up a confirmation with channel-specific text:",
"directions": [
"<strong>Stable → Beta:</strong> warns that beta builds may contain bugs or incomplete features.",
"<strong>Beta → Stable:</strong> warns that beta update checks will stop and the stable installer will reinstall the Stable channel components."
]
},
"confirm": {
"heading": "What happens when you confirm",
"items": [
"<strong>Downloads the official installer</strong> for the target channel:<ul><li>Stable: <code>install_proxmenux.sh</code> from <code>main</code></li><li>Beta: <code>install_proxmenux_beta.sh</code> from <code>develop</code></li></ul>The download is verified to exist and made executable before the next step.",
"<strong>Runs the installer</strong> end-to-end. The installer is the same one the README publishes — no custom path, no shortcut. That means existing component detection, file backups, dependency installs, language preservation, etc. all behave identically to a fresh install of the target channel.",
"When switching to <strong>Stable</strong>, the menu then prunes any leftover beta metadata from <code>config.json</code>: <code>beta_program</code>, <code>beta_version</code>, <code>install_branch</code>, <code>update_available.beta*</code> are deleted, and <code>proxmenux_monitor.status = beta_updated</code> is normalised to <code>updated</code>. The leftover <code>beta_version.txt</code> file and any downloaded beta installer are removed.",
"When switching to Stable, the Monitor systemd unit file is also re-written from the Stable template (drops the “Beta” suffix from the unit description, points <code>ExecStart</code> back at the runtime dir) so a fresh <code>systemctl status</code> reflects the channel you're on.",
"Reloads the configuration menu. The next visit to <em>Show Version Information</em> will show the new channel."
]
},
"switching": {
"heading": "Switching back and forth",
"intro": "Both directions go through the same installer — they are <strong>not</strong> special-cased uninstall + reinstall flows. Each direction simply runs the channel's own installer, which is designed to be idempotent and safe to re-execute over an existing install. Practical consequences:",
"items": [
"Your existing config, ProxMenux Monitor login (<code>auth.json</code>), notification channels, post-install registry, custom thresholds — none of those are touched. The channel switch only swaps the script tree and the binary AppImage.",
"A Monitor that was active before the switch stays active after; one that was deactivated stays deactivated.",
"ProxMenux Monitor <code>auth.json</code>, API tokens and the JWT secret are preserved across channel changes. Sessions don't get logged out.",
"You can flip channels as many times as you like — the dialog will accept it every time and rerun the installer. No restart of Proxmox is required."
]
},
"feedback": {
"heading": "Reporting issues from the beta",
"intro": "If something behaves unexpectedly while you're on the Beta channel, opening an issue with enough context is what closes the gap to a stable release. The most useful report includes:",
"items": [
"What you did and what you expected to happen.",
"Any error messages shown on screen.",
"The relevant Monitor logs:"
],
"logsCommand": "journalctl -u proxmenux-monitor -n 50 --no-pager",
"versionLine": "The current ProxMenux version (Settings → <link>Show Version Information</link>).",
"issueLine": "Open a <ghlink>GitHub Issue</ghlink> with that information and we get to the fix faster."
},
"manual": {
"heading": "Manual equivalent",
"intro": "If you prefer the shell or are scripting the channel switch, the dialog is just a thin wrapper around these commands:"
},
"unifiedCallout": {
"title": "Why both directions are now one option",
"body": "The previous “Deactivate Beta Program” only existed if the host had ever joined the beta. Operators wanting to <em>join</em> had to find the beta installer URL elsewhere; operators wanting to <em>leave</em> sometimes had to manually clean up <code>beta_*</code> metadata to be sure. The unified <strong>Change Release Channel</strong> option always shows up, makes the current channel explicit, and treats both directions as the same kind of operation — runnable, repeatable, idempotent."
},
"troubleshoot": {
"heading": "Troubleshooting",
"downloadTitle": "“Could not download the installer”",
"downloadBody": "Outbound HTTPS to <code>raw.githubusercontent.com</code> failed. Check connectivity and DNS from the host:",
"downloadCmd": "curl -fsSL -o /tmp/test https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh && head -1 /tmp/test",
"downloadOutro": "If this fails outside ProxMenux, it's a network / proxy issue on the host.",
"errorsTitle": "“Installer finished with errors”",
"errorsBody": "The installer surfaced a non-zero exit code. The previous channel and any already-installed components are left as they were before the switch. Re-run the action; if it keeps failing, run the installer manually from a shell (see the manual equivalent above) — that gives you the full output instead of the dialog summary.",
"configTitle": "“Could not update config file” after switching to Stable",
"configBody": "The post-install cleanup of beta metadata failed — usually because <code>config.json</code> has a syntax error from a manual edit. Validate it:",
"configCmd": "jq . /usr/local/share/proxmenux/config.json",
"configOutro": "Fix or restore the file and rerun the option."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Show Version Information",
"tail": " — confirm which channel is active now."
},
{
"href": "/docs/settings/proxmenux-monitor",
"label": "ProxMenux Monitor",
"tail": " — the Monitor service that gets rebuilt as part of the switch."
},
{
"href": "/docs/settings",
"label": "Settings overview",
"tail": "."
}
]
}
}
@@ -0,0 +1,98 @@
{
"meta": {
"title": "Change Language | ProxMenux Documentation",
"description": "Switch ProxMenux UI between English, Spanish, French, German, Italian or Portuguese. Translation install only — uses googletrans + a pre-cached translation table. The menu reloads automatically with the new language.",
"ogTitle": "Change Language | ProxMenux Documentation",
"ogDescription": "Pick the ProxMenux interface language from the Settings menu. Six languages supported."
},
"header": {
"title": "Change Language",
"description": "Switch the ProxMenux UI between six supported languages. Saves the choice to config.json and re-execs the menu with the new language. Only available on the Translation install type — the Normal (lightweight) install is English-only by design.",
"section": "Settings"
},
"intro": {
"title": "What this is",
"body": "A dialog menu that lists the six supported languages. Pick one, ProxMenux saves it to <code>config.json</code> as <code>.language</code>, then re-execs <code>config_menu.sh</code> so the new language takes effect immediately."
},
"warn": {
"title": "Translation install only",
"body": "This option only appears in Settings if both checks pass: <code>/opt/googletrans-env/bin/activate</code> exists (Python venv with googletrans), <em>and</em> <code>config.json</code> has a non-empty <code>.language</code>. On the Normal (English-only) install neither is present and the language picker is not shown."
},
"supported": {
"heading": "Supported languages",
"headerCode": "Code",
"headerLang": "Language",
"headerNotes": "Notes",
"rows": [
{
"code": "en",
"lang": "English",
"notes": "Source language — most accurate"
},
{
"code": "es",
"lang": "Spanish",
"notes": "Cached + auto-translated"
},
{
"code": "fr",
"lang": "French",
"notes": "Cached + auto-translated"
},
{
"code": "de",
"lang": "German",
"notes": "Cached + auto-translated"
},
{
"code": "it",
"lang": "Italian",
"notes": "Cached + auto-translated"
},
{
"code": "pt",
"lang": "Portuguese",
"notes": "Cached + auto-translated"
}
]
},
"englishTip": {
"title": "English is the most accurate",
"body": "Non-English strings are produced by a pre-cached table seeded from googletrans. Edge-case strings (rarely triggered options, recent additions) may fall through to a live googletrans call or to the English original. If a translation feels off, English is always the source of truth."
},
"underHood": {
"heading": "How it works under the hood",
"items": [
"Dialog menu lists the 6 codes; you pick one.",
"If <code>config.json</code> exists: <code>jq --arg lang \"$new_language\" '.language = $lang'</code> updates the field in place.",
"If <code>config.json</code> doesn't exist: a fresh one is created with the language code in a single-field object.",
"Confirmation dialog: <em>\"Language changed to &lt;code&gt;\"</em>.",
"<code>exec bash config_menu.sh</code> reloads the Settings menu with the new language active."
]
},
"manual": {
"heading": "Manual equivalent"
},
"troubleshoot": {
"heading": "Troubleshooting",
"noOptionTitle": "Option doesn't appear in Settings",
"noOptionBody": "You're on the Normal (English-only) install. To get language support, reinstall ProxMenux choosing the Translation install option (it pulls Python venv + googletrans).",
"stillEnglishTitle": "Language changed but UI still shows English",
"stillEnglishBody": "The menu re-execs itself after the change. If you opened a fresh shell and started a different ProxMenux entrypoint, run <code>menu</code> again to pick up the new language. Confirm: <code>jq -r '.language' /usr/local/share/proxmenux/config.json</code>."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Show Version Information",
"tail": " — confirms install type and current language."
},
{
"href": "/docs/settings",
"label": "Settings overview",
"tail": "."
}
]
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"meta": {
"title": "ProxMenux Settings — Monitor Activation, Release Channel, Languages | ProxMenux",
"description": "ProxMenux configuration menu: ProxMenux Monitor activation and service toggle, Reset Monitor Password, Change Release Channel between Stable and Beta, language selection (translation install), version information and uninstall. Options appear conditionally based on what is installed and active.",
"ogTitle": "ProxMenux Settings — Monitor Activation, Release Channel, Languages",
"ogDescription": "Configure ProxMenux — Monitor service, Release Channel, language, version info and uninstall.",
"twitterTitle": "ProxMenux Settings",
"twitterDescription": "Monitor activation, Release Channel switch, languages, version info and uninstall."
},
"header": {
"title": "Settings",
"description": "ProxMenux configuration menu. Lists what's installed, lets you toggle the Monitor service, reset the Monitor login password, switch between Stable and Beta release channels in either direction, change the UI language (Translation install only), and provides a clean uninstaller. Options appear conditionally — what you see depends on your install type and current state.",
"section": "Settings"
},
"intro": {
"title": "What this menu is for",
"body": "Self-administration of ProxMenux itself: monitor service, beta channel opt-out, language, version diagnostics and the uninstaller. Nothing in this menu touches your VMs, containers or storage."
},
"opening": {
"heading": "Opening the menu",
"body": "From ProxMenux's main menu, press <kbd>s</kbd>. The options shown depend on your install type and on what is currently active:",
"imageAlt": "Settings ProxMenux menu with conditional options based on install type and component state"
},
"installTypes": {
"heading": "Two install types, different menus",
"intro": "ProxMenux ships in two flavours. The Settings menu adapts to which one you have:",
"headerType": "Install type",
"headerBundles": "What it bundles",
"headerMenu": "Menu shows",
"rows": [
{
"type": "Translation",
"bundles": "Python venv + googletrans + multi-language config",
"menuRich": "<strong>Change Language</strong> + Show Version + Uninstall"
},
{
"type": "Normal (lightweight)",
"bundles": "English-only, no venv, smaller footprint",
"menu": "Show Version + Uninstall (no language picker)"
}
],
"detectionTitle": "Detection happens automatically",
"detectionBody": "The script checks for <code>/opt/googletrans-env/bin/activate</code> and a non-empty <code>language</code> key in <code>config.json</code>. Both present → Translation install. Either missing → Normal install. You don't choose; the menu adapts."
},
"options": {
"heading": "Menu options",
"intro": "Five tools. The <em>Conditional</em> badges mean the option only appears when the prerequisite is met (Monitor installed; Beta program active; Translation install).",
"list": [
{
"icon": "Activity",
"href": "/docs/settings/proxmenux-monitor",
"title": "ProxMenux Monitor",
"description": "Activate / deactivate the proxmenux-monitor.service systemd unit, check its current state, and reset the dashboard login password if it's been lost. Web UI available on TCP 8008.",
"badge": "Conditional"
},
{
"icon": "TestTube",
"href": "/docs/settings/beta-program",
"title": "Change Release Channel",
"description": "Switch between Stable (main) and Beta (develop) in either direction from a single dialog. Runs the official installer for the chosen channel; idempotent and always visible.",
"badge": "Always available"
},
{
"icon": "Info",
"href": "/docs/settings/show-version-information",
"title": "Show Version Information",
"description": "ProxMenux version, install type, installed components, file paths, virtual environment state and current language."
},
{
"icon": "Trash2",
"href": "/docs/settings/uninstall-proxmenux",
"title": "Uninstall ProxMenux",
"description": "Remove ProxMenux and (optionally) its dependencies. Also restores /root/.bashrc and /etc/motd backups created at install time."
}
]
},
"configTip": {
"title": "Where the config lives",
"bodyRich": "Most state managed by this menu lives in <code>/usr/local/share/proxmenux/config.json</code> — <code>language</code>, <code>beta_program.status</code> and per-component install flags. The Monitor service's state lives in systemd (<code>proxmenux-monitor.service</code>), not here. Version is read from <code>/usr/local/share/proxmenux/version.txt</code>."
}
}
@@ -0,0 +1,119 @@
{
"meta": {
"title": "ProxMenux Monitor | ProxMenux Documentation",
"description": "Activate or deactivate the proxmenux-monitor.service systemd unit and inspect its current state. The Monitor exposes a web UI on TCP 8008 for visual host monitoring.",
"ogTitle": "ProxMenux Monitor | ProxMenux Documentation",
"ogDescription": "Toggle the proxmenux-monitor systemd service and check its status from the Settings menu."
},
"header": {
"title": "ProxMenux Monitor",
"description": "Two related actions inside the Settings menu: toggle the proxmenux-monitor.service systemd unit (start / stop and enable / disable in one click), and view its current detailed status. The Monitor exposes a web UI on TCP 8008 for visual host monitoring.",
"section": "Settings"
},
"intro": {
"title": "What is ProxMenux Monitor?",
"body": "ProxMenux Monitor is an integrated web dashboard that provides real-time visibility into your Proxmox infrastructure — accessible from any browser on your network, without needing a terminal."
},
"offers": {
"heading": "What it offers",
"items": [
"Real-time monitoring of CPU, RAM, disk usage and network traffic.",
"Overview of running VMs and LXC containers with status indicators.",
"Login authentication to protect access.",
"Two-Factor Authentication (2FA) with TOTP support.",
"Reverse proxy support (Nginx / Traefik).",
"Designed to work across desktop and mobile devices."
]
},
"access": {
"heading": "Access",
"intro": "Once installed, the dashboard is available at:",
"url": "http://<your-proxmox-ip>:8008",
"outro": "The Monitor is installed automatically as part of the standard ProxMenux installation and runs as a systemd service (<code>proxmenux-monitor.service</code>) that starts automatically on boot."
},
"warnConditional": {
"title": "Settings options only visible when Monitor is installed",
"body": "The two menu entries described below only appear in Settings if <code>proxmenux-monitor.service</code> is registered with systemd. If you don't see them, the Monitor wasn't installed (it's optional during ProxMenux install). To add it later, reinstall ProxMenux with the latest version and pick the Monitor option."
},
"toggle": {
"heading": "Activate / Deactivate",
"intro": "The first menu entry is a single toggle that flips between two states based on whether the service is currently running:",
"headerState": "Current state",
"headerLabel": "Menu label shown",
"headerAction": "Action on confirm",
"rows": [
{
"state": "active",
"label": "Deactivate ProxMenux Monitor",
"action": "systemctl stop + disable"
},
{
"state": "inactive",
"label": "Activate ProxMenux Monitor",
"action": "systemctl enable + start"
}
],
"outro": "Each toggle requires an explicit yes/no dialog before running. Activate / Deactivate is symmetric: deactivating stops the service <em>and</em> disables auto-start at boot; activating enables auto-start <em>and</em> starts the service immediately."
},
"status": {
"heading": "Show Monitor Service Status",
"intro": "The second menu entry is read-only. It clears the screen, shows the ProxMenux logo and the title <em>\"ProxMenux Monitor Service Verification\"</em>, then reports:",
"items": [
"<strong>Service status:</strong> active, inactive or not_installed.",
"<strong>Web UI URL</strong> (only when active): <code>http://&lt;host_ip&gt;:8008</code> — derived from <code>hostname -I | awk '''{print $1}'''</code>.",
"<strong>Detailed systemd output:</strong> <code>systemctl status proxmenux-monitor.service --no-pager -l</code> — shows recent log lines, ExecStart, MainPID, etc."
]
},
"manual": {
"title": "Manual equivalents",
"intro": "From any shell:",
"code": "systemctl status proxmenux-monitor.service # detailed status\nsystemctl is-active proxmenux-monitor.service # one-word status\nsystemctl enable --now proxmenux-monitor.service # enable + start\nsystemctl disable --now proxmenux-monitor.service # stop + disable\njournalctl -u proxmenux-monitor.service -f # follow live logs"
},
"reset": {
"heading": "Reset ProxMenux Monitor Password",
"intro": "Recovery path for the operator who lost the dashboard password (or 2FA device). The option only appears when the Monitor is installed on the host. Selecting it:",
"items": [
"Asks for confirmation with a yes/no dialog — the action is destructive for the login credentials.",
"Backs up the existing <code>/root/.config/proxmenux-monitor/auth.json</code> to <code>auth.json.bak-&lt;UTC timestamp&gt;</code> (mode <code>0600</code>) so the previous state can be restored manually if the reset was a mistake.",
"Stops the <code>proxmenux-monitor</code> service so the on-disk edit can't race with an in-flight login.",
"Clears the identity fields in <code>auth.json</code>: <code>enabled=false</code>, <code>configured=false</code>, empties <code>username</code>, <code>password_hash</code>, <code>totp_secret</code> and the backup codes array.",
"<strong>Preserves</strong> the <code>jwt_secret</code> and the registered <code>api_tokens</code> / <code>revoked_tokens</code> — so long-lived API tokens used by Home Assistant or other scripts <em>continue to authenticate</em> after the reset.",
"Restarts the service. The next visit to <code>http://&lt;host&gt;:8008</code> shows the first-launch setup wizard so a fresh admin account can be created."
],
"preservedTitle": "What survives the reset, what doesn't",
"preservedBody": "<strong>Wiped:</strong> username, password hash, 2FA TOTP secret, backup codes. <strong>Preserved:</strong> <code>jwt_secret</code>, <code>api_tokens</code> metadata, <code>revoked_tokens</code> list. If you actively want to also invalidate every existing API token (full clean slate), delete <code>auth.json</code> manually instead of using this menu option — the next start of the service regenerates the JWT secret and everything else from scratch.",
"trustTitle": "Physical-host access is the trust anchor",
"trustBody": "This reset path requires root shell on the host. Anyone who can run the <code>menu</code> command as root already controls the box, so giving them password recovery is not a privilege escalation — it's consistent with how every other admin tool on Proxmox works. The corollary: the Monitor login won't protect anything from someone you've already let into the Proxmox shell.",
"seeAlso": "See also <link>Monitor → Access &amp; Auth → Recovering a lost password</link> for the same flow described from the dashboard side, plus the wider context on how passwords are hashed and how the JWT secret is generated."
},
"files": {
"heading": "Files involved",
"code": "/etc/systemd/system/proxmenux-monitor.service # systemd unit\n/root/.config/proxmenux-monitor/ # runtime config dir\n/var/log/proxmenux-auth.log # Flask app auth log\n # (read by Fail2Ban [proxmenux] jail)"
},
"troubleshoot": {
"heading": "Troubleshooting",
"missingTitle": "Both menu options are missing",
"missingBody": "The Monitor isn't registered with systemd. Confirm with <code>systemctl list-unit-files | grep proxmenux-monitor</code> — if there's no output, reinstall ProxMenux from the official installer with the latest version and pick the Monitor option during install.",
"unreachableTitle": "Service activated but the URL is unreachable",
"unreachableBody": "The Settings status output gives you the IP. Confirm:",
"unreachableCmd": "ss -tlnp | grep 8008 # is anything listening?\njournalctl -u proxmenux-monitor -n 100 --no-pager # recent errors\ncurl -sI http://localhost:8008 # local reachability",
"unreachableOutro": "If localhost works but external doesn't, check your host firewall (<code>pve-firewall</code> or nftables) for inbound TCP 8008.",
"stopsTitle": "Activated the service but it stops itself a few seconds later",
"stopsBody": "Most often a port conflict (something else on 8008) or a dependency check failing. The journal will say which: <code>journalctl -u proxmenux-monitor.service -b</code>."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/security/fail2ban",
"label": "Fail2Ban",
"tailRich": " — the <code>[proxmenux]</code> jail protects the Monitor on TCP 8008."
},
{
"href": "/docs/settings",
"label": "Settings overview",
"tail": "."
}
]
}
}
@@ -0,0 +1,81 @@
{
"meta": {
"title": "Show Version Information | ProxMenux Documentation",
"description": "Read-only ProxMenux self-diagnostic: version number, install type (Translation / Normal), installed components from config.json, file paths, virtual environment state and current language.",
"ogTitle": "Show Version Information | ProxMenux Documentation",
"ogDescription": "Diagnostic dump of ProxMenux version, install type, components, files and language."
},
"header": {
"title": "Show Version Information",
"description": "Read-only diagnostic. Reads version.txt, config.json and a few well-known file paths, then renders a scrollable text box with version, install type, installed components, file presence, virtual environment state and current language.",
"section": "Settings"
},
"intro": {
"title": "What this is",
"body": "A self-diagnostic. Useful when reporting an issue (paste the dialog contents into the bug report) or to confirm an install completed cleanly. Modifies nothing."
},
"reports": {
"heading": "What it reports",
"headerSection": "Section",
"headerSource": "Source",
"headerContent": "Content",
"rows": [
{
"section": "Current version",
"source": "version.txt",
"contentRich": "Single-line version number; <code>Unknown</code> if file missing"
},
{
"section": "Install type",
"source": "venv + config.json checks",
"content": "Translation (multi-language) or Normal (English-only)"
},
{
"section": "Installed components",
"source": "config.json",
"content": "Per-component status (✓ installed / created / upgraded, ✗ missing)"
},
{
"section": "ProxMenux files",
"source": "filesystem checks",
"contentRich": "<code>menu</code>, <code>utils.sh</code>, <code>config.json</code>, <code>version.txt</code> presence + paths"
},
{
"section": "Virtual environment",
"source": "/opt/googletrans-env",
"content": "Translation install only — venv + pip presence"
},
{
"section": "Current language",
"source": "config.json",
"contentRich": "Translation: language code from <code>.language</code>; Normal: <code>English (Fixed)</code>"
}
]
},
"sampleHeading": "Sample output",
"manualHeading": "Manual equivalents",
"troubleshoot": {
"heading": "Troubleshooting",
"unknownTitle": "Version shows \"Unknown\"",
"unknownBody": "<code>/usr/local/share/proxmenux/version.txt</code> is missing or unreadable. Most often caused by a partial install. Reinstall from the official ProxMenux source.",
"noConfigTitle": "No installation information available",
"noConfigBody": "<code>config.json</code> is missing. The script can't enumerate components without it. Reinstall to regenerate.",
"wrongStatusTitle": "A component shows ✗ that I'm sure I installed",
"wrongStatusBody": "Means <code>config.json</code> doesn't track that component as installed — could be a script that doesn't register itself yet, or a manual install that bypassed ProxMenux. The dialog reflects what <code>config.json</code> says, not what's actually on disk."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/settings/uninstall-proxmenux",
"label": "Uninstall ProxMenux",
"tail": " — remove all of these files."
},
{
"href": "/docs/settings",
"label": "Settings overview",
"tail": "."
}
]
}
}
@@ -0,0 +1,92 @@
{
"meta": {
"title": "Uninstall ProxMenux | ProxMenux Documentation",
"description": "Clean ProxMenux uninstaller with optional dependency removal (jq, dialog, python3-*) and automatic restoration of /root/.bashrc and /etc/motd backups created at install time. Also removes the proxmenux-monitor service if present.",
"ogTitle": "Uninstall ProxMenux | ProxMenux Documentation",
"ogDescription": "Cleanly remove ProxMenux from a Proxmox host with optional dependency cleanup."
},
"header": {
"title": "Uninstall ProxMenux",
"description": "Removes ProxMenux from the Proxmox host with an interactive flow: confirmation, optional dependency removal, ProxMenux Monitor service cleanup, restoration of /root/.bashrc and /etc/motd backups. Shows a progress bar throughout.",
"section": "Settings"
},
"scopeWarn": {
"title": "Affects the ProxMenux install only — not your VMs / CTs / storage",
"body": "Uninstalling ProxMenux removes the ProxMenux scripts, the menu launcher, the optional Monitor service and any backups ProxMenux took of system files when you installed it. <strong>It does not touch your VMs, containers, storage, network configuration, Fail2Ban, NVIDIA driver or anything else you installed via ProxMenux.</strong> Those stay as they are."
},
"flow": {
"heading": "The uninstall flow",
"items": [
"<strong>Confirmation dialog.</strong> Yes/no — “Are you sure you want to uninstall ProxMenux?”",
"<strong>Dependency removal checklist.</strong> Pre-selected list depends on install type (see table below). All boxes default to OFF — you opt in to removing each dependency.",
"<strong>Removal runs with a progress bar.</strong> Removes the venv (Translation install only), the <code>menu</code> launcher, the <code>/usr/local/share/proxmenux/</code> tree, the ProxMenux Monitor service if present, the dependencies you ticked, and finally restores the system file backups (see below).",
"<strong>Completion dialog.</strong> Lists removed dependencies and exits."
]
},
"deps": {
"heading": "Dependency removal: what's offered",
"intro": "The checklist depends on install type. <strong>None of the boxes is checked by default</strong> — these are system-wide packages that other applications might use, so the safer default is to leave them.",
"headerType": "Install type",
"headerOffered": "Offered for removal",
"rows": [
{
"type": "Translation",
"offeredRich": "<code>python3-venv</code>, <code>python3-pip</code>, <code>python3</code>, <code>jq</code>"
},
{
"type": "Normal",
"offeredRich": "<code>dialog</code>, <code>jq</code>"
}
],
"warnTitle": "System-wide packages — think twice",
"warnBody": "<code>python3</code>, <code>jq</code> and <code>dialog</code> are commonly used by other tools (including Proxmox itself in some workflows). Removing <code>python3</code> in particular can break Proxmox helpers, Ceph utilities and many third-party scripts. Leave them unless you're positive nothing else needs them."
},
"removed": {
"heading": "What gets removed",
"code": "/usr/local/bin/menu # the launcher\n/usr/local/share/proxmenux/ # everything: scripts, config, cache, version\n/opt/googletrans-env/ # virtual env (Translation install only)\n/etc/systemd/system/proxmenux-monitor.service # Monitor service unit\n/root/.config/proxmenux-monitor/ # Monitor config dir\n # + dependencies you ticked in the checklist"
},
"restored": {
"heading": "What gets restored",
"items": [
"If <code>/root/.bashrc.bak</code> exists → renamed back to <code>/root/.bashrc</code> (your original bashrc returns).",
"If <code>/etc/motd.bak</code> exists → renamed back to <code>/etc/motd</code>. Otherwise the ProxMenux line (<em>“This system is optimised by: ProxMenux”</em>) is stripped from the existing motd with sed."
]
},
"othersCallout": {
"title": "Other ProxMenux-installed components stay",
"body": "Anything ProxMenux installed via other menus — Fail2Ban, Lynis, NVIDIA drivers, post-install tweaks — is <strong>not</strong> touched by this uninstaller. Each has its own uninstall flow inside its respective menu (or you can remove with apt directly). Look at <em>Show Version Information</em> first to see what's registered."
},
"manual": {
"heading": "Manual uninstall",
"intro": "If for some reason the menu uninstaller can't run (e.g. <code>dialog</code> already missing), the equivalent manual sequence:",
"code": "# 1. Stop and remove the Monitor service (if installed)\nsystemctl stop proxmenux-monitor.service 2>/dev/null\nsystemctl disable proxmenux-monitor.service 2>/dev/null\nrm -f /etc/systemd/system/proxmenux-monitor.service\nrm -rf /root/.config/proxmenux-monitor\nsystemctl daemon-reload\nsystemctl reset-failed 2>/dev/null\n\n# 2. Remove the venv (Translation install only)\nrm -rf /opt/googletrans-env\n\n# 3. Remove ProxMenux files\nrm -f /usr/local/bin/menu\nrm -rf /usr/local/share/proxmenux\n\n# 4. Restore backups\n[ -f /root/.bashrc.bak ] && mv /root/.bashrc.bak /root/.bashrc\n[ -f /etc/motd.bak ] && mv /etc/motd.bak /etc/motd \\\n || sed -i '/This system is optimised by: ProxMenux/d' /etc/motd"
},
"reinstall": {
"heading": "Reinstalling later",
"body": "Run the official ProxMenux installer again. Pick Translation or Normal as you prefer — the choice is independent of what you had before."
},
"troubleshoot": {
"heading": "Troubleshooting",
"hangTitle": "Uninstall hangs at “Removing googletrans and virtual environment”",
"hangBody": "<code>pip uninstall</code> can stall if pip is unresponsive. From another shell: <code>rm -rf /opt/googletrans-env</code> directly (the script does the same as a fallback after pip).",
"aptTitle": "apt warns about packages still in use during dependency removal",
"aptBody": "Expected if you ticked <code>python3</code> or <code>jq</code> while other things on the host depend on them. apt's <code>autoremove</code> will refuse to remove them in that case (which is the safe behaviour). Untick that dependency and re-run.",
"motdTitle": "MOTD still shows the ProxMenux line after uninstall",
"motdBody": "Either no <code>/etc/motd.bak</code> existed and the sed strip didn't match (e.g. the line was modified). Edit <code>/etc/motd</code> by hand and remove any leftover ProxMenux line."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/settings/show-version-information",
"label": "Show Version Information",
"tail": " — see what would be removed before uninstalling."
},
{
"href": "/docs/settings",
"label": "Settings overview",
"tail": "."
}
]
}
}