Compare commits

...

13 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
d314168a37 Update CHANGELOG.md (#7390)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-04 00:12:13 +00:00
community-scripts-pr-app[bot]
d6ad11c5c2 Update versions.json (#7389)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-04 02:11:47 +02:00
community-scripts-pr-app[bot]
534592b44a Update CHANGELOG.md (#7386)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 18:33:13 +00:00
Slaviša Arežina
d9b6b58b36 Increase HDD size (#7384) 2025-09-03 20:32:52 +02:00
community-scripts-pr-app[bot]
298eb7e83d Update CHANGELOG.md (#7380)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 12:56:32 +00:00
Chris
c2dd1e413f Wizarr: fix uv lock issue; use correct output suppression (#7378) 2025-09-03 14:56:04 +02:00
community-scripts-pr-app[bot]
a4f1766408 Update CHANGELOG.md (#7379)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 12:45:49 +00:00
Bram Suurd
a24169e9b8 Fix navigation (#7376)
* Removed double entries from the search to improve navigation

* change input on search field to improve searchability

* added type to search to make sure that LXC and VM's dont get mixed up

* run linting over changes

---------

Co-authored-by: Bram Suurd <bram.suurd@infracom.nl>
2025-09-03 14:45:24 +02:00
community-scripts-pr-app[bot]
45a2163e66 Update CHANGELOG.md (#7377)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 12:43:16 +00:00
Slaviša Arežina
2fc3e62d60 Fix paths (#7374) 2025-09-03 14:42:52 +02:00
community-scripts-pr-app[bot]
210b846d61 Update versions.json (#7375)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 14:06:04 +02:00
community-scripts-pr-app[bot]
b04cfb65f7 Update CHANGELOG.md (#7369)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-03 07:25:57 +00:00
Desert Gamer
6a2fc4083b Enhanced IP-Tag installation script with interactive configuration, improved VM IP detection, and better visual indicators (#7366)
- **Interactive Configuration**: Added setup wizard for `TAG_FORMAT` (last_two_octets/last_octet/full) and `LOOP_INTERVAL` (30-7200 seconds) during installation/update
- **Unified Installation Menu**: Replaced conditional service detection with unified menu offering install-with-service, install-command-only, and update options
- **Post-Installation Guidance**: Added comprehensive information display about configuration file location (`/opt/iptag/iptag.conf`) and required CIDR_LIST setup
- **Improved VM IP Detection**: Enhanced IP discovery with QM guest agent priority, ARP table validation via ping, and automatic removal of stale ARP entries
- **Visual Indicators**: Replaced emoji symbols with standard ASCII characters (✓/✗) with proper colors for better terminal compatibility
- **Simplified Update Process**: Removed complex service detection logic and provided direct update option in main menu

These changes address user feedback about complex installation requirements, VM IP detection issues, and provide clearer guidance for network subnet configuration.
2025-09-03 09:25:37 +02:00
9 changed files with 655 additions and 814 deletions

View File

@@ -10,8 +10,28 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-09-04
## 2025-09-03
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Element-Synapse: Increase HDD size [@tremor021](https://github.com/tremor021) ([#7384](https://github.com/community-scripts/ProxmoxVE/pull/7384))
- Wizarr: fix uv lock issue; use correct output suppression [@vhsdream](https://github.com/vhsdream) ([#7378](https://github.com/community-scripts/ProxmoxVE/pull/7378))
- Netbox: Fix missing directory [@tremor021](https://github.com/tremor021) ([#7374](https://github.com/community-scripts/ProxmoxVE/pull/7374))
- #### 🔧 Refactor
- Enhanced IP-Tag installation script with interactive configuration, improved VM IP detection, and better visual indicators [@DesertGamer](https://github.com/DesertGamer) ([#7366](https://github.com/community-scripts/ProxmoxVE/pull/7366))
### 🌐 Website
- #### 🐞 Bug Fixes
- Fix navigation [@BramSuurdje](https://github.com/BramSuurdje) ([#7376](https://github.com/community-scripts/ProxmoxVE/pull/7376))
## 2025-09-02
### 🚀 Updated Scripts

View File

@@ -9,7 +9,7 @@ APP="Element Synapse"
var_tags="${var_tags:-server}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"

View File

@@ -45,13 +45,14 @@ function update_script() {
msg_info "Updating $APP"
cd /opt/wizarr
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
$STD /usr/local/bin/uv lock
$STD /usr/local/bin/uv sync --locked
$STD /usr/local/bin/uv run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD tar -xf "$BACKUP_FILE" --directory=/
$STD /usr/local/bin/uv -q run flask db upgrade
$STD /usr/local/bin/uv run flask db upgrade
msg_ok "Updated $APP"
msg_info "Starting $APP"
@@ -61,7 +62,7 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf "$BACKUP_FILE"
msg_ok "Cleanup Completed"
msg_ok "Update Successfully"
msg_ok "Updated Successfully"
fi
exit
}

View File

@@ -21,7 +21,7 @@
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 4,
"hdd": 8,
"os": "debian",
"version": "12"
}

View File

@@ -1,8 +1,68 @@
[
{
"name": "mongodb/mongo",
"version": "r8.0.14-rc0",
"date": "2025-09-02T22:46:40Z"
"name": "Cleanuparr/Cleanuparr",
"version": "v2.2.2",
"date": "2025-09-03T20:58:13Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.125.1",
"date": "2025-09-03T20:17:18Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.35.1",
"date": "2025-09-03T18:53:36Z"
},
{
"name": "home-assistant/core",
"version": "2025.9.0",
"date": "2025-09-03T17:58:41Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.5.0",
"date": "2025-09-03T17:42:18Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.1.1",
"date": "2025-09-03T15:12:56Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.1.15",
"date": "2025-09-03T14:51:37Z"
},
{
"name": "emqx/emqx",
"version": "v5.8.8",
"date": "2025-09-03T14:25:26Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.13.0",
"date": "2025-09-03T13:48:17Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.27.5.10198",
"date": "2025-09-03T12:08:43Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.109.2",
"date": "2025-09-03T07:50:21Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p11",
"date": "2025-09-03T09:58:14Z"
},
{
"name": "mattermost/mattermost",
@@ -10,9 +70,64 @@
"date": "2025-09-02T21:38:40Z"
},
{
"name": "Cleanuparr/Cleanuparr",
"version": "v2.2.0",
"date": "2025-09-02T20:30:49Z"
"name": "cockpit-project/cockpit",
"version": "346",
"date": "2025-09-03T09:13:05Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.526",
"date": "2025-09-02T18:44:42Z"
},
{
"name": "apache/cassandra",
"version": "cassandra-4.1.10",
"date": "2025-09-03T08:46:02Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.6",
"date": "2025-09-03T07:55:14Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2411",
"date": "2025-09-03T05:51:25Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.1.2",
"date": "2025-09-03T03:18:53Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-09-03T00:27:10Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.3",
"date": "2025-09-02T23:52:26Z"
},
{
"name": "mongodb/mongo",
"version": "r8.0.14-rc0",
"date": "2025-09-02T22:46:40Z"
},
{
"name": "keycloak/keycloak",
"version": "26.0.15",
"date": "2025-08-27T12:12:03Z"
},
{
"name": "ollama/ollama",
@@ -21,18 +136,8 @@
},
{
"name": "runtipi/runtipi",
"version": "v4.4.0",
"date": "2025-09-02T17:52:03Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.5",
"date": "2025-09-02T19:18:08Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.526",
"date": "2025-09-02T18:44:42Z"
"version": "nightly",
"date": "2025-09-02T19:26:18Z"
},
{
"name": "Luligu/matterbridge",
@@ -64,11 +169,6 @@
"version": "10.1.45",
"date": "2025-09-02T12:46:34Z"
},
{
"name": "emqx/emqx",
"version": "v5.8.8-rc.1",
"date": "2025-09-02T12:00:55Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.7.8",
@@ -79,31 +179,6 @@
"version": "22.0.1",
"date": "2025-09-02T10:29:08Z"
},
{
"name": "home-assistant/core",
"version": "2025.8.3",
"date": "2025-08-21T18:23:10Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.108.2",
"date": "2025-08-27T13:05:35Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p11-rc3",
"date": "2025-09-02T06:53:18Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2404",
"date": "2025-09-02T06:08:35Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "cloudreve/cloudreve",
"version": "4.7.0",
@@ -129,26 +204,11 @@
"version": "v4.39.8",
"date": "2025-09-02T00:44:45Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-09-02T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.1.1",
"date": "2025-09-01T22:05:26Z"
},
{
"name": "postgres/postgres",
"version": "REL_18_RC1",
@@ -164,11 +224,6 @@
"version": "2.6.1",
"date": "2025-09-01T19:05:18Z"
},
{
"name": "keycloak/keycloak",
"version": "26.0.15",
"date": "2025-08-27T12:12:03Z"
},
{
"name": "outline/outline",
"version": "v0.87.3",
@@ -200,14 +255,9 @@
"date": "2025-09-01T09:47:06Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.1.0",
"date": "2025-09-01T12:03:04Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.125.0",
"date": "2025-09-01T11:01:54Z"
"name": "wazuh/wazuh",
"version": "coverity-w36-4.13.0",
"date": "2025-09-01T11:40:11Z"
},
{
"name": "grokability/snipe-it",
@@ -229,21 +279,11 @@
"version": "v1.19.2",
"date": "2025-09-01T02:33:52Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.2",
"date": "2025-08-31T22:21:50Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.17.1",
"date": "2025-08-31T21:38:21Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.12.1",
"date": "2025-08-31T21:33:41Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.8.5",
@@ -304,11 +344,6 @@
"version": "v1.24.26",
"date": "2025-08-29T20:26:08Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.35.0",
"date": "2025-08-29T19:14:25Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.0.0",
@@ -319,11 +354,6 @@
"version": "v2.1.0",
"date": "2025-08-29T12:56:13Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "7.0.0-alpha.2",
"date": "2025-08-29T10:57:06Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.19",
@@ -394,11 +424,6 @@
"version": "4.4.45",
"date": "2025-08-28T10:12:16Z"
},
{
"name": "apache/cassandra",
"version": "4.1.10-tentative",
"date": "2025-08-28T10:02:40Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.9.2",
@@ -484,11 +509,6 @@
"version": "v3.1.2",
"date": "2025-08-25T18:00:52Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w35-4.13.0",
"date": "2025-08-25T15:17:33Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.3",
@@ -519,11 +539,6 @@
"version": "2.1",
"date": "2025-08-24T15:42:19Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.26.2.10099",
"date": "2025-06-11T20:10:39Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.0.5.5160",
@@ -609,21 +624,11 @@
"version": "v1.4.6",
"date": "2025-08-21T14:05:58Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.65",
"date": "2025-08-20T14:02:28Z"
},
{
"name": "cockpit-project/cockpit",
"version": "345",
"date": "2025-08-20T11:52:24Z"
},
{
"name": "openhab/openhab-core",
"version": "4.3.7",
@@ -809,11 +814,6 @@
"version": "v25.08.1",
"date": "2025-08-06T21:04:07Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.4.6",
"date": "2025-08-06T17:48:36Z"
},
{
"name": "TryGhost/Ghost-CLI",
"version": "v1.28.3",

View File

@@ -36,19 +36,24 @@ export function formattedBadge(type: string) {
return null;
}
// random Script
function getRandomScript(categories: Category[]): Script | null {
function getRandomScript(categories: Category[], previouslySelected: Set<string> = new Set()): Script | null {
const allScripts = categories.flatMap(cat => cat.scripts || []);
if (allScripts.length === 0)
return null;
const idx = Math.floor(Math.random() * allScripts.length);
return allScripts[idx];
const availableScripts = allScripts.filter(script => !previouslySelected.has(script.slug));
if (availableScripts.length === 0) {
return allScripts[Math.floor(Math.random() * allScripts.length)];
}
const idx = Math.floor(Math.random() * availableScripts.length);
return availableScripts[idx];
}
export default function CommandMenu() {
function CommandMenu() {
const [open, setOpen] = React.useState(false);
const [links, setLinks] = React.useState<Category[]>([]);
const [isLoading, setIsLoading] = React.useState(false);
const [selectedScripts, setSelectedScripts] = React.useState<Set<string>>(new Set());
const router = useRouter();
const fetchSortedCategories = () => {
@@ -65,25 +70,26 @@ export default function CommandMenu() {
};
React.useEffect(() => {
const down = (e: KeyboardEvent) => {
const handleKeyDown = (e: KeyboardEvent) => {
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
e.preventDefault();
fetchSortedCategories();
setOpen(open => !open);
}
};
document.addEventListener("keydown", down);
return () => document.removeEventListener("keydown", down);
document.addEventListener("keydown", handleKeyDown);
return () => document.removeEventListener("keydown", handleKeyDown);
}, []);
const openRandomScript = async () => {
const handleOpenRandomScript = async () => {
if (links.length === 0) {
setIsLoading(true);
try {
const categories = await fetchCategories();
setLinks(categories);
const randomScript = getRandomScript(categories);
const randomScript = getRandomScript(categories, selectedScripts);
if (randomScript) {
setSelectedScripts(prev => new Set([...prev, randomScript.slug]));
router.push(`/scripts?id=${randomScript.slug}`);
}
}
@@ -92,13 +98,54 @@ export default function CommandMenu() {
}
}
else {
const randomScript = getRandomScript(links);
const randomScript = getRandomScript(links, selectedScripts);
if (randomScript) {
setSelectedScripts(prev => new Set([...prev, randomScript.slug]));
router.push(`/scripts?id=${randomScript.slug}`);
}
}
};
const getUniqueScriptsMap = React.useCallback(() => {
const scriptMap = new Map<string, { script: Script; categoryName: string }>();
for (const category of links) {
for (const script of category.scripts) {
if (!scriptMap.has(script.slug)) {
scriptMap.set(script.slug, { script, categoryName: category.name });
}
}
}
return scriptMap;
}, [links]);
const getUniqueScriptsByCategory = React.useCallback(() => {
const scriptMap = getUniqueScriptsMap();
const categoryOrder = links.map(cat => cat.name);
const grouped: Record<string, Script[]> = {};
for (const name of categoryOrder) {
grouped[name] = [];
}
for (const { script, categoryName } of scriptMap.values()) {
if (grouped[categoryName]) {
grouped[categoryName].push(script);
}
else {
grouped[categoryName] = [script];
}
}
Object.keys(grouped).forEach((cat) => {
if (grouped[cat].length === 0)
delete grouped[cat];
});
return grouped;
}, [getUniqueScriptsMap, links]);
const uniqueScriptsByCategory = getUniqueScriptsByCategory();
return (
<>
<div className="flex gap-2">
@@ -122,7 +169,20 @@ export default function CommandMenu() {
<TooltipProvider>
<Tooltip delayDuration={100}>
<TooltipTrigger asChild>
<Button variant="outline" size="icon" onClick={openRandomScript} disabled={isLoading} className="hidden lg:flex">
<Button
variant="outline"
size="icon"
onClick={handleOpenRandomScript}
disabled={isLoading}
className="hidden lg:flex"
aria-label="Open Random Script"
tabIndex={0}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") {
handleOpenRandomScript();
}
}}
>
<Sparkles className="size-4" />
<span className="sr-only">Open Random Script</span>
</Button>
@@ -139,16 +199,24 @@ export default function CommandMenu() {
<CommandInput placeholder="Search for a script..." />
<CommandList>
<CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
{links.map(category => (
<CommandGroup key={`category:${category.name}`} heading={category.name}>
{category.scripts.map(script => (
{Object.entries(uniqueScriptsByCategory).map(([categoryName, scripts]) => (
<CommandGroup key={`category:${categoryName}`} heading={categoryName}>
{scripts.map(script => (
<CommandItem
key={`script:${script.slug}`}
value={`${script.slug}-${script.name}`}
value={`${script.name}-${script.type}`}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.slug}`);
}}
tabIndex={0}
aria-label={`Open script ${script.name}`}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") {
setOpen(false);
router.push(`/scripts?id=${script.slug}`);
}
}}
>
<div className="flex gap-2" onClick={() => setOpen(false)}>
<Image
@@ -172,3 +240,5 @@ export default function CommandMenu() {
</>
);
}
export default CommandMenu;

View File

@@ -56,6 +56,7 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/netbox-community/netbox/releas
curl -fsSL "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
$STD unzip "v${RELEASE}.zip"
mv /opt/netbox-"${RELEASE}"/ /opt/netbox
mkdir -p /opt/netbox/netbox/media
$STD adduser --system --group netbox
chown --recursive netbox /opt/netbox/netbox/media/

View File

@@ -23,12 +23,13 @@ fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
msg_info "Configure ${APPLICATION}"
cd /opt/wizarr
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
$STD /usr/local/bin/uv lock
$STD /usr/local/bin/uv sync --locked
$STD /usr/local/bin/uv run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD /usr/local/bin/uv -q run flask db upgrade
$STD /usr/local/bin/uv run flask db upgrade
msg_ok "Configure ${APPLICATION}"
msg_info "Creating env, start script and service"

File diff suppressed because it is too large Load Diff