Compare commits

..

15 Commits

Author SHA1 Message Date
CanbiZ
2fd303df8b huntarr: disable on website during install issues
Added disable flag and description for installation issues.
2025-11-24 14:27:59 +01:00
community-scripts-pr-app[bot]
ce9323ab17 Update versions.json (#9402)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-24 13:05:43 +01:00
community-scripts-pr-app[bot]
279ed5325c Update CHANGELOG.md (#9399)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-24 00:14:26 +00:00
community-scripts-pr-app[bot]
b66fb43fff Update versions.json (#9398)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-24 01:14:01 +01:00
community-scripts-pr-app[bot]
ff7b321065 Update CHANGELOG.md (#9393)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 20:35:56 +00:00
CanbiZ
6a5ad42279 remove journal log rotation (#9392) 2025-11-23 21:35:31 +01:00
community-scripts-pr-app[bot]
4631f1c09e Update CHANGELOG.md (#9390)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 19:27:19 +00:00
Slaviša Arežina
6bcf8b3097 Add info on currently running kernel (#9388) 2025-11-23 20:26:58 +01:00
community-scripts-pr-app[bot]
7ac9023a57 Update CHANGELOG.md (#9389)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 19:25:39 +00:00
Bram
07e46a4585 fix: enhance back navigation in NotFoundPage component and remove unused deps (#9341)
* fix: enhance back navigation in NotFoundPage component

* chore: update dependencies and refactor imports

- Updated `framer-motion` to version `12.23.12` in `package.json` and `bun.lock`.
- Removed unused dependencies: `fuse.js`, `react-code-blocks`, `react-datepicker`, `pocketbase`, `simple-icons`.
- Refactored import in `number-ticker.tsx` to use `motion/react` instead of `framer-motion`.
- Removed CSS import for `react-datepicker` in `page.tsx`.

* fix: update NotFoundPage redirection to use basePath from site-config

- Modified the redirection logic in NotFoundPage to use the basePath variable.
- Set default basePath to "ProxmoxVE" in site-config for improved routing consistency.

* update bun.lock
2025-11-23 20:25:12 +01:00
community-scripts-pr-app[bot]
4003aad7d5 Update CHANGELOG.md (#9384)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 12:23:36 +00:00
community-scripts-pr-app[bot]
b9809d6768 Update CHANGELOG.md (#9383)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 12:23:17 +00:00
community-scripts-pr-app[bot]
70d59b825c Update date in json (#9382)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-11-23 12:23:14 +00:00
Alpha Vylly
72a39012b6 feat: add script disable functionality with visual indicators (#9374) 2025-11-23 13:22:57 +01:00
community-scripts-pr-app[bot]
4134f68fb4 Update versions.json (#9381)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-23 13:05:10 +01:00
13 changed files with 311 additions and 128 deletions

View File

@@ -10,19 +10,36 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-24
## 2025-11-23 ## 2025-11-23
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- core: remove journal log rotation [@MickLesk](https://github.com/MickLesk) ([#9392](https://github.com/community-scripts/ProxmoxVE/pull/9392))
- [LibreNMS] Correcting mariadb sed string for Debian 13 default in install/librenms-install.sh, website config for Debian 13 #9369 [@htmlspinnr](https://github.com/htmlspinnr) ([#9370](https://github.com/community-scripts/ProxmoxVE/pull/9370)) - [LibreNMS] Correcting mariadb sed string for Debian 13 default in install/librenms-install.sh, website config for Debian 13 #9369 [@htmlspinnr](https://github.com/htmlspinnr) ([#9370](https://github.com/community-scripts/ProxmoxVE/pull/9370))
- fix: Snipe-IT update check failure [@ruanmed](https://github.com/ruanmed) ([#9371](https://github.com/community-scripts/ProxmoxVE/pull/9371)) - fix: Snipe-IT update check failure [@ruanmed](https://github.com/ruanmed) ([#9371](https://github.com/community-scripts/ProxmoxVE/pull/9371))
- #### ✨ New Features
- PVE Kernel Clean: Add info about currently running kernel [@tremor021](https://github.com/tremor021) ([#9388](https://github.com/community-scripts/ProxmoxVE/pull/9388))
- #### 🔧 Refactor - #### 🔧 Refactor
- Update glpi-install.sh to remove install.php [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9378](https://github.com/community-scripts/ProxmoxVE/pull/9378)) - Update glpi-install.sh to remove install.php [@CrazyWolf13](https://github.com/CrazyWolf13) ([#9378](https://github.com/community-scripts/ProxmoxVE/pull/9378))
### 🌐 Website
- #### 🐞 Bug Fixes
- fix: enhance back navigation in NotFoundPage component and remove unused deps [@BramSuurdje](https://github.com/BramSuurdje) ([#9341](https://github.com/community-scripts/ProxmoxVE/pull/9341))
- #### ✨ New Features
- feat(frontend): add script disable functionality with visual indicators [@AlphaLawless](https://github.com/AlphaLawless) ([#9374](https://github.com/community-scripts/ProxmoxVE/pull/9374))
## 2025-11-22 ## 2025-11-22
### 🆕 New Scripts ### 🆕 New Scripts

View File

@@ -14,6 +14,8 @@
"website": "https://github.com/plexguide/Huntarr.io", "website": "https://github.com/plexguide/Huntarr.io",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/huntarr.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/huntarr.webp",
"description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.", "description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.",
"disable": true,
"disable_description": "This script has been temporarily disabled due to ongoing installation failures caused by incompatible Python and build dependencies. PyYAML 6.0 fails to build on Debian 13 and under Python 3.12/3.13, making Huntarr currently non-installable in a reliable way. This issue originates upstream and is under investigation. The script will be re-enabled once a stable solution is available. For details, see: https://github.com/community-scripts/ProxmoxVE/issues/9196 or https://github.com/plexguide/Huntarr.io/issues/747",
"install_methods": [ "install_methods": [
{ {
"type": "default", "type": "default",

View File

@@ -0,0 +1,43 @@
{
"name": "OPNsense",
"slug": "opnsense-vm",
"categories": [
4,
2
],
"date_created": "2025-11-23",
"type": "vm",
"updateable": true,
"privileged": false,
"interface_port": 443,
"documentation": "https://docs.opnsense.org/",
"website": "https://opnsense.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/opnsense.webp",
"config_path": "",
"description": "OPNsense is an open-source firewall and routing platform based on FreeBSD. It provides advanced security features, including intrusion detection, VPN support, traffic shaping, and web filtering, with an intuitive web interface for easy management. Known for its reliability and regular updates, OPNsense is a popular choice for both businesses and home networks.",
"disable": true,
"disable_description": "This script has been temporarily disabled due to installation failures. The OPNsense bootstrap process was not completing successfully, resulting in a plain FreeBSD VM instead of a functional OPNsense installation. The issue is being investigated and the script will be re-enabled once resolved. For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/6183",
"install_methods": [
{
"type": "default",
"script": "vm/opnsense-vm.sh",
"resources": {
"cpu": 4,
"ram": 8192,
"hdd": 10,
"os": "FreeBSD",
"version": "latest"
}
}
],
"default_credentials": {
"username": "root",
"password": "opnsense"
},
"notes": [
{
"text": "It will fail with default settings if there is no vmbr0 and vmbr1 on your node. Use advanced settings in this case.",
"type": "warning"
}
]
}

View File

@@ -1,4 +1,99 @@
[ [
{
"name": "silverbulletmd/silverbullet",
"version": "2.3.0",
"date": "2025-11-24T09:48:32Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.17.0-beta22",
"date": "2025-11-24T06:07:49Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.348",
"date": "2025-11-24T05:56:06Z"
},
{
"name": "webmin/webmin",
"version": "2.610",
"date": "2025-11-24T04:28:30Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.8",
"date": "2025-11-13T04:42:27Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.37",
"date": "2025-11-24T03:10:18Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-24T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.1.0",
"date": "2025-11-23T12:13:34Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.32.5",
"date": "2025-11-23T22:53:33Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.18.0",
"date": "2025-11-23T17:42:53Z"
},
{
"name": "wavelog/wavelog",
"version": "2.2",
"date": "2025-11-23T17:32:38Z"
},
{
"name": "verdaccio/verdaccio",
"version": "v6.2.2",
"date": "2025-11-23T16:54:07Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.6.1",
"date": "2025-11-23T16:42:50Z"
},
{
"name": "openhab/openhab-core",
"version": "5.0.3",
"date": "2025-11-23T14:22:13Z"
},
{
"name": "readeck/readeck",
"version": "0.21.2",
"date": "2025-11-23T10:56:43Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.3.0-rc1",
"date": "2025-11-23T05:42:35Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.5.rc.2",
"date": "2025-11-23T00:31:24Z"
},
{ {
"name": "paperless-ngx/paperless-ngx", "name": "paperless-ngx/paperless-ngx",
"version": "v2.20.0", "version": "v2.20.0",
@@ -39,6 +134,11 @@
"version": "v14.2.0", "version": "v14.2.0",
"date": "2025-11-22T12:54:08Z" "date": "2025-11-22T12:54:08Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.5",
"date": "2025-11-12T15:24:23Z"
},
{ {
"name": "pocketbase/pocketbase", "name": "pocketbase/pocketbase",
"version": "v0.34.0", "version": "v0.34.0",
@@ -59,36 +159,16 @@
"version": "1.1.5", "version": "1.1.5",
"date": "2025-11-22T07:02:52Z" "date": "2025-11-22T07:02:52Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.24.339",
"date": "2025-11-22T06:05:53Z"
},
{ {
"name": "theonedev/onedev", "name": "theonedev/onedev",
"version": "v13.1.0", "version": "v13.1.0",
"date": "2025-11-22T04:29:25Z" "date": "2025-11-18T00:06:49Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-22T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
}, },
{ {
"name": "TwiN/gatus", "name": "TwiN/gatus",
"version": "v5.33.0", "version": "v5.33.0",
"date": "2025-11-21T22:54:49Z" "date": "2025-11-21T22:54:49Z"
}, },
{
"name": "BerriAI/litellm",
"version": "v1.78.5-stable-patch-1",
"date": "2025-11-21T19:57:45Z"
},
{ {
"name": "homarr-labs/homarr", "name": "homarr-labs/homarr",
"version": "v1.44.0", "version": "v1.44.0",
@@ -104,16 +184,6 @@
"version": "v1.72.0", "version": "v1.72.0",
"date": "2025-11-21T18:20:58Z" "date": "2025-11-21T18:20:58Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.5",
"date": "2025-11-12T15:24:23Z"
},
{
"name": "readeck/readeck",
"version": "0.21.1",
"date": "2025-11-21T17:17:52Z"
},
{ {
"name": "mattermost/mattermost", "name": "mattermost/mattermost",
"version": "v10.11.8", "version": "v10.11.8",
@@ -154,11 +224,6 @@
"version": "v0.23.0-alpha.24", "version": "v0.23.0-alpha.24",
"date": "2025-11-21T12:16:39Z" "date": "2025-11-21T12:16:39Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v4.32.3",
"date": "2025-11-21T11:16:25Z"
},
{ {
"name": "seriousm4x/UpSnap", "name": "seriousm4x/UpSnap",
"version": "5.2.4", "version": "5.2.4",
@@ -189,11 +254,6 @@
"version": "mariadb-12.1.2", "version": "mariadb-12.1.2",
"date": "2025-11-18T15:16:21Z" "date": "2025-11-18T15:16:21Z"
}, },
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{ {
"name": "bluenviron/mediamtx", "name": "bluenviron/mediamtx",
"version": "v1.15.4", "version": "v1.15.4",
@@ -359,11 +419,6 @@
"version": "v1.143.0rc1", "version": "v1.143.0rc1",
"date": "2025-11-19T00:09:31Z" "date": "2025-11-19T00:09:31Z"
}, },
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{ {
"name": "gtsteffaniak/filebrowser", "name": "gtsteffaniak/filebrowser",
"version": "v1.0.1-stable", "version": "v1.0.1-stable",
@@ -419,11 +474,6 @@
"version": "pmm-6401-v1.130.0", "version": "pmm-6401-v1.130.0",
"date": "2025-11-17T21:16:38Z" "date": "2025-11-17T21:16:38Z"
}, },
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.8",
"date": "2025-11-13T04:42:27Z"
},
{ {
"name": "influxdata/telegraf", "name": "influxdata/telegraf",
"version": "v1.36.4", "version": "v1.36.4",
@@ -529,11 +579,6 @@
"version": "v4.7.0", "version": "v4.7.0",
"date": "2025-11-14T09:45:13Z" "date": "2025-11-14T09:45:13Z"
}, },
{
"name": "verdaccio/verdaccio",
"version": "generator-verdaccio-plugin@6.0.0-next-8.25",
"date": "2025-11-14T08:14:55Z"
},
{ {
"name": "runtipi/runtipi", "name": "runtipi/runtipi",
"version": "v4.6.5", "version": "v4.6.5",
@@ -574,11 +619,6 @@
"version": "351", "version": "351",
"date": "2025-11-12T11:28:06Z" "date": "2025-11-12T11:28:06Z"
}, },
{
"name": "webmin/webmin",
"version": "2.600",
"date": "2025-11-12T05:01:55Z"
},
{ {
"name": "moghtech/komodo", "name": "moghtech/komodo",
"version": "v1.19.5", "version": "v1.19.5",
@@ -664,11 +704,6 @@
"version": "3.5.1", "version": "3.5.1",
"date": "2025-11-09T05:09:28Z" "date": "2025-11-09T05:09:28Z"
}, },
{
"name": "raydak-labs/configarr",
"version": "v1.17.2",
"date": "2025-11-08T22:47:58Z"
},
{ {
"name": "hargata/lubelog", "name": "hargata/lubelog",
"version": "v1.5.4", "version": "v1.5.4",
@@ -684,11 +719,6 @@
"version": "v7.13.0", "version": "v7.13.0",
"date": "2025-11-08T13:36:25Z" "date": "2025-11-08T13:36:25Z"
}, },
{
"name": "semaphoreui/semaphore",
"version": "v2.16.45",
"date": "2025-11-07T19:08:05Z"
},
{ {
"name": "cloudflare/cloudflared", "name": "cloudflare/cloudflared",
"version": "2025.11.1", "version": "2025.11.1",
@@ -704,11 +734,6 @@
"version": "v4.52.0", "version": "v4.52.0",
"date": "2025-11-06T22:39:26Z" "date": "2025-11-06T22:39:26Z"
}, },
{
"name": "open-webui/open-webui",
"version": "v0.6.36",
"date": "2025-11-06T21:45:33Z"
},
{ {
"name": "HabitRPG/habitica", "name": "HabitRPG/habitica",
"version": "v5.41.6", "version": "v5.41.6",
@@ -824,21 +849,11 @@
"version": "v25.11.0", "version": "v25.11.0",
"date": "2025-11-04T00:32:21Z" "date": "2025-11-04T00:32:21Z"
}, },
{
"name": "silverbulletmd/silverbullet",
"version": "2.2.1",
"date": "2025-11-03T06:57:15Z"
},
{ {
"name": "maxdorninger/MediaManager", "name": "maxdorninger/MediaManager",
"version": "v1.9.1", "version": "v1.9.1",
"date": "2025-11-02T21:14:50Z" "date": "2025-11-02T21:14:50Z"
}, },
{
"name": "tobychui/zoraxy",
"version": "v3.2.9",
"date": "2025-11-02T05:48:39Z"
},
{ {
"name": "9001/copyparty", "name": "9001/copyparty",
"version": "v1.19.20", "version": "v1.19.20",
@@ -909,11 +924,6 @@
"version": "v3.0.0-beta.2", "version": "v3.0.0-beta.2",
"date": "2025-10-28T10:16:29Z" "date": "2025-10-28T10:16:29Z"
}, },
{
"name": "openhab/openhab-core",
"version": "5.1.0.M2",
"date": "2025-10-26T14:38:02Z"
},
{ {
"name": "ErsatzTV/ErsatzTV", "name": "ErsatzTV/ErsatzTV",
"version": "v25.8.0", "version": "v25.8.0",
@@ -994,16 +1004,6 @@
"version": "v0.14.1", "version": "v0.14.1",
"date": "2024-08-29T22:32:51Z" "date": "2024-08-29T22:32:51Z"
}, },
{
"name": "wavelog/wavelog",
"version": "2.1.2",
"date": "2025-10-15T06:51:32Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.5",
"date": "2025-10-14T18:48:36Z"
},
{ {
"name": "rogerfar/rdt-client", "name": "rogerfar/rdt-client",
"version": "v2.0.119", "version": "v2.0.119",

View File

@@ -35,12 +35,22 @@ export const ScriptSchema = z.object({
logo: z.string().url().nullable(), logo: z.string().url().nullable(),
config_path: z.string(), config_path: z.string(),
description: z.string().min(1, "Description is required"), description: z.string().min(1, "Description is required"),
disable: z.boolean().optional(),
disable_description: z.string().optional(),
install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"), install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"),
default_credentials: z.object({ default_credentials: z.object({
username: z.string().nullable(), username: z.string().nullable(),
password: z.string().nullable(), password: z.string().nullable(),
}), }),
notes: z.array(NoteSchema), notes: z.array(NoteSchema),
}).refine((data) => {
if (data.disable === true && !data.disable_description) {
return false;
}
return true;
}, {
message: "disable_description is required when disable is true",
path: ["disable_description"],
}); });
export type Script = z.infer<typeof ScriptSchema>; export type Script = z.infer<typeof ScriptSchema>;

View File

@@ -42,6 +42,8 @@ const initialScript: Script = {
website: null, website: null,
logo: null, logo: null,
description: "", description: "",
disable: undefined,
disable_description: undefined,
install_methods: [], install_methods: [],
default_credentials: { default_credentials: {
username: null, username: null,
@@ -261,7 +263,25 @@ export default function JSONGenerator() {
<Switch checked={script.privileged} onCheckedChange={checked => updateScript("privileged", checked)} /> <Switch checked={script.privileged} onCheckedChange={checked => updateScript("privileged", checked)} />
<label>Privileged</label> <label>Privileged</label>
</div> </div>
<div className="flex items-center space-x-2">
<Switch checked={script.disable || false} onCheckedChange={checked => updateScript("disable", checked)} />
<label>Disabled</label>
</div> </div>
</div>
{script.disable && (
<div>
<Label>
Disable Description
{" "}
<span className="text-red-500">*</span>
</Label>
<Textarea
placeholder="Explain why this script is disabled..."
value={script.disable_description || ""}
onChange={e => updateScript("disable_description", e.target.value)}
/>
</div>
)}
<Input <Input
placeholder="Interface Port" placeholder="Interface Port"
type="number" type="number"

View File

@@ -123,7 +123,7 @@ export default function ScriptAccordion({
className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${selectedScript === script.slug className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${selectedScript === script.slug
? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white" ? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
: "" : ""
}`} } ${script.disable ? "opacity-60" : ""}`}
onClick={() => { onClick={() => {
handleSelected(script.slug); handleSelected(script.slug);
setSelectedCategory(category.name); setSelectedCategory(category.name);
@@ -143,7 +143,9 @@ export default function ScriptAccordion({
alt={script.name} alt={script.name}
className="mr-1 w-4 h-4 rounded-full" className="mr-1 w-4 h-4 rounded-full"
/> />
<span className="flex items-center gap-2">{script.name}</span> <span className="flex items-center gap-2">
{script.name}
</span>
</div> </div>
{formattedBadge(script.type)} {formattedBadge(script.type)}
</Link> </Link>

View File

@@ -12,6 +12,7 @@ import { useVersions } from "@/hooks/use-versions";
import { basePath } from "@/config/site-config"; import { basePath } from "@/config/site-config";
import { extractDate } from "@/lib/time"; import { extractDate } from "@/lib/time";
import DisableDescription from "./script-items/disable-description";
import { getDisplayValueFromType } from "./script-info-blocks"; import { getDisplayValueFromType } from "./script-info-blocks";
import DefaultPassword from "./script-items/default-password"; import DefaultPassword from "./script-items/default-password";
import InstallCommand from "./script-items/install-command"; import InstallCommand from "./script-items/install-command";
@@ -146,9 +147,15 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
<ScriptHeader item={item} /> <ScriptHeader item={item} />
</Suspense> </Suspense>
<Description item={item} /> {item.disable && item.disable_description && (
<Alerts item={item} /> <DisableDescription item={item} />
) }
{!item.disable && (
<>
<Description item={item} />
<Alerts item={item} />
<div className="mt-4 rounded-lg border shadow-sm"> <div className="mt-4 rounded-lg border shadow-sm">
<div className="flex gap-3 px-4 py-2 bg-accent/25"> <div className="flex gap-3 px-4 py-2 bg-accent/25">
<h2 className="text-lg font-semibold"> <h2 className="text-lg font-semibold">
@@ -177,6 +184,8 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
</div> </div>
<DefaultPassword item={item} /> <DefaultPassword item={item} />
</>
)}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,26 @@
import { AlertCircle } from "lucide-react";
import type { Script } from "@/lib/types";
import TextParseLinks from "@/components/text-parse-links";
import { AlertColors } from "@/config/site-config";
import { cn } from "@/lib/utils";
export default function DisableDescription({ item }: { item: Script }) {
return (
<div className="mt-4 flex flex-col shadow-sm gap-2">
<div
className={cn(
"flex items-start gap-3 rounded-lg border p-4 text-sm",
AlertColors.warning,
)}
>
<AlertCircle className="h-5 min-h-5 w-5 min-w-5 mt-0.5" />
<div className="flex flex-col gap-2">
<h3 className="font-semibold text-base">Script Disabled</h3>
<p>{TextParseLinks(item.disable_description!)}</p>
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,52 @@
import { ClipboardIcon, ExternalLink } from "lucide-react";
import { Fragment } from "react";
import handleCopy from "./handle-copy";
const URL_PATTERN = /(https?:\/\/[^\s,]+)/;
const CODE_PATTERN = /`([^`]*)`/;
export default function TextParseLinks(text: string) {
const codeParts = text.split(CODE_PATTERN);
return codeParts.map((part: string, codeIndex: number) => {
if (codeIndex % 2 === 1) {
return (
<span
key={`code-${codeIndex}`}
className="bg-secondary py-1 px-2 rounded-lg inline-flex items-center gap-2"
>
{part}
<ClipboardIcon
className="size-3 cursor-pointer"
onClick={() => handleCopy("command", part)}
/>
</span>
);
}
const urlParts = part.split(URL_PATTERN);
return (
<Fragment key={`text-${codeIndex}`}>
{urlParts.map((urlPart: string, urlIndex: number) => {
if (urlIndex % 2 === 1) {
return (
<a
key={`url-${codeIndex}-${urlIndex}`}
href={urlPart}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1 text-blue-600 dark:text-blue-400 hover:underline font-medium transition-colors"
>
{urlPart}
<ExternalLink className="size-3" />
</a>
);
}
return <Fragment key={`plain-${codeIndex}-${urlIndex}`}>{urlPart}</Fragment>;
})}
</Fragment>
);
});
}

View File

@@ -14,6 +14,8 @@ export type Script = {
logo: string | null; logo: string | null;
config_path: string; config_path: string;
description: string; description: string;
disable?: boolean;
disable_description?: string;
install_methods: { install_methods: {
type: "default" | "alpine"; type: "default" | "alpine";
script: string; script: string;

View File

@@ -410,7 +410,6 @@ cleanup_lxc() {
if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi
if command -v journalctl &>/dev/null; then if command -v journalctl &>/dev/null; then
$STD journalctl --rotate || true
$STD journalctl --vacuum-time=10m || true $STD journalctl --vacuum-time=10m || true
fi fi
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -33,6 +33,7 @@ if [ -z "$available_kernels" ]; then
exit 0 exit 0
fi fi
echo -e "${GN}Currently running kernel: ${current_kernel}${CL}"
echo -e "${YW}Available kernels for removal:${CL}" echo -e "${YW}Available kernels for removal:${CL}"
echo "$available_kernels" | nl -w 2 -s '. ' echo "$available_kernels" | nl -w 2 -s '. '