Merge remote-tracking branch 'origin/main' into front-end-tweaks

This commit is contained in:
Bram Suurd
2025-06-27 19:42:34 +00:00
33 changed files with 815 additions and 377 deletions

48
.github/workflows/push-to-gitea.yaml generated vendored Normal file
View File

@ -0,0 +1,48 @@
name: Sync to Gitea
on:
push:
branches:
- main
jobs:
sync:
if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: ubuntu-latest
steps:
- name: Checkout source repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Change all links to git.community-scripts.org
run: |
echo "Searching for files containing raw.githubusercontent.com URLs..."
# Find all files containing GitHub raw URLs, excluding certain directories
files_with_github_urls=$(grep -r "https://raw.githubusercontent.com/community-scripts/ProxmoxVE" . --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=.github/workflows --files-with-matches || true)
if [ -n "$files_with_github_urls" ]; then
echo "$files_with_github_urls" | while read file; do
if [ -f "$file" ]; then
sed -i 's|https://raw\.githubusercontent\.com/community-scripts/ProxmoxVE/|https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/|g' "$file"
fi
done
else
echo "No files found containing GitHub raw URLs"
fi
- name: Push to Gitea
run: |
git config --global user.name "Push From Github"
git config --global user.email "actions@github.com"
git remote add gitea https://$GITEA_USER:$GITEA_TOKEN@git.community-scripts.org/community-scripts/ProxmoxVE.git
git add .
git commit -m "Sync to Gitea"
git push gitea --all --force
env:
GITEA_USER: ${{ secrets.GITEA_USERNAME }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}

View File

@ -14,10 +14,45 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-06-27
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- wizarr: remove unneeded tmp file [@MickLesk](https://github.com/MickLesk) ([#5517](https://github.com/community-scripts/ProxmoxVE/pull/5517))
### 🧰 Maintenance
- #### 📂 Github
- New workflow to push to gitea and change links to gitea [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5510](https://github.com/community-scripts/ProxmoxVE/pull/5510))
### 🌐 Website
- #### 📝 Script Information
- Wireguard, Update Link to Documentation. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5514](https://github.com/community-scripts/ProxmoxVE/pull/5514))
## 2025-06-26
### 🆕 New Scripts
- ConvertX ([#5484](https://github.com/community-scripts/ProxmoxVE/pull/5484))
### 🚀 Updated Scripts
- [tools] Update setup_nodejs function [@tremor021](https://github.com/tremor021) ([#5488](https://github.com/community-scripts/ProxmoxVE/pull/5488))
- [tools] Fix setup_mongodb function [@tremor021](https://github.com/tremor021) ([#5486](https://github.com/community-scripts/ProxmoxVE/pull/5486))
## 2025-06-25
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Docmost: Increase resources [@tremor021](https://github.com/tremor021) ([#5458](https://github.com/community-scripts/ProxmoxVE/pull/5458))
- #### ✨ New Features
- tools.func: new helper for imagemagick [@MickLesk](https://github.com/MickLesk) ([#5452](https://github.com/community-scripts/ProxmoxVE/pull/5452))
@ -27,6 +62,21 @@ All LXC instances created using this repository come pre-installed with Midnight
- Refactor: Tailscale [@MickLesk](https://github.com/MickLesk) ([#5454](https://github.com/community-scripts/ProxmoxVE/pull/5454))
### 🌐 Website
- #### 🐞 Bug Fixes
- Update Tooltips component to conditionally display updateable status based on item type [@BramSuurdje](https://github.com/BramSuurdje) ([#5461](https://github.com/community-scripts/ProxmoxVE/pull/5461))
- Refactor CommandMenu to prevent duplicate scripts across categories [@BramSuurdje](https://github.com/BramSuurdje) ([#5463](https://github.com/community-scripts/ProxmoxVE/pull/5463))
- #### ✨ New Features
- Enhance InstallCommand component to support Gitea as an alternative source for installation scripts. [@BramSuurdje](https://github.com/BramSuurdje) ([#5464](https://github.com/community-scripts/ProxmoxVE/pull/5464))
- #### 📝 Script Information
- Website: mark VM's and "OS"-LXC's as updatable [@MickLesk](https://github.com/MickLesk) ([#5453](https://github.com/community-scripts/ProxmoxVE/pull/5453))
## 2025-06-24
### 🆕 New Scripts

70
ct/convertx.sh Normal file
View File

@ -0,0 +1,70 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/C4illin/ConvertX
APP="ConvertX"
var_tags="${var_tags:-converter}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-20}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/C4illin/ConvertX/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.convertx 2>/dev/null)" ]] || [[ ! -f ~/.convertx ]]; then
msg_info "Stopping $APP"
systemctl stop convertx
msg_ok "Stopped $APP"
msg_info "Move data-Folder"
if [[ -d /opt/convertx/data ]]; then
mv /opt/convertx/data /opt/data
fi
msg_ok "Moved data-Folder"
fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx"
msg_info "Updating $APP to v${RELEASE}"
if [[ -d /opt/data ]]; then
mv /opt/data /opt/convertx/data
fi
cd /opt/convertx
$STD bun install
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start convertx
msg_ok "Started $APP"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

6
ct/headers/convertx Normal file
View File

@ -0,0 +1,6 @@
______ __ _ __
/ ____/___ ____ _ _____ _____/ /| |/ /
/ / / __ \/ __ \ | / / _ \/ ___/ __/ /
/ /___/ /_/ / / / / |/ / __/ / / /_/ |
\____/\____/_/ /_/|___/\___/_/ \__/_/|_|

View File

@ -70,6 +70,7 @@ function update_script() {
systemctl stop jellyseerr
rm -rf dist .next node_modules
export CYPRESS_INSTALL_BINARY=0
cd /opt/jellyseerr
$STD pnpm install --frozen-lockfile
export NODE_OPTIONS="--max-old-space-size=3072"
$STD pnpm build

View File

@ -60,7 +60,6 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf "$BACKUP_FILE"
rm /tmp/"$RELEASE".zip
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -6,7 +6,7 @@
],
"date_created": "2025-01-27",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

40
frontend/public/json/convertx.json generated Normal file
View File

@ -0,0 +1,40 @@
{
"name": "ConvertX",
"slug": "convertx",
"categories": [
9
],
"date_created": "2025-06-26",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/convertx/.env",
"interface_port": 3000,
"documentation": "https://github.com/C4illin/ConvertX",
"website": "https://github.com/C4illin/ConvertX",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/convertx.svg",
"description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.",
"install_methods": [
{
"type": "default",
"script": "ct/convertx.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 20,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Complete setup via the web interface at http://<container-ip>:3000. Create and secure the admin account immediately.",
"type": "info"
}
]
}

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -1,35 +1,35 @@
{
"name": "Debian",
"slug": "debian",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://www.debian.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/debian.webp",
"config_path": "",
"description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms.",
"install_methods": [
{
"type": "default",
"script": "ct/debian.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Debian",
"slug": "debian",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://www.debian.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/debian.webp",
"config_path": "",
"description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms.",
"install_methods": [
{
"type": "default",
"script": "ct/debian.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -7,7 +7,7 @@
],
"date_created": "2025-01-20",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -1,44 +1,44 @@
{
"name": "Home Assistant OS",
"slug": "haos-vm",
"categories": [
16
],
"date_created": "2024-04-29",
"type": "vm",
"updateable": false,
"privileged": false,
"interface_port": 8123,
"documentation": "https://www.home-assistant.io/docs/",
"website": "https://www.home-assistant.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
"config_path": "",
"description": "This script automates the process of creating a Virtual Machine (VM) using the official KVM (qcow2) disk image provided by the Home Assistant Team. It involves finding, downloading, and extracting the image, defining user-defined settings, importing and attaching the disk, setting the boot order, and starting the VM. It supports various storage types, and does not involve any hidden installations. After the script completes, click on the VM, then on the Summary tab to find the VM IP.",
"install_methods": [
{
"type": "default",
"script": "vm/haos-vm.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 32,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
"name": "Home Assistant OS",
"slug": "haos-vm",
"categories": [
16
],
"date_created": "2024-04-29",
"type": "vm",
"updateable": true,
"privileged": false,
"interface_port": 8123,
"documentation": "https://www.home-assistant.io/docs/",
"website": "https://www.home-assistant.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
"config_path": "",
"description": "This script automates the process of creating a Virtual Machine (VM) using the official KVM (qcow2) disk image provided by the Home Assistant Team. It involves finding, downloading, and extracting the image, defining user-defined settings, importing and attaching the disk, setting the boot order, and starting the VM. It supports various storage types, and does not involve any hidden installations. After the script completes, click on the VM, then on the Summary tab to find the VM IP.",
"install_methods": [
{
"type": "default",
"script": "vm/haos-vm.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 32,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "The disk must have a minimum size of 32GB and its size cannot be changed during the creation of the VM.",
"type": "warning"
},
"notes": [
{
"text": "The disk must have a minimum size of 32GB and its size cannot be changed during the creation of the VM.",
"type": "warning"
},
{
"text": "After the script completes, click on the VM, then on the Summary or Console tab to find the VM IP.",
"type": "info"
}
]
{
"text": "After the script completes, click on the VM, then on the Summary or Console tab to find the VM IP.",
"type": "info"
}
]
}

View File

@ -7,7 +7,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -6,7 +6,7 @@
],
"date_created": "2023-11-14",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,

View File

@ -7,7 +7,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -7,7 +7,7 @@
],
"date_created": "2025-02-11",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://docs.opnsense.org/",

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,

View File

@ -1,40 +1,40 @@
{
"name": "PiMox HAOS",
"slug": "pimox-haos-vm",
"categories": [
16
],
"date_created": "2024-04-29",
"type": "vm",
"updateable": false,
"privileged": false,
"interface_port": 8123,
"documentation": null,
"website": "https://github.com/jiangcuo/Proxmox-Port",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
"config_path": "",
"description": "The script automates the manual process of finding, downloading and extracting the aarch64 (qcow2) disk image provided by the Home Assistant Team, creating a VM with user defined settings, importing and attaching the disk, setting the boot order and starting the VM.",
"install_methods": [
{
"type": "default",
"script": "vm/pimox-haos-vm.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 32,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "After the script completes, click on the VM, then on the Summary or Console tab to find the VM IP.",
"type": "info"
}
]
"name": "PiMox HAOS",
"slug": "pimox-haos-vm",
"categories": [
16
],
"date_created": "2024-04-29",
"type": "vm",
"updateable": true,
"privileged": false,
"interface_port": 8123,
"documentation": null,
"website": "https://github.com/jiangcuo/Proxmox-Port",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
"config_path": "",
"description": "The script automates the manual process of finding, downloading and extracting the aarch64 (qcow2) disk image provided by the Home Assistant Team, creating a VM with user defined settings, importing and attaching the disk, setting the boot order and starting the VM.",
"install_methods": [
{
"type": "default",
"script": "vm/pimox-haos-vm.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 32,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "After the script completes, click on the VM, then on the Summary or Console tab to find the VM IP.",
"type": "info"
}
]
}

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 5432,
"documentation": null,

View File

@ -1,35 +1,35 @@
{
"name": "Ubuntu",
"slug": "ubuntu",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://ubuntu.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ubuntu.webp",
"config_path": "",
"description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/ubuntu.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "ubuntu",
"version": "24.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Ubuntu",
"slug": "ubuntu",
"categories": [
2
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://ubuntu.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ubuntu.webp",
"config_path": "",
"description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/ubuntu.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "ubuntu",
"version": "24.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -6,7 +6,7 @@
],
"date_created": "2025-01-24",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -6,7 +6,7 @@
],
"date_created": "2025-06-19",
"type": "vm",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,

View File

@ -1,19 +1,174 @@
[
{
"name": "rclone/rclone",
"version": "v1.70.2",
"date": "2025-06-27T11:30:28Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.1",
"date": "2025-04-11T09:57:47Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.3",
"date": "2025-06-27T09:53:57Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.1",
"date": "2025-06-27T09:14:14Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.0-rc.5",
"date": "2025-06-27T08:53:45Z"
},
{
"name": "cockpit-project/cockpit",
"version": "341",
"date": "2025-06-25T11:49:28Z"
"version": "341.1",
"date": "2025-06-27T08:50:16Z"
},
{
"name": "home-assistant/core",
"version": "2025.6.3",
"date": "2025-06-24T13:00:12Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.10",
"date": "2025-06-27T06:40:00Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2064",
"date": "2025-06-27T05:54:03Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.3-rc5",
"date": "2025-06-26T04:47:09Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.4.2",
"date": "2025-06-26T21:45:21Z"
},
{
"name": "home-assistant/operating-system",
"version": "15.2",
"date": "2025-04-14T15:37:12Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.5",
"date": "2025-05-28T06:49:43Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.3",
"date": "2025-06-26T18:42:56Z"
},
{
"name": "apache/tika",
"version": "3.2.1-rc2",
"date": "2025-06-26T17:10:25Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.84.3",
"date": "2025-06-26T16:31:57Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.5.5",
"date": "2025-06-26T15:54:17Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.0-rc1",
"date": "2025-06-26T15:08:43Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-no-simd-x86-arroy-0",
"date": "2025-06-26T14:54:18Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.63",
"date": "2025-06-26T14:34:19Z"
},
{
"name": "node-red/node-red",
"version": "4.1.0-beta.2",
"date": "2025-06-26T14:23:26Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "8.1.9",
"date": "2025-06-26T14:16:45Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "18.0.7",
"date": "2025-06-26T09:16:33Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.18",
"date": "2025-06-20T04:45:37Z"
},
{
"name": "mongodb/mongo",
"version": "r8.1.2-rc1",
"date": "2025-06-25T22:42:04Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.32.0",
"date": "2025-06-25T22:27:01Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.6.1",
"date": "2025-06-25T21:19:25Z"
},
{
"name": "coder/code-server",
"version": "v4.101.2",
"date": "2025-06-25T21:18:52Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.22.4",
"date": "2025-06-25T20:46:20Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.2.0",
"date": "2025-06-25T17:31:48Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.5",
"date": "2025-06-25T14:53:31Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.504.3",
"date": "2025-06-25T14:43:01Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "testing",
"date": "2025-06-16T18:10:42Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.0",
"date": "2025-05-12T09:12:04Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.17",
@ -24,16 +179,6 @@
"version": "n8n@1.100.0",
"date": "2025-06-23T12:48:35Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2054",
"date": "2025-06-25T05:54:03Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.3-rc3",
"date": "2025-06-25T03:27:43Z"
},
{
"name": "moghtech/komodo",
"version": "v1.18.4",
@ -44,16 +189,6 @@
"version": "v2.1.0.120-2.1.0.120_canary_2025-06-24",
"date": "2025-06-24T22:39:50Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.5",
"date": "2025-05-28T06:49:43Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516",
"date": "2025-06-24T21:06:15Z"
},
{
"name": "evcc-io/evcc",
"version": "0.204.5",
@ -79,26 +214,11 @@
"version": "v2.37.3",
"date": "2025-06-24T14:05:33Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.2.0",
"date": "2025-06-24T13:20:53Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p5",
"date": "2025-06-24T13:06:53Z"
},
{
"name": "home-assistant/core",
"version": "2025.6.3",
"date": "2025-06-24T13:00:12Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.31.2",
"date": "2025-06-24T09:45:34Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-fix-proxy-axios",
@ -109,11 +229,6 @@
"version": "coverity-w26-4.13.0",
"date": "2025-06-24T02:02:34Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-incremental-vector-store-1",
"date": "2025-06-23T21:37:47Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-06-13T11-33-47Z",
@ -139,21 +254,11 @@
"version": "6.3.0-rc.2",
"date": "2025-06-23T11:31:38Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.18",
"date": "2025-06-20T04:45:37Z"
},
{
"name": "gotson/komga",
"version": "1.22.0",
"date": "2025-06-23T03:11:37Z"
},
{
"name": "plexguide/Huntarr.io",
"version": "8.1.8",
"date": "2025-06-23T00:21:30Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.6.22",
@ -169,21 +274,11 @@
"version": "v1.4.1",
"date": "2025-06-22T19:38:08Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.22.3",
"date": "2025-06-22T18:29:00Z"
},
{
"name": "clusterzx/paperless-ai",
"version": "v3.0.7",
"date": "2025-06-22T17:49:29Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "create-fumadocs-app@15.5.4",
"date": "2025-06-22T13:12:24Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
@ -224,11 +319,6 @@
"version": "0.50.4",
"date": "2025-06-21T07:47:02Z"
},
{
"name": "coder/code-server",
"version": "v4.101.1",
"date": "2025-06-21T02:47:08Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.24.2",
@ -239,31 +329,16 @@
"version": "v1.135.3",
"date": "2025-06-20T20:19:20Z"
},
{
"name": "apache/tika",
"version": "3.2.1-rc1",
"date": "2025-06-20T19:41:10Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.25.0",
"date": "2025-06-20T19:15:43Z"
},
{
"name": "mongodb/mongo",
"version": "r8.1.2-rc0",
"date": "2025-06-20T17:35:38Z"
},
{
"name": "Sonarr/Sonarr",
"version": "v4.0.15.2941",
"date": "2025-06-20T17:20:54Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.9",
"date": "2025-06-20T10:58:45Z"
},
{
"name": "syncthing/syncthing",
"version": "2.0.0-rc.19",
@ -279,11 +354,6 @@
"version": "v2.17.1",
"date": "2025-06-19T19:35:01Z"
},
{
"name": "rclone/rclone",
"version": "v1.70.1",
"date": "2025-06-19T13:19:02Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.21.0",
@ -374,11 +444,6 @@
"version": "2025.6.1",
"date": "2025-06-17T12:45:39Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.1",
"date": "2025-04-11T09:57:47Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.9",
@ -429,11 +494,6 @@
"version": "v8.1.16",
"date": "2025-06-16T13:49:37Z"
},
{
"name": "home-assistant/operating-system",
"version": "15.2",
"date": "2025-04-14T15:37:12Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
@ -504,11 +564,6 @@
"version": "v3.3.25",
"date": "2025-06-14T02:52:44Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.2",
"date": "2025-06-12T22:48:11Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-06-12",
@ -519,16 +574,6 @@
"version": "v3.3.0",
"date": "2025-06-12T06:54:48Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.0-rc.4",
"date": "2025-06-12T00:27:41Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.8.11.0",
"date": "2025-03-10T06:39:11Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.63.1",
@ -544,16 +589,6 @@
"version": "v0.15.0-rc2",
"date": "2025-06-11T04:29:22Z"
},
{
"name": "node-red/node-red",
"version": "4.1.0-beta.1",
"date": "2025-06-10T15:47:59Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.62",
"date": "2025-05-27T12:10:19Z"
},
{
"name": "OctoPrint/OctoPrint",
"version": "1.11.2",
@ -564,11 +599,6 @@
"version": "v0.8.4",
"date": "2025-06-10T07:57:14Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.84.2",
"date": "2025-06-09T23:43:27Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.8.0",
@ -624,11 +654,6 @@
"version": "10.1.42",
"date": "2025-06-05T22:39:40Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.2",
"date": "2025-06-05T19:57:01Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.14",
@ -694,11 +719,6 @@
"version": "v5.18.1",
"date": "2025-05-31T23:06:08Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.4.1",
"date": "2025-05-31T13:45:40Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
@ -714,11 +734,6 @@
"version": "0.26.3",
"date": "2025-05-29T21:18:15Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.6.0",
"date": "2025-05-29T19:11:21Z"
},
{
"name": "navidrome/navidrome",
"version": "v0.56.1",
@ -749,11 +764,6 @@
"version": "1.2.34",
"date": "2025-05-27T18:18:00Z"
},
{
"name": "traefik/traefik",
"version": "v3.4.1",
"date": "2025-05-27T12:53:58Z"
},
{
"name": "dani-garcia/vaultwarden",
"version": "1.34.1",
@ -824,16 +834,6 @@
"version": "v1.1.1",
"date": "2025-05-17T10:10:36Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.4",
"date": "2025-05-16T15:09:53Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "18.0.7",
"date": "2025-05-15T08:24:30Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",

View File

@ -44,7 +44,7 @@
},
"notes": [
{
"text": "Wireguard and WGDashboard are not the same. More info: `https://donaldzou.github.io/WGDashboard-Documentation/what-is-wireguard-what-is-wgdashboard.html`",
"text": "Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
"type": "info"
}
]

View File

@ -0,0 +1,148 @@
import { Info } from "lucide-react";
import type { Script } from "@/lib/types";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Alert, AlertDescription } from "@/components/ui/alert";
import CodeCopyButton from "@/components/ui/code-copy-button";
import { basePath } from "@/config/site-config";
import { getDisplayValueFromType } from "../script-info-blocks";
function getInstallCommand(scriptPath = "", isAlpine = false, useGitea = false) {
const githubUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
const giteaUrl = `https://git.community-scripts.org/community-scripts/${basePath}/raw/branch/main/${scriptPath}`;
const url = useGitea ? giteaUrl : githubUrl;
return isAlpine ? `bash -c "$(curl -fsSL ${url})"` : `bash -c "$(curl -fsSL ${url})"`;
}
export default function InstallCommand({ item }: { item: Script }) {
const alpineScript = item.install_methods.find(method => method.type === "alpine");
const defaultScript = item.install_methods.find(method => method.type === "default");
const renderInstructions = (isAlpine = false) => (
<>
<p className="text-sm mt-2">
{isAlpine
? (
<>
As an alternative option, you can use Alpine Linux and the
{" "}
{item.name}
{" "}
package to create a
{" "}
{item.name}
{" "}
{getDisplayValueFromType(item.type)}
{" "}
container with faster creation time and minimal system resource usage.
You are also obliged to adhere to updates provided by the package maintainer.
</>
)
: item.type === "pve"
? (
<>
To use the
{" "}
{item.name}
{" "}
script, run the command below **only** in the Proxmox VE Shell. This script is
intended for managing or enhancing the host system directly.
</>
)
: item.type === "addon"
? (
<>
This script enhances an existing setup. You can use it inside a running LXC container or directly on the
Proxmox VE host to extend functionality with
{" "}
{item.name}
.
</>
)
: (
<>
To create a new Proxmox VE
{" "}
{item.name}
{" "}
{getDisplayValueFromType(item.type)}
, run the command below in the
Proxmox VE Shell.
</>
)}
</p>
{isAlpine && (
<p className="mt-2 text-sm">
To create a new Proxmox VE Alpine-
{item.name}
{" "}
{getDisplayValueFromType(item.type)}
, run the command below in
the Proxmox VE Shell.
</p>
)}
</>
);
const renderGiteaInfo = () => (
<Alert className="mt-3 mb-3">
<Info className="h-4 w-4" />
<AlertDescription className="text-sm">
<strong>When to use Gitea:</strong>
{" "}
GitHub may have issues including slow connections, delayed updates after bug
fixes, no IPv6 support, API rate limits (60/hour). Use our Gitea mirror as a reliable alternative when
experiencing these issues.
</AlertDescription>
</Alert>
);
const renderScriptTabs = (useGitea = false) => {
if (alpineScript) {
return (
<Tabs defaultValue="default" className="mt-2 w-full max-w-4xl">
<TabsList>
<TabsTrigger value="default">Default</TabsTrigger>
<TabsTrigger value="alpine">Alpine Linux</TabsTrigger>
</TabsList>
<TabsContent value="default">
{renderInstructions()}
<CodeCopyButton>{getInstallCommand(defaultScript?.script, false, useGitea)}</CodeCopyButton>
</TabsContent>
<TabsContent value="alpine">
{renderInstructions(true)}
<CodeCopyButton>{getInstallCommand(alpineScript.script, true, useGitea)}</CodeCopyButton>
</TabsContent>
</Tabs>
);
}
else if (defaultScript?.script) {
return (
<>
{renderInstructions()}
<CodeCopyButton>{getInstallCommand(defaultScript.script, false, useGitea)}</CodeCopyButton>
</>
);
}
return null;
};
return (
<div className="p-4">
<Tabs defaultValue="github" className="w-full max-w-4xl">
<TabsList>
<TabsTrigger value="github">GitHub</TabsTrigger>
<TabsTrigger value="gitea">Gitea</TabsTrigger>
</TabsList>
<TabsContent value="github">
{renderScriptTabs(false)}
</TabsContent>
<TabsContent value="gitea">
{renderGiteaInfo()}
{renderScriptTabs(true)}
</TabsContent>
</Tabs>
</div>
);
}

View File

@ -139,54 +139,34 @@ export default function CommandMenu() {
<CommandInput placeholder="Search for a script..." />
<CommandList>
<CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
{(() => {
// Track seen scripts globally to avoid duplicates across all categories
const globalSeenScripts = new Set<string>();
return links.map((category) => {
const uniqueScripts = category.scripts.filter((script) => {
if (globalSeenScripts.has(script.slug)) {
return false;
}
globalSeenScripts.add(script.slug);
return true;
});
// Only render category if it has unique scripts
if (uniqueScripts.length === 0) {
return null;
}
return (
<CommandGroup key={`category:${category.name}`} heading={category.name}>
{uniqueScripts.map(script => (
<CommandItem
key={`script:${script.slug}`}
value={`${script.slug}-${script.name}`}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.slug}`);
}}
>
<div className="flex gap-2" onClick={() => setOpen(false)}>
<Image
src={script.logo || `/${basePath}/logo.png`}
onError={e => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
unoptimized
width={16}
height={16}
alt=""
className="h-5 w-5"
/>
<span>{script.name}</span>
<span>{formattedBadge(script.type)}</span>
</div>
</CommandItem>
))}
</CommandGroup>
);
});
})()}
{links.map(category => (
<CommandGroup key={`category:${category.name}`} heading={category.name}>
{category.scripts.map(script => (
<CommandItem
key={`script:${script.slug}`}
value={`${script.slug}-${script.name}`}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.slug}`);
}}
>
<div className="flex gap-2" onClick={() => setOpen(false)}>
<Image
src={script.logo || `/${basePath}/logo.png`}
onError={e => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
unoptimized
width={16}
height={16}
alt=""
className="h-5 w-5"
/>
<span>{script.name}</span>
<span>{formattedBadge(script.type)}</span>
</div>
</CommandItem>
))}
</CommandGroup>
))}
</CommandList>
</CommandDialog>
</>

View File

@ -0,0 +1,82 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/C4illin/ConvertX
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_imagemagick
msg_info "Installing Dependencies"
$STD apt-get install -y \
assimp-utils \
calibre \
dcraw \
dvisvgm \
ffmpeg \
inkscape \
libva2 \
libvips-tools \
lmodern \
mupdf-tools \
pandoc \
poppler-utils \
potrace \
python3-numpy \
texlive \
texlive-fonts-recommended \
texlive-latex-extra \
texlive-latex-recommended \
texlive-xetex
msg_ok "Installed Dependencies"
NODE_VERSION=22 NODE_MODULE="bun" setup_nodejs
fetch_and_deploy_gh_release "ConvertX" "C4illin/ConvertX" "tarball" "latest" "/opt/convertx"
msg_info "Installing ConvertX"
cd /opt/convertx
mkdir -p data
$STD bun install
JWT_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32)
cat <<EOF >/opt/convertx/.env
JWT_SECRET=$JWT_SECRET
HTTP_ALLOWED=true
PORT=3000
EOF
msg_ok "Installed ConvertX"
msg_info "Creating Services"
cat <<EOF >/etc/systemd/system/convertx.service
[Unit]
Description=ConvertX File Converter
After=network.target
[Service]
Type=exec
WorkingDirectory=/opt/convertx
EnvironmentFile=/opt/convertx/.env
ExecStart=/bin/bun dev
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now convertx
msg_ok "Service Created"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -28,6 +28,7 @@ NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
msg_info "Installing Jellyseerr (Patience)"
export CYPRESS_INSTALL_BINARY=0
cd /opt/jellyseerr
$STD pnpm install --frozen-lockfile
export NODE_OPTIONS="--max-old-space-size=3072"
$STD pnpm build

View File

@ -128,7 +128,7 @@ update_os() {
msg_info "Updating Container OS"
if [[ "$CACHER" == "yes" ]]; then
echo "Acquire::http::Proxy-Auto-Detect \"/usr/local/bin/apt-proxy-detect.sh\";" >/etc/apt/apt.conf.d/00aptproxy
cat <<EOF >/usr/local/bin/apt-proxy-detect.sh
cat <<'EOF' >/usr/local/bin/apt-proxy-detect.sh
#!/bin/bash
if nc -w1 -z "${CACHER_IP}" 3142; then
echo -n "http://${CACHER_IP}:3142"

View File

@ -67,14 +67,21 @@ function setup_nodejs() {
# Update to latest npm
$STD npm install -g npm@latest || {
msg_error "Failed to update npm to latest version"
exit 1
}
msg_ok "Setup Node.js ${NODE_VERSION}"
fi
export NODE_OPTIONS="--max-old-space-size=4096"
# Ensure valid working directory for npm (avoids uv_cwd error)
if [[ ! -d /opt ]]; then
mkdir -p /opt
fi
cd /opt || {
msg_error "Failed to set safe working directory before npm install"
exit 1
}
# Install global Node modules
if [[ -n "$NODE_MODULE" ]]; then
IFS=',' read -ra MODULES <<<"$NODE_MODULE"
@ -643,8 +650,14 @@ function setup_mongodb() {
DISTRO_CODENAME=$(awk -F= '/^VERSION_CODENAME=/{ print $2 }' /etc/os-release)
case "$DISTRO_ID" in
ubuntu) MONGO_BASE_URL="https://repo.mongodb.org/apt/ubuntu" ;;
debian) MONGO_BASE_URL="https://repo.mongodb.org/apt/debian" ;;
ubuntu)
MONGO_BASE_URL="https://repo.mongodb.org/apt/ubuntu"
REPO_COMPONENT="multiverse"
;;
debian)
MONGO_BASE_URL="https://repo.mongodb.org/apt/debian"
REPO_COMPONENT="main"
;;
*)
msg_error "Unsupported distribution: $DISTRO_ID"
return 1
@ -676,7 +689,7 @@ function setup_mongodb() {
fi
curl -fsSL "https://pgp.mongodb.com/server-${MONGO_VERSION}.asc" | gpg --dearmor -o "/etc/apt/trusted.gpg.d/mongodb-${MONGO_VERSION}.gpg"
echo "deb [signed-by=/etc/apt/trusted.gpg.d/mongodb-${MONGO_VERSION}.gpg] ${MONGO_BASE_URL} ${DISTRO_CODENAME}/mongodb-org/${MONGO_VERSION} main" \
echo "deb [signed-by=/etc/apt/trusted.gpg.d/mongodb-${MONGO_VERSION}.gpg] ${MONGO_BASE_URL} ${DISTRO_CODENAME}/mongodb-org/${MONGO_VERSION} ${REPO_COMPONENT}" \
>"$REPO_LIST"
$STD apt-get update || {