diff --git a/docs/CODE-AUDIT.md b/.github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
similarity index 100%
rename from docs/CODE-AUDIT.md
rename to .github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
diff --git a/docs/CONTRIBUTING.md b/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md
similarity index 100%
rename from docs/CONTRIBUTING.md
rename to .github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md
diff --git a/docs/USER_SUBMITTED_GUIDES.md b/.github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md
similarity index 100%
rename from docs/USER_SUBMITTED_GUIDES.md
rename to .github/CONTRIBUTOR_AND_GUIDES/USER_SUBMITTED_GUIDES.md
diff --git a/docs/ct/AppName.md b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md
similarity index 100%
rename from docs/ct/AppName.md
rename to .github/CONTRIBUTOR_AND_GUIDES/ct/AppName.md
diff --git a/docs/ct/AppName.sh b/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh
similarity index 100%
rename from docs/ct/AppName.sh
rename to .github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh
diff --git a/docs/install/AppName-install.md b/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md
similarity index 100%
rename from docs/install/AppName-install.md
rename to .github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.md
diff --git a/docs/install/AppName-install.sh b/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh
similarity index 100%
rename from docs/install/AppName-install.sh
rename to .github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh
diff --git a/docs/json/AppName.json b/.github/CONTRIBUTOR_AND_GUIDES/json/AppName.json
similarity index 100%
rename from docs/json/AppName.json
rename to .github/CONTRIBUTOR_AND_GUIDES/json/AppName.json
diff --git a/docs/json/AppName.md b/.github/CONTRIBUTOR_AND_GUIDES/json/AppName.md
similarity index 100%
rename from docs/json/AppName.md
rename to .github/CONTRIBUTOR_AND_GUIDES/json/AppName.md
diff --git a/.github/workflows/auto-update-app-headers.yml b/.github/workflows/auto-update-app-headers.yml
index 5e447ea54..18941379c 100644
--- a/.github/workflows/auto-update-app-headers.yml
+++ b/.github/workflows/auto-update-app-headers.yml
@@ -5,11 +5,12 @@ on:
branches:
- main
paths:
- - 'ct/**.sh'
- workflow_dispatch:
+ - "ct/**.sh"
+ workflow_dispatch:
jobs:
update-app-files:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
permissions:
@@ -24,6 +25,13 @@ jobs:
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ - name: Generate a token for PR approval and merge
+ id: generate-token-merge
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
+ private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
+
# Step 1: Checkout repository
- name: Checkout repository
uses: actions/checkout@v2
@@ -79,7 +87,7 @@ jobs:
--label "automated pr"
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
-
+
- name: Approve pull request
if: env.changed == 'true'
env:
@@ -89,15 +97,18 @@ jobs:
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
-
- - name: Re-approve pull request after update
+
+ - name: Approve pull request and merge
if: env.changed == 'true'
env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: |
- PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
+ git config --global user.name "github-actions-automege[bot]"
+ git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
+ PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
if [ -n "$PR_NUMBER" ]; then
- gh pr review $PR_NUMBER --approve
+ gh pr review "$PR_NUMBER" --approve
+ gh pr merge "$PR_NUMBER" --squash --admin
fi
# Step 8: Output success message when no changes
diff --git a/.github/workflows/autolabeler.yml b/.github/workflows/autolabeler.yml
index 013c40be5..149382c15 100644
--- a/.github/workflows/autolabeler.yml
+++ b/.github/workflows/autolabeler.yml
@@ -7,6 +7,7 @@ on:
jobs:
autolabeler:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
permissions:
pull-requests: write
@@ -42,9 +43,9 @@ jobs:
pull_number: prNumber,
});
const prFiles = prListFilesResponse.data;
-
-
+
+
// Apply labels based on file changes
for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => {
@@ -66,17 +67,17 @@ jobs:
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
};
-
+
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
- const match = prBody.match(regex);
+ const match = prBody.match(regex);
if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label);
}
}
-
+
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
if (labelsToAdd.size > 0) {
diff --git a/.github/workflows/changelog-pr.yaml b/.github/workflows/changelog-pr.yaml
index 3f3f3d1a5..ca187dd5c 100644
--- a/.github/workflows/changelog-pr.yaml
+++ b/.github/workflows/changelog-pr.yaml
@@ -7,6 +7,7 @@ on:
jobs:
update-changelog-pull-request:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
env:
CONFIG_PATH: .github/changelog-pr-config.json
@@ -16,13 +17,20 @@ jobs:
contents: write
pull-requests: write
steps:
- - name: Generate a token
+ - name: Generate a token for PR creation
id: generate-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ - name: Generate a token for PR approval and merge
+ id: generate-token-merge
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
+ private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
+
- name: Checkout code
uses: actions/checkout@v4
with:
@@ -260,12 +268,15 @@ jobs:
gh pr review $PR_NUMBER --approve
fi
- - name: Re-approve pull request after update
+ - name: Approve pull request and merge
if: env.changed == 'true'
env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: |
+ git config --global user.name "github-actions-automege[bot]"
+ git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
+ gh pr merge $PR_NUMBER --squash --admin
fi
diff --git a/.github/workflows/close-discussion.yaml b/.github/workflows/close-discussion.yaml
new file mode 100644
index 000000000..9b0352f43
--- /dev/null
+++ b/.github/workflows/close-discussion.yaml
@@ -0,0 +1,164 @@
+name: Close Discussion on PR Merge
+
+on:
+ push:
+ branches:
+ - main
+
+permissions:
+ contents: read
+ discussions: write
+
+jobs:
+ close-discussion:
+ if: github.repository == 'community-scripts/ProxmoxVED'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+
+ - name: Set Up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "20"
+
+ - name: Install Dependencies
+ run: npm install zx @octokit/graphql
+
+ - name: Close Discussion
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_SHA: ${{ github.sha }}
+ GITHUB_REPOSITORY: ${{ github.repository }}
+ run: |
+ npx zx << 'EOF'
+ import { graphql } from "@octokit/graphql";
+
+ (async function () {
+ try {
+ const token = process.env.GITHUB_TOKEN;
+ const commitSha = process.env.GITHUB_SHA;
+ const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/");
+
+ if (!token || !commitSha || !owner || !repo) {
+ console.log("Missing required environment variables.");
+ process.exit(1);
+ }
+
+ const graphqlWithAuth = graphql.defaults({
+ headers: { authorization: `Bearer ${token}` },
+ });
+
+ // Find PR from commit SHA
+ const searchQuery = `
+ query($owner: String!, $repo: String!, $sha: GitObjectID!) {
+ repository(owner: $owner, name: $repo) {
+ object(oid: $sha) {
+ ... on Commit {
+ associatedPullRequests(first: 1) {
+ nodes {
+ number
+ body
+ }
+ }
+ }
+ }
+ }
+ }
+ `;
+
+ const prResult = await graphqlWithAuth(searchQuery, {
+ owner,
+ repo,
+ sha: commitSha,
+ });
+
+ const pr = prResult.repository.object.associatedPullRequests.nodes[0];
+ if (!pr) {
+ console.log("No PR found for this commit.");
+ return;
+ }
+
+ const prNumber = pr.number;
+ const prBody = pr.body;
+
+ const match = prBody.match(/#(\d+)/);
+ if (!match) {
+ console.log("No discussion ID found in PR body.");
+ return;
+ }
+
+ const discussionNumber = match[1];
+ console.log(`Extracted Discussion Number: ${discussionNumber}`);
+
+ // Fetch GraphQL discussion ID
+ const discussionQuery = `
+ query($owner: String!, $repo: String!, $number: Int!) {
+ repository(owner: $owner, name: $repo) {
+ discussion(number: $number) {
+ id
+ }
+ }
+ }
+ `;
+
+ //
+ try {
+ const discussionResponse = await graphqlWithAuth(discussionQuery, {
+ owner,
+ repo,
+ number: parseInt(discussionNumber, 10),
+ });
+
+ const discussionQLId = discussionResponse.repository.discussion.id;
+ if (!discussionQLId) {
+ console.log("Failed to fetch discussion GraphQL ID.");
+ return;
+ }
+ } catch (error) {
+ console.error("Discussion not found or error occurred while fetching discussion:", error);
+ return;
+ }
+
+ // Post comment
+ const commentMutation = `
+ mutation($discussionId: ID!, $body: String!) {
+ addDiscussionComment(input: { discussionId: $discussionId, body: $body }) {
+ comment { id body }
+ }
+ }
+ `;
+
+ const commentResponse = await graphqlWithAuth(commentMutation, {
+ discussionId: discussionQLId,
+ body: `Merged with PR #${prNumber}`,
+ });
+
+ const commentId = commentResponse.addDiscussionComment.comment.id;
+ if (!commentId) {
+ console.log("Failed to post the comment.");
+ return;
+ }
+
+ console.log(`Comment Posted Successfully! Comment ID: ${commentId}`);
+
+ // Mark comment as answer
+ const markAnswerMutation = `
+ mutation($id: ID!) {
+ markDiscussionCommentAsAnswer(input: { id: $id }) {
+ discussion { id title }
+ }
+ }
+ `;
+
+ await graphqlWithAuth(markAnswerMutation, { id: commentId });
+
+ console.log("Comment marked as answer successfully!");
+
+ } catch (error) {
+ console.error("Error:", error);
+ process.exit(1);
+ }
+ })();
+ EOF
diff --git a/.github/workflows/close-ttek-issue.yaml b/.github/workflows/close-ttek-issue.yaml
new file mode 100644
index 000000000..037d60757
--- /dev/null
+++ b/.github/workflows/close-ttek-issue.yaml
@@ -0,0 +1,53 @@
+name: Auto-Close tteck Issues
+
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ close_tteck_issues:
+ if: github.repository == 'community-scripts/ProxmoxVED'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Auto-close if tteck script detected
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const issue = context.payload.issue;
+ const content = `${issue.title}\n${issue.body}`;
+ const issueNumber = issue.number;
+
+ // Check for tteck script mention
+ if (content.includes("tteck") || content.includes("tteck/Proxmox")) {
+ const message = `Hello, it looks like you are referencing the **old tteck repo**.
+
+ This repository is no longer used for active scripts.
+ **Please update your bookmarks** and use: [https://helper-scripts.com](https://helper-scripts.com)
+
+ Also make sure your Bash command starts with:
+ \`\`\`bash
+ bash <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/...)
+ \`\`\`
+
+ This issue is being closed automatically.`;
+
+ await github.rest.issues.createComment({
+ ...context.repo,
+ issue_number: issueNumber,
+ body: message
+ });
+
+ // Optionally apply a label like "not planned"
+ await github.rest.issues.addLabels({
+ ...context.repo,
+ issue_number: issueNumber,
+ labels: ["not planned"]
+ });
+
+ // Close the issue
+ await github.rest.issues.update({
+ ...context.repo,
+ issue_number: issueNumber,
+ state: "closed"
+ });
+ }
diff --git a/.github/workflows/create-ready-for-testing-message.yml b/.github/workflows/create-ready-for-testing-message.yml
index 46bd52f26..29a4c4226 100644
--- a/.github/workflows/create-ready-for-testing-message.yml
+++ b/.github/workflows/create-ready-for-testing-message.yml
@@ -11,11 +11,11 @@ permissions:
jobs:
post_to_discord:
runs-on: ubuntu-latest
- if: contains(github.event.issue.labels.*.name, 'Ready For Testing')
+ if: contains(github.event.issue.labels.*.name, 'Ready For Testing') && github.repository == 'community-scripts/ProxmoxVED'
steps:
- name: Extract Issue Title (Lowercase & Underscores)
id: extract_title
- run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
+ run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')" >> $GITHUB_ENV
- name: Check if Files Exist in community-scripts/ProxmoxVE
id: check_files
@@ -80,7 +80,25 @@ jobs:
VAR+="${{ github.event.issue.html_url }}"
echo "message=$VAR" >> $GITHUB_ENV
+ - name: Check if Discord thread exists
+ id: check_thread
+ run: |
+ ISSUE_TITLE="${{ github.event.issue.title }}"
+
+ THREAD_ID=$(curl -s -X GET "https://discord.com/api/v10/guilds/${{ secrets.DISCORD_GUILD_ID }}/threads/active" \
+ -H "Authorization: Bot ${{ secrets.DISCORD_BOT_TOKEN }}" \
+ -H "Content-Type: application/json" | \
+ jq -r --arg TITLE "$ISSUE_TITLE" --arg PARENT_ID "${{ secrets.DISCORD_CHANNEL_ID }}" \
+ '.threads[] | select(.parent_id == $PARENT_ID and .name == ("Wanted Tester for " + $TITLE)) | .id')
+
+ if [ -n "$THREAD_ID" ]; then
+ echo "thread_exists=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "thread_exists=false" >> "$GITHUB_OUTPUT"
+ fi
+
- name: Create a forumpost in Discord
+ if: steps.check_thread.outputs.thread_exists != 'true'
id: post_to_discord
env:
DISCORD_CHANNEL_ID: ${{ secrets.DISCORD_CHANNEL_ID }}
@@ -106,6 +124,7 @@ jobs:
fi
- name: Comment on Issue
+ if: steps.check_thread.outputs.thread_exists != 'true'
id: comment_on_issue
env:
MESSAGE: ${{ env.message }}
diff --git a/.github/workflows/delete-discord-thread.yml b/.github/workflows/delete-discord-thread.yml
index 92972e6d4..19e360818 100644
--- a/.github/workflows/delete-discord-thread.yml
+++ b/.github/workflows/delete-discord-thread.yml
@@ -7,13 +7,14 @@ on:
jobs:
close_discord_thread:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
steps:
- name: Get thread-ID op and close thread
run: |
ISSUE_TITLE="${{ github.event.issue.title }}"
-
+
THREAD_ID=$(curl -s -X GET "https://discord.com/api/v10/guilds/${{ secrets.DISCORD_GUILD_ID }}/threads/active" \
-H "Authorization: Bot ${{ secrets.DISCORD_BOT_TOKEN }}" \
-H "Content-Type: application/json" | \
diff --git a/.github/workflows/delete_new_script.yaml b/.github/workflows/delete_new_script.yaml
index 0f05c83a9..2ec2d9172 100644
--- a/.github/workflows/delete_new_script.yaml
+++ b/.github/workflows/delete_new_script.yaml
@@ -7,13 +7,20 @@ on:
jobs:
delete-files:
runs-on: ubuntu-latest
- if: contains(github.event.issue.labels.*.name, 'Started Migration To ProxmoxVE')
+ if: contains(github.event.issue.labels.*.name, 'Started Migration To ProxmoxVE') && github.repository == 'community-scripts/ProxmoxVED'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Generate a token for PR approval and merge
+ id: generate-token-merge
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
+ private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
+
- name: Extract Issue Title (Lowercase & Underscores)
id: extract_title
run: echo "TITLE=$(echo '${{ github.event.issue.title }}' | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')" >> $GITHUB_ENV
@@ -52,7 +59,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- branch=$(echo "delete-files_${{ github.event.issue.number }}_${TITLE}" | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')
+ $branch="delete_files"
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git checkout -b $branch
@@ -65,13 +72,26 @@ jobs:
exit 0
fi
git commit -m "Deleted files for issue: ${{ github.event.issue.title }}"
- git push origin $branch
+ git push origin $branch --force
gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch
pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}')
#gh pr merge $pr_number --squash
echo pr_number=$pr_number >> $GITHUB_ENV
+ - name: Approve pull request and merge
+ if: env.changed == 'true'
+ env:
+ GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
+ run: |
+ git config --global user.name "github-actions-automege[bot]"
+ git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
+ PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
+ if [ -n "$PR_NUMBER" ]; then
+ gh pr review $PR_NUMBER --approve
+ gh pr merge $PR_NUMBER --squash --admin
+ fi
+
- name: Comment on Issue
uses: actions/github-script@v7
with:
diff --git a/.github/workflows/frontend-cicd.yml b/.github/workflows/frontend-cicd.yml
index dd242f6ef..6adaf0caa 100644
--- a/.github/workflows/frontend-cicd.yml
+++ b/.github/workflows/frontend-cicd.yml
@@ -7,14 +7,12 @@ on:
branches: ["main"]
paths:
- frontend/**
- - json/**
pull_request:
branches: ["main"]
types: [opened, synchronize, reopened, edited]
paths:
- frontend/**
- - json/**
workflow_dispatch:
@@ -27,10 +25,11 @@ concurrency:
jobs:
build:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
defaults:
run:
- working-directory: frontend # Set default working directory for all run steps
+ working-directory: frontend # Set default working directory for all run steps
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -65,7 +64,7 @@ jobs:
deploy:
runs-on: ubuntu-latest
needs: build
- if: github.ref == 'refs/heads/main'
+ if: github.ref == 'refs/heads/main' && github.repository == 'community-scripts/ProxmoxVED'
permissions:
pages: write
id-token: write
diff --git a/.github/workflows/get-versions-from-gh.yaml b/.github/workflows/get-versions-from-gh.yaml
new file mode 100644
index 000000000..d3cd7e366
--- /dev/null
+++ b/.github/workflows/get-versions-from-gh.yaml
@@ -0,0 +1,80 @@
+name: Crawl Versions from github
+
+on:
+ workflow_dispatch:
+ schedule:
+ # Runs at 12:00 AM and 12:00 PM UTC
+ - cron: "0 0,12 * * *"
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ crawl-versions:
+ if: github.repository == 'community-scripts/ProxmoxVED'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v2
+ with:
+ repository: community-scripts/ProxmoxVED
+ ref: main
+
+ - name: Generate a token
+ id: generate-token
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ vars.APP_ID }}
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
+
+ - name: Crawl from Github API
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ ls
+
+ chmod +x .github/workflows/scripts/get-gh-release.sh
+ .github/workflows/scripts/get-gh-release.sh
+
+ - name: Commit JSON
+ env:
+ GH_TOKEN: ${{ steps.generate-token.outputs.token }}
+ run: |
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
+ git config --global user.name "GitHub Actions[bot]"
+ git checkout -b update_versions || git checkout update_versions
+ git add frontend/public/json/versions.json
+ if git diff --cached --quiet; then
+ echo "No changes detected."
+ echo "changed=false" >> "$GITHUB_ENV"
+ exit 0
+ else
+ echo "Changes detected:"
+ git diff --stat --cached
+ echo "changed=true" >> "$GITHUB_ENV"
+ fi
+ git commit -m "Update versions.json"
+ git push origin update_versions --force
+ gh pr create --title "[AUTOMATIC PR]Update versions.json" --body "Update versions.json, crawled from newreleases.io" --base main --head update_versions
+
+ - name: Approve pull request
+ if: env.changed == 'true'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
+ if [ -n "$PR_NUMBER" ]; then
+ gh pr review $PR_NUMBER --approve
+ fi
+
+ - name: Re-approve pull request after update
+ if: env.changed == 'true'
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
+ if [ -n "$PR_NUMBER" ]; then
+ gh pr review $PR_NUMBER --approve
+ fi
diff --git a/.github/workflows/get-versions-from-newreleases.yaml b/.github/workflows/get-versions-from-newreleases.yaml
index 2eb23b0ab..aabfae35e 100644
--- a/.github/workflows/get-versions-from-newreleases.yaml
+++ b/.github/workflows/get-versions-from-newreleases.yaml
@@ -12,6 +12,7 @@ permissions:
jobs:
crawl-versions:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: ubuntu-latest
steps:
@@ -28,6 +29,13 @@ jobs:
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
+ - name: Generate a token for PR approval and merge
+ id: generate-token-merge
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
+ private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
+
- name: Crawl from newreleases.io
env:
token: ${{ secrets.NEWRELEASES_TOKEN }}
@@ -61,6 +69,10 @@ jobs:
echo "$projects" > "$projects_file"
jq -r '.projects[] | "\(.id) \(.name)"' "$projects_file" | while read -r id name; do
+ echo "Ensuring $name has exclude_prereleases=true"
+ curl -s -X POST -H "X-Key: $token" -H "Content-Type: application/json" \
+ -d '{"exclude_prereleases": true}' \
+ "https://api.newreleases.io/v1/projects/$id" > /dev/null
version=$(curl -s -H "X-Key: $token" "https://api.newreleases.io/v1/projects/$id/latest-release")
version_data=$(echo "$version" | jq -r '.version // empty')
date=$(echo "$version" | jq -r '.date // empty')
@@ -92,7 +104,6 @@ jobs:
git commit -m "Update versions.json"
git push origin update_versions --force
gh pr create --title "[AUTOMATIC PR]Update versions.json" --body "Update versions.json, crawled from newreleases.io" --base main --head update_versions
-
- name: Approve pull request
if: env.changed == 'true'
env:
@@ -103,12 +114,15 @@ jobs:
gh pr review $PR_NUMBER --approve
fi
- - name: Re-approve pull request after update
+ - name: Approve pull request and merge
if: env.changed == 'true'
env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_TOKEN: ${{ steps.generate-token-merge.outputs.token }}
run: |
- PR_NUMBER=$(gh pr list --head "update_versions" --json number --jq '.[].number')
+ git config --global user.name "github-actions-automege[bot]"
+ git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
+ PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
if [ -n "$PR_NUMBER" ]; then
- gh pr review $PR_NUMBER --approve
+ gh pr review "$PR_NUMBER" --approve
+ gh pr merge "$PR_NUMBER" --squash --admin
fi
diff --git a/.github/workflows/move-to-main-repo.yaml b/.github/workflows/move-to-main-repo.yaml
index 763c52962..9c9fb65dd 100644
--- a/.github/workflows/move-to-main-repo.yaml
+++ b/.github/workflows/move-to-main-repo.yaml
@@ -14,7 +14,7 @@ permissions:
jobs:
move-to-main-repo:
runs-on: ubuntu-latest
- if: github.event.label.name == 'Migration To ProxmoxVE'
+ if: github.event.label.name == 'Migration To ProxmoxVE' && github.repository == 'community-scripts/ProxmoxVED'
steps:
- name: Generate a token
id: app-token
@@ -75,9 +75,21 @@ jobs:
echo "missing=$install_file" >> $GITHUB_OUTPUT
fi
if [[ ! -f "$json_file" ]]; then
+ if [[ "$json_file" = *alpine* ]]; then
+ stripped_name="${json_file/frontend\/public\/json\/alpine-/frontend/public/json/}"
+ echo $stripped_name
+ if [[ -f "$stripped_name" ]]; then
+ echo "files_found=true" >> $GITHUB_OUTPUT
+ else
+ echo "json file striped not found."
+ echo "files_found=false" >> $GITHUB_OUTPUT
+ echo "missing=$json_file" >> $GITHUB_OUTPUT
+ fi
+ else
echo "json file not found."
echo "files_found=false" >> $GITHUB_OUTPUT
echo "missing=$json_file" >> $GITHUB_OUTPUT
+ fi
fi
- name: Comment if not all Files found
@@ -121,20 +133,33 @@ jobs:
echo "install file already exists in ProxmoxVE"
exit 1
fi
- if [[ -f "frontend/public/json/${script_name}.json" ]]; then
- echo "json file already exists in ProxmoxVE"
- exit 1
- fi
git checkout -b "$branch_name"
cp ../ct/$script_name.sh ct/.
+ cp ../ct/headers/$script_name ct/headers/. || true
cp ../install/$script_name-install.sh install/.
- cp ../frontend/public/json/$script_name.json frontend/public/json/.
- sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|' ct/$script_name.sh
+ json_file="${script_name}.json"
- git add .
+ if [[ ! -f "../frontend/public/json/$json_file" ]]; then
+ if [[ "$json_file" = *alpine* ]]; then
+ stripped_name="${json_file#alpine-}"
+ if [[ -f "../frontend/public/json/$stripped_name" ]]; then
+ cp ../frontend/public/json/$stripped_name frontend/public/json/. || true
+ fi
+ fi
+ else
+ cp ../frontend/public/json/$json_file frontend/public/json/. || true
+ fi
+
+ echo $script_name
+ sed -i "s|https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
+ sed -i "s|https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func|https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func|" ct/$script_name.sh
+ sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" ct/$script_name.sh
+ sed -i "s|# License: MIT \| https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE|# License: MIT \| https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE|" install/$script_name-install.sh
+
+ git add . > /dev/null 2>&1
if git diff --cached --exit-code; then
echo "No changes detected, skipping commit."
exit 0
diff --git a/.github/workflows/push-to-gitea.yml b/.github/workflows/push-to-gitea.yml
new file mode 100644
index 000000000..76268ffc7
--- /dev/null
+++ b/.github/workflows/push-to-gitea.yml
@@ -0,0 +1,27 @@
+name: Sync to Gitea
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ sync:
+ if: github.repository == 'community-scripts/ProxmoxVED'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout source repo
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - 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/ProxmoxVED.git
+ git push gitea --all
+ env:
+ GITEA_USER: ${{ secrets.GITEA_USERNAME }}
+ GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
diff --git a/.github/workflows/script-test.yaml b/.github/workflows/script-test.yaml
index 5c8803907..e9798ae49 100644
--- a/.github/workflows/script-test.yaml
+++ b/.github/workflows/script-test.yaml
@@ -1,29 +1,30 @@
name: Run Scripts on PVE Node for testing
permissions:
- pull-requests: write
+ pull-requests: write
on:
pull_request_target:
branches:
- main
paths:
- - 'install/**.sh'
- - 'ct/**.sh'
+ - "install/**.sh"
+ - "ct/**.sh"
jobs:
run-install-script:
+ if: github.repository == 'community-scripts/ProxmoxVED'
runs-on: pvenode
- steps:
+ steps:
- name: Checkout PR branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- fetch-depth: 0
-
+ fetch-depth: 0
+
- name: Add Git safe directory
run: |
git config --global --add safe.directory /__w/ProxmoxVE/ProxmoxVE
-
+
- name: Set up GH_TOKEN
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -38,15 +39,14 @@ jobs:
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- name: Get scripts
id: check-install-script
run: |
ALL_FILES=()
- ADDED_FILES=()
- for FILE in ${{ env.SCRIPT }}; do
- if [[ $FILE =~ ^install/.*-install\.sh$ ]] || [[ $FILE =~ ^ct/.*\.sh$ ]]; then
+ ADDED_FILES=()
+ for FILE in ${{ env.SCRIPT }}; do
+ if [[ $FILE =~ ^install/.*-install\.sh$ ]] || [[ $FILE =~ ^ct/.*\.sh$ ]]; then
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
if [[ ! " ${ADDED_FILES[@]} " =~ " $STRIPPED_NAME " ]]; then
ALL_FILES+=("$FILE")
@@ -57,108 +57,110 @@ jobs:
ALL_FILES=$(echo "${ALL_FILES[@]}" | xargs)
echo "$ALL_FILES"
echo "ALL_FILES=$ALL_FILES" >> $GITHUB_ENV
-
+
- name: Run scripts
id: run-install
continue-on-error: true
run: |
- set +e
- #run for each files in /ct
- for FILE in ${{ env.ALL_FILES }}; do
- STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
- echo "Running Test for: $STRIPPED_NAME"
- if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "$FILE"; then
- echo "The script contains an interactive prompt. Skipping execution."
+ set +e
+ #run for each files in /ct
+ for FILE in ${{ env.ALL_FILES }}; do
+ STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
+ echo "Running Test for: $STRIPPED_NAME"
+ if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "$FILE"; then
+ echo "The script contains an interactive prompt. Skipping execution."
+ continue
+ fi
+ if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
+ CT_SCRIPT="ct/$STRIPPED_NAME.sh"
+ if [[ ! -f $CT_SCRIPT ]]; then
+ echo "No CT script found for $STRIPPED_NAME"
+ ERROR_MSG="No CT script found for $FILE"
+ echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue
fi
- if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
- CT_SCRIPT="ct/$STRIPPED_NAME.sh"
- if [[ ! -f $CT_SCRIPT ]]; then
- echo "No CT script found for $STRIPPED_NAME"
- ERROR_MSG="No CT script found for $FILE"
- echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
+ if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "install/$STRIPPED_NAME-install.sh"; then
+ echo "The script contains an interactive prompt. Skipping execution."
continue
fi
- if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "install/$STRIPPED_NAME-install.sh"; then
- echo "The script contains an interactive prompt. Skipping execution."
- continue
- fi
- echo "Found CT script for $STRIPPED_NAME"
- chmod +x "$CT_SCRIPT"
- RUNNING_FILE=$CT_SCRIPT
- elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
- INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
- if [[ ! -f $INSTALL_SCRIPT ]]; then
- echo "No install script found for $STRIPPED_NAME"
- ERROR_MSG="No install script found for $FILE"
- echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
- continue
- fi
- echo "Found install script for $STRIPPED_NAME"
- chmod +x "$INSTALL_SCRIPT"
- RUNNING_FILE=$FILE
- if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "ct/$STRIPPED_NAME.sh"; then
- echo "The script contains an interactive prompt. Skipping execution."
- continue
- fi
- fi
- git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
- git fetch community-scripts
- rm -f .github/workflows/scripts/app-test/pr-build.func || true
- rm -f .github/workflows/scripts/app-test/pr-install.func || true
- rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
- rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
- git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
- git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
- git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
- git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
- chmod +x $RUNNING_FILE
- chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
- chmod +x .github/workflows/scripts/app-test/pr-install.func
- chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
- chmod +x .github/workflows/scripts/app-test/pr-build.func
- sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
- echo "Executing $RUNNING_FILE"
- ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
- echo "Finished running $FILE"
- if [ -n "$ERROR_MSG" ]; then
- echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
+ echo "Found CT script for $STRIPPED_NAME"
+ chmod +x "$CT_SCRIPT"
+ RUNNING_FILE=$CT_SCRIPT
+ elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
+ INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
+ if [[ ! -f $INSTALL_SCRIPT ]]; then
+ echo "No install script found for $STRIPPED_NAME"
+ ERROR_MSG="No install script found for $FILE"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
+ continue
fi
- done
- set -e # Restore exit-on-error
-
+ echo "Found install script for $STRIPPED_NAME"
+ chmod +x "$INSTALL_SCRIPT"
+ RUNNING_FILE=$FILE
+ if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "ct/$STRIPPED_NAME.sh"; then
+ echo "The script contains an interactive prompt. Skipping execution."
+ continue
+ fi
+ fi
+ git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
+ git fetch community-scripts
+ rm -f .github/workflows/scripts/app-test/pr-build.func || true
+ rm -f .github/workflows/scripts/app-test/pr-install.func || true
+ rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
+ rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
+ git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
+ git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
+ git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
+ git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
+ chmod +x $RUNNING_FILE
+ chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
+ chmod +x .github/workflows/scripts/app-test/pr-install.func
+ chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
+ chmod +x .github/workflows/scripts/app-test/pr-build.func
+ sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
+ echo "Executing $RUNNING_FILE"
+ export TERM=xterm-256color
+ ./$RUNNING_FILE
+ ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
+ echo "Finished running $FILE"
+ if [ -n "$ERROR_MSG" ]; then
+ echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
+ echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
+ fi
+ done
+ set -e # Restore exit-on-error
+
- name: Cleanup PVE Node
run: |
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}' | awk '{print $1}')
-
+
for container_id in $containers; do
status=$(pct status $container_id | awk '{print $2}')
if [[ $status == "running" ]]; then
pct stop $container_id
pct destroy $container_id
- fi
+ fi
done
-
+
- name: Post error comments
run: |
ERROR="false"
SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line 255:"
-
+
# Get all existing comments on the PR
- EXISTING_COMMENTS=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments --jq '.comments[].body')
-
+ #EXISTING_COMMENTS=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments --jq '.comments[].body')
+ EXISTING_COMMENTS="NONE"
for FILE in ${{ env.ALL_FILES }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
if [[ ! -f result_$STRIPPED_NAME.log ]]; then
continue
fi
ERROR_MSG=$(cat result_$STRIPPED_NAME.log)
-
+
if [ -n "$ERROR_MSG" ]; then
CLEANED_ERROR_MSG=$(echo "$ERROR_MSG" | sed "s|$SEARCH_LINE.*||")
COMMENT_BODY=":warning: The script _**$FILE**_ failed with the following message:
${CLEANED_ERROR_MSG}
"
-
+
# Check if the comment already exists
if echo "$EXISTING_COMMENTS" | grep -qF "$COMMENT_BODY"; then
echo "Skipping duplicate comment for $FILE"
@@ -171,7 +173,5 @@ jobs:
fi
fi
done
-
+
echo "ERROR=$ERROR" >> $GITHUB_ENV
-
-
diff --git a/.github/workflows/scripts/app-test/pr-build.func b/.github/workflows/scripts/app-test/pr-build.func
index 644a1acf3..0e136ef04 100644
--- a/.github/workflows/scripts/app-test/pr-build.func
+++ b/.github/workflows/scripts/app-test/pr-build.func
@@ -147,9 +147,9 @@ build_container() {
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if [ "$var_os" == "alpine" ]; then
- export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/.github/workflows/scripts/app-test/pr-alpine-install.func)"
+ export FUNCTIONS_FILE_PATH="$(wget -qLO https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/.github/workflows/scripts/app-test/pr-alpine-install.func)"
else
- export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/.github/workflows/scripts/app-test/pr-install.func)"
+ export FUNCTIONS_FILE_PATH="$(wget -qLO https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/.github/workflows/scripts/app-test/pr-install.func)"
fi
export CACHER="$APT_CACHER"
@@ -184,7 +184,7 @@ build_container() {
echo "Container ID: $CTID"
# This executes create_lxc.sh and creates the container and .conf file
- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/.github/workflows/scripts/app-test/pr-create-lxc.sh)"
+ bash -c "$(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/.github/workflows/scripts/app-test/pr-create-lxc.sh)"
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
if [ "$CT_TYPE" == "0" ]; then
diff --git a/.github/workflows/scripts/get-gh-release.sh b/.github/workflows/scripts/get-gh-release.sh
new file mode 100644
index 000000000..ddd966df4
--- /dev/null
+++ b/.github/workflows/scripts/get-gh-release.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+INPUT_FILE=".github/workflows/scripts/repos.txt"
+OUTPUT_FILE="frontend/public/json/versions.json"
+TMP_FILE="releases_tmp.json"
+
+if [ -f "$OUTPUT_FILE" ]; then
+ cp "$OUTPUT_FILE" "$TMP_FILE"
+else
+ echo "[]" > "$TMP_FILE"
+fi
+
+while IFS= read -r repo; do
+ echo "Checking $repo..."
+
+ response=$(curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${repo}/releases/latest")
+ tag=$(echo "$response" | jq -r .tag_name)
+ date=$(echo "$response" | jq -r .published_at)
+
+ if [[ "$tag" == "null" || "$date" == "null" ]]; then
+ echo "No release found for $repo"
+ continue
+ fi
+
+ existing_version=$(jq -r --arg name "$repo" '.[] | select(.name == $name) | .version' "$TMP_FILE")
+
+ if [[ "$existing_version" != "$tag" ]]; then
+ echo "New release for $repo: $tag"
+ jq --arg name "$repo" 'del(.[] | select(.name == $name))' "$TMP_FILE" > "$TMP_FILE.tmp" && mv "$TMP_FILE.tmp" "$TMP_FILE"
+
+ jq --arg name "$repo" --arg version "$tag" --arg date "$date" \
+ '. += [{"name": $name, "version": $version, "date": $date}]' "$TMP_FILE" > "$TMP_FILE.tmp" && mv "$TMP_FILE.tmp" "$TMP_FILE"
+ else
+ echo "No change for $repo"
+ fi
+
+done < "$INPUT_FILE"
+
+#mv "$TMP_FILE" "$OUTPUT_FILE"
diff --git a/.github/workflows/scripts/repos.txt b/.github/workflows/scripts/repos.txt
new file mode 100644
index 000000000..9cb0d65c7
--- /dev/null
+++ b/.github/workflows/scripts/repos.txt
@@ -0,0 +1,168 @@
+0xERR0R/blocky
+aceberg/WatchYourLAN
+actualbudget/actual-server
+agl/jbig2enc
+alexta69/metube
+AlexxIT/go2rtc
+apache/tika
+ArtifexSoftware/ghostpdl-downloads
+Athou/commafeed
+authelia/authelia
+azukaar/Cosmos-Server
+bastienwirtz/homer
+benjaminjonard/koillection
+benzino77/tasmocompiler
+blakeblackshear/frigate
+bluenviron/mediamtx
+BookStackApp/BookStack
+browserless/chrome
+Bubka/2FAuth
+caddyserver/xcaddy
+clusterzx/paperless-ai
+cockpit-project/cockpit
+community-scripts/ProxmoxVE
+CorentinTh/it-tools
+dani-garcia/bw_web_builds
+dani-garcia/vaultwarden
+deepch/RTSPtoWeb
+diced/zipline
+docker/compose
+docmost/docmost
+documenso/documenso
+Dolibarr/dolibarr
+donaldzou/WGDashboard
+Donkie/Spoolman
+duplicati/duplicati
+ellite/wallos
+ErsatzTV/ErsatzTV
+evcc-io/evcc
+excalidraw/excalidraw
+Fallenbagel/jellyseerr
+firefly-iii/firefly-iii
+FlareSolverr/FlareSolverr
+Forceu/barcodebuddy
+Forceu/Gokapi
+FreshRSS/FreshRSS
+FunkeyFlo/ps5-mqtt
+gethomepage/homepage
+glanceapp/glance
+glpi-project/glpi
+gnmyt/myspeed
+go-gitea/gitea
+google-coral/test_data
+gotify/server
+gotson/komga
+gristlabs/grist-core
+grocy/grocy
+hansmi/prometheus-paperless-exporter
+hargata/lubelog
+heiher/hev-socks5-server
+henrygd/beszel
+hivemq/hivemq-community-edition
+hoarder-app/hoarder
+homarr-labs/homarr
+hywax/mafl
+ie13/jbig2enc
+immich-app/immich
+inspircd/inspircd
+intel-iot-devkit/sample-videos
+ipfs/kubo
+Jackett/Jackett
+janeczku/calibre-web
+jhuckaby/Cronicle
+juanfont/headscale
+Kareadita/Kavita
+keycloak/keycloak
+kimai/kimai
+knadh/listmonk
+Koenkk/zigbee2mqtt
+Kometa-Team/Kometa
+Kozea/Radicale
+leiweibau/Pi
+libusb/libusb
+linkwarden/linkwarden
+linuxserver/docker-paperless-ngx
+linuxserver/Heimdall
+Lissy93/dashy
+louislam/uptime-kuma
+Luligu/matterbridge
+MagicMirrorOrg/MagicMirror
+matze/wastebin
+maxmind/geoipupdate
+MediaBrowser/Emby
+meilisearch/meilisearch
+mikefarah/yq
+minio/minio
+monicahq/monica
+morpheus65535/bazarr
+motioneye-project/motioneye
+msgbyte/tianji
+mylar3/mylar3
+navidrome/navidrome
+netbox-community/netbox
+NginxProxyManager/nginx-proxy-manager
+NodeBB/NodeBB
+ollama/ollama
+Ombi-app/Ombi
+openobserve/openobserve
+openvinotoolkit/open_model_zoo
+open-webui/open-webui
+paperless-ngx/paperless-ngx
+Part-DB/Part-DB-server
+paymenter/paymenter
+Pf2eToolsOrg/Pf2eTools
+pgaskin/kepubify
+phpipam/phpipam
+pocketbase/pocketbase
+pocket-id/pocket-id
+PrivateBin/PrivateBin
+projectsend/projectsend
+prometheus/alertmanager
+prometheus/prometheus
+prometheus-pve/prometheus-pve-exporter
+pymedusa/Medusa
+rabbitmq/signing-keys
+Requarks/wiki
+revenz/Fenrus
+rogerfar/rdt-client
+rustdesk/rustdesk-server
+sabnzbd/sabnzbd
+sabre-io/baikal
+sbondCo/Watcharr
+schlagmichdoch/PairDrop
+sct/overseerr
+seanmorley15/AdventureLog
+searxng/searxng
+semaphoreui/semaphore
+silverbulletmd/silverbullet
+snipe/snipe-it
+stackblitz-labs/bolt
+Stirling-Tools/Stirling-PDF
+stonith404/pingvin-share
+Suwayomi/Suwayomi-Server
+sysadminsmedia/homebox
+TasmoAdmin/TasmoAdmin
+Tautulli/Tautulli
+thelounge/thelounge-deb
+thomiceli/opengist
+Threadfin/Threadfin
+tobychui/zoraxy
+toniebox-reverse-engineering/teddycloud
+traccar/traccar
+traefik/traefik
+trapexit/mergerfs
+TriliumNext/Notes
+tteck/Proxmox
+umami-software/umami
+usememos/memos
+vabene1111/recipes
+ventoy/PXE
+VictoriaMetrics/VictoriaMetrics
+wavelog/wavelog
+wger-project/wger
+Y2Z/monolith
+yt-dlp/yt-dlp
+YuukanOO/seelf
+zitadel/zitadel
+znerol/prometheus-pve-exporter
+zwave-js/zwave-js-ui
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96b6fdda2..3cddfbd3a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,24 +3,92 @@
-Changelog - Develop
+
All notable changes to this project will be documented in this file.
+## 2025-05-14
+
+### 🆕 New Scripts
+
+ - odoo ([#4477](https://github.com/community-scripts/ProxmoxVE/pull/4477))
+- alpine-transmission ([#4277](https://github.com/community-scripts/ProxmoxVE/pull/4277))
+- alpine-tinyauth ([#4264](https://github.com/community-scripts/ProxmoxVE/pull/4264))
+- alpine-rclone ([#4265](https://github.com/community-scripts/ProxmoxVE/pull/4265))
+- streamlink-webui ([#4262](https://github.com/community-scripts/ProxmoxVE/pull/4262))
+- Fumadocs ([#4263](https://github.com/community-scripts/ProxmoxVE/pull/4263))
+- asterisk ([#4468](https://github.com/community-scripts/ProxmoxVE/pull/4468))
+- gatus ([#4443](https://github.com/community-scripts/ProxmoxVE/pull/4443))
+- alpine-gatus ([#4442](https://github.com/community-scripts/ProxmoxVE/pull/4442))
+- Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
+
+### 🚀 Updated Scripts
+
+ - fix: fetch_release_and_deploy function [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4478](https://github.com/community-scripts/ProxmoxVE/pull/4478))
+- Website: re-add documenso & some little bugfixes [@MickLesk](https://github.com/MickLesk) ([#4456](https://github.com/community-scripts/ProxmoxVE/pull/4456))
+- update some improvements from dev (tools.func) [@MickLesk](https://github.com/MickLesk) ([#4430](https://github.com/community-scripts/ProxmoxVE/pull/4430))
+- Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
+
+ - #### 🐞 Bug Fixes
+
+ - Bugfix: Mikrotik & Pimox HAOS VM (NEXTID) [@MickLesk](https://github.com/MickLesk) ([#4313](https://github.com/community-scripts/ProxmoxVE/pull/4313))
+ - Bookstack: fix copy of themes/uploads/storage [@MickLesk](https://github.com/MickLesk) ([#4457](https://github.com/community-scripts/ProxmoxVE/pull/4457))
+ - homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
+ - Authentik: change install to UV & increase resources to 10GB RAM [@MickLesk](https://github.com/MickLesk) ([#4364](https://github.com/community-scripts/ProxmoxVE/pull/4364))
+ - Jellyseerr: better handling of node and pnpm [@MickLesk](https://github.com/MickLesk) ([#4365](https://github.com/community-scripts/ProxmoxVE/pull/4365))
+ - Alpine-Rclone: Fix location of passwords file [@tremor021](https://github.com/tremor021) ([#4465](https://github.com/community-scripts/ProxmoxVE/pull/4465))
+ - Zammad: Enable ElasticSearch service [@tremor021](https://github.com/tremor021) ([#4391](https://github.com/community-scripts/ProxmoxVE/pull/4391))
+ - openhab: use zulu17-jdk [@moodyblue](https://github.com/moodyblue) ([#4438](https://github.com/community-scripts/ProxmoxVE/pull/4438))
+ - (fix) Documenso: fix build failures [@vhsdream](https://github.com/vhsdream) ([#4382](https://github.com/community-scripts/ProxmoxVE/pull/4382))
+
+ - #### ✨ New Features
+
+ - Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
+ - Feature: get correct next VMID [@MickLesk](https://github.com/MickLesk) ([#4292](https://github.com/community-scripts/ProxmoxVE/pull/4292))
+ - HomeAssistant-Core: update script for 2025.5+ [@MickLesk](https://github.com/MickLesk) ([#4363](https://github.com/community-scripts/ProxmoxVE/pull/4363))
+ - Feature: autologin for Alpine [@MickLesk](https://github.com/MickLesk) ([#4344](https://github.com/community-scripts/ProxmoxVE/pull/4344))
+ - monitor-all: improvements - tag based filtering [@grizmin](https://github.com/grizmin) ([#4437](https://github.com/community-scripts/ProxmoxVE/pull/4437))
+ - Make apt-cacher-ng a client of its own server [@pgcudahy](https://github.com/pgcudahy) ([#4092](https://github.com/community-scripts/ProxmoxVE/pull/4092))
+
+ - #### 🔧 Refactor
+
+ - openhab. correct some typos [@moodyblue](https://github.com/moodyblue) ([#4448](https://github.com/community-scripts/ProxmoxVE/pull/4448))
+
+### 🧰 Maintenance
+
+ - #### 💾 Core
+
+ - fix: improve bridge detection in all network interface configuration files [@filippolauria](https://github.com/filippolauria) ([#4413](https://github.com/community-scripts/ProxmoxVE/pull/4413))
+ - Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
+ - fix: detect all bridge types, not just vmbr prefix [@filippolauria](https://github.com/filippolauria) ([#4351](https://github.com/community-scripts/ProxmoxVE/pull/4351))
+
+ - #### 📂 Github
+
+ - Add Github app for auto PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4461](https://github.com/community-scripts/ProxmoxVE/pull/4461))
+
+### 🌐 Website
+
+ - FAQ: Explanation "updatable" [@tremor021](https://github.com/tremor021) ([#4300](https://github.com/community-scripts/ProxmoxVE/pull/4300))
+
+ - #### 📝 Script Information
+
+ - Jellyfin Media Server: Update configuration path [@tremor021](https://github.com/tremor021) ([#4434](https://github.com/community-scripts/ProxmoxVE/pull/4434))
+ - Pingvin Share: Added explanation on how to add/edit environment variables [@tremor021](https://github.com/tremor021) ([#4432](https://github.com/community-scripts/ProxmoxVE/pull/4432))
+ - pingvin.json: fix typo [@warmbo](https://github.com/warmbo) ([#4426](https://github.com/community-scripts/ProxmoxVE/pull/4426))
+ - Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
## 2025-03-24
### 🆕 New Scripts
- - fileflows [@kkroboth](https://github.com/kkroboth) ([#3392](https://github.com/community-scripts/ProxmoxVE/pull/3392))
+- fileflows [@kkroboth](https://github.com/kkroboth) ([#3392](https://github.com/community-scripts/ProxmoxVE/pull/3392))
- wazuh [@omiinaya](https://github.com/omiinaya) ([#3381](https://github.com/community-scripts/ProxmoxVE/pull/3381))
- yt-dlp-webui [@CrazyWolf13](https://github.com/CrazyWolf13) ([#3364](https://github.com/community-scripts/ProxmoxVE/pull/3364))
- Extension/New Script: Redis Alpine Installation [@MickLesk](https://github.com/MickLesk) ([#3367](https://github.com/community-scripts/ProxmoxVE/pull/3367))
-- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](https://github.com/community-scripts/ProxmoxVE/pull/2869))
-
+- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](ht
### 🚀 Updated Scripts
- - License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
+- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
- Omada jdk to jre [@bvdberg01](https://github.com/bvdberg01) ([#3319](https://github.com/community-scripts/ProxmoxVE/pull/3319))
- #### 🐞 Bug Fixes
@@ -36,7 +104,7 @@
- GoMFT: Fix build dependencies [@tremor021](https://github.com/tremor021) ([#3313](https://github.com/community-scripts/ProxmoxVE/pull/3313))
- GoMFT: Don't rely on binaries from github [@tremor021](https://github.com/tremor021) ([#3303](https://github.com/community-scripts/ProxmoxVE/pull/3303))
- Wikijs: Remove Dev Message & Performance-Boost [@bvdberg01](https://github.com/bvdberg01) ([#3232](https://github.com/community-scripts/ProxmoxVE/pull/3232))
- - Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.com/community-scripts/ProxmoxVE/pull/3245))
+ - Update omada download url [@bvdberg01](https://github.com/bvdberg01) ([#3245](https://github.cooxVE/pull/3245))
- TriliumNotes: Fix release handling [@tremor021](https://github.com/tremor021) ([#3160](https://github.com/community-scripts/ProxmoxVE/pull/3160))
- #### ✨ New Features
@@ -55,29 +123,29 @@
### 🧰 Maintenance
- - #### ✨ New Features
+- #### ✨ New Features
- - [core] add gitignore to prevent big pulls [@MickLesk](https://github.com/MickLesk) ([#3278](https://github.com/community-scripts/ProxmoxVE/pull/3278))
- - [core] install core deps (debian / ubuntu) [@MickLesk](https://github.com/MickLesk) ([#3366](https://github.com/community-scripts/ProxmoxVE/pull/3366))
+
+ - [core] install core deps (debian / ubuntu) [@MickLesk](https://github.com/MickLesk) ([#3366](https://github.com/community-scripts/ProxmoxVE/pull/3366))
- - #### 💾 Core
+- #### 💾 Core
- - [core] extend hardware transcoding for fileflows #3392 [@MickLesk](https://github.com/MickLesk) ([#3396](https://github.com/community-scripts/ProxmoxVE/pull/3396))
- - Clarify MTU in advanced Settings. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3296](https://github.com/community-scripts/ProxmoxVE/pull/3296))
+ - [core] extend hardware transcoding for fileflows #3392 [@MickLesk](https://github.com/MickLesk) ([#3396](https://github.com/community-scripts/ProxmoxVE/pull/3396))
+ - Clarify MTU in advanced Settings. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3296](https://github.com/community-scripts/ProxmoxVE/pull/3296))
- - #### 📂 Github
+- #### 📂 Github
- - [core] cleanup - remove old backups of workflow files [@MickLesk](https://github.com/MickLesk) ([#3247](https://github.com/community-scripts/ProxmoxVE/pull/3247))
- - Refactor Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3371](https://github.com/community-scripts/ProxmoxVE/pull/3371))
+ - [core] cleanup - remove old backups of workflow files [@MickLesk](https://github.com/MickLesk) ([#3247](https://github.com/community-scripts/ProxmoxVE/pull/3247))
+ - Refactor Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3371](https://github.com/community-scripts/ProxmoxVE/pull/3371))
### 🌐 Website
- - Update siteConfig.tsx to use new analytics code [@BramSuurdje](https://github.com/BramSuurdje) ([#3389](https://github.com/community-scripts/ProxmoxVE/pull/3389))
-- Bump next from 15.1.3 to 15.2.3 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3316](https://github.com/community-scripts/ProxmoxVE/pull/3316))
+- Update siteConfig.tsx to use new analytics code [@BramSuurdje](https://github.com/BramSuurdje) ([#3389](https://github.com/community-scripts/ProxmoxVE/pull/3389))
+- Bump next from 15.1.3 to 15.2.16](https://github.com/community-scripE/pull/3316))
- #### 🐞 Bug Fixes
- - Better Text for Version Date [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
+ - Better Text for Version Date [@michelroegl-brunner](https:er) ([#3388](https://github.com/community-scripts/ProxmoxVE/pull/3388))
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
- Move cryptpad files to right folders [@bvdberg01](https://github.com/bvdberg01) ([#3242](https://github.com/community-scripts/ProxmoxVE/pull/3242))
@@ -92,4 +160,4 @@
## 2025-03-03
-### 🚀 Initial Release
\ No newline at end of file
+### 🚀 Initial Release
diff --git a/docs/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
similarity index 100%
rename from docs/CODE_OF_CONDUCT.md
rename to CODE_OF_CONDUCT.md
diff --git a/README.md b/README.md
index bdc7d7412..967e7139d 100644
--- a/README.md
+++ b/README.md
@@ -2,14 +2,18 @@
**Warning: This repository is under active development and is not intended for production use. Changes may occur at any time!**
+
+
---
## 🔧 What is this?
+
This repository contains a collection of scripts for managing and automating Proxmox Virtual Environment (Proxmox VE). Originally created by [tteck](https://github.com/tteck), the project is now community-driven and continues to evolve.
---
## 🚀 Development Status
+
- **⚠️ Unstable**: Features may be incomplete or subject to change.
- **📢 Community-driven**: Contributions and feedback are welcome.
- **🔄 Frequent updates**: Active development means rapid iterations and fixes.
@@ -17,7 +21,9 @@ This repository contains a collection of scripts for managing and automating Pro
---
## 💬 Get Involved
+
Join the discussion, contribute code, or report issues:
+
- **Discord**: [Join the Proxmox Helper Scripts Discord server](https://discord.gg/UHrpNWGwkH)
- **GitHub Issues**: [Report bugs or request features](https://github.com/community-scripts/ProxmoxVED/issues)
@@ -30,5 +36,3 @@ This project is licensed under the [MIT License](LICENSE).
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
-
-
diff --git a/core/api/.env.example b/api/.env.example
similarity index 100%
rename from core/api/.env.example
rename to api/.env.example
diff --git a/api/go.mod b/api/go.mod
new file mode 100644
index 000000000..9a800e283
--- /dev/null
+++ b/api/go.mod
@@ -0,0 +1,23 @@
+module proxmox-api
+
+go 1.23.2
+
+require (
+ github.com/gorilla/mux v1.8.1
+ github.com/joho/godotenv v1.5.1
+ github.com/rs/cors v1.11.1
+ go.mongodb.org/mongo-driver v1.17.2
+)
+
+require (
+ github.com/golang/snappy v0.0.4 // indirect
+ github.com/klauspost/compress v1.16.7 // indirect
+ github.com/montanaflynn/stats v0.7.1 // indirect
+ github.com/xdg-go/pbkdf2 v1.0.0 // indirect
+ github.com/xdg-go/scram v1.1.2 // indirect
+ github.com/xdg-go/stringprep v1.0.4 // indirect
+ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
+ golang.org/x/crypto v0.35.0 // indirect
+ golang.org/x/sync v0.11.0 // indirect
+ golang.org/x/text v0.22.0 // indirect
+)
diff --git a/core/api/go.sum b/api/go.sum
similarity index 58%
rename from core/api/go.sum
rename to api/go.sum
index ea649ff6b..f0a92be40 100644
--- a/core/api/go.sum
+++ b/api/go.sum
@@ -1,37 +1,19 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
-github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI=
-github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
-github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
-github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
@@ -45,16 +27,16 @@ go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793Sqyh
go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
-golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
+golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
+golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -66,18 +48,9 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
-gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314=
-gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
diff --git a/core/api/main.go b/api/main.go
similarity index 100%
rename from core/api/main.go
rename to api/main.go
diff --git a/core/api/go.mod b/core/api/go.mod
deleted file mode 100644
index 0297b1a4f..000000000
--- a/core/api/go.mod
+++ /dev/null
@@ -1,32 +0,0 @@
-module proxmox-api
-
-go 1.23.2
-
-require go.mongodb.org/mongo-driver v1.17.2
-
-require (
- filippo.io/edwards25519 v1.1.0 // indirect
- github.com/go-sql-driver/mysql v1.8.1 // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/gorilla/mux v1.8.1 // indirect
- github.com/jackc/pgpassfile v1.0.0 // indirect
- github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
- github.com/jackc/pgx/v5 v5.7.2 // indirect
- github.com/jackc/puddle/v2 v2.2.2 // indirect
- github.com/jinzhu/inflection v1.0.0 // indirect
- github.com/jinzhu/now v1.1.5 // indirect
- github.com/joho/godotenv v1.5.1 // indirect
- github.com/klauspost/compress v1.16.7 // indirect
- github.com/montanaflynn/stats v0.7.1 // indirect
- github.com/rs/cors v1.11.1 // indirect
- github.com/xdg-go/pbkdf2 v1.0.0 // indirect
- github.com/xdg-go/scram v1.1.2 // indirect
- github.com/xdg-go/stringprep v1.0.4 // indirect
- github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
- golang.org/x/crypto v0.32.0 // indirect
- golang.org/x/sync v0.10.0 // indirect
- golang.org/x/text v0.21.0 // indirect
- gorm.io/driver/mysql v1.5.7 // indirect
- gorm.io/driver/postgres v1.5.11 // indirect
- gorm.io/gorm v1.25.12 // indirect
-)
diff --git a/ct/Deferred/babybuddy.sh b/ct/Deferred/babybuddy.sh
deleted file mode 100644
index 897c3afab..000000000
--- a/ct/Deferred/babybuddy.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (Canbiz)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source:
-
-APP="BabyBuddy"
-var_tags="baby"
-var_disk="5"
-var_cpu="2"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
- if [[ ! -d /opt/maxun ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
- RELEASE=$(curl -s https://api.github.com/repos/xxxxx/xxxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping Services"
- systemctl stop APP
- msg_ok "Services Stopped"
- fi
-}
-
-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}:8080${CL}"
diff --git a/ct/Deferred/documenso.sh b/ct/Deferred/documenso.sh
deleted file mode 100644
index 39f3856c0..000000000
--- a/ct/Deferred/documenso.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (Canbiz)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source:
-
-APP="Documenso"
-var_tags="document"
-var_disk="12"
-var_cpu="6"
-var_ram="6144"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
- if [[ ! -d /opt/documenso ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
- RELEASE=$(curl -s https://api.github.com/repos/documenso/documenso/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
- msg_info "Stopping ${APP}"
- systemctl stop documenso
- msg_ok "${APP} Stopped"
-
- msg_info "Updating ${APP} to ${RELEASE}"
- cp /opt/documenso/.env /opt/
- rm -R /opt/documenso
- curl -fsSL "https://github.com/documenso/documenso/archive/refs/tags/v${RELEASE}.zip"
- unzip -q v${RELEASE}.zip
- mv documenso-${RELEASE} /opt/documenso
- cd /opt/documenso
- mv /opt/.env /opt/documenso/.env
- npm install &>/dev/null
- npm run build:web &>/dev/null
- npm run prisma:migrate-deploy &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP}"
-
- msg_info "Starting ${APP}"
- systemctl start documenso
- msg_ok "Started ${APP}"
-
- msg_info "Cleaning Up"
- rm -rf v${RELEASE}.zip
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
- else
- msg_ok "No update required. ${APP} is already at ${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}:9000${CL}"
diff --git a/ct/Deferred/mattermost.sh b/ct/Deferred/mattermost.sh
deleted file mode 100644
index d3f3c694f..000000000
--- a/ct/Deferred/mattermost.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (Canbiz)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-
-APP="Mattermost"
-var_disk="10"
-var_cpu="2"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-variables
-color
-catch_errors
-
-function update_script() {
-header_info
-if [[ ! -d /opt/mattermost ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/xxxx/xxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping App"
- systemctl stop xxxx
- msg_ok "App Stopped"
-
- msg_info "Updating App"
- #
- msg_ok "Updated App"
-
- msg_info "Starting App"
- systemctl start App
- msg_ok "Started App"
-
- msg_info "Cleaning Up"
- #rm -rf
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8086${CL} \n"
diff --git a/ct/alpine-bitmagnet.sh b/ct/alpine-bitmagnet.sh
new file mode 100644
index 000000000..ea9519281
--- /dev/null
+++ b/ct/alpine-bitmagnet.sh
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Slaviša Arežina (tremor021)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/bitmagnet-io/bitmagnet
+
+APP="Alpine-bitmagnet"
+var_tags="${var_tags:-alpine;torrent}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-256}"
+var_disk="${var_disk:-3}"
+var_os="${var_os:-alpine}"
+var_version="${var_version:-3.21}"
+var_unprivileged="${var_unprivileged:-1}"
+
+header_info "$APP"
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+
+ if [[ ! -d /opt/bitmagnet ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit 1
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
+ msg_info "Backing up database"
+ rm -f /tmp/backup.sql
+ $STD sudo -u postgres pg_dump \
+ --column-inserts \
+ --data-only \
+ --on-conflict-do-nothing \
+ --rows-per-insert=1000 \
+ --table=metadata_sources \
+ --table=content \
+ --table=content_attributes \
+ --table=content_collections \
+ --table=content_collections_content \
+ --table=torrent_sources \
+ --table=torrents \
+ --table=torrent_files \
+ --table=torrent_hints \
+ --table=torrent_contents \
+ --table=torrent_tags \
+ --table=torrents_torrent_sources \
+ --table=key_values \
+ bitmagnet \
+ >/tmp/backup.sql
+ mv /tmp/backup.sql /opt/
+ msg_ok "Database backed up"
+
+ msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
+ $STD apk -U upgrade
+ $STD service bitmagnet stop
+ [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
+ [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
+ rm -rf /opt/bitmagnet/*
+ temp_file=$(mktemp)
+ curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
+ tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
+ cd /opt/bitmagnet
+ VREL=v$RELEASE
+ $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
+ chmod +x bitmagnet
+ [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
+ [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
+ rm -f "$temp_file"
+ echo "${RELEASE}" >/opt/bitmagnet_version.txt
+ $STD service bitmagnet start
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+
+ exit 0
+}
+
+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 IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3333${CL}"
diff --git a/ct/alpine-gitea.sh b/ct/alpine-gitea.sh
deleted file mode 100644
index 66cb7db6d..000000000
--- a/ct/alpine-gitea.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://gitea.io
-
-APP="Alpine-Gitea"
-var_tags="alpine;git"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating Gitea"
- apk upgrade gitea
- msg_ok "Updated Gitea"
-
- msg_info "Restarting Gitea"
- rc-service gitea restart
- msg_ok "Restarted Gitea"
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/alpine-mariadb.sh b/ct/alpine-mariadb.sh
deleted file mode 100644
index ed82cb50f..000000000
--- a/ct/alpine-mariadb.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://mariadb.org
-
-APP="Alpine-MariaDB"
-var_tags="alpine;database"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating MariaDB"
- apk upgrade mariadb mariadb-client
- msg_ok "Updated MariaDB"
-
- msg_info "Restarting MariaDB"
- rc-service mariadb restart
- msg_ok "Restarted MariaDB"
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/alpine-node-red.sh b/ct/alpine-node-red.sh
deleted file mode 100644
index 69ce34672..000000000
--- a/ct/alpine-node-red.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://redis.io/
-
-APP="Alpine-Node-Red"
-var_tags="alpine;automation"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating Node.js and npm"
- apk upgrade nodejs npm
- msg_ok "Updated Node.js and npm"
-
- msg_info "Updating Node-RED"
- npm install -g --unsafe-perm node-red
- msg_ok "Updated Node-RED"
-
- msg_info "Restarting Node-RED"
- rc-service nodered restart
- msg_ok "Restarted Node-RED"
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable on port 1880.
- ${BL}http://:1880${CL} \n"
diff --git a/ct/alpine-postgresql.sh b/ct/alpine-postgresql.sh
deleted file mode 100644
index 69ddf7a73..000000000
--- a/ct/alpine-postgresql.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://postgresql.org/
-
-APP="Alpine-Postgresql"
-var_tags="alpine;database"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating PostgreSQL"
- apk upgrade postgresql postgresql-contrib
- msg_ok "Updated PostgreSQL"
-
- msg_info "Restarting PostgreSQL"
- rc-service postgresql restart
- msg_ok "Restarted PostgreSQL"
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/alpine-prometheus.sh b/ct/alpine-prometheus.sh
deleted file mode 100644
index 044ced66d..000000000
--- a/ct/alpine-prometheus.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://prometheus.io/
-
-APP="Alpine-Prometheus"
-var_tags="alpine;monitoring"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating Prometheus"
- apk upgrade prometheus
- msg_ok "Updated Prometheus"
-
- msg_info "Restarting Prometheus"
- rc-service prometheus restart
- msg_ok "Restarted Prometheus"
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/alpine-syncthing.sh b/ct/alpine-syncthing.sh
new file mode 100644
index 000000000..97f2f226c
--- /dev/null
+++ b/ct/alpine-syncthing.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: MickLesk (CanbiZ)
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://syncthing.net/
+
+APP="Alpine-Syncthing"
+var_tags="${var_tags:-alpine;networking}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-256}"
+var_disk="${var_disk:-1}"
+var_os="${var_os:-alpine}"
+var_version="${var_version:-3.21}"
+var_unprivileged="${var_unprivileged:-1}"
+
+header_info "$APP"
+variables
+color
+catch_errors
+
+function update_script() {
+ msg_info "Updating Alpine Packages"
+ $STD apk -U upgrade
+ msg_ok "Updated Alpine Packages"
+
+ msg_info "Updating Syncthing"
+ $STD apk upgrade syncthing
+ msg_ok "Updated Syncthing"
+
+ msg_info "Restarting Syncthing"
+ $STD rc-service syncthing restart
+ msg_ok "Restarted Syncthing"
+
+ exit 1
+}
+
+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}:8384${CL}"
diff --git a/ct/alpine-wireguard.sh b/ct/alpine-wireguard.sh
deleted file mode 100644
index 316965f8f..000000000
--- a/ct/alpine-wireguard.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://www.wireguard.com/
-
-APP="Alpine-Wireguard"
-var_tags="alpine;vpn"
-var_cpu="1"
-var_ram="256"
-var_disk="1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- msg_info "Updating Alpine Packages"
- apk update && apk upgrade
- msg_ok "Updated Alpine Packages"
-
- msg_info "Updating WireGuard"
- apk upgrade wireguard-tools
- msg_ok "Updated WireGuard"
-}
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/alpine.sh b/ct/alpine.sh
index dc93eccdf..cfe6eee63 100644
--- a/ct/alpine.sh
+++ b/ct/alpine.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://alpinelinux.org/
APP="Alpine"
-var_tags="os;alpine"
-var_cpu="1"
-var_ram="512"
-var_disk="0.1"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
+var_tags="${var_tags:-os;alpine}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-0.1}"
+var_os="${var_os:-alpine}"
+var_version="${var_version:-3.21}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
@@ -20,6 +20,9 @@ color
catch_errors
function update_script() {
+ header_info
+ #check_container_storage
+ #check_container_resources
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
"1" "Check for Alpine Updates" ON \
3>&1 1>&2 2>&3)
diff --git a/ct/babybuddy.sh b/ct/babybuddy.sh
new file mode 100644
index 000000000..a3fadfd91
--- /dev/null
+++ b/ct/babybuddy.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source:
+
+APP="Baby Buddy"
+var_tags="${var_tags:-baby}"
+var_disk="${var_disk:-5}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+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 /opt/babybuddy ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
+ setup_uv
+
+ msg_info "Stopping Services"
+ systemctl stop nginx
+ systemctl stop uwsgi
+ msg_ok "Services Stopped"
+
+ msg_info "Cleaning old files"
+ cp babybuddy/settings/production.py /tmp/production.py.bak
+ find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
+ msg_ok "Cleaned old files"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ temp_file=$(mktemp)
+ curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
+ cd /opt/babybuddy
+ tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
+ mv /tmp/production.py.bak babybuddy/settings/production.py
+ cd /opt/babybuddy
+ source .venv/bin/activate
+ $STD uv pip install -r requirements.txt
+ $STD python manage.py migrate
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Fixing permissions"
+ chown -R www-data:www-data /opt/data
+ chmod 640 /opt/data/db.sqlite3
+ chmod 750 /opt/data
+ msg_ok "Permissions fixed"
+
+ msg_info "Starting Services"
+ systemctl start uwsgi
+ systemctl start nginx
+ msg_ok "Services Started"
+
+ msg_info "Cleaning up"
+ rm -f "$temp_file"
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ 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}${CL}"
diff --git a/ct/backrest.sh b/ct/backrest.sh
new file mode 100644
index 000000000..c69d359b5
--- /dev/null
+++ b/ct/backrest.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: ksad (enirys31)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://garethgeorge.github.io/backrest/
+
+APP="Backrest"
+var_tags="${var_tags:-backup}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-8}"
+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 /opt/backrest ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -fsSL https://api.github.com/repos/garethgeorge/backrest/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop backrest
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt/backrest/bin
+ curl -fsSL "https://github.com/garethgeorge/backrest/releases/download/v${RELEASE}/backrest_Linux_x86_64.tar.gz" -o "backrest_Linux_x86_64.tar.gz"
+ tar -xzf backrest_Linux_x86_64.tar.gz
+ rm -rf backrest_Linux_x86_64.tar.gz
+ rm -f install.sh uninstall.sh
+ chmod +x backrest
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start backrest
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${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}:9898${CL}"
diff --git a/ct/bar-assistant.sh b/ct/bar-assistant.sh
new file mode 100644
index 000000000..0ae6829be
--- /dev/null
+++ b/ct/bar-assistant.sh
@@ -0,0 +1,136 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: bvdberg01
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/karlomikus/bar-assistant
+# Source: https://github.com/karlomikus/vue-salt-rim
+# Source: https://www.meilisearch.com/
+
+APP="Bar-Assistant"
+var_tags="${var_tags:-inventory;drinks}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_disk="${var_disk:-4}"
+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 /opt/bar-assistant ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE_MEILISEARCH=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ RELEASE_BARASSISTANT=$(curl -s https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ RELEASE_SALTRIM=$(curl -s https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE_BARASSISTANT}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop nginx
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE_BARASSISTANT}"
+ cd /opt
+ mv /opt/bar-assistant /opt/bar-assistant-backup
+ curl -fsSL "https://github.com/karlomikus/bar-assistant/archive/refs/tags/v${RELEASE_BARASSISTANT}.zip" -o barassistant.zip
+ unzip -q barassistant.zip
+ mv /opt/bar-assistant-${RELEASE_BARASSISTANT}/ /opt/bar-assistant
+ cp /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
+ cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
+ cd /opt/bar-assistant
+ composer install
+ $STD php artisan migrate --force
+ $STD php artisan storage:link
+ $STD php artisan bar:setup-meilisearch
+ $STD php artisan scout:sync-index-settings
+ $STD php artisan config:cache
+ $STD php artisan route:cache
+ $STD php artisan event:cache
+ echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}"
+
+ msg_info "Starting Service"
+ systemctl start service nginx
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/barassistant.zip
+ rm -rf /opt/bar-assistant-backup
+ msg_ok "Cleaned"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE_BARASSISTANT}"
+ fi
+
+ if [[ ! -f /opt/vue-salt-rim_version.txt ]] || [[ "${RELEASE_SALTRIM}" != "$(cat /opt/vue-salt-rim_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop nginx
+ msg_ok "Stopped Service"
+
+ msg_info "Updating Salt Rim to v${RELEASE_SALTRIM}"
+ cd /opt
+ mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
+ curl -fsSL "https://github.com/karlomikus/vue-salt-rim/archive/refs/tags/v${RELEASE_SALTRIM}.zip" -o saltrim.zip
+ unzip -q saltrim.zip
+ mv /opt/vue-salt-rim-${RELEASE_SALTRIM}/ /opt/vue-salt-rim
+ cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
+ cd /opt/vue-salt-rim
+ npm run build
+ echo "${RELEASE_SALTRIM}" >/opt/vue-salt-rim_version.txt
+ msg_ok "Updated $APP to v${RELEASE_SALTRIM}"
+
+ msg_info "Starting Service"
+ systemctl start service nginx
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/saltrim.zip
+ rm -rf /opt/vue-salt-rim-backup
+ msg_ok "Cleaned"
+ else
+ msg_ok "No update required. Salt Rim is already at v${RELEASE_SALTRIM}"
+ fi
+
+ if [[ ! -f /opt/meilisearch_version.txt ]] || [[ "${RELEASE_MEILISEARCH}" != "$(cat /opt/meilisearch_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop meilisearch
+ msg_ok "Stopped Service"
+
+ msg_info "Updating Meilisearch to ${RELEASE_MEILISEARCH}"
+ cd /opt
+ RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o meilisearch.deb
+ $STD dpkg -i meilisearch.deb
+ echo "${RELEASE_MEILISEARCH}" >/opt/meilisearch_version.txt
+ msg_ok "Updated Meilisearch to v${RELEASE_MEILISEARCH}"
+
+ msg_info "Starting Service"
+ systemctl start meilisearch
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf "/opt/meilisearch.deb"
+ msg_ok "Cleaned"
+ msg_ok "Updated Meilisearch"
+ else
+ msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
+ 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}${CL}"
diff --git a/ct/bitmagnet.sh b/ct/bitmagnet.sh
new file mode 100644
index 000000000..520982ce6
--- /dev/null
+++ b/ct/bitmagnet.sh
@@ -0,0 +1,98 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Slaviša Arežina (tremor021)
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://github.com/bitmagnet/bitmagnet
+
+APP="Bitmagnet"
+var_tags="${var_tags:-os}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-4}"
+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 /opt/bitmagnet ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop bitmagnet-web
+ msg_ok "Stopped Service"
+
+ msg_info "Backing up database"
+ rm -f /tmp/backup.sql
+ $STD sudo -u postgres pg_dump \
+ --column-inserts \
+ --data-only \
+ --on-conflict-do-nothing \
+ --rows-per-insert=1000 \
+ --table=metadata_sources \
+ --table=content \
+ --table=content_attributes \
+ --table=content_collections \
+ --table=content_collections_content \
+ --table=torrent_sources \
+ --table=torrents \
+ --table=torrent_files \
+ --table=torrent_hints \
+ --table=torrent_contents \
+ --table=torrent_tags \
+ --table=torrents_torrent_sources \
+ --table=key_values \
+ bitmagnet \
+ >/tmp/backup.sql
+ mv /tmp/backup.sql /opt/
+ msg_ok "Database backed up"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
+ [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
+ rm -rf /opt/bitmagnet/*
+ temp_file=$(mktemp)
+ curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
+ tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
+ cd /opt/bitmagnet
+ VREL=v$RELEASE
+ $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
+ chmod +x bitmagnet
+ [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
+ [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start bitmagnet-web
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -f "$temp_file"
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ 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}:3333${CL}"
diff --git a/ct/bluecherry.sh b/ct/bluecherry.sh
new file mode 100644
index 000000000..f9b2ec635
--- /dev/null
+++ b/ct/bluecherry.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Slaviša Arežina (tremor021)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/TwiN/gatus
+
+APP="bluecherry"
+var_tags="${var_tags:-video;dvr}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-4096}"
+var_disk="${var_disk:-15}"
+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 /opt/gatus ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Updating $APP"
+
+ msg_info "Stopping $APP"
+ systemctl stop gatus
+ msg_ok "Stopped $APP"
+
+ msg_info "Updating $APP to v${RELEASE}"
+ mv /opt/gatus/config/config.yaml /opt
+ rm -rf /opt/gatus/*
+ temp_file=$(mktemp)
+ curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
+ tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
+ cd /opt/gatus
+ $STD go mod tidy
+ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
+ setcap CAP_NET_RAW+ep gatus
+ mv /opt/config.yaml config
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting $APP"
+ systemctl start gatus
+ msg_ok "Started $APP"
+
+ msg_info "Cleaning Up"
+ rm -f "$temp_file"
+ msg_ok "Cleanup Completed"
+
+ 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}:8080${CL}"
diff --git a/ct/calibre-web-automated.sh b/ct/calibre-web-automated.sh
deleted file mode 100644
index 1fe9576c7..000000000
--- a/ct/calibre-web-automated.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: vhsdream
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://github.com/crocodilestick/Calibre-Web-Automated
-
-APP="Calibre-Web-Automated"
-var_tags="eBook"
-var_cpu="2"
-var_ram="2048"
-var_disk="4"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
-
- if [[ ! -d /opt/cwa ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
-
- RELEASE=$(curl -s https://api.github.com/repos/crocodilestick/Calibre-Web-Automated/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping $APP"
- systemctl stop cps cwa-autolibrary cwa-ingester cwa-change-detector cwa-autozip.timer
- msg_ok "Stopped $APP"
-
- msg_info "Creating Backup"
- $STD tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/cwa /opt/calibre-web/metadata.db
- msg_ok "Backup Created"
-
- msg_info "Updating $APP to v${RELEASE}"
- cd /opt/kepubify
- rm -rf kepubify-linux-64bit
- curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
- chmod +x kepubify-linux-64bit
- cd /opt/calibre-web
- $STD pip install --upgrade calibreweb[goodreads,metadata,kobo]
- cd /opt/cwa
- $STD git stash --all
- $STD git pull
- $STD pip install -r requirements.txt
- curl -fsSL https://gist.githubusercontent.com/vhsdream/2e81afeff139c5746db1ede88c01cc7b/raw/51238206e87aec6c0abeccce85dec9f2b0c89000/proxmox-lxc.patch -o /opt/cwa.patch # not for production
- $STD git apply --whitespace=fix /opt/cwa.patch # not for production
- cp -r /opt/cwa/root/app/calibre-web/cps/* /usr/local/lib/python3*/dist-packages/calibreweb/cps
- cd scripts
- chmod +x check-cwa-services.sh ingest-service.sh change-detector.sh
- msg_ok "Updated $APP to v${RELEASE}"
-
- msg_info "Starting $APP"
- systemctl start cps cwa-autolibrary cwa-ingester cwa-change-detector cwa-autozip.timer
- msg_ok "Started $APP"
-
- msg_info "Cleaning Up"
- rm -rf /opt/cwa.patch
- rm -rf "/opt/${APP}_backup_$(date +%F).tar.gz"
- msg_ok "Cleanup Completed"
-
- echo "${RELEASE}" >/opt/${APP}_version.txt
- 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}:8083${CL}"
diff --git a/ct/cloudflare-ddns.sh b/ct/cloudflare-ddns.sh
new file mode 100644
index 000000000..84a5b4e24
--- /dev/null
+++ b/ct/cloudflare-ddns.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: edoardop13
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/favonia/cloudflare-ddns
+
+APP="Cloudflare-DDNS"
+var_tags="${var_tags:-network}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-3}"
+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 [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is no update function for ${APP}."
+ exit
+}
+
+start
+build_container
+description
+msg_ok "Completed Successfully!\n"
diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh
index c715358cb..ef280d89c 100644
--- a/ct/create_lxc.sh
+++ b/ct/create_lxc.sh
@@ -9,26 +9,15 @@
# This sets verbose mode if the global variable is set to "yes"
# if [ "$VERBOSE" == "yes" ]; then set -x; fi
-# This function sets color variables for formatting output in the terminal
-# Colors
-YW=$(echo "\033[33m")
-YWB=$(echo "\033[93m")
-BL=$(echo "\033[36m")
-RD=$(echo "\033[01;31m")
-GN=$(echo "\033[1;92m")
-
-# Formatting
-CL=$(echo "\033[m")
-UL=$(echo "\033[4m")
-BOLD=$(echo "\033[1m")
-BFR="\\r\\033[K"
-HOLD=" "
-TAB=" "
-
-# Icons
-CM="${TAB}✔️${TAB}${CL}"
-CROSS="${TAB}✖️${TAB}${CL}"
-INFO="${TAB}💡${TAB}${CL}"
+if command -v curl >/dev/null 2>&1; then
+ source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func)
+ load_functions
+ #echo "(create-lxc.sh) Loaded core.func via curl"
+elif command -v wget >/dev/null 2>&1; then
+ source <(wget -qO- https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func)
+ load_functions
+ #echo "(create-lxc.sh) Loaded core.func via wget"
+fi
# This sets error handling options and defines the error_handler function to handle errors
set -Eeuo pipefail
@@ -36,7 +25,6 @@ trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
# This function handles errors
function error_handler() {
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h"
local exit_code="$?"
local line_number="$1"
@@ -46,53 +34,6 @@ function error_handler() {
exit 200
}
-# This function displays a spinner.
-function spinner() {
- local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
- local spin_i=0
- local interval=0.1
- printf "\e[?25l"
-
- local color="${YWB}"
-
- while true; do
- printf "\r ${color}%s${CL}" "${frames[spin_i]}"
- spin_i=$(((spin_i + 1) % ${#frames[@]}))
- sleep "$interval"
- done
-}
-
-# This function displays an informational message with a yellow color.
-function msg_info() {
- local msg="$1"
- echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
- spinner &
- SPINNER_PID=$!
-}
-
-function msg_warn() {
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
- printf "\e[?25h"
- local msg="$1"
- echo -e "${BFR}${INFO}${YWB}${msg}${CL}"
-}
-
-# This function displays a success message with a green color.
-function msg_ok() {
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
- printf "\e[?25h"
- local msg="$1"
- echo -e "${BFR}${CM}${GN}${msg}${CL}"
-}
-
-# This function displays a error message with a red color.
-function msg_error() {
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
- printf "\e[?25h"
- local msg="$1"
- echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
-}
-
# This checks for the presence of valid Container Storage and Template Storage locations
msg_info "Validating Storage"
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
@@ -177,20 +118,6 @@ function select_storage() {
exit 205
}
-# Check for network connectivity (IPv4 & IPv6)
-#function check_network() {
-# local CHECK_URLS=("8.8.8.8" "1.1.1.1" "9.9.9.9" "2606:4700:4700::1111" "2001:4860:4860::8888" "2620:fe::fe")
-#
-# for url in "${CHECK_URLS[@]}"; do
-# if ping -c 1 -W 2 "$url" &>/dev/null; then
-# return 0 # Success: At least one connection works
-# fi
-# done
-#
-# msg_error "No network connection detected. Check your internet connection."
-# exit 101
-#}
-
# Test if ID is in use
if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
echo -e "ID '$CTID' is already in use."
@@ -199,19 +126,24 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
exit 206
fi
+# # Get template storage
+# TEMPLATE_STORAGE=$(select_storage template)
+# CONTAINER_STORAGE=$(select_storage container) || exit
+# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}Container Storage: ${BL}$CONTAINER_STORAGE${CL}."
+
# Get template storage
-TEMPLATE_STORAGE=$(select_storage template) || exit
+TEMPLATE_STORAGE=$(select_storage template)
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
# Get container storage
-CONTAINER_STORAGE=$(select_storage container) || exit
+CONTAINER_STORAGE=$(select_storage container)
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# Update LXC template list
-msg_info "Updating LXC Template List"
+$STD msg_info "Updating LXC Template List"
#check_network
pveam update >/dev/null
-msg_ok "Updated LXC Template List"
+$STD msg_ok "Updated LXC Template List"
# Get LXC template string
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
@@ -255,28 +187,92 @@ grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgi
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
+# Secure creation of the LXC container with lock and template check
+lockfile="/tmp/template.${TEMPLATE}.lock"
+exec 9>"$lockfile"
+flock -w 60 9 || {
+ msg_error "Timeout while waiting for template lock"
+ exit 211
+}
+
msg_info "Creating LXC Container"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
- msg_error "Container creation failed. Checking if template is corrupted."
+ msg_error "Container creation failed. Checking if template is corrupted or incomplete."
- if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
- msg_error "Template appears to be corrupted. Removing and re-downloading."
+ if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH")" -lt 1000000 ]]; then
+ msg_error "Template file too small or missing – re-downloading."
+ rm -f "$TEMPLATE_PATH"
+ elif ! zstdcat "$TEMPLATE_PATH" | tar -tf - &>/dev/null; then
+ msg_error "Template appears to be corrupted – re-downloading."
rm -f "$TEMPLATE_PATH"
-
- if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
- msg_error "Failed to re-download template."
- exit 208
- fi
-
- msg_ok "Re-downloaded LXC Template"
-
- if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
- msg_error "Container creation failed after re-downloading template."
- exit 200
- fi
else
- msg_error "Container creation failed, but template is not corrupted."
+ msg_error "Template is valid, but container creation still failed."
exit 209
fi
+
+ # Retry download
+ for attempt in {1..3}; do
+ msg_info "Attempt $attempt: Re-downloading template..."
+ if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
+ msg_ok "Template re-download successful."
+ break
+ fi
+ if [ "$attempt" -eq 3 ]; then
+ msg_error "Three failed attempts. Aborting."
+ exit 208
+ fi
+ sleep $((attempt * 5))
+ done
+
+ sleep 1 # I/O-Sync-Delay
+
+ if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
+ msg_error "Container creation failed after re-downloading template."
+ exit 200
+ fi
fi
+
+if ! pct status "$CTID" &>/dev/null; then
+ msg_error "Container not found after pct create – assuming failure."
+ exit 210
+fi
+: "${UDHCPC_FIX:=}"
+if [ "$UDHCPC_FIX" == "yes" ]; then
+ # Ensure container is mounted
+ if ! mount | grep -q "/var/lib/lxc/${CTID}/rootfs"; then
+ pct mount "$CTID" >/dev/null 2>&1
+ MOUNTED_HERE=true
+ else
+ MOUNTED_HERE=false
+ fi
+
+ CONFIG_FILE="/var/lib/lxc/${CTID}/rootfs/etc/udhcpc/udhcpc.conf"
+
+ for i in {1..10}; do
+ [ -f "$CONFIG_FILE" ] && break
+ sleep 0.5
+ done
+
+ if [ -f "$CONFIG_FILE" ]; then
+ msg_info "Patching udhcpc.conf for Alpine DNS override"
+ sed -i '/^#*RESOLV_CONF="/d' "$CONFIG_FILE"
+ awk '
+ /^# Do not overwrite \/etc\/resolv\.conf/ {
+ print
+ print "RESOLV_CONF=\"no\""
+ next
+ }
+ { print }
+ ' "$CONFIG_FILE" >"${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE"
+ msg_ok "Patched udhcpc.conf (RESOLV_CONF=\"no\")"
+ else
+ msg_error "udhcpc.conf not found in $CONFIG_FILE after waiting"
+ fi
+
+ # Clean up: only unmount if we mounted it here
+ if [ "${MOUNTED_HERE}" = true ]; then
+ pct unmount "$CTID" >/dev/null 2>&1
+ fi
+fi
+
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
diff --git a/ct/debian.sh b/ct/debian.sh
index 51cd837ef..187457d9e 100644
--- a/ct/debian.sh
+++ b/ct/debian.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
@@ -40,3 +40,12 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+
+read -p "Remove this Container? " prompt
+ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
+ pct stop "$CTID"
+ pct destroy "$CTID"
+ msg_ok "Removed this script"
+ else
+ msg_warn "Did not remove this script"
+ fi
diff --git a/ct/Deferred/ampache.sh b/ct/deferred/ampache.sh
similarity index 77%
rename from ct/Deferred/ampache.sh
rename to ct/deferred/ampache.sh
index 28b5fad92..89bca190b 100644
--- a/ct/Deferred/ampache.sh
+++ b/ct/deferred/ampache.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Ampache"
-var_tags="music"
-var_disk="5"
-var_cpu="4"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-music}"
+var_disk="${var_disk:-5}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-2048}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/Deferred/ghostfolio.sh b/ct/deferred/ghostfolio.sh
similarity index 71%
rename from ct/Deferred/ghostfolio.sh
rename to ct/deferred/ghostfolio.sh
index 20f04c8aa..184841a14 100644
--- a/ct/Deferred/ghostfolio.sh
+++ b/ct/deferred/ghostfolio.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Ghostfolio"
-var_tags="portfolio"
-var_disk="6"
-var_cpu="2"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-portfolio}"
+var_disk="${var_disk:-6}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/healthchecks.sh b/ct/deferred/healthchecks.sh
similarity index 70%
rename from ct/healthchecks.sh
rename to ct/deferred/healthchecks.sh
index 85bdf75a4..9c6f404c3 100644
--- a/ct/healthchecks.sh
+++ b/ct/deferred/healthchecks.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="healthchecks"
-var_tags="monitoring"
-var_cpu="4"
-var_ram="4096"
-var_disk="20"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-monitoring}"
+var_cpu="${var_cpu:-4}"
+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
diff --git a/ct/Deferred/hoodik.sh b/ct/deferred/hoodik.sh
similarity index 84%
rename from ct/Deferred/hoodik.sh
rename to ct/deferred/hoodik.sh
index 4efb63fe3..0f84b5138 100644
--- a/ct/Deferred/hoodik.sh
+++ b/ct/deferred/hoodik.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
@@ -7,13 +7,13 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/
APP="Hoodik"
# shellcheck disable=SC2034
-var_tags="sharing"
-var_disk="7"
-var_cpu="4"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-sharing}"
+var_disk="${var_disk:-7}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-2048}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/Deferred/koel.sh b/ct/deferred/koel.sh
similarity index 85%
rename from ct/Deferred/koel.sh
rename to ct/deferred/koel.sh
index 50744dbf6..839ac5365 100644
--- a/ct/Deferred/koel.sh
+++ b/ct/deferred/koel.sh
@@ -1,24 +1,20 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
## App Default Values
APP="Koel"
-var_tags="music;player;homelab"
-var_disk="9"
-var_cpu="3"
-var_ram="3072"
-var_os="debian"
-var_version="12"
-var_verbose="yes"
+var_tags="${var_tags:-music}"
+var_disk="${var_disk:-9}"
+var_cpu="${var_cpu:-3}"
+var_ram="${var_ram:-3072}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
-# App Output & Base Settings
header_info "$APP"
-base_settings
-
-# Core
variables
color
catch_errors
diff --git a/ct/Deferred/maxun.sh b/ct/deferred/maxun.sh
similarity index 85%
rename from ct/Deferred/maxun.sh
rename to ct/deferred/maxun.sh
index 31733a42f..ee0b3819e 100644
--- a/ct/Deferred/maxun.sh
+++ b/ct/deferred/maxun.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/getmaxun/maxun
APP="Maxun"
-var_tags="scraper"
-var_disk="7"
-var_cpu="2"
-var_ram="3072"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-scraper}"
+var_disk="${var_disk:-7}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-3072}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/Deferred/netbootxyz.sh b/ct/deferred/netbootxyz.sh
similarity index 88%
rename from ct/Deferred/netbootxyz.sh
rename to ct/deferred/netbootxyz.sh
index b091c0187..4a3c009db 100644
--- a/ct/Deferred/netbootxyz.sh
+++ b/ct/deferred/netbootxyz.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2023 tteck
# Author: tteck (tteckster)
# License: MIT
@@ -8,22 +8,22 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/
function header_info {
clear
cat <<"EOF"
- __ __ __
+ __ __ __
____ ___ / /_/ /_ ____ ____ / /_ _ ____ ______
/ __ \/ _ \/ __/ __ \/ __ \/ __ \/ __/ | |/_/ / / /_ /
/ / / / __/ /_/ /_/ / /_/ / /_/ / /__ _> /_/ / / /_
/_/ /_/\___/\__/_.___/\____/\____/\__(_)_/|_|\__, / /___/
- /____/
+ /____/
EOF
}
header_info
echo -e "Loading..."
APP="netboot.xyz"
-var_disk="2"
-var_cpu="1"
-var_ram="512"
-var_os="debian"
-var_version="12"
+var_disk="${var_disk:-2}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
variables
color
catch_errors
diff --git a/ct/Deferred/pixelfed.sh b/ct/deferred/pixelfed.sh
similarity index 78%
rename from ct/Deferred/pixelfed.sh
rename to ct/deferred/pixelfed.sh
index 08144241b..c053e0795 100644
--- a/ct/Deferred/pixelfed.sh
+++ b/ct/deferred/pixelfed.sh
@@ -1,17 +1,17 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Pixelfed"
-var_tags="pictures"
-var_disk="7"
-var_cpu="2"
-var_ram="2048"
-var_os="debian"
-var_version="12"
+var_tags="${var_tags:-pictures}"
+var_disk="${var_disk:-7}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
header_info "$APP"
variables
diff --git a/ct/Deferred/roundcubemail.sh b/ct/deferred/roundcubemail.sh
similarity index 84%
rename from ct/Deferred/roundcubemail.sh
rename to ct/deferred/roundcubemail.sh
index 9882143ad..4423aea54 100644
--- a/ct/Deferred/roundcubemail.sh
+++ b/ct/deferred/roundcubemail.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Roundcubemail"
-var_tags="mail"
-var_disk="5"
-var_cpu="1"
-var_ram="1024"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-mail}"
+var_disk="${var_disk:-5}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-1024}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/Deferred/squirrelserversmanager.sh b/ct/deferred/squirrelserversmanager.sh
similarity index 80%
rename from ct/Deferred/squirrelserversmanager.sh
rename to ct/deferred/squirrelserversmanager.sh
index 2351eef61..9927d23c7 100644
--- a/ct/Deferred/squirrelserversmanager.sh
+++ b/ct/deferred/squirrelserversmanager.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Squirrel Servers Manager"
-var_tags="manager"
-var_disk="10"
-var_cpu="2"
-var_ram="4096"
-var_os="alpine"
-var_version="3.21"
-var_unprivileged="1"
+var_tags="${var_tags:-manager}"
+var_disk="${var_disk:-10}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-4096}"
+var_os="${var_os:-alpine}"
+var_version="${var_version:-3.21}"
+var_unprivileged="${var_unprivileged:-1}"
variables
color
diff --git a/ct/docspell.sh b/ct/docspell.sh
index 144b6cd39..7fcdc0142 100644
--- a/ct/docspell.sh
+++ b/ct/docspell.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="Docspell"
-var_tags="document"
-var_disk="7"
-var_cpu="4"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-document}"
+var_disk="${var_disk:-7}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-2048}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/fileflows.sh b/ct/fileflows.sh
deleted file mode 100644
index 5adc7c629..000000000
--- a/ct/fileflows.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: kkroboth
-# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
-# Source: https://fileflows.com/
-
-APP="FileFlows"
-var_tags="media;automation"
-var_cpu="2"
-var_ram="2048"
-var_disk="8"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
-
- if [[ ! -d /opt/fileflows ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
-
- update_available=$(curl -s -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' | jq .UpdateAvailable)
- if [[ "${update_available}" == "true" ]]; then
- msg_info "Stopping $APP"
- systemctl stop fileflows
- msg_ok "Stopped $APP"
-
- msg_info "Creating Backup"
- backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
- tar -czf $backup_filename -C /opt/fileflows Data
- msg_ok "Backup Created"
-
- msg_info "Updating $APP to latest version"
- temp_file=$(mktemp)
- curl -fsSL https://fileflows.com/downloads/zip -o $temp_file
- unzip -oq -d /opt/fileflows $temp_file
- msg_ok "Updated $APP to latest version"
-
- msg_info "Starting $APP"
- systemctl start fileflows
- msg_ok "Started $APP"
-
- msg_info "Cleaning Up"
- rm -rf $temp_file
- rm -rf $backup_filename
- msg_ok "Cleanup Completed"
-
- msg_ok "Update Successful"
- else
- msg_ok "No update required. ${APP} is already at latest version"
- 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}:19200${CL}"
diff --git a/ct/freepbx.sh b/ct/freepbx.sh
index a09fbbb1a..103da62da 100644
--- a/ct/freepbx.sh
+++ b/ct/freepbx.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Arian Nasr (arian-nasr)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://www.freepbx.org/
APP="FreePBX"
-var_tags=""
-var_cpu="1"
-var_ram="1024"
-var_disk="20"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="pbx;voip;telephony"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_disk="${var_disk:-10}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
@@ -24,7 +24,6 @@ function update_script() {
check_container_storage
check_container_resources
- # Check if installation is present | -f for file, -d for folder
if [[ ! -f /lib/systemd/system/freepbx.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
diff --git a/ct/frigate.sh b/ct/frigate.sh
index 660623c95..2b498b794 100644
--- a/ct/frigate.sh
+++ b/ct/frigate.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Authors: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
@@ -7,13 +7,13 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/
# App Default Values
APP="Frigate"
-var_tags="nvr"
-var_cpu="4"
-var_ram="4096"
-var_disk="20"
-var_os="debian"
-var_version="11"
-var_unprivileged="0"
+var_tags="${var_tags:-nvr}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-4096}"
+var_disk="${var_disk:-20}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-11}"
+var_unprivileged="${var_unprivileged:-0}"
# App Output
header_info "$APP"
@@ -42,4 +42,4 @@ 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}:5000${CL}"
\ No newline at end of file
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
diff --git a/ct/headers/alpine-bitmagnet b/ct/headers/alpine-bitmagnet
new file mode 100644
index 000000000..20b69a682
--- /dev/null
+++ b/ct/headers/alpine-bitmagnet
@@ -0,0 +1,6 @@
+ ___ __ _ __ _ __ __
+ / | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_
+ / /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
+ / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
+/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
+ /_/ /____/
diff --git a/ct/headers/alpine-gitea b/ct/headers/alpine-gitea
deleted file mode 100644
index 085b375a2..000000000
--- a/ct/headers/alpine-gitea
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ _______ __
- / | / /___ (_)___ ___ / ____(_) /____ ____ _
- / /| | / / __ \/ / __ \/ _ \______/ / __/ / __/ _ \/ __ `/
- / ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ __/ /_/ /
-/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/\__/\___/\__,_/
- /_/
diff --git a/ct/headers/alpine-mariadb b/ct/headers/alpine-mariadb
deleted file mode 100644
index 1279f836a..000000000
--- a/ct/headers/alpine-mariadb
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ __ ___ _ ____ ____
- / | / /___ (_)___ ___ / |/ /___ ______(_)___ _/ __ \/ __ )
- / /| | / / __ \/ / __ \/ _ \______/ /|_/ / __ `/ ___/ / __ `/ / / / __ |
- / ___ |/ / /_/ / / / / / __/_____/ / / / /_/ / / / / /_/ / /_/ / /_/ /
-/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__,_/_/ /_/\__,_/_____/_____/
- /_/
diff --git a/ct/headers/alpine-node-red b/ct/headers/alpine-node-red
deleted file mode 100644
index 076327606..000000000
--- a/ct/headers/alpine-node-red
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ _ __ __ ____ __
- / | / /___ (_)___ ___ / | / /___ ____/ /__ / __ \___ ____/ /
- / /| | / / __ \/ / __ \/ _ \______/ |/ / __ \/ __ / _ \______/ /_/ / _ \/ __ /
- / ___ |/ / /_/ / / / / / __/_____/ /| / /_/ / /_/ / __/_____/ _, _/ __/ /_/ /
-/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\____/\__,_/\___/ /_/ |_|\___/\__,_/
- /_/
diff --git a/ct/headers/alpine-postgresql b/ct/headers/alpine-postgresql
deleted file mode 100644
index 3ce43b97b..000000000
--- a/ct/headers/alpine-postgresql
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ ____ __ __
- / | / /___ (_)___ ___ / __ \____ _____/ /_____ _________ _________ _/ /
- / /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \/ ___/ __ `/ /
- / ___ |/ / /_/ / / / / / __/_____/ ____/ /_/ (__ ) /_/ /_/ / / / __(__ ) /_/ / /
-/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/____/\__/\__, /_/ \___/____/\__, /_/
- /_/ /____/ /_/
diff --git a/ct/headers/alpine-prometheus b/ct/headers/alpine-prometheus
deleted file mode 100644
index 5934057fb..000000000
--- a/ct/headers/alpine-prometheus
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ ____ __ __
- / | / /___ (_)___ ___ / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______
- / /| | / / __ \/ / __ \/ _ \______/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/
- / ___ |/ / /_/ / / / / / __/_____/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )
-/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/
- /_/
diff --git a/ct/headers/alpine-syncthing b/ct/headers/alpine-syncthing
new file mode 100644
index 000000000..8d684d61b
--- /dev/null
+++ b/ct/headers/alpine-syncthing
@@ -0,0 +1,6 @@
+ ___ __ _ _____ __ __ _
+ / | / /___ (_)___ ___ / ___/__ ______ _____/ /_/ /_ (_)___ ____ _
+ / /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/
+ / ___ |/ / /_/ / / / / / __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ /
+/_/ |_/_/ .___/_/_/ /_/\___/ /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, /
+ /_/ /____/ /____/
diff --git a/ct/headers/alpine-wireguard b/ct/headers/alpine-wireguard
deleted file mode 100644
index 0d4c1bf88..000000000
--- a/ct/headers/alpine-wireguard
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ __ _ _ ___ __
- / | / /___ (_)___ ___ | | / (_)_______ ____ ___ ______ __________/ /
- / /| | / / __ \/ / __ \/ _ \_____| | /| / / / ___/ _ \/ __ `/ / / / __ `/ ___/ __ /
- / ___ |/ / /_/ / / / / / __/_____/ |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ /
-/_/ |_/_/ .___/_/_/ /_/\___/ |__/|__/_/_/ \___/\__, /\__,_/\__,_/_/ \__,_/
- /_/ /____/
diff --git a/ct/headers/babybuddy b/ct/headers/babybuddy
index f35231d68..6beae6a6b 100644
--- a/ct/headers/babybuddy
+++ b/ct/headers/babybuddy
@@ -1,6 +1,6 @@
- ____ __ ____ __ __
- / __ )____ _/ /_ __ __/ __ )__ ______/ /___/ /_ __
- / __ / __ `/ __ \/ / / / __ / / / / __ / __ / / / /
- / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ /
-/_____/\__,_/_.___/\__, /_____/\__,_/\__,_/\__,_/\__, /
- /____/ /____/
+ ____ __ ____ __ __
+ / __ )____ _/ /_ __ __ / __ )__ ______/ /___/ /_ __
+ / __ / __ `/ __ \/ / / / / __ / / / / __ / __ / / / /
+ / /_/ / /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / /_/ /
+/_____/\__,_/_.___/\__, / /_____/\__,_/\__,_/\__,_/\__, /
+ /____/ /____/
diff --git a/ct/headers/backrest b/ct/headers/backrest
new file mode 100644
index 000000000..fd1f7f060
--- /dev/null
+++ b/ct/headers/backrest
@@ -0,0 +1,6 @@
+ ____ __ __
+ / __ )____ ______/ /__________ _____/ /_
+ / __ / __ `/ ___/ //_/ ___/ _ \/ ___/ __/
+ / /_/ / /_/ / /__/ ,< / / / __(__ ) /_
+/_____/\__,_/\___/_/|_/_/ \___/____/\__/
+
diff --git a/ct/headers/bar-assistant b/ct/headers/bar-assistant
new file mode 100644
index 000000000..714e3854d
--- /dev/null
+++ b/ct/headers/bar-assistant
@@ -0,0 +1,6 @@
+ ____ ___ _ __ __
+ / __ )____ ______ / | __________(_)____/ /_____ _____ / /_
+ / __ / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
+ / /_/ / /_/ / / /_____/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
+/_____/\__,_/_/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
+
diff --git a/ct/headers/bitmagnet b/ct/headers/bitmagnet
new file mode 100644
index 000000000..b508b34a0
--- /dev/null
+++ b/ct/headers/bitmagnet
@@ -0,0 +1,6 @@
+ ____ _ __ __
+ / __ )(_) /_____ ___ ____ _____ _____ ___ / /_
+ / __ / / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
+ / /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
+/_____/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
+ /____/
diff --git a/ct/headers/bluecherry b/ct/headers/bluecherry
new file mode 100644
index 000000000..c0d82050d
--- /dev/null
+++ b/ct/headers/bluecherry
@@ -0,0 +1,6 @@
+ __ __ __
+ / /_ / /_ _____ _____/ /_ ___ ____________ __
+ / __ \/ / / / / _ \/ ___/ __ \/ _ \/ ___/ ___/ / / /
+ / /_/ / / /_/ / __/ /__/ / / / __/ / / / / /_/ /
+/_.___/_/\__,_/\___/\___/_/ /_/\___/_/ /_/ \__, /
+ /____/
diff --git a/ct/headers/calibre-web-automated b/ct/headers/calibre-web-automated
deleted file mode 100644
index ef3172abc..000000000
--- a/ct/headers/calibre-web-automated
+++ /dev/null
@@ -1,6 +0,0 @@
- ______ ___ __ _ __ __ ___ __ __ __
- / ____/___ _/ (_) /_ ________ | | / /__ / /_ / | __ __/ /_____ ____ ___ ____ _/ /____ ____/ /
- / / / __ `/ / / __ \/ ___/ _ \_____| | /| / / _ \/ __ \______/ /| |/ / / / __/ __ \/ __ `__ \/ __ `/ __/ _ \/ __ /
-/ /___/ /_/ / / / /_/ / / / __/_____/ |/ |/ / __/ /_/ /_____/ ___ / /_/ / /_/ /_/ / / / / / / /_/ / /_/ __/ /_/ /
-\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/ /_/ |_\__,_/\__/\____/_/ /_/ /_/\__,_/\__/\___/\__,_/
-
diff --git a/ct/headers/cloudflare-ddns b/ct/headers/cloudflare-ddns
new file mode 100644
index 000000000..df08fe8db
--- /dev/null
+++ b/ct/headers/cloudflare-ddns
@@ -0,0 +1,6 @@
+ ________ ________ ____ ____ _ _______
+ / ____/ /___ __ ______/ / __/ /___ _________ / __ \/ __ \/ | / / ___/
+ / / / / __ \/ / / / __ / /_/ / __ `/ ___/ _ \______/ / / / / / / |/ /\__ \
+/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / / / __/_____/ /_/ / /_/ / /| /___/ /
+\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/ \___/ /_____/_____/_/ |_//____/
+
diff --git a/ct/headers/documenso b/ct/headers/documenso
deleted file mode 100644
index a659d581a..000000000
--- a/ct/headers/documenso
+++ /dev/null
@@ -1,6 +0,0 @@
- ____
- / __ \____ _______ ______ ___ ___ ____ _________
- / / / / __ \/ ___/ / / / __ `__ \/ _ \/ __ \/ ___/ __ \
- / /_/ / /_/ / /__/ /_/ / / / / / / __/ / / (__ ) /_/ /
-/_____/\____/\___/\__,_/_/ /_/ /_/\___/_/ /_/____/\____/
-
diff --git a/ct/headers/fileflows b/ct/headers/fileflows
deleted file mode 100644
index 2f25cf3e7..000000000
--- a/ct/headers/fileflows
+++ /dev/null
@@ -1,6 +0,0 @@
- _______ __ ________
- / ____(_) /__ / ____/ /___ _ _______
- / /_ / / / _ \/ /_ / / __ \ | /| / / ___/
- / __/ / / / __/ __/ / / /_/ / |/ |/ (__ )
-/_/ /_/_/\___/_/ /_/\____/|__/|__/____/
-
diff --git a/ct/headers/homarr b/ct/headers/homarr
new file mode 100644
index 000000000..99bf5100f
--- /dev/null
+++ b/ct/headers/homarr
@@ -0,0 +1,6 @@
+ __
+ / /_ ____ ____ ___ ____ ___________
+ / __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
+ / / / / /_/ / / / / / / /_/ / / / /
+/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
+
diff --git a/ct/headers/immich b/ct/headers/immich
new file mode 100644
index 000000000..3b08b432a
--- /dev/null
+++ b/ct/headers/immich
@@ -0,0 +1,6 @@
+ _ _ __
+ (_)___ ___ ____ ___ (_)____/ /_
+ / / __ `__ \/ __ `__ \/ / ___/ __ \
+ / / / / / / / / / / / / / /__/ / / /
+/_/_/ /_/ /_/_/ /_/ /_/_/\___/_/ /_/
+
diff --git a/ct/headers/jitsi-meet b/ct/headers/jitsi-meet
new file mode 100644
index 000000000..eefeea882
--- /dev/null
+++ b/ct/headers/jitsi-meet
@@ -0,0 +1,6 @@
+ ___ __ _ __ ___ __
+ / (_) /______(_) / |/ /__ ___ / /_
+ __ / / / __/ ___/ /_____/ /|_/ / _ \/ _ \/ __/
+/ /_/ / / /_(__ ) /_____/ / / / __/ __/ /_
+\____/_/\__/____/_/ /_/ /_/\___/\___/\__/
+
diff --git a/ct/headers/jumpserver b/ct/headers/jumpserver
new file mode 100644
index 000000000..66a463dbd
--- /dev/null
+++ b/ct/headers/jumpserver
@@ -0,0 +1,6 @@
+ __ _____
+ / /_ ______ ___ ____ / ___/___ ______ _____ _____
+ __ / / / / / __ `__ \/ __ \\__ \/ _ \/ ___/ | / / _ \/ ___/
+/ /_/ / /_/ / / / / / / /_/ /__/ / __/ / | |/ / __/ /
+\____/\__,_/_/ /_/ /_/ .___/____/\___/_/ |___/\___/_/
+ /_/
diff --git a/ct/headers/librespeed b/ct/headers/librespeed
new file mode 100644
index 000000000..b75b5cec5
--- /dev/null
+++ b/ct/headers/librespeed
@@ -0,0 +1,6 @@
+ ___ __ __
+ / (_) /_ ________ _________ ___ ___ ____/ /
+ / / / __ \/ ___/ _ \/ ___/ __ \/ _ \/ _ \/ __ /
+ / / / /_/ / / / __(__ ) /_/ / __/ __/ /_/ /
+/_/_/_.___/_/ \___/____/ .___/\___/\___/\__,_/
+ /_/
diff --git a/ct/headers/mattermost b/ct/headers/mattermost
deleted file mode 100644
index 1fc67ba3d..000000000
--- a/ct/headers/mattermost
+++ /dev/null
@@ -1,6 +0,0 @@
- __ ___ __ __ __
- / |/ /___ _/ /_/ /____ _________ ___ ____ _____/ /_
- / /|_/ / __ `/ __/ __/ _ \/ ___/ __ `__ \/ __ \/ ___/ __/
- / / / / /_/ / /_/ /_/ __/ / / / / / / / /_/ (__ ) /_
-/_/ /_/\__,_/\__/\__/\___/_/ /_/ /_/ /_/\____/____/\__/
-
diff --git a/ct/headers/meilisearch b/ct/headers/meilisearch
deleted file mode 100644
index 955aaae38..000000000
--- a/ct/headers/meilisearch
+++ /dev/null
@@ -1,6 +0,0 @@
- __ ___ _ ___ __
- / |/ /__ (_) (_)_______ ____ ___________/ /_
- / /|_/ / _ \/ / / / ___/ _ \/ __ `/ ___/ ___/ __ \
- / / / / __/ / / (__ ) __/ /_/ / / / /__/ / / /
-/_/ /_/\___/_/_/_/____/\___/\__,_/_/ \___/_/ /_/
-
diff --git a/ct/headers/openproject b/ct/headers/openproject
deleted file mode 100644
index 79fe7cf2c..000000000
--- a/ct/headers/openproject
+++ /dev/null
@@ -1,6 +0,0 @@
- ____ ____ _ __
- / __ \____ ___ ____ / __ \_________ (_)__ _____/ /_
- / / / / __ \/ _ \/ __ \/ /_/ / ___/ __ \ / / _ \/ ___/ __/
-/ /_/ / /_/ / __/ / / / ____/ / / /_/ / / / __/ /__/ /_
-\____/ .___/\___/_/ /_/_/ /_/ \____/_/ /\___/\___/\__/
- /_/ /___/
diff --git a/ct/headers/openziti-tunnel b/ct/headers/openziti-tunnel
deleted file mode 100644
index a908abd8f..000000000
--- a/ct/headers/openziti-tunnel
+++ /dev/null
@@ -1,6 +0,0 @@
- _ __ _ __ __
- ____ ____ ___ ____ ____ (_) /_(_) / /___ ______ ____ ___ / /
- / __ \/ __ \/ _ \/ __ \/_ / / / __/ /_____/ __/ / / / __ \/ __ \/ _ \/ /
-/ /_/ / /_/ / __/ / / / / /_/ / /_/ /_____/ /_/ /_/ / / / / / / / __/ /
-\____/ .___/\___/_/ /_/ /___/_/\__/_/ \__/\__,_/_/ /_/_/ /_/\___/_/
- /_/
diff --git a/ct/headers/polaris b/ct/headers/polaris
new file mode 100644
index 000000000..3a9143c59
--- /dev/null
+++ b/ct/headers/polaris
@@ -0,0 +1,6 @@
+ ____ __ _
+ / __ \____ / /___ ______(_)____
+ / /_/ / __ \/ / __ `/ ___/ / ___/
+ / ____/ /_/ / / /_/ / / / (__ )
+/_/ \____/_/\__,_/_/ /_/____/
+
diff --git a/ct/headers/qbittorrent b/ct/headers/qbittorrent
deleted file mode 100644
index c00ae7c39..000000000
--- a/ct/headers/qbittorrent
+++ /dev/null
@@ -1,6 +0,0 @@
- ____ _ __ __ __
- ____ _/ __ )(_) /_/ /_____ _____________ ____ / /_
- / __ `/ __ / / __/ __/ __ \/ ___/ ___/ _ \/ __ \/ __/
-/ /_/ / /_/ / / /_/ /_/ /_/ / / / / / __/ / / / /_
-\__, /_____/_/\__/\__/\____/_/ /_/ \___/_/ /_/\__/
- /_/
diff --git a/ct/headers/rclone b/ct/headers/rclone
new file mode 100644
index 000000000..90ef6df4a
--- /dev/null
+++ b/ct/headers/rclone
@@ -0,0 +1,6 @@
+ ____ __
+ / __ \_____/ /___ ____ ___
+ / /_/ / ___/ / __ \/ __ \/ _ \
+ / _, _/ /__/ / /_/ / / / / __/
+/_/ |_|\___/_/\____/_/ /_/\___/
+
diff --git a/ct/headers/slskd b/ct/headers/slskd
deleted file mode 100644
index 6ebb289ea..000000000
--- a/ct/headers/slskd
+++ /dev/null
@@ -1,6 +0,0 @@
- __ __ __
- _____/ /____/ /______/ /
- / ___/ / ___/ //_/ __ /
- (__ ) (__ ) ,< / /_/ /
-/____/_/____/_/|_|\__,_/
-
diff --git a/ct/homarr.sh b/ct/homarr.sh
new file mode 100644
index 000000000..74883bc01
--- /dev/null
+++ b/ct/homarr.sh
@@ -0,0 +1,172 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+# Copyright (c) 2021-2025 tteck
+# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://homarr.dev/
+
+APP="homarr"
+var_tags="${var_tags:-arr;dashboard}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-4096}"
+var_disk="${var_disk:-8}"
+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 /opt/homarr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ if [[ -f /opt/homarr/database/db.sqlite ]]; then
+ msg_error "Old Homarr detected due to existing database file (/opt/homarr/database/db.sqlite)."
+ msg_error "Update not supported. Refer to:"
+ msg_error " - https://github.com/community-scripts/ProxmoxVE/discussions/1551"
+ msg_error " - https://homarr.dev/docs/getting-started/after-the-installation/#importing-a-zip-from-version-before-100"
+ exit 1
+ fi
+ if [[ ! -f /opt/run_homarr.sh ]]; then
+ msg_info "Detected outdated and missing service files"
+ msg_error "Warning - The port of homarr changed from 3000 to 7575"
+ $STD apt-get install -y nginx gettext openssl gpg
+ sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >>/opt/homarr/.env
+ sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >>/opt/homarr/.env
+ cat <<'EOF' >/opt/run_homarr.sh
+#!/bin/bash
+set -a
+source /opt/homarr/.env
+set +a
+export DB_DIALECT='sqlite'
+export AUTH_SECRET=$(openssl rand -base64 32)
+node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
+for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
+ dirname=$(basename "$dir")
+ mkdir -p "/opt/homarr_db/migrations/$dirname"
+ cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
+done
+export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
+envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
+nginx -g 'daemon off;' &
+redis-server /opt/homarr/packages/redis/redis.conf &
+node apps/tasks/tasks.cjs &
+node apps/websocket/wssServer.cjs &
+node apps/nextjs/server.js & PID=$!
+wait $PID
+EOF
+ chmod +x /opt/run_homarr.sh
+ rm /etc/systemd/system/homarr.service
+ cat </etc/systemd/system/homarr.service
+[Unit]
+Description=Homarr Service
+After=network.target
+[Service]
+Type=exec
+WorkingDirectory=/opt/homarr
+EnvironmentFile=-/opt/homarr/.env
+ExecStart=/opt/run_homarr.sh
+[Install]
+WantedBy=multi-user.target
+EOF
+ msg_ok "Updated Services"
+ systemctl daemon-reload
+ fi
+ RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+
+ msg_info "Stopping Services (Patience)"
+ systemctl stop homarr
+ msg_ok "Services Stopped"
+
+ msg_info "Backup Data"
+ mkdir -p /opt/homarr-data-backup
+ cp /opt/homarr/.env /opt/homarr-data-backup/.env
+ msg_ok "Backup Data"
+
+ msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
+ rm /opt/run_homarr.sh
+ cat <<'EOF' >/opt/run_homarr.sh
+#!/bin/bash
+set -a
+source /opt/homarr/.env
+set +a
+export DB_DIALECT='sqlite'
+export AUTH_SECRET=$(openssl rand -base64 32)
+node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
+for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
+ dirname=$(basename "$dir")
+ mkdir -p "/opt/homarr_db/migrations/$dirname"
+ cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
+done
+export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
+envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
+nginx -g 'daemon off;' &
+redis-server /opt/homarr/packages/redis/redis.conf &
+node apps/tasks/tasks.cjs &
+node apps/websocket/wssServer.cjs &
+node apps/nextjs/server.js & PID=$!
+wait $PID
+EOF
+ chmod +x /opt/run_homarr.sh
+ NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
+ NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
+ install_node_and_modules
+ rm -rf /opt/homarr
+ fetch_and_deploy_gh_release "homarr-labs/homarr"
+ mv /opt/homarr-data-backup/.env /opt/homarr/.env
+ cd /opt/homarr
+ echo "test2"
+ export NODE_ENV=""
+ $STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
+ $STD pnpm build
+ cp /opt/homarr/apps/nextjs/next.config.ts .
+ cp /opt/homarr/apps/nextjs/package.json .
+ cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
+ cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
+ mkdir -p /appdata/redis
+ cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
+ rm /etc/nginx/nginx.conf
+ mkdir -p /etc/nginx/templates
+ cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
+
+ mkdir -p /opt/homarr/apps/cli
+ cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
+ echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
+ chmod +x /usr/bin/homarr
+
+ mkdir /opt/homarr/build
+ cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting Services"
+ systemctl start homarr
+ msg_ok "Started Services"
+ msg_ok "Updated Successfully"
+ read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
+ if [[ "$choice" =~ ^[Yy]$ ]]; then
+ reboot
+ fi
+ 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}:7575${CL}"
diff --git a/ct/immich.sh b/ct/immich.sh
new file mode 100644
index 000000000..27727ef46
--- /dev/null
+++ b/ct/immich.sh
@@ -0,0 +1,282 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: vhsdream
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://immich.app
+
+APP="immich"
+var_tags="${var_tags:-photos}"
+var_disk="${var_disk:-12}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-4096}"
+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 /opt/immich ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ STAGING_DIR=/opt/staging
+ BASE_DIR=${STAGING_DIR}/base-images
+ SOURCE_DIR=${STAGING_DIR}/image-source
+ if [[ -f ~/.intel_version ]]; then
+ curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
+ readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}')
+ INTEL_RELEASE="$(grep "intel-opencl-icd" ./Dockerfile | awk -F '_' '{print $2}')"
+ if [[ "$INTEL_RELEASE" != "$(cat ~/.intel_version)" ]]; then
+ msg_info "Updating Intel iGPU dependencies"
+ for url in "${INTEL_URLS[@]}"; do
+ curl -fsSLO "$url"
+ done
+ $STD dpkg -i ./*.deb
+ rm ./*.deb
+ msg_ok "Intel iGPU dependencies updated"
+ fi
+ rm ~/Dockerfile
+ fi
+ if [[ -f ~/.immich_library_revisions ]]; then
+ libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
+ readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
+ echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
+ done)
+ UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
+ if [[ "$UPDATED_REVISIONS" ]]; then
+ readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
+ rm -rf "$SOURCE_DIR"
+ mkdir -p "$SOURCE_DIR"
+ cd "$BASE_DIR"
+ $STD git pull
+ cd "$STAGING_DIR"
+ for name in "${NAMES[@]}"; do
+ if [[ "$name" == "libjxl" ]]; then
+ msg_info "Recompiling libjxl"
+ SOURCE=${SOURCE_DIR}/libjxl
+ JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
+ JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
+ : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
+ $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
+ cd "$SOURCE"
+ $STD git reset --hard "$LIBJXL_REVISION"
+ $STD git submodule update --init --recursive --depth 1 --recommend-shallow
+ $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
+ $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
+ mkdir build
+ cd build
+ $STD cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_TESTING=OFF \
+ -DJPEGXL_ENABLE_DOXYGEN=OFF \
+ -DJPEGXL_ENABLE_MANPAGES=OFF \
+ -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
+ -DJPEGXL_ENABLE_BENCHMARK=OFF \
+ -DJPEGXL_ENABLE_EXAMPLES=OFF \
+ -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
+ -DJPEGXL_FORCE_SYSTEM_HWY=ON \
+ -DJPEGXL_ENABLE_JPEGLI=ON \
+ -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
+ -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
+ -DJPEGXL_ENABLE_PLUGINS=ON \
+ -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
+ -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
+ -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
+ ..
+ $STD cmake --build . -- -j"$(nproc)"
+ $STD cmake --install .
+ ldconfig /usr/local/lib
+ $STD make clean
+ cd "$STAGING_DIR"
+ rm -rf "$SOURCE"/{build,third_party}
+ msg_ok "Recompiled libjxl"
+ fi
+ if [[ "$name" == "libheif" ]]; then
+ msg_info "Recompiling libheif"
+ SOURCE=${SOURCE_DIR}/libheif
+ : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
+ $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
+ cd "$SOURCE"
+ $STD git reset --hard "$LIBHEIF_REVISION"
+ mkdir build
+ cd build
+ $STD cmake --preset=release-noplugins \
+ -DWITH_DAV1D=ON \
+ -DENABLE_PARALLEL_TILE_DECODING=ON \
+ -DWITH_LIBSHARPYUV=ON \
+ -DWITH_LIBDE265=ON \
+ -DWITH_AOM_DECODER=OFF \
+ -DWITH_AOM_ENCODER=OFF \
+ -DWITH_X265=OFF \
+ -DWITH_EXAMPLES=OFF \
+ ..
+ $STD make install -j "$(nproc)"
+ ldconfig /usr/local/lib
+ $STD make clean
+ cd "$STAGING_DIR"
+ rm -rf "$SOURCE"/build
+ msg_ok "Recompiled libheif"
+ fi
+ if [[ "$name" == "libraw" ]]; then
+ msg_info "Recompiling libraw"
+ SOURCE=${SOURCE_DIR}/libraw
+ : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
+ $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
+ cd "$SOURCE"
+ $STD git reset --hard "$LIBRAW_REVISION"
+ $STD autoreconf --install
+ $STD ./configure
+ $STD make -j"$(nproc)"
+ $STD make install
+ ldconfig /usr/local/lib
+ $STD make clean
+ cd "$STAGING_DIR"
+ msg_ok "Recompiled libraw"
+ fi
+ if [[ "$name" == "imagemagick" ]]; then
+ msg_info "Recompiling ImageMagick"
+ SOURCE=$SOURCE_DIR/imagemagick
+ : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
+ $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
+ cd "$SOURCE"
+ $STD git reset --hard "$IMAGEMAGICK_REVISION"
+ $STD ./configure --with-modules
+ $STD make -j"$(nproc)"
+ $STD make install
+ ldconfig /usr/local/lib
+ $STD make clean
+ cd "$STAGING_DIR"
+ msg_ok "Recompiled ImageMagick"
+ fi
+ if [[ "$name" == "libvips" ]]; then
+ msg_info "Recompiling libvips"
+ SOURCE=$SOURCE_DIR/libvips
+ : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
+ $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
+ cd "$SOURCE"
+ $STD git reset --hard "$LIBVIPS_REVISION"
+ $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
+ cd build
+ $STD ninja install
+ ldconfig /usr/local/lib
+ cd "$STAGING_DIR"
+ rm -rf "$SOURCE"/build
+ msg_ok "Recompiled libvips"
+ fi
+ done
+ echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
+ msg_ok "Image-processing libraries compiled"
+ fi
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP} services"
+ systemctl stop immich-web
+ systemctl stop immich-ml
+ msg_ok "Stopped ${APP}"
+ INSTALL_DIR="/opt/${APP}"
+ UPLOAD_DIR="${INSTALL_DIR}/upload"
+ SRC_DIR="${INSTALL_DIR}/source"
+ APP_DIR="${INSTALL_DIR}/app"
+ ML_DIR="${APP_DIR}/machine-learning"
+ GEO_DIR="${INSTALL_DIR}/geodata"
+ cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
+ rm -rf "${APP_DIR:?}"/*
+ rm -rf "$SRC_DIR"
+ immich_zip=$(mktemp)
+ curl -fsSL "https://github.com/immich-app/immich/archive/refs/tags/v${RELEASE}.zip" -o "$immich_zip"
+ msg_info "Updating ${APP} web and microservices"
+ unzip -q "$immich_zip"
+ mv "$APP-$RELEASE"/ "$SRC_DIR"
+ mkdir -p "$ML_DIR"
+ cd "$SRC_DIR"/server
+ $STD npm install -g node-gyp node-pre-gyp
+ $STD npm ci
+ $STD npm run build
+ $STD npm prune --omit=dev --omit=optional
+ cd "$SRC_DIR"/open-api/typescript-sdk
+ $STD npm ci
+ $STD npm run build
+ cd "$SRC_DIR"/web
+ $STD npm ci
+ $STD npm run build
+ cd "$SRC_DIR"
+ cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
+ cp -a web/build "$APP_DIR"/www
+ cp LICENSE "$APP_DIR"
+ cp "$BASE_DIR"/server/bin/build-lock.json "$APP_DIR"
+ msg_ok "Updated ${APP} web and microservices"
+
+ cd "$SRC_DIR"/machine-learning
+ $STD python3 -m venv "$ML_DIR"/ml-venv
+ if [[ -f ~/.openvino ]]; then
+ msg_info "Updating HW-accelerated machine-learning"
+ (
+ source "$ML_DIR"/ml-venv/bin/activate
+ $STD pip3 install -U uv
+ uv -q sync --extra openvino --no-cache --active
+ )
+ patchelf --clear-execstack "$ML_DIR"/ml-venv/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so
+ msg_ok "Updated HW-accelerated machine-learning"
+ else
+ msg_info "Updating machine-learning"
+ (
+ source "$ML_DIR"/ml-venv/bin/activate
+ $STD pip3 install -U uv
+ uv -q sync --extra cpu --no-cache --active
+ )
+ msg_ok "Updated machine-learning"
+ fi
+ cd "$SRC_DIR"
+ cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
+ cp "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
+ if [[ -f ~/.openvino ]]; then
+ sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
+ fi
+ ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
+ cd "$APP_DIR"
+ grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
+ grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
+ sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
+ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
+ ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
+ ln -s "$GEO_DIR" "$APP_DIR"
+
+ msg_info "Updating Immich CLI"
+ $STD npm install --build-from-source sharp
+ rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
+ $STD npm i -g @immich/cli
+ msg_ok "Updated Immich CLI"
+
+ chown -R immich:immich "$INSTALL_DIR"
+ echo "$RELEASE" >/opt/"${APP}"_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Cleaning up"
+ rm -f "$immich_zip"
+ $STD apt-get -y autoremove
+ $STD apt-get -y autoclean
+ msg_ok "Cleaned"
+ else
+ msg_ok "${APP} is already at v${RELEASE}"
+ fi
+ systemctl restart immich-ml immich-web
+ 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}:2283${CL}"
diff --git a/ct/jitsi-meet.sh b/ct/jitsi-meet.sh
new file mode 100644
index 000000000..c714a05cd
--- /dev/null
+++ b/ct/jitsi-meet.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Slaviša Arežina (tremor021)
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://github.com/jitsi/jitsi-meet
+
+APP="Jitsi-Meet"
+var_tags="${var_tags:-os}"
+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 [[ ! -f /lib/systemd/system/jitsi-videobridge2.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating Jitsi-Meet LXC"
+ $STD apt-get update
+ $STD apt-get upgrade -y
+ msg_ok "Updated Jitsi-Meet LXC"
+ 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}https://${IP}${CL}"
diff --git a/ct/jumpserver.sh b/ct/jumpserver.sh
new file mode 100644
index 000000000..a87847336
--- /dev/null
+++ b/ct/jumpserver.sh
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Nícolas Pastorello (opastorello)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/jumpserver/jumpserver
+
+APP="JumpServer"
+var_tags="bastion-host;pam"
+var_cpu="2"
+var_ram="8192"
+var_disk="60"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+header_info "$APP"
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -d /opt/jumpserver ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -fsSL https://api.github.com/repos/jumpserver/installer/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP} to ${RELEASE}"
+ if [[ -d /opt/jumpserver/config ]]; then
+ cp -r /opt/jumpserver/config /opt/jumpserver_config_backup
+ fi
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ rm -rf /opt/jumpserver
+ cd /opt
+ curl -fsSL "https://github.com/jumpserver/installer/releases/download/${RELEASE}/jumpserver-installer-${RELEASE}.tar.gz" -o jumpserver-installer-${RELEASE}.tar.gz
+ mkdir -p /opt/jumpserver
+ $STD tar -xzvf jumpserver-installer-${RELEASE}.tar.gz -C /opt/jumpserver --strip-components=1
+ if [[ -d /opt/jumpserver_config_backup ]]; then
+ cp -r /opt/jumpserver_config_backup /opt/jumpserver/config
+ rm -rf /opt/jumpserver_config_backup
+ fi
+ cd /opt/jumpserver
+ yes y | head -n 3 | $STD ./jmsctl.sh upgrade
+ $STD ./jmsctl.sh start
+ rm -rf /opt/jumpserver-installer-${RELEASE}.tar.gz
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${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}${CL}"
diff --git a/ct/librenms.sh b/ct/librenms.sh
index 84e231e27..84eb74b40 100644
--- a/ct/librenms.sh
+++ b/ct/librenms.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://librenms.org
APP="Librenms"
-var_tags="monitoring"
-var_cpu="2"
-var_ram="2048"
-var_disk="4"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-monitoring}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_disk="${var_disk:-4}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
@@ -27,14 +27,18 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
- msg_error "Update not supported!"
+ msg_info "Updating ${APP} Installation"
+ su librenms
+ cd /opt/librenms
+ ./daily.sh
+ msg_ok "Updated ${APP} Installation"
exit
}
start
build_container
-description
+desiption
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
diff --git a/ct/librespeed.sh b/ct/librespeed.sh
new file mode 100644
index 000000000..931248cd3
--- /dev/null
+++ b/ct/librespeed.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: elvito
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/librespeed/speedtest
+
+APP="librespeed"
+var_tags="speedtest"
+var_cpu="1"
+var_ram="512"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+header_info "$APP"
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -f /opt/librespeed/index.html ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
+ if [[ ! -f /opt/librespeed/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt//librespeed/${APP}_version.txt)" ]]; then
+ msg_info "Updating $APP..."
+ temp_file=$(mktemp)
+ curl -fsSL "https://github.com/librespeed/speedtest/archive/refs/tags/${RELEASE}.zip" -o "$temp_file"
+ mkdir -p /temp
+ unzip -qu "$temp_file" -d /temp
+ cd /temp/speedtest-"${RELEASE}"
+ cp -u favicon.ico index.html speedtest.js speedtest_worker.js /opt/librespeed/
+ cp -ru backend /opt/librespeed/
+ echo "${RELEASE}" >/opt/"${APP}"_version.txt
+ systemctl restart caddy
+ msg_ok "$APP has been updated."
+ else
+ msg_ok "No update required. ${APP} is already at ${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}${CL}"
diff --git a/ct/manyfold.sh b/ct/manyfold.sh
index 991e78b63..b54ee9b15 100644
--- a/ct/manyfold.sh
+++ b/ct/manyfold.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/manyfold3d/manyfold
APP="Manyfold"
-var_tags="network"
-var_cpu="2"
-var_ram="1024"
-var_disk="15"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-network}"
+var_cpu="${var_cpu:-4}"
+var_ram="${var_ram:-4096}"
+var_disk="${var_disk:-15}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/meilisearch.sh b/ct/meilisearch.sh
deleted file mode 100644
index f50676cf5..000000000
--- a/ct/meilisearch.sh
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: MickLesk (CanbiZ)
-# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
-# Source: https://www.meilisearch.com/
-
-APP="Meilisearch"
-var_tags="full-text-search"
-var_cpu="2"
-var_ram="4096"
-var_disk="5"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
-
- if [[ ! -f /opt/meilisearch_version.txt ]]; then
- msg_error "No Meilisearch Installation Found!"
- exit
- fi
- UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
- "1" "Update Meilisearch" ON \
- "2" "Update Meilisearch-UI" OFF \
- 3>&1 1>&2 2>&3)
-
- if [ "$UPD" == "1" ]; then
- msg_info "Stopping Meilisearch"
- systemctl stop meilisearch
- msg_ok "Stopped Meilisearch"
-
- msg_info "Updating Meilisearch"
- tmp_file=$(mktemp)
- RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
- $STD dpkg -i $tmp_file
- echo "$RELEASE" >/opt/meilisearch_version.txt
- msg_ok "Updated Meilisearch"
-
- msg_info "Starting Meilisearch"
- systemctl start meilisearch
- msg_ok "Started Meilisearch"
- exit
- fi
-
- if [ "$UPD" == "2" ]; then
- if [[ ! -f /opt/meilisearch-ui_version.txt ]]; then
- msg_error "No Meilisearch-UI Installation Found!"
- exit
- fi
- msg_info "Stopping Meilisearch-UI"
- systemctl stop meilisearch-ui
- msg_ok "Stopped Meilisearch-UI"
-
- msg_info "Updating Meilisearch-UI"
- tmp_file=$(mktemp)
- tmp_dir=$(mktemp -d)
- RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
- rm -rf /opt/meilisearch-ui
- mkdir -p /opt/meilisearch-ui
- curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
- unzip -q "$tmp_file" -d "$tmp_dir"
- mv "$tmp_dir"/*/* /opt/meilisearch-ui/
- cd /opt/meilisearch-ui
- sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
- mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
- $STD pnpm install
- echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
- msg_ok "Updated Meilisearch-UI"
-
- msg_info "Starting Meilisearch-UI"
- systemctl start meilisearch-ui
- msg_ok "Started Meilisearch-UI"
- exit
- fi
-}
-
-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}meilisearch: http://${IP}:7700$ | meilisearch-ui: http://${IP}:24900${CL}"
diff --git a/ct/Deferred/nginxproxymanager.sh b/ct/nginxproxymanager.sh
similarity index 94%
rename from ct/Deferred/nginxproxymanager.sh
rename to ct/nginxproxymanager.sh
index 01ccffffd..6b75c62c2 100644
--- a/ct/Deferred/nginxproxymanager.sh
+++ b/ct/nginxproxymanager.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://nginxproxymanager.com/
APP="Nginx Proxy Manager"
-var_tags="proxy"
-var_cpu="2"
-var_ram="1024"
-var_disk="4"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-proxy}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-1024}"
+var_disk="${var_disk:-4}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/openproject.sh b/ct/openproject.sh
deleted file mode 100644
index 9a5687002..000000000
--- a/ct/openproject.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: michelroegl-brunner
-# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
-# Source: https://github.com/opf/openproject
-
-APP="OpenProject"
-var_tags="project-management,erp"
-var_cpu="2"
-var_ram="4096"
-var_disk="8"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
- if [[ ! -f /etc/openproject/installer.dat ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
- msg_info "Updating ${APP}"
- $STD apt-get update
- $STD apt-get apt-get install --only-upgrade -y openproject
- msg_ok "Updated ${APP}"
- 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}/openproject${CL}"
diff --git a/ct/openziti-tunnel.sh b/ct/openziti-tunnel.sh
deleted file mode 100644
index 87265c99e..000000000
--- a/ct/openziti-tunnel.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: emoscardini
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://github.com/openziti/ziti
-
-APP="openziti-tunnel"
-var_tags="network;openziti-tunnel"
-var_cpu="1"
-var_ram="512"
-var_disk="2"
-var_os="ubuntu"
-var_version="24.04"
-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
- msg_info "Updating $APP LXC"
- $STD apt-get update
- $STD apt-get -y upgrade
- msg_ok "Updated $APP LXC"
- exit
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
-echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/polaris.sh b/ct/polaris.sh
new file mode 100644
index 000000000..c290d7706
--- /dev/null
+++ b/ct/polaris.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: MickLesk (CanbiZ)
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://github.com/agersant/polaris
+
+APP="Polaris"
+var_tags="${var_tags:-music}"
+var_cpu="${var_cpu:-3}"
+var_ram="${var_ram:-2048}"
+var_disk="${var_disk:-7}"
+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 /opt/polaris ]]; then
+ msg_error "No Installation Found!"
+ exit
+ fi
+}
+
+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}:5050${CL}"
diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh
deleted file mode 100644
index a9f3f3f79..000000000
--- a/ct/qbittorrent.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: tteck (tteckster) | Co-Author: Slaviša Arežina (tremor021)
-# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-# Source: https://www.qbittorrent.org/
-
-APP="qBittorrent"
-var_tags="torrent"
-var_cpu="2"
-var_ram="2048"
-var_disk="8"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
- if [[ ! -f /etc/systemd/system/qbittorrent-nox.service ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
- if [[ ! -f /opt/${APP}_version.txt ]]; then
- touch /opt/${APP}_version.txt
- mkdir -p $HOME/.config/qBittorrent/
- mkdir -p /opt/qbittorrent/
- mv /.config/qBittorrent $HOME/.config/
- $STD apt-get remove --purge -y qbittorrent-nox
- sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
- systemctl daemon-reload
- fi
- FULLRELEASE=$(curl -s https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
- if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping Service"
- systemctl stop qbittorrent-nox
- msg_ok "Stopped Service"
-
- msg_info "Updating ${APP} to v${RELEASE}"
- rm -f /opt/qbittorrent/qbittorrent-nox
- curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
- chmod +x /opt/qbittorrent/qbittorrent-nox
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated $APP to v${RELEASE}"
-
- msg_info "Starting Service"
- systemctl start qbittorrent-nox
- msg_ok "Started Service"
- msg_ok "Updated Successfully"
- 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}:8090${CL}"
diff --git a/ct/rclone.sh b/ct/rclone.sh
new file mode 100644
index 000000000..1cb2cb4b2
--- /dev/null
+++ b/ct/rclone.sh
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# Copyright (c) 2021-2025 community-scripts ORG
+# Author: Slaviša Arežina (tremor021)
+# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
+# Source: https://github.com/rclone/rclone
+
+APP="Rclone"
+var_tags="${var_tags:-os}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-2}"
+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 /opt/rclone ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop rclone-web
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ temp_file=$(mktemp)
+ rm -rf /opt/rclone/*
+ curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
+ $STD unzip -j "$temp_file" '*/**' -d /opt/rclone
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start rclone-web
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -f "$temp_file"
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ 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}"
diff --git a/ct/slskd.sh b/ct/slskd.sh
deleted file mode 100644
index b11ebea86..000000000
--- a/ct/slskd.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
-# Copyright (c) 2021-2025 community-scripts ORG
-# Author: vhsdream
-# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
-# Source: https://github.com/slskd/slskd, https://soularr.net
-
-APP="slskd"
-var_tags="arr;p2p"
-var_cpu="1"
-var_ram="512"
-var_disk="4"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
-
-header_info "$APP"
-variables
-color
-catch_errors
-
-function update_script() {
- header_info
- check_container_storage
- check_container_resources
-
- if [[ ! -d /opt/slskd ]] || [[ ! -d /opt/soularr ]]; then
- msg_error "No ${APP} Installation Found!"
- exit
- fi
-
- RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping $APP and Soularr"
- systemctl stop slskd soularr.timer soularr.service
- msg_ok "Stopped $APP and Soularr"
-
- msg_info "Updating $APP to v${RELEASE}"
- tmp_file=$(mktemp)
- curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file
- unzip -q -oj $tmp_file slskd -d /opt/${APP}
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated $APP to v${RELEASE}"
-
- msg_info "Updating Soularr"
- cp /opt/soularr/config.ini /opt/config.ini.bak
- cp /opt/soularr/run.sh /opt/run.sh.bak
- cd /tmp
- rm -rf /opt/soularr
- curl -fsSL https://github.com/mrusse/soularr/archive/refs/heads/main.zip
- unzip -q main.zip
- mv soularr-main /opt/soularr
- cd /opt/soularr
- $STD pip install -r requirements.txt
- mv /opt/config.ini.bak /opt/soularr/config.ini
- mv /opt/run.sh.bak /opt/soularr/run.sh
- msg_ok "Soularr updated"
- msg_info "Starting $APP and Soularr"
- systemctl start slskd soularr.timer
- msg_ok "Started $APP and Soularr"
-
- msg_info "Cleaning Up"
- rm -rf $tmp_file
- rm -rf /tmp/main.zip
- msg_ok "Cleanup Completed"
-
- 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}:5030${CL}"
diff --git a/ct/Deferred/timescaledb.sh b/ct/timescaledb.sh
similarity index 73%
rename from ct/Deferred/timescaledb.sh
rename to ct/timescaledb.sh
index a62b7bb2e..d9b631636 100644
--- a/ct/Deferred/timescaledb.sh
+++ b/ct/timescaledb.sh
@@ -1,18 +1,18 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source:
APP="TimescaleDB"
-var_tags="database"
-var_cpu="1"
-var_ram="1024"
-var_disk="5"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-database}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-1024}"
+var_disk="${var_disk:-5}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh
index dcbb94a73..112ab19de 100644
--- a/ct/ubuntu.sh
+++ b/ct/ubuntu.sh
@@ -1,5 +1,6 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
+# source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/github.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
@@ -7,12 +8,12 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/
echo -e "Loading..."
APP="Ubuntu"
-var_tags="os"
-var_cpu="1"
-var_ram="512"
-var_disk="2"
-var_os="ubuntu"
-var_version="24.04"
+var_tags="${var_tags:-os}"
+var_cpu="${var_cpu:-1}"
+var_ram="${var_ram:-512}"
+var_disk="${var_disk:-2}"
+var_os="${var_os:-ubuntu}"
+var_version="${var_version:-24.04}"
header_info "$APP"
variables
@@ -20,18 +21,18 @@ 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
- msg_info "Updating ${APP} LXC"
- $STD apt-get update
- $STD apt-get -y upgrade
- msg_ok "Updated ${APP} LXC"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ $STD apt-get update
+ $STD apt-get -y upgrade
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -39,4 +40,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
diff --git a/ct/Deferred/wallabag.sh b/ct/wallabag.sh
similarity index 82%
rename from ct/Deferred/wallabag.sh
rename to ct/wallabag.sh
index dbfd4a9f1..aded3f3ea 100644
--- a/ct/Deferred/wallabag.sh
+++ b/ct/wallabag.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
+source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
@@ -7,13 +7,13 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/
# App Default Values
APP="Wallabag"
-var_tags="ai;document"
-var_cpu="2"
-var_ram="2048"
-var_disk="7"
-var_os="debian"
-var_version="12"
-var_unprivileged="1"
+var_tags="${var_tags:-ai;document}"
+var_cpu="${var_cpu:-2}"
+var_ram="${var_ram:-2048}"
+var_disk="${var_disk:-7}"
+var_os="${var_os:-debian}"
+var_version="${var_version:-12}"
+var_unprivileged="${var_unprivileged:-1}"
# App Output & Base Settings
header_info "$APP"
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ece22f8f2..9c8b7c97a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -9,70 +9,71 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-accordion": "^1.1.2",
- "@radix-ui/react-dialog": "^1.0.5",
- "@radix-ui/react-dropdown-menu": "^2.0.6",
- "@radix-ui/react-icons": "^1.3.1",
- "@radix-ui/react-label": "^2.1.0",
- "@radix-ui/react-navigation-menu": "^1.1.4",
- "@radix-ui/react-popover": "^1.1.2",
- "@radix-ui/react-select": "^2.1.2",
- "@radix-ui/react-separator": "^1.1.0",
- "@radix-ui/react-slot": "^1.1.0",
- "@radix-ui/react-switch": "^1.1.1",
- "@radix-ui/react-tabs": "^1.1.0",
- "@radix-ui/react-tooltip": "^1.1.2",
- "@vercel/analytics": "^1.2.2",
- "chart.js": "^4.4.1",
+ "@radix-ui/react-accordion": "^1.2.3",
+ "@radix-ui/react-dialog": "^1.1.6",
+ "@radix-ui/react-dropdown-menu": "^2.1.6",
+ "@radix-ui/react-icons": "^1.3.2",
+ "@radix-ui/react-label": "^2.1.2",
+ "@radix-ui/react-navigation-menu": "^1.2.5",
+ "@radix-ui/react-popover": "^1.1.6",
+ "@radix-ui/react-select": "^2.1.6",
+ "@radix-ui/react-separator": "^1.1.2",
+ "@radix-ui/react-slot": "^1.1.2",
+ "@radix-ui/react-switch": "^1.1.3",
+ "@radix-ui/react-tabs": "^1.1.3",
+ "@radix-ui/react-tooltip": "^1.1.8",
+ "@tanstack/react-query": "^5.71.1",
+ "chart.js": "^4.4.8",
"chartjs-plugin-datalabels": "^2.2.0",
- "class-variance-authority": "^0.7.0",
+ "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "cmdk": "^1.0.0",
+ "cmdk": "^1.1.1",
"date-fns": "^4.1.0",
- "framer-motion": "^11.11.11",
- "fuse.js": "^7.0.0",
+ "framer-motion": "^11.18.2",
+ "fuse.js": "^7.1.0",
"lucide-react": "^0.453.0",
"mini-svg-data-uri": "^1.4.4",
- "next": "15.2.3",
+ "next": "15.2.4",
"next-themes": "^0.3.0",
- "nuqs": "^2.1.1",
- "pocketbase": "^0.21.4",
+ "nuqs": "^2.4.1",
+ "pocketbase": "^0.21.5",
"prettier-plugin-organize-imports": "^4.1.0",
- "react": "19.0.0-rc-02c0e824-20241028",
+ "react": "19.0.0",
"react-chartjs-2": "^5.3.0",
"react-code-blocks": "^0.1.6",
"react-datepicker": "^7.6.0",
"react-day-picker": "8.10.1",
- "react-dom": "19.0.0-rc-02c0e824-20241028",
- "react-icons": "^5.1.0",
+ "react-dom": "19.0.0",
+ "react-icons": "^5.5.0",
"react-simple-typewriter": "^5.0.1",
"sharp": "^0.33.5",
- "simple-icons": "^13.5.0",
- "sonner": "^1.5.0",
- "tailwind-merge": "^2.3.0",
- "zod": "^3.23.8"
+ "simple-icons": "^13.21.0",
+ "sonner": "^1.7.4",
+ "tailwind-merge": "^2.6.0",
+ "zod": "^3.24.2"
},
"devDependencies": {
+ "@tanstack/eslint-plugin-query": "^5.68.0",
"@testing-library/dom": "^10.4.0",
- "@testing-library/react": "^16.0.1",
- "@types/node": "^22",
+ "@testing-library/react": "^16.2.0",
+ "@types/node": "^22.13.16",
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
- "@typescript-eslint/eslint-plugin": "^8.8.1",
- "@typescript-eslint/parser": "^8.8.1",
+ "@typescript-eslint/eslint-plugin": "^8.29.0",
+ "@typescript-eslint/parser": "^8.29.0",
"@vitejs/plugin-react": "^4.3.4",
- "eslint": "^9.13.0",
+ "eslint": "^9.23.0",
"eslint-config-next": "15.0.2",
"jsdom": "^25.0.1",
- "postcss": "^8",
- "prettier": "^3.2.5",
- "prettier-plugin-tailwindcss": "^0.6.5",
- "tailwindcss": "^3.4.9",
+ "postcss": "^8.5.3",
+ "prettier": "^3.5.3",
+ "prettier-plugin-tailwindcss": "^0.6.11",
+ "tailwindcss": "^3.4.17",
"tailwindcss-animate": "^1.0.7",
"tailwindcss-animated": "^1.1.2",
- "typescript": "^5",
- "vite-tsconfig-paths": "^5.1.3",
- "vitest": "^3.0.8"
+ "typescript": "^5.8.2",
+ "vite-tsconfig-paths": "^5.1.4",
+ "vitest": "^3.1.1"
}
},
"node_modules/@alloc/quick-lru": {
@@ -308,27 +309,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
- "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
+ "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.26.0"
+ "@babel/template": "^7.27.0",
+ "@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
- "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+ "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.0"
+ "@babel/types": "^7.27.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -382,15 +383,15 @@
}
},
"node_modules/@babel/template": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
- "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
+ "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/code-frame": "^7.26.2",
+ "@babel/parser": "^7.27.0",
+ "@babel/types": "^7.27.0"
},
"engines": {
"node": ">=6.9.0"
@@ -426,9 +427,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
- "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+ "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -471,9 +472,9 @@
"license": "MIT"
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
- "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
+ "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
"cpu": [
"ppc64"
],
@@ -488,9 +489,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
- "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz",
+ "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
"cpu": [
"arm"
],
@@ -505,9 +506,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
- "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz",
+ "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
"cpu": [
"arm64"
],
@@ -522,9 +523,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
- "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz",
+ "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
"cpu": [
"x64"
],
@@ -539,9 +540,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
- "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz",
+ "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
"cpu": [
"arm64"
],
@@ -556,9 +557,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
- "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz",
+ "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
"cpu": [
"x64"
],
@@ -573,9 +574,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
- "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
"cpu": [
"arm64"
],
@@ -590,9 +591,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
- "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz",
+ "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
"cpu": [
"x64"
],
@@ -607,9 +608,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
- "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz",
+ "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
"cpu": [
"arm"
],
@@ -624,9 +625,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
- "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz",
+ "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
"cpu": [
"arm64"
],
@@ -641,9 +642,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
- "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz",
+ "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
"cpu": [
"ia32"
],
@@ -658,9 +659,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
- "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz",
+ "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
"cpu": [
"loong64"
],
@@ -675,9 +676,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
- "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz",
+ "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
"cpu": [
"mips64el"
],
@@ -692,9 +693,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
- "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz",
+ "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
"cpu": [
"ppc64"
],
@@ -709,9 +710,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
- "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz",
+ "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
"cpu": [
"riscv64"
],
@@ -726,9 +727,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
- "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz",
+ "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
"cpu": [
"s390x"
],
@@ -743,9 +744,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
- "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz",
+ "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
"cpu": [
"x64"
],
@@ -760,9 +761,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
- "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
"cpu": [
"arm64"
],
@@ -777,9 +778,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
- "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
"cpu": [
"x64"
],
@@ -794,9 +795,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
- "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
"cpu": [
"arm64"
],
@@ -811,9 +812,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
- "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
"cpu": [
"x64"
],
@@ -828,9 +829,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
- "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz",
+ "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
"cpu": [
"x64"
],
@@ -845,9 +846,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
- "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz",
+ "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
"cpu": [
"arm64"
],
@@ -862,9 +863,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
- "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz",
+ "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
"cpu": [
"ia32"
],
@@ -879,9 +880,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
- "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz",
+ "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
"cpu": [
"x64"
],
@@ -925,13 +926,13 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
- "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
+ "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.4",
+ "@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -963,20 +964,33 @@
"node": "*"
}
},
- "node_modules/@eslint/core": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
- "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz",
+ "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@eslint/core": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz",
+ "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
- "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1022,9 +1036,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
- "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
+ "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1032,9 +1046,9 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
- "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1042,12 +1056,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
- "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz",
+ "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
+ "@eslint/core": "^0.12.0",
"levn": "^0.4.1"
},
"engines": {
@@ -1583,9 +1598,9 @@
"license": "MIT"
},
"node_modules/@next/env": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.3.tgz",
- "integrity": "sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
+ "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
@@ -1629,9 +1644,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.3.tgz",
- "integrity": "sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
+ "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
"cpu": [
"arm64"
],
@@ -1645,9 +1660,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.3.tgz",
- "integrity": "sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
+ "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
"cpu": [
"x64"
],
@@ -1661,9 +1676,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.3.tgz",
- "integrity": "sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
+ "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
"cpu": [
"arm64"
],
@@ -1677,9 +1692,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.3.tgz",
- "integrity": "sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
+ "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
"cpu": [
"arm64"
],
@@ -1693,9 +1708,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.3.tgz",
- "integrity": "sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
+ "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
"cpu": [
"x64"
],
@@ -1709,9 +1724,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.3.tgz",
- "integrity": "sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
+ "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
"cpu": [
"x64"
],
@@ -1725,9 +1740,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.3.tgz",
- "integrity": "sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
+ "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
"cpu": [
"arm64"
],
@@ -1741,9 +1756,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.3.tgz",
- "integrity": "sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
+ "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
"cpu": [
"x64"
],
@@ -1822,25 +1837,25 @@
"license": "MIT"
},
"node_modules/@radix-ui/primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
- "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
+ "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==",
"license": "MIT"
},
"node_modules/@radix-ui/react-accordion": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz",
- "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.3.tgz",
+ "integrity": "sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-collapsible": "1.1.1",
- "@radix-ui/react-collection": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collapsible": "1.1.3",
+ "@radix-ui/react-collection": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
@@ -1859,12 +1874,12 @@
}
},
"node_modules/@radix-ui/react-arrow": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
- "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz",
+ "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.0.0"
+ "@radix-ui/react-primitive": "2.0.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -1882,17 +1897,17 @@
}
},
"node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz",
- "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz",
+ "integrity": "sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-controllable-state": "1.1.0",
"@radix-ui/react-use-layout-effect": "1.1.0"
},
@@ -1912,15 +1927,15 @@
}
},
"node_modules/@radix-ui/react-collection": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
- "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz",
+ "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.0",
- "@radix-ui/react-context": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-slot": "1.1.0"
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-slot": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -1937,25 +1952,10 @@
}
}
},
- "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
- "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
- "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
+ "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -1983,25 +1983,25 @@
}
},
"node_modules/@radix-ui/react-dialog": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz",
- "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz",
+ "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.2",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-portal": "1.1.2",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-portal": "1.1.4",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-slot": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -2034,14 +2034,14 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz",
- "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz",
+ "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
"@radix-ui/react-use-escape-keydown": "1.1.0"
},
@@ -2061,17 +2061,17 @@
}
},
"node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz",
- "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz",
+ "integrity": "sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-menu": "2.1.2",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-menu": "2.1.6",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
@@ -2105,13 +2105,13 @@
}
},
"node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
- "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz",
+ "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-callback-ref": "1.1.0"
},
"peerDependencies": {
@@ -2130,11 +2130,12 @@
}
},
"node_modules/@radix-ui/react-icons": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.1.tgz",
- "integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz",
+ "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==",
+ "license": "MIT",
"peerDependencies": {
- "react": "^16.x || ^17.x || ^18.x || ^19.x"
+ "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc"
}
},
"node_modules/@radix-ui/react-id": {
@@ -2156,12 +2157,12 @@
}
},
"node_modules/@radix-ui/react-label": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz",
- "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.2.tgz",
+ "integrity": "sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.0.0"
+ "@radix-ui/react-primitive": "2.0.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2179,29 +2180,29 @@
}
},
"node_modules/@radix-ui/react-menu": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz",
- "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.6.tgz",
+ "integrity": "sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-collection": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.2",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.0",
- "@radix-ui/react-portal": "1.1.2",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-roving-focus": "1.1.0",
- "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-popper": "1.2.2",
+ "@radix-ui/react-portal": "1.1.4",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-roving-focus": "1.1.2",
+ "@radix-ui/react-slot": "1.1.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -2219,25 +2220,25 @@
}
},
"node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz",
- "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.5.tgz",
+ "integrity": "sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-collection": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
"@radix-ui/react-use-controllable-state": "1.1.0",
"@radix-ui/react-use-layout-effect": "1.1.0",
"@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.0"
+ "@radix-ui/react-visually-hidden": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2255,26 +2256,26 @@
}
},
"node_modules/@radix-ui/react-popover": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz",
- "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.6.tgz",
+ "integrity": "sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.2",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.0",
- "@radix-ui/react-portal": "1.1.2",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-popper": "1.2.2",
+ "@radix-ui/react-portal": "1.1.4",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-slot": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -2292,16 +2293,16 @@
}
},
"node_modules/@radix-ui/react-popper": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
- "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz",
+ "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==",
"license": "MIT",
"dependencies": {
"@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
- "@radix-ui/react-context": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-arrow": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
"@radix-ui/react-use-layout-effect": "1.1.0",
"@radix-ui/react-use-rect": "1.1.0",
@@ -2323,28 +2324,13 @@
}
}
},
- "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
- "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-portal": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz",
- "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz",
+ "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
@@ -2363,12 +2349,12 @@
}
},
"node_modules/@radix-ui/react-presence": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz",
- "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
+ "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
@@ -2387,12 +2373,12 @@
}
},
"node_modules/@radix-ui/react-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
- "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz",
+ "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-slot": "1.1.0"
+ "@radix-ui/react-slot": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2410,18 +2396,18 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
- "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz",
+ "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-collection": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
- "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
+ "@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
"@radix-ui/react-use-controllable-state": "1.1.0"
},
@@ -2440,48 +2426,33 @@
}
}
},
- "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
- "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-select": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz",
- "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz",
+ "integrity": "sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.0",
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-collection": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-collection": "1.1.2",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-focus-guards": "1.1.1",
- "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.2",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.0",
- "@radix-ui/react-portal": "1.1.2",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-popper": "1.2.2",
+ "@radix-ui/react-portal": "1.1.4",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-slot": "1.1.2",
"@radix-ui/react-use-callback-ref": "1.1.0",
"@radix-ui/react-use-controllable-state": "1.1.0",
"@radix-ui/react-use-layout-effect": "1.1.0",
"@radix-ui/react-use-previous": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.0",
- "aria-hidden": "^1.1.1",
- "react-remove-scroll": "2.6.0"
+ "@radix-ui/react-visually-hidden": "1.1.2",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -2499,12 +2470,12 @@
}
},
"node_modules/@radix-ui/react-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz",
- "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz",
+ "integrity": "sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.0.0"
+ "@radix-ui/react-primitive": "2.0.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2522,12 +2493,12 @@
}
},
"node_modules/@radix-ui/react-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
- "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz",
+ "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.0"
+ "@radix-ui/react-compose-refs": "1.1.1"
},
"peerDependencies": {
"@types/react": "*",
@@ -2540,15 +2511,15 @@
}
},
"node_modules/@radix-ui/react-switch": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz",
- "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.3.tgz",
+ "integrity": "sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-primitive": "2.0.2",
"@radix-ui/react-use-controllable-state": "1.1.0",
"@radix-ui/react-use-previous": "1.1.0",
"@radix-ui/react-use-size": "1.1.0"
@@ -2569,18 +2540,18 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz",
- "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz",
+ "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
"@radix-ui/react-context": "1.1.1",
"@radix-ui/react-direction": "1.1.0",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-roving-focus": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
@@ -2599,23 +2570,23 @@
}
},
"node_modules/@radix-ui/react-tooltip": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz",
- "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==",
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz",
+ "integrity": "sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.0",
- "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/primitive": "1.1.1",
+ "@radix-ui/react-compose-refs": "1.1.1",
"@radix-ui/react-context": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.5",
"@radix-ui/react-id": "1.1.0",
- "@radix-ui/react-popper": "1.2.0",
- "@radix-ui/react-portal": "1.1.2",
- "@radix-ui/react-presence": "1.1.1",
- "@radix-ui/react-primitive": "2.0.0",
- "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-popper": "1.2.2",
+ "@radix-ui/react-portal": "1.1.4",
+ "@radix-ui/react-presence": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.2",
+ "@radix-ui/react-slot": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.1.0",
- "@radix-ui/react-visually-hidden": "1.1.0"
+ "@radix-ui/react-visually-hidden": "1.1.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2750,12 +2721,12 @@
}
},
"node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz",
- "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz",
+ "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.0.0"
+ "@radix-ui/react-primitive": "2.0.2"
},
"peerDependencies": {
"@types/react": "*",
@@ -2779,9 +2750,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
- "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz",
+ "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==",
"cpu": [
"arm"
],
@@ -2793,9 +2764,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
- "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz",
+ "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==",
"cpu": [
"arm64"
],
@@ -2807,9 +2778,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
- "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz",
+ "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==",
"cpu": [
"arm64"
],
@@ -2821,9 +2792,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
- "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz",
+ "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==",
"cpu": [
"x64"
],
@@ -2835,9 +2806,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
- "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz",
+ "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==",
"cpu": [
"arm64"
],
@@ -2849,9 +2820,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
- "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz",
+ "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==",
"cpu": [
"x64"
],
@@ -2863,9 +2834,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
- "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz",
+ "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==",
"cpu": [
"arm"
],
@@ -2877,9 +2848,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
- "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz",
+ "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==",
"cpu": [
"arm"
],
@@ -2891,9 +2862,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
- "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz",
+ "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==",
"cpu": [
"arm64"
],
@@ -2905,9 +2876,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
- "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz",
+ "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==",
"cpu": [
"arm64"
],
@@ -2919,9 +2890,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
- "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz",
+ "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==",
"cpu": [
"loong64"
],
@@ -2933,9 +2904,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
- "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz",
+ "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==",
"cpu": [
"ppc64"
],
@@ -2947,9 +2918,23 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
- "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz",
+ "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz",
+ "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==",
"cpu": [
"riscv64"
],
@@ -2961,9 +2946,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
- "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz",
+ "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==",
"cpu": [
"s390x"
],
@@ -2975,9 +2960,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
- "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz",
+ "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==",
"cpu": [
"x64"
],
@@ -2989,9 +2974,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
- "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz",
+ "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==",
"cpu": [
"x64"
],
@@ -3003,9 +2988,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
- "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz",
+ "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==",
"cpu": [
"arm64"
],
@@ -3017,9 +3002,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
- "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz",
+ "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==",
"cpu": [
"ia32"
],
@@ -3031,9 +3016,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
- "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz",
+ "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==",
"cpu": [
"x64"
],
@@ -3072,6 +3057,49 @@
"tslib": "^2.8.0"
}
},
+ "node_modules/@tanstack/eslint-plugin-query": {
+ "version": "5.68.0",
+ "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.68.0.tgz",
+ "integrity": "sha512-w/+y5LILV1GTWBB2R/lKfUzgocKXU1B7O6jipLUJhmxCKPmJFy5zpfR1Vx7c6yCEsQoKcTbhuR/tIy+1sIGaiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.18.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/@tanstack/query-core": {
+ "version": "5.71.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.71.1.tgz",
+ "integrity": "sha512-4+ZswCHOfJX+ikhXNoocamTUmJcHtB+Ljjz/oJkC7/eKB5IrzEwR4vEwZUENiPi+wISucJHR5TUbuuJ26w3kdQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.71.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.71.1.tgz",
+ "integrity": "sha512-6BTkaSIGT58MroI4kIGXNdx/NhirXPU+75AJObLq+WBa39WmoxhzSk0YX+hqWJ/bvqZJFxslbEU4qIHaRZq+8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/query-core": "5.71.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
"node_modules/@testing-library/dom": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
@@ -3103,9 +3131,9 @@
}
},
"node_modules/@testing-library/react": {
- "version": "16.0.1",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz",
- "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz",
+ "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3116,10 +3144,10 @@
},
"peerDependencies": {
"@testing-library/dom": "^10.0.0",
- "@types/react": "^18.0.0",
- "@types/react-dom": "^18.0.0",
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
+ "@types/react": "^18.0.0 || ^19.0.0",
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -3183,9 +3211,9 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
"dev": true,
"license": "MIT"
},
@@ -3213,13 +3241,13 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.8.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz",
- "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==",
+ "version": "22.13.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.16.tgz",
+ "integrity": "sha512-15tM+qA4Ypml/N7kyRdvfRjBQT2RL461uF1Bldn06K0Nzn1lY3nAPgHlsVrJxdZ9WhZiW0Fmc1lOYMtDsAuB3w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~6.19.8"
+ "undici-types": "~6.20.0"
}
},
"node_modules/@types/react": {
@@ -3255,21 +3283,21 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz",
- "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz",
+ "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/type-utils": "8.12.2",
- "@typescript-eslint/utils": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/scope-manager": "8.29.0",
+ "@typescript-eslint/type-utils": "8.29.0",
+ "@typescript-eslint/utils": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3280,25 +3308,21 @@
},
"peerDependencies": {
"@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
- "eslint": "^8.57.0 || ^9.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz",
- "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz",
+ "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/typescript-estree": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/scope-manager": "8.29.0",
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/typescript-estree": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.0",
"debug": "^4.3.4"
},
"engines": {
@@ -3309,23 +3333,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz",
- "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz",
+ "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2"
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3336,16 +3356,16 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz",
- "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz",
+ "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.12.2",
- "@typescript-eslint/utils": "8.12.2",
+ "@typescript-eslint/typescript-estree": "8.29.0",
+ "@typescript-eslint/utils": "8.29.0",
"debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3354,16 +3374,15 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz",
- "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz",
+ "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3375,20 +3394,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz",
- "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz",
+ "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/visitor-keys": "8.12.2",
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/visitor-keys": "8.29.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
+ "ts-api-utils": "^2.0.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3397,23 +3416,21 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
- "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz",
+ "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.12.2",
- "@typescript-eslint/types": "8.12.2",
- "@typescript-eslint/typescript-estree": "8.12.2"
+ "@typescript-eslint/scope-manager": "8.29.0",
+ "@typescript-eslint/types": "8.29.0",
+ "@typescript-eslint/typescript-estree": "8.29.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3423,18 +3440,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0"
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.12.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz",
- "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==",
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz",
+ "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.12.2",
- "eslint-visitor-keys": "^3.4.3"
+ "@typescript-eslint/types": "8.29.0",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3444,25 +3462,17 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@vercel/analytics": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.3.2.tgz",
- "integrity": "sha512-n/Ws7skBbW+fUBMeg+jrT30+GP00jTHvCcL4fuVrShuML0uveEV/4vVUdvqEVnDgXIGfLm0GXW5EID2mCcRXhg==",
- "license": "MPL-2.0",
- "dependencies": {
- "server-only": "^0.0.1"
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
- "peerDependencies": {
- "next": ">= 13",
- "react": "^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "next": {
- "optional": true
- },
- "react": {
- "optional": true
- }
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/@vitejs/plugin-react": {
@@ -3486,14 +3496,14 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.8.tgz",
- "integrity": "sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz",
+ "integrity": "sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.0.8",
- "@vitest/utils": "3.0.8",
+ "@vitest/spy": "3.1.1",
+ "@vitest/utils": "3.1.1",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -3502,13 +3512,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.8.tgz",
- "integrity": "sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz",
+ "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.0.8",
+ "@vitest/spy": "3.1.1",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -3529,9 +3539,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.8.tgz",
- "integrity": "sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz",
+ "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3542,13 +3552,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.8.tgz",
- "integrity": "sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz",
+ "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.0.8",
+ "@vitest/utils": "3.1.1",
"pathe": "^2.0.3"
},
"funding": {
@@ -3556,13 +3566,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.8.tgz",
- "integrity": "sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz",
+ "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.0.8",
+ "@vitest/pretty-format": "3.1.1",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -3571,9 +3581,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.8.tgz",
- "integrity": "sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz",
+ "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3584,13 +3594,13 @@
}
},
"node_modules/@vitest/utils": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.8.tgz",
- "integrity": "sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz",
+ "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.0.8",
+ "@vitest/pretty-format": "3.1.1",
"loupe": "^3.1.3",
"tinyrainbow": "^2.0.0"
},
@@ -3599,9 +3609,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -4186,9 +4196,9 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.7",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
- "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz",
+ "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@@ -4255,24 +4265,15 @@
}
},
"node_modules/class-variance-authority": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
- "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
"license": "Apache-2.0",
"dependencies": {
- "clsx": "2.0.0"
+ "clsx": "^2.1.1"
},
"funding": {
- "url": "https://joebell.co.uk"
- }
- },
- "node_modules/class-variance-authority/node_modules/clsx": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
- "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
+ "url": "https://polar.sh/cva"
}
},
"node_modules/client-only": {
@@ -4291,15 +4292,15 @@
}
},
"node_modules/cmdk": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.3.tgz",
- "integrity": "sha512-2c3uTjwT4YeHj60q2k8S1B0WHSoGR6t5CPnec6PMFD2QF4gwid0t1VSPNeEmL02EwBwNky/A3gwPCOViKTtoPA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz",
+ "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-dialog": "^1.1.2",
+ "@radix-ui/react-compose-refs": "^1.1.1",
+ "@radix-ui/react-dialog": "^1.1.6",
"@radix-ui/react-id": "^1.1.0",
- "@radix-ui/react-primitive": "^2.0.0",
- "use-sync-external-store": "^1.2.2"
+ "@radix-ui/react-primitive": "^2.0.2"
},
"peerDependencies": {
"react": "^18 || ^19 || ^19.0.0-rc",
@@ -4395,9 +4396,9 @@
"license": "MIT"
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4915,9 +4916,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
- "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz",
+ "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -4928,31 +4929,31 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.1",
- "@esbuild/android-arm": "0.25.1",
- "@esbuild/android-arm64": "0.25.1",
- "@esbuild/android-x64": "0.25.1",
- "@esbuild/darwin-arm64": "0.25.1",
- "@esbuild/darwin-x64": "0.25.1",
- "@esbuild/freebsd-arm64": "0.25.1",
- "@esbuild/freebsd-x64": "0.25.1",
- "@esbuild/linux-arm": "0.25.1",
- "@esbuild/linux-arm64": "0.25.1",
- "@esbuild/linux-ia32": "0.25.1",
- "@esbuild/linux-loong64": "0.25.1",
- "@esbuild/linux-mips64el": "0.25.1",
- "@esbuild/linux-ppc64": "0.25.1",
- "@esbuild/linux-riscv64": "0.25.1",
- "@esbuild/linux-s390x": "0.25.1",
- "@esbuild/linux-x64": "0.25.1",
- "@esbuild/netbsd-arm64": "0.25.1",
- "@esbuild/netbsd-x64": "0.25.1",
- "@esbuild/openbsd-arm64": "0.25.1",
- "@esbuild/openbsd-x64": "0.25.1",
- "@esbuild/sunos-x64": "0.25.1",
- "@esbuild/win32-arm64": "0.25.1",
- "@esbuild/win32-ia32": "0.25.1",
- "@esbuild/win32-x64": "0.25.1"
+ "@esbuild/aix-ppc64": "0.25.2",
+ "@esbuild/android-arm": "0.25.2",
+ "@esbuild/android-arm64": "0.25.2",
+ "@esbuild/android-x64": "0.25.2",
+ "@esbuild/darwin-arm64": "0.25.2",
+ "@esbuild/darwin-x64": "0.25.2",
+ "@esbuild/freebsd-arm64": "0.25.2",
+ "@esbuild/freebsd-x64": "0.25.2",
+ "@esbuild/linux-arm": "0.25.2",
+ "@esbuild/linux-arm64": "0.25.2",
+ "@esbuild/linux-ia32": "0.25.2",
+ "@esbuild/linux-loong64": "0.25.2",
+ "@esbuild/linux-mips64el": "0.25.2",
+ "@esbuild/linux-ppc64": "0.25.2",
+ "@esbuild/linux-riscv64": "0.25.2",
+ "@esbuild/linux-s390x": "0.25.2",
+ "@esbuild/linux-x64": "0.25.2",
+ "@esbuild/netbsd-arm64": "0.25.2",
+ "@esbuild/netbsd-x64": "0.25.2",
+ "@esbuild/openbsd-arm64": "0.25.2",
+ "@esbuild/openbsd-x64": "0.25.2",
+ "@esbuild/sunos-x64": "0.25.2",
+ "@esbuild/win32-arm64": "0.25.2",
+ "@esbuild/win32-ia32": "0.25.2",
+ "@esbuild/win32-x64": "0.25.2"
}
},
"node_modules/escalade": {
@@ -4979,32 +4980,33 @@
}
},
"node_modules/eslint": {
- "version": "9.13.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
- "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
+ "version": "9.23.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz",
+ "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.11.0",
- "@eslint/config-array": "^0.18.0",
- "@eslint/core": "^0.7.0",
- "@eslint/eslintrc": "^3.1.0",
- "@eslint/js": "9.13.0",
- "@eslint/plugin-kit": "^0.2.0",
- "@humanfs/node": "^0.16.5",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.2",
+ "@eslint/config-helpers": "^0.2.0",
+ "@eslint/core": "^0.12.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.23.0",
+ "@eslint/plugin-kit": "^0.2.7",
+ "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.3.1",
+ "@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
+ "cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.1.0",
- "eslint-visitor-keys": "^4.1.0",
- "espree": "^10.2.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -5018,8 +5020,7 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "text-table": "^0.2.0"
+ "optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
@@ -5384,9 +5385,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
- "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5413,6 +5414,20 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/@humanwhocodes/retry": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz",
+ "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/eslint/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -5538,9 +5553,9 @@
}
},
"node_modules/expect-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz",
- "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
+ "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -5736,17 +5751,19 @@
}
},
"node_modules/framer-motion": {
- "version": "11.11.11",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.11.tgz",
- "integrity": "sha512-tuDH23ptJAKUHGydJQII9PhABNJBpB+z0P1bmgKK9QFIssHGlfPd6kxMq00LSKwE27WFsb2z0ovY0bpUyMvfRw==",
+ "version": "11.18.2",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
+ "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
"license": "MIT",
"dependencies": {
+ "motion-dom": "^11.18.1",
+ "motion-utils": "^11.18.1",
"tslib": "^2.4.0"
},
"peerDependencies": {
"@emotion/is-prop-valid": "*",
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/is-prop-valid": {
@@ -5815,9 +5832,9 @@
}
},
"node_modules/fuse.js": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz",
- "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz",
+ "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==",
"license": "Apache-2.0",
"engines": {
"node": ">=10"
@@ -6186,9 +6203,9 @@
}
},
"node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6227,15 +6244,6 @@
"node": ">= 0.4"
}
},
- "node_modules/invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -6752,6 +6760,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
@@ -6916,13 +6925,16 @@
}
},
"node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": {
@@ -6959,6 +6971,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
@@ -7122,6 +7135,21 @@
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"license": "MIT"
},
+ "node_modules/motion-dom": {
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz",
+ "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^11.18.1"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz",
+ "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==",
+ "license": "MIT"
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -7166,12 +7194,12 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/next/-/next-15.2.3.tgz",
- "integrity": "sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
+ "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
"license": "MIT",
"dependencies": {
- "@next/env": "15.2.3",
+ "@next/env": "15.2.4",
"@swc/counter": "0.1.3",
"@swc/helpers": "0.5.15",
"busboy": "1.6.0",
@@ -7186,14 +7214,14 @@
"node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "15.2.3",
- "@next/swc-darwin-x64": "15.2.3",
- "@next/swc-linux-arm64-gnu": "15.2.3",
- "@next/swc-linux-arm64-musl": "15.2.3",
- "@next/swc-linux-x64-gnu": "15.2.3",
- "@next/swc-linux-x64-musl": "15.2.3",
- "@next/swc-win32-arm64-msvc": "15.2.3",
- "@next/swc-win32-x64-msvc": "15.2.3",
+ "@next/swc-darwin-arm64": "15.2.4",
+ "@next/swc-darwin-x64": "15.2.4",
+ "@next/swc-linux-arm64-gnu": "15.2.4",
+ "@next/swc-linux-arm64-musl": "15.2.4",
+ "@next/swc-linux-x64-gnu": "15.2.4",
+ "@next/swc-linux-x64-musl": "15.2.4",
+ "@next/swc-win32-arm64-msvc": "15.2.4",
+ "@next/swc-win32-x64-msvc": "15.2.4",
"sharp": "^0.33.5"
},
"peerDependencies": {
@@ -7275,18 +7303,22 @@
}
},
"node_modules/nuqs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.1.1.tgz",
- "integrity": "sha512-iM2H8lMmhvk9bxupUs2oRle9usRNEAqppOkTMXOxD/uK85gOKAubU7T2zmPo8fnYQS4n5e/XswTiq+gLYGpy3w==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.4.1.tgz",
+ "integrity": "sha512-u6sngTspqDe3jWHtcmqHQg3dl35niizCZAsm5gy7PBlgG2rwl71Dp2QUv5hwBaWKI9qz0wqILZY86TsRxq66SQ==",
"license": "MIT",
"dependencies": {
"mitt": "^3.0.1"
},
+ "funding": {
+ "url": "https://github.com/sponsors/franky47"
+ },
"peerDependencies": {
- "@remix-run/react": ">= 2",
- "next": ">= 14.2.0",
- "react": ">= 18.2.0",
- "react-router-dom": ">= 6"
+ "@remix-run/react": ">=2",
+ "next": ">=14.2.0",
+ "react": ">=18.2.0 || ^19.0.0-0",
+ "react-router": "^6 || ^7",
+ "react-router-dom": "^6 || ^7"
},
"peerDependenciesMeta": {
"@remix-run/react": {
@@ -7295,6 +7327,9 @@
"next": {
"optional": true
},
+ "react-router": {
+ "optional": true
+ },
"react-router-dom": {
"optional": true
}
@@ -7756,19 +7791,6 @@
}
}
},
- "node_modules/postcss-load-config/node_modules/lilconfig": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
- "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
"node_modules/postcss-nested": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
@@ -7826,9 +7848,9 @@
}
},
"node_modules/prettier": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
- "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
@@ -7857,9 +7879,9 @@
}
},
"node_modules/prettier-plugin-tailwindcss": {
- "version": "0.6.8",
- "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz",
- "integrity": "sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==",
+ "version": "0.6.11",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.11.tgz",
+ "integrity": "sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7870,7 +7892,7 @@
"@prettier/plugin-pug": "*",
"@shopify/prettier-plugin-liquid": "*",
"@trivago/prettier-plugin-sort-imports": "*",
- "@zackad/prettier-plugin-twig-melody": "*",
+ "@zackad/prettier-plugin-twig": "*",
"prettier": "^3.0",
"prettier-plugin-astro": "*",
"prettier-plugin-css-order": "*",
@@ -7897,7 +7919,7 @@
"@trivago/prettier-plugin-sort-imports": {
"optional": true
},
- "@zackad/prettier-plugin-twig-melody": {
+ "@zackad/prettier-plugin-twig": {
"optional": true
},
"prettier-plugin-astro": {
@@ -7981,9 +8003,9 @@
"license": "MIT"
},
"node_modules/prismjs": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
- "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -8046,9 +8068,9 @@
"license": "MIT"
},
"node_modules/react": {
- "version": "19.0.0-rc-02c0e824-20241028",
- "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-02c0e824-20241028.tgz",
- "integrity": "sha512-GbZ7hpPHQMiEu53BqEaPQVM/4GG4hARo+mqEEnx4rYporDvNvUjutiAFxYFSbu6sgHwcr7LeFv8htEOwALVA2A==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
+ "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -8137,21 +8159,21 @@
}
},
"node_modules/react-dom": {
- "version": "19.0.0-rc-02c0e824-20241028",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-02c0e824-20241028.tgz",
- "integrity": "sha512-LrZf3DfHL6Fs07wwlUCHrzFTCMM19yA99MvJpfLokN4I2nBAZvREGZjZAn8VPiSfN72+i9j1eL4wB8gC695F3Q==",
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
+ "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
"license": "MIT",
"dependencies": {
- "scheduler": "0.25.0-rc-02c0e824-20241028"
+ "scheduler": "^0.25.0"
},
"peerDependencies": {
- "react": "19.0.0-rc-02c0e824-20241028"
+ "react": "^19.0.0"
}
},
"node_modules/react-icons": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
- "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
+ "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
"license": "MIT",
"peerDependencies": {
"react": "*"
@@ -8175,23 +8197,23 @@
}
},
"node_modules/react-remove-scroll": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
- "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
+ "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
"license": "MIT",
"dependencies": {
- "react-remove-scroll-bar": "^2.3.6",
- "react-style-singleton": "^2.2.1",
+ "react-remove-scroll-bar": "^2.3.7",
+ "react-style-singleton": "^2.2.3",
"tslib": "^2.1.0",
- "use-callback-ref": "^1.3.0",
- "use-sidecar": "^1.1.2"
+ "use-callback-ref": "^1.3.3",
+ "use-sidecar": "^1.1.3"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -8200,20 +8222,20 @@
}
},
"node_modules/react-remove-scroll-bar": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
- "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
"license": "MIT",
"dependencies": {
- "react-style-singleton": "^2.2.1",
+ "react-style-singleton": "^2.2.2",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -8235,21 +8257,20 @@
}
},
"node_modules/react-style-singleton": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
- "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
"license": "MIT",
"dependencies": {
"get-nonce": "^1.0.0",
- "invariant": "^2.2.4",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -8418,13 +8439,13 @@
}
},
"node_modules/rollup": {
- "version": "4.35.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
- "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
+ "version": "4.38.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz",
+ "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.6"
+ "@types/estree": "1.0.7"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -8434,25 +8455,26 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.35.0",
- "@rollup/rollup-android-arm64": "4.35.0",
- "@rollup/rollup-darwin-arm64": "4.35.0",
- "@rollup/rollup-darwin-x64": "4.35.0",
- "@rollup/rollup-freebsd-arm64": "4.35.0",
- "@rollup/rollup-freebsd-x64": "4.35.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
- "@rollup/rollup-linux-arm64-gnu": "4.35.0",
- "@rollup/rollup-linux-arm64-musl": "4.35.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
- "@rollup/rollup-linux-s390x-gnu": "4.35.0",
- "@rollup/rollup-linux-x64-gnu": "4.35.0",
- "@rollup/rollup-linux-x64-musl": "4.35.0",
- "@rollup/rollup-win32-arm64-msvc": "4.35.0",
- "@rollup/rollup-win32-ia32-msvc": "4.35.0",
- "@rollup/rollup-win32-x64-msvc": "4.35.0",
+ "@rollup/rollup-android-arm-eabi": "4.38.0",
+ "@rollup/rollup-android-arm64": "4.38.0",
+ "@rollup/rollup-darwin-arm64": "4.38.0",
+ "@rollup/rollup-darwin-x64": "4.38.0",
+ "@rollup/rollup-freebsd-arm64": "4.38.0",
+ "@rollup/rollup-freebsd-x64": "4.38.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.38.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.38.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.38.0",
+ "@rollup/rollup-linux-arm64-musl": "4.38.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.38.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.38.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.38.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.38.0",
+ "@rollup/rollup-linux-x64-gnu": "4.38.0",
+ "@rollup/rollup-linux-x64-musl": "4.38.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.38.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.38.0",
+ "@rollup/rollup-win32-x64-msvc": "4.38.0",
"fsevents": "~2.3.2"
}
},
@@ -8545,9 +8567,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.25.0-rc-02c0e824-20241028",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-02c0e824-20241028.tgz",
- "integrity": "sha512-GysnKjmMSaWcwsKTLzeJO0IhU3EyIiC0ivJKE6yDNLqt3IMxDByx8b6lSNXRNdN+ULUY0WLLjSPaZ0LuU/GnTg==",
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
+ "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
"license": "MIT"
},
"node_modules/semver": {
@@ -8562,12 +8584,6 @@
"node": ">=10"
}
},
- "node_modules/server-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz",
- "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==",
- "license": "MIT"
- },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -8710,9 +8726,9 @@
}
},
"node_modules/simple-icons": {
- "version": "13.15.0",
- "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.15.0.tgz",
- "integrity": "sha512-8SzFj9CvPlDnjDLISsAWTvpCs7om2zbSJZ1hNLRo6quWKLqFwjCD9opS24Q/yD0bdsnVHPpF0N3hitpHrY5u9w==",
+ "version": "13.21.0",
+ "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.21.0.tgz",
+ "integrity": "sha512-LI5pVJPBv6oc79OMsffwb6kEqnmB8P1Cjg1crNUlhsxPETQ5UzbCKQdxU+7MW6+DD1qfPkla/vSKlLD4IfyXpQ==",
"license": "CC0-1.0",
"engines": {
"node": ">=0.12.18"
@@ -8732,13 +8748,13 @@
}
},
"node_modules/sonner": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz",
- "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz",
+ "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==",
"license": "MIT",
"peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
}
},
"node_modules/source-map-js": {
@@ -8768,9 +8784,9 @@
"license": "MIT"
},
"node_modules/std-env": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz",
- "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz",
+ "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==",
"dev": true,
"license": "MIT"
},
@@ -9168,9 +9184,9 @@
"license": "MIT"
},
"node_modules/tailwind-merge": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz",
- "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
+ "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
"license": "MIT",
"funding": {
"type": "github",
@@ -9178,34 +9194,34 @@
}
},
"node_modules/tailwindcss": {
- "version": "3.4.14",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
- "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
+ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
- "chokidar": "^3.5.3",
+ "chokidar": "^3.6.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.3.0",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.21.0",
- "lilconfig": "^2.1.0",
- "micromatch": "^4.0.5",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.23",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
- "postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
},
"bin": {
"tailwind": "lib/cli.js",
@@ -9245,13 +9261,6 @@
"node": ">=6"
}
},
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -9289,6 +9298,51 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tinypool": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
@@ -9379,16 +9433,16 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
- "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=16"
+ "node": ">=18.12"
},
"peerDependencies": {
- "typescript": ">=4.2.0"
+ "typescript": ">=4.8.4"
}
},
"node_modules/ts-interface-checker": {
@@ -9529,9 +9583,9 @@
}
},
"node_modules/typescript": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
- "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
+ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -9558,9 +9612,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"dev": true,
"license": "MIT"
},
@@ -9606,9 +9660,9 @@
}
},
"node_modules/use-callback-ref": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
- "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
@@ -9617,8 +9671,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -9627,9 +9681,9 @@
}
},
"node_modules/use-sidecar": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
- "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+ "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
"license": "MIT",
"dependencies": {
"detect-node-es": "^1.1.0",
@@ -9639,8 +9693,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -9648,15 +9702,6 @@
}
}
},
- "node_modules/use-sync-external-store": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
- "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -9665,15 +9710,18 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz",
- "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==",
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
+ "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
"postcss": "^8.5.3",
- "rollup": "^4.30.1"
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
@@ -9737,9 +9785,9 @@
}
},
"node_modules/vite-node": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.8.tgz",
- "integrity": "sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.1.tgz",
+ "integrity": "sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9760,9 +9808,9 @@
}
},
"node_modules/vite-tsconfig-paths": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.3.tgz",
- "integrity": "sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz",
+ "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9779,32 +9827,60 @@
}
}
},
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/vitest": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.8.tgz",
- "integrity": "sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.1.tgz",
+ "integrity": "sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/expect": "3.0.8",
- "@vitest/mocker": "3.0.8",
- "@vitest/pretty-format": "^3.0.8",
- "@vitest/runner": "3.0.8",
- "@vitest/snapshot": "3.0.8",
- "@vitest/spy": "3.0.8",
- "@vitest/utils": "3.0.8",
+ "@vitest/expect": "3.1.1",
+ "@vitest/mocker": "3.1.1",
+ "@vitest/pretty-format": "^3.1.1",
+ "@vitest/runner": "3.1.1",
+ "@vitest/snapshot": "3.1.1",
+ "@vitest/spy": "3.1.1",
+ "@vitest/utils": "3.1.1",
"chai": "^5.2.0",
"debug": "^4.4.0",
- "expect-type": "^1.1.0",
+ "expect-type": "^1.2.0",
"magic-string": "^0.30.17",
"pathe": "^2.0.3",
- "std-env": "^3.8.0",
+ "std-env": "^3.8.1",
"tinybench": "^2.9.0",
"tinyexec": "^0.3.2",
"tinypool": "^1.0.2",
"tinyrainbow": "^2.0.0",
"vite": "^5.0.0 || ^6.0.0",
- "vite-node": "3.0.8",
+ "vite-node": "3.1.1",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -9820,8 +9896,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.0.8",
- "@vitest/ui": "3.0.8",
+ "@vitest/browser": "3.1.1",
+ "@vitest/ui": "3.1.1",
"happy-dom": "*",
"jsdom": "*"
},
@@ -10212,9 +10288,9 @@
}
},
"node_modules/zod": {
- "version": "3.23.8",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
- "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "version": "3.24.2",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
+ "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
diff --git a/frontend/package.json b/frontend/package.json
index 923bb9c07..50379a320 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -20,70 +20,71 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@radix-ui/react-accordion": "^1.1.2",
- "@radix-ui/react-dialog": "^1.0.5",
- "@radix-ui/react-dropdown-menu": "^2.0.6",
- "@radix-ui/react-icons": "^1.3.1",
- "@radix-ui/react-label": "^2.1.0",
- "@radix-ui/react-navigation-menu": "^1.1.4",
- "@radix-ui/react-popover": "^1.1.2",
- "@radix-ui/react-select": "^2.1.2",
- "@radix-ui/react-separator": "^1.1.0",
- "@radix-ui/react-slot": "^1.1.0",
- "@radix-ui/react-switch": "^1.1.1",
- "@radix-ui/react-tabs": "^1.1.0",
- "@radix-ui/react-tooltip": "^1.1.2",
- "@vercel/analytics": "^1.2.2",
- "chart.js": "^4.4.1",
+ "@radix-ui/react-accordion": "^1.2.3",
+ "@radix-ui/react-dialog": "^1.1.6",
+ "@radix-ui/react-dropdown-menu": "^2.1.6",
+ "@radix-ui/react-icons": "^1.3.2",
+ "@radix-ui/react-label": "^2.1.2",
+ "@radix-ui/react-navigation-menu": "^1.2.5",
+ "@radix-ui/react-popover": "^1.1.6",
+ "@radix-ui/react-select": "^2.1.6",
+ "@radix-ui/react-separator": "^1.1.2",
+ "@radix-ui/react-slot": "^1.1.2",
+ "@radix-ui/react-switch": "^1.1.3",
+ "@radix-ui/react-tabs": "^1.1.3",
+ "@radix-ui/react-tooltip": "^1.1.8",
+ "@tanstack/react-query": "^5.71.1",
+ "chart.js": "^4.4.8",
"chartjs-plugin-datalabels": "^2.2.0",
- "class-variance-authority": "^0.7.0",
+ "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "cmdk": "^1.0.0",
+ "cmdk": "^1.1.1",
"date-fns": "^4.1.0",
- "framer-motion": "^11.11.11",
- "fuse.js": "^7.0.0",
+ "framer-motion": "^11.18.2",
+ "fuse.js": "^7.1.0",
"lucide-react": "^0.453.0",
"mini-svg-data-uri": "^1.4.4",
- "next": "15.2.3",
+ "next": "15.2.4",
"next-themes": "^0.3.0",
- "nuqs": "^2.1.1",
- "pocketbase": "^0.21.4",
+ "nuqs": "^2.4.1",
+ "pocketbase": "^0.21.5",
"prettier-plugin-organize-imports": "^4.1.0",
- "react": "19.0.0-rc-02c0e824-20241028",
+ "react": "19.0.0",
"react-chartjs-2": "^5.3.0",
"react-code-blocks": "^0.1.6",
"react-datepicker": "^7.6.0",
"react-day-picker": "8.10.1",
- "react-dom": "19.0.0-rc-02c0e824-20241028",
- "react-icons": "^5.1.0",
+ "react-dom": "19.0.0",
+ "react-icons": "^5.5.0",
"react-simple-typewriter": "^5.0.1",
"sharp": "^0.33.5",
- "simple-icons": "^13.5.0",
- "sonner": "^1.5.0",
- "tailwind-merge": "^2.3.0",
- "zod": "^3.23.8"
+ "simple-icons": "^13.21.0",
+ "sonner": "^1.7.4",
+ "tailwind-merge": "^2.6.0",
+ "zod": "^3.24.2"
},
"devDependencies": {
+ "@tanstack/eslint-plugin-query": "^5.68.0",
"@testing-library/dom": "^10.4.0",
- "@testing-library/react": "^16.0.1",
- "@types/node": "^22",
+ "@testing-library/react": "^16.2.0",
+ "@types/node": "^22.13.16",
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
- "@typescript-eslint/eslint-plugin": "^8.8.1",
- "@typescript-eslint/parser": "^8.8.1",
+ "@typescript-eslint/eslint-plugin": "^8.29.0",
+ "@typescript-eslint/parser": "^8.29.0",
"@vitejs/plugin-react": "^4.3.4",
- "eslint": "^9.13.0",
+ "eslint": "^9.23.0",
"eslint-config-next": "15.0.2",
"jsdom": "^25.0.1",
- "postcss": "^8",
- "prettier": "^3.2.5",
- "prettier-plugin-tailwindcss": "^0.6.5",
- "tailwindcss": "^3.4.9",
+ "postcss": "^8.5.3",
+ "prettier": "^3.5.3",
+ "prettier-plugin-tailwindcss": "^0.6.11",
+ "tailwindcss": "^3.4.17",
"tailwindcss-animate": "^1.0.7",
"tailwindcss-animated": "^1.1.2",
- "typescript": "^5",
- "vite-tsconfig-paths": "^5.1.3",
- "vitest": "^3.0.8"
+ "typescript": "^5.8.2",
+ "vite-tsconfig-paths": "^5.1.4",
+ "vitest": "^3.1.1"
},
"overrides": {
"@types/react": "npm:types-react@19.0.0-rc.1",
diff --git a/frontend/public/json/add-iptag.json b/frontend/public/json/add-iptag.json
new file mode 100644
index 000000000..da84c8509
--- /dev/null
+++ b/frontend/public/json/add-iptag.json
@@ -0,0 +1,49 @@
+{
+ "name": "Proxmox VE LXC IP-Tag",
+ "slug": "add-lxc-iptag",
+ "categories": [
+ 1
+ ],
+ "date_created": "2025-04-02",
+ "type": "addon",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "config_path": "",
+ "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/add-iptag.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ },
+ {
+ "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.",
+ "type": "info"
+ },
+ {
+ "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
+ "type": "warning"
+ }
+ ]
+}
+
diff --git a/frontend/public/json/allstarlink.json b/frontend/public/json/allstarlink.json
new file mode 100644
index 000000000..ec282b02b
--- /dev/null
+++ b/frontend/public/json/allstarlink.json
@@ -0,0 +1,40 @@
+{
+ "name": "AllStarLink",
+ "slug": "allstarlink-vm",
+ "categories": [
+ 24
+ ],
+ "date_created": "2025-05-05",
+ "type": "vm",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://allstarlink.github.io/",
+ "website": "https://www.allstarlink.org/",
+ "logo": "https://raw.githubusercontent.com/AllStarLink/ASL3-Manual/blob/main/docs/assets/allstar-logo-small.png",
+ "config_path": "",
+ "description": "AllStarLink is a network of Amateur Radio repeaters, remote base stations and hot spots accessible to each other via Voice over Internet Protocol.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "vm/allstarlink-vm.sh",
+ "resources": {
+ "cpu": 2,
+ "ram": 2048,
+ "hdd": 8,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Options to Install Allmon3",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/babybuddy.json b/frontend/public/json/babybuddy.json
new file mode 100644
index 000000000..ee4f3e705
--- /dev/null
+++ b/frontend/public/json/babybuddy.json
@@ -0,0 +1,40 @@
+{
+ "name": "Baby Buddy",
+ "slug": "babybuddy",
+ "categories": [
+ 23
+ ],
+ "date_created": "2025-05-16",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 80,
+ "documentation": "https://docs.baby-buddy.net/",
+ "website": "https://github.com/babybuddy/babybuddy",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/baby-buddy.svg",
+ "config_path": "/opt/babybuddy/babybuddy/production.py",
+ "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/babybuddy.sh",
+ "resources": {
+ "cpu": 2,
+ "ram": 2048,
+ "hdd": 5,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": "admin",
+ "password": "admin"
+ },
+ "notes": [
+ {
+ "text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/backrest.json b/frontend/public/json/backrest.json
new file mode 100644
index 000000000..a3e643d2f
--- /dev/null
+++ b/frontend/public/json/backrest.json
@@ -0,0 +1,40 @@
+{
+ "name": "Backrest",
+ "slug": "backrest",
+ "categories": [
+ 7
+ ],
+ "date_created": "2025-05-11",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 9898,
+ "documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
+ "website": "https://garethgeorge.github.io/backrest",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/backrest-light.svg",
+ "config_path": "/opt/backrest/config/config.json",
+ "description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/backrest.sh",
+ "resources": {
+ "cpu": 1,
+ "ram": 512,
+ "hdd": 8,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "type": "info",
+ "text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/frontend/public/json/calibre-web-automated.json b/frontend/public/json/calibre-web-automated.json
deleted file mode 100644
index 0fb22abf0..000000000
--- a/frontend/public/json/calibre-web-automated.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "Calibre-Web-Automated",
- "slug": "calibre-web-automated",
- "categories": [
- 11
- ],
- "date_created": "2025-03-02",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": 8083,
- "documentation": null,
- "website": "https://github.com/crocodilestick/Calibre-Web-Automated",
- "logo": "https://sasquatters.com/media/2017/04/Calibre-web-banner-768x512.jpg",
- "description": "Calibre-Web but automated and with Calibre features! Fully automate and simplify your eBook set up!",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/calibre-web-automated.sh",
- "resources": {
- "cpu": 2,
- "ram": 2048,
- "hdd": 4,
- "os": "debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": "admin",
- "password": "admin123"
- },
- "notes": [
- {
- "text": "This LXC is not interchangeable with the Calibre-Web LXC",
- "type": "warning"
- },
- {
- "text": "Options enabled by default: Kobo sync; Goodreads author info; metadata extaction from epub, fb2, pdf; cover extraction from cbr, cbz, cbt files",
- "type": "info"
- }
- ]
-}
diff --git a/frontend/public/json/cloudflare-ddns.json b/frontend/public/json/cloudflare-ddns.json
new file mode 100644
index 000000000..55e0acdb6
--- /dev/null
+++ b/frontend/public/json/cloudflare-ddns.json
@@ -0,0 +1,44 @@
+{
+ "name": "Cloudflare-DDNS",
+ "slug": "cloudflare-ddns",
+ "categories": [
+ 4
+ ],
+ "date_created": "2025-04-23",
+ "type": "ct",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown",
+ "config_path": "/etc/systemd/system/cloudflare-ddns.service",
+ "website": "https://github.com/favonia/cloudflare-ddns",
+ "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/cloudflare.svg",
+ "description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machine’s public IP addresses and update DNS records using the Cloudflare API",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/cloudflare-ddns.sh",
+ "resources": {
+ "cpu": 1,
+ "ram": 512,
+ "hdd": 2,
+ "os": "Debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "To setup the updater you must have the Cloudflare Token and the domains, please read the Github documentation at \"Step 1: Updating the Compose File\" (only the expandable section)",
+ "type": "warning"
+ },
+ {
+ "text": "To update the configuration edit `/etc/systemd/system/cloudflare-ddns.service`. After edit please restard with `sudo systemctl restart cloudflare-ddns.service`",
+ "type": "info"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/frontend/public/json/fileflows.json b/frontend/public/json/fileflows.json
deleted file mode 100644
index 96b4c2a12..000000000
--- a/frontend/public/json/fileflows.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "FileFlows",
- "slug": "fileflows",
- "categories": [
- 13
- ],
- "date_created": "2025-03-07",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": 19200,
- "documentation": "https://fileflows.com/docs",
- "website": "https://fileflows.com/",
- "logo": "https://raw.githubusercontent.com/revenz/FileFlows/refs/heads/develop/icon.png",
- "description": "FileFlows is a powerful, open-source tool for automating media file processing workflows, including encoding, decoding, and media management. It offers an intuitive GUI and extensive plugin support, making it ideal for tasks like video transcoding, organizing, and managing large media libraries.",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/fileflows.sh",
- "resources": {
- "cpu": 2,
- "ram": 2048,
- "hdd": 8,
- "os": "Debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "With Privileged/Unprivileged Hardware Acceleration Support",
- "type": "info"
- }
- ]
-}
diff --git a/frontend/public/json/freepbx.json b/frontend/public/json/freepbx.json
index 0b01f73a6..c893f74d5 100644
--- a/frontend/public/json/freepbx.json
+++ b/frontend/public/json/freepbx.json
@@ -12,15 +12,16 @@
"documentation": "https://sangomakb.atlassian.net/wiki/spaces/FP/overview?homepageId=8454359",
"website": "https://www.freepbx.org/",
"logo": "https://avatars.githubusercontent.com/u/696423?s=200&v=4",
+ "config_path": "",
"description": "FreePBX is a web-based open-source graphical user interface that manages Asterisk, a voice over IP and telephony server.",
"install_methods": [
{
"type": "default",
"script": "ct/freepbx.sh",
"resources": {
- "cpu": 1,
- "ram": 1024,
- "hdd": 20,
+ "cpu": 2,
+ "ram": 2048,
+ "hdd": 10,
"os": "debian",
"version": "12"
}
@@ -30,5 +31,11 @@
"username": null,
"password": null
},
- "notes": []
+ "notes": [
+ {
+ "text": "This script uses the official FreePBX install script. Check it here: https://github.com/FreePBX/sng_freepbx_debian_install",
+ "type": "info"
+ }
+ ]
}
+
diff --git a/frontend/public/json/homarr.json b/frontend/public/json/homarr.json
new file mode 100644
index 000000000..323153bc1
--- /dev/null
+++ b/frontend/public/json/homarr.json
@@ -0,0 +1,35 @@
+{
+ "name": "Homarr",
+ "slug": "homarr",
+ "categories": [
+ 10
+ ],
+ "date_created": "2025-05-08",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 7575,
+ "documentation": null,
+ "website": "https://homarr.dev/",
+ "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg",
+ "config_path": "/opt/homarr/.env",
+ "description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/homarr.sh",
+ "resources": {
+ "cpu": 2,
+ "ram": 4096,
+ "hdd": 8,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": []
+}
diff --git a/frontend/public/json/immich.json b/frontend/public/json/immich.json
new file mode 100644
index 000000000..1a07752b7
--- /dev/null
+++ b/frontend/public/json/immich.json
@@ -0,0 +1,41 @@
+{
+ "name": "Immich",
+ "slug": "immich",
+ "categories": [
+ 13
+ ],
+ "date_created": "2025-03-30",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 2283,
+ "documentation": "https://immich.app/docs/overview/introduction",
+ "website": "https://immich.app",
+ "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/immich.png",
+ "config_path": "/opt/immich/.env",
+ "description": "High performance self-hosted photo and video management solution.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/immich.sh",
+ "resources": {
+ "cpu": 4,
+ "ram": 4096,
+ "hdd": 12,
+ "os": "Debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "During installation, HW-accelerated machine-learning is an available option. This also allows for HW-accelerated transcoding, but it must be enabled in Video Transcoding Settings",
+ "type": "info"
+ }
+ ]
+}
+
diff --git a/frontend/public/json/jitsi-meet.json b/frontend/public/json/jitsi-meet.json
new file mode 100644
index 000000000..24c30d596
--- /dev/null
+++ b/frontend/public/json/jitsi-meet.json
@@ -0,0 +1,35 @@
+{
+ "name": "jitsi-meet",
+ "slug": "jitsi-meet",
+ "categories": [
+ 18
+ ],
+ "date_created": "2025-05-06",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 443,
+ "documentation": "https://jitsi.github.io/handbook/docs/intro",
+ "website": "https://jitsi.org/jitsi-meet/",
+ "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jitsi-meet.webp",
+ "config_path": "/etc/jitsi/meet/[your-hostname]-config.js",
+ "description": "Go ahead, video chat with the whole team. In fact, invite everyone you know. Jitsi Meet is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/jitsi-meet.sh",
+ "resources": {
+ "cpu": 2,
+ "ram": 4096,
+ "hdd": 20,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": []
+}
diff --git a/frontend/public/json/jumpserver.json b/frontend/public/json/jumpserver.json
new file mode 100644
index 000000000..35ac39a29
--- /dev/null
+++ b/frontend/public/json/jumpserver.json
@@ -0,0 +1,35 @@
+{
+ "name": "JumpServer",
+ "slug": "jumpserver",
+ "categories": [
+ 6
+ ],
+ "date_created": "2025-05-05",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 80,
+ "documentation": "https://www.jumpserver.com/docs",
+ "website": "https://www.jumpserver.com/",
+ "logo": "https://raw.githubusercontent.com/jumpserver/jumpserver/refs/heads/dev/apps/static/img/logo.png",
+ "config_path": "",
+ "description": "JumpServer is an open-source Privileged Access Management (PAM) tool that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/jumpserver.sh",
+ "resources": {
+ "cpu": 2,
+ "ram": 8192,
+ "hdd": 60,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": "admin",
+ "password": "ChangeMe"
+ },
+ "notes": []
+}
diff --git a/frontend/public/json/librenms.json b/frontend/public/json/librenms.json
index ed854fece..ae373b6e3 100644
--- a/frontend/public/json/librenms.json
+++ b/frontend/public/json/librenms.json
@@ -12,6 +12,7 @@
"documentation": "https://docs.librenms.org/",
"website": "https://librenms.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librenms.svg",
+ "config_path": "/opt/librenms/config.php and /opt/librenms/.env",
"description": "LibreNMS is an open-source, community-driven network monitoring system that provides automatic discovery, alerting, and performance tracking for network devices. It supports a wide range of hardware and integrates with various notification and logging platforms.",
"install_methods": [
{
@@ -27,8 +28,9 @@
}
],
"default_credentials": {
- "username": null,
- "password": null
+ "username": "admin",
+ "password": "admin"
},
"notes": []
-}
\ No newline at end of file
+}
+
diff --git a/frontend/public/json/librespeed.json b/frontend/public/json/librespeed.json
new file mode 100644
index 000000000..f651f2ce4
--- /dev/null
+++ b/frontend/public/json/librespeed.json
@@ -0,0 +1,35 @@
+{
+ "name": "Librespeed",
+ "slug": "librespeed",
+ "categories": [
+ 4
+ ],
+ "date_created": "2025-04-26",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 80,
+ "documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md",
+ "config_path": "",
+ "website": "https://librespeed.org",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librespeed.svg",
+ "description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/librespeed.sh",
+ "resources": {
+ "cpu": 1,
+ "ram": 512,
+ "hdd": 4,
+ "os": "Debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": "root",
+ "password": null
+ },
+ "notes": []
+}
diff --git a/frontend/public/json/manyfold.json b/frontend/public/json/manyfold.json
index b8241f3dd..512963b26 100644
--- a/frontend/public/json/manyfold.json
+++ b/frontend/public/json/manyfold.json
@@ -12,6 +12,7 @@
"documentation": "https://manyfold.app/sysadmin/",
"website": "https://manyfold.app/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/manyfold.webp",
+ "config_path": "",
"description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.",
"install_methods": [
{
@@ -32,3 +33,4 @@
},
"notes": []
}
+
diff --git a/frontend/public/json/meillisearch.json b/frontend/public/json/meillisearch.json
deleted file mode 100644
index f943b5ad7..000000000
--- a/frontend/public/json/meillisearch.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "Meilisearch",
- "slug": "meilisearch",
- "categories": [
- 8
- ],
- "date_created": "2025-03-21",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": 7700,
- "documentation": "https://www.meilisearch.com/docs",
- "website": "https://www.meilisearch.com/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg",
- "description": "Meilisearch is a fast, open-source search engine designed for instant, full-text search with typo tolerance. It provides an API that allows developers to integrate powerful search features into applications. Meilisearch-UI is an optional web-based interface that provides a simple way to interact with Meilisearch, visualize indexed data, and test queries without needing to use the API directly.",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/meilisearch.sh",
- "resources": {
- "cpu": 2,
- "ram": 4096,
- "hdd": 5,
- "os": "debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Meilisearch-UI can optionally be installed for a web-based search interface",
- "type": "info"
- }
- ]
-}
diff --git a/frontend/public/json/metadata.json b/frontend/public/json/metadata.json
index e25f0ee70..16c71220d 100644
--- a/frontend/public/json/metadata.json
+++ b/frontend/public/json/metadata.json
@@ -28,3 +28,4 @@
{ "name": "Miscellaneous", "id": 0, "sort_order": 99.0, "description": "General scripts and tools that don't fit into other categories." }
]
}
+
diff --git a/frontend/public/json/openproject.json b/frontend/public/json/openproject.json
deleted file mode 100644
index b376669dc..000000000
--- a/frontend/public/json/openproject.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "OpenProject",
- "slug": "openproject",
- "categories": [
- 25
- ],
- "date_created": "2025-03-21",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": 80,
- "documentation": "https://www.openproject.org",
- "website": "https://www.openproject.org",
- "logo": "https://raw.githubusercontent.com/opf/openproject/dev/docker/prod/logo.png",
- "description": "OpenProject is a web-based project management software. Use OpenProject to manage your projects, tasks and goals. Collaborate via work packages and link them to your pull requests on Github. Read more about the OpenProject GitHub integration.",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/openproject.sh",
- "resources": {
- "cpu": 2,
- "ram": 4096,
- "hdd": 8,
- "os": "Debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": "admin",
- "password": "admin"
- },
- "notes": []
-}
diff --git a/frontend/public/json/openziti-tunnel.json b/frontend/public/json/openziti-tunnel.json
deleted file mode 100644
index 59fc4500d..000000000
--- a/frontend/public/json/openziti-tunnel.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "openziti-tunnel",
- "slug": "openziti-tunnel",
- "categories": [
- 4
- ],
- "date_created": "2025-03-20",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": null,
- "documentation": "https://openziti.io/docs/reference/tunnelers/docker/",
- "website": "https://www.openziti.io/",
- "logo": "https://raw.githubusercontent.com/openziti/ziti-doc/main/docusaurus/static/img/ziti-logo-dark.svg",
- "description": "OpenZiti is an open-source, zero trust networking platform that enables secure connectivity between applications, services, and devices. It provides secure, encrypted connections between clients and services, and can be used to create secure, zero trust networks.",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/openziti-tunnel.sh",
- "resources": {
- "cpu": 1,
- "ram": 512,
- "hdd": 2,
- "os": "Ubuntu",
- "version": "24.04"
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "The Openziti tunnel is installed in host mode; please see documentation for more information",
- "type": "info"
- },
- {
- "text": "Openziti tunnel prompts for identity enrollment token during installation",
- "type": "info"
- }
- ]
-}
diff --git a/frontend/public/json/phpmyadmin.json b/frontend/public/json/phpmyadmin.json
new file mode 100644
index 000000000..6639b1c1e
--- /dev/null
+++ b/frontend/public/json/phpmyadmin.json
@@ -0,0 +1,40 @@
+{
+ "name": "PhpMyAdmin",
+ "slug": "phpmyadmin",
+ "categories": [
+ 8
+ ],
+ "date_created": "2025-04-29",
+ "type": "addon",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://www.phpmyadmin.net/docs/",
+ "config_path": "Debian/Ubuntu: /var/www/html/phpMyAdmin | Alpine: /usr/share/phpmyadmin",
+ "website": "https://www.phpmyadmin.net/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/phpmyadmin-light.webp",
+ "description": "phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc) can be performed via the user interface, while you still have the ability to directly execute any SQL statement.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/phpmyadmin.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console",
+ "type": "warning"
+ }
+ ]
+}
diff --git a/frontend/public/json/polaris.json b/frontend/public/json/polaris.json
new file mode 100644
index 000000000..11edceba0
--- /dev/null
+++ b/frontend/public/json/polaris.json
@@ -0,0 +1,35 @@
+{
+ "name": "Polaris",
+ "slug": "polaris",
+ "categories": [
+ 13
+ ],
+ "date_created": "2025-03-25",
+ "type": "ct",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 80,
+ "documentation": "https://github.com/agersant/polaris/blob/master/docs/SETUP.md",
+ "website": "https://github.com/agersant/polaris",
+ "logo": "https://raw.githubusercontent.com/agersant/polaris/refs/heads/master/res/branding/logo/sticker_print.svg",
+ "config_path": "",
+ "description": "Polaris is a self-hosted music streaming server that allows you to enjoy your personal music collection from any computer or mobile device. It is a free and open-source application with no premium version. Polaris is highly performant and responsive, supporting large music libraries with over 100,000 tracks. It features an intuitive user interface and supports various audio formats, including FLAC, MP3, MP4, OGG, and WAV. There is an Android client available through the Google Play Store, F-Droid, or GitHub Releases.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/polaris.sh",
+ "resources": {
+ "cpu": 3,
+ "ram": 2048,
+ "hdd": 7,
+ "os": "Debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": []
+}
diff --git a/frontend/public/json/qbittorrent.json b/frontend/public/json/qbittorrent.json
deleted file mode 100644
index 77c036713..000000000
--- a/frontend/public/json/qbittorrent.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "qBittorrent",
- "slug": "qbittorrent",
- "categories": [
- 11
- ],
- "date_created": "2024-05-02",
- "type": "ct",
- "updateable": false,
- "privileged": false,
- "interface_port": 8090,
- "documentation": null,
- "website": "https://www.qbittorrent.org/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/qbittorrent.svg",
- "description": "qBittorrent offers a user-friendly interface that allows users to search for and download torrent files easily. It also supports magnet links, which allow users to start downloading files without the need for a torrent file.",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/qbittorrent.sh",
- "resources": {
- "cpu": 2,
- "ram": 2048,
- "hdd": 8,
- "os": "debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": "admin",
- "password": "changeme"
- },
- "notes": []
-}
\ No newline at end of file
diff --git a/frontend/public/json/rclone.json b/frontend/public/json/rclone.json
new file mode 100644
index 000000000..7ddf69743
--- /dev/null
+++ b/frontend/public/json/rclone.json
@@ -0,0 +1,44 @@
+{
+ "name": "Rclone",
+ "slug": "rclone",
+ "categories": [
+ 11
+ ],
+ "date_created": "2025-05-06",
+ "type": "ct",
+ "updateable": true,
+ "privileged": false,
+ "interface_port": 3000,
+ "documentation": "https://rclone.org/docs/",
+ "website": "https://rclone.org/",
+ "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
+ "config_path": "~/.config/rclone/rclone.conf",
+ "description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "ct/rclone.sh",
+ "resources": {
+ "cpu": 1,
+ "ram": 256,
+ "hdd": 1,
+ "os": "debian",
+ "version": "12"
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "type": "info",
+ "text": "`cat ~/rclone.creds` to view login credentials"
+ },
+ {
+ "type": "info",
+ "text": "`htpasswd -b -B /opt/login.pwd newuser newuserpassword` to add more users."
+ }
+ ]
+}
diff --git a/frontend/public/json/slskd.json b/frontend/public/json/slskd.json
deleted file mode 100644
index 89a90d2bb..000000000
--- a/frontend/public/json/slskd.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "slskd",
- "slug": "slskd",
- "categories": [
- 11
- ],
- "date_created": "2025-03-11",
- "type": "ct",
- "updateable": true,
- "privileged": false,
- "interface_port": 5030,
- "documentation": "https://github.com/slskd/slskd/tree/master/docs",
- "website": "https://github.com/slskd/slskd",
- "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png",
- "description": "A modern client-server application for the Soulseek file sharing network. ",
- "install_methods": [
- {
- "type": "default",
- "script": "ct/slskd.sh",
- "resources": {
- "cpu": 1,
- "ram": 512,
- "hdd": 4,
- "os": "Debian",
- "version": "12"
- }
- }
- ],
- "default_credentials": {
- "username": "slskd",
- "password": "slskd"
- },
- "notes": [
- {
- "text": "See /opt/slskd/config/sksld.yml to add your Soulseek credentials",
- "type": "info"
- },
- {
- "text": "This LXC includes Soularr; it needs to be configured (/opt/soularr/config.ini) before it will work",
- "type": "info"
- }
- ]
-}
diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json
index b6ba5396b..dcdddf2d8 100644
--- a/frontend/public/json/versions.json
+++ b/frontend/public/json/versions.json
@@ -1,433 +1,203 @@
[
{
- "name": "fhem/fhem-mirror",
- "version": "6.2",
- "date": "2025-03-23T20:28:38Z"
+ "name": "MediaBrowser/Emby.Releases",
+ "version": "4.8.11.0",
+ "date": "2025-03-10T06:39:11Z"
+ },
+ {
+ "name": "Part-DB/Part-DB-server",
+ "version": "v1.17.1",
+ "date": "2025-05-18T21:06:41Z"
+ },
+ {
+ "name": "sbondCo/Watcharr",
+ "version": "v2.1.0",
+ "date": "2025-05-18T18:20:43Z"
+ },
+ {
+ "name": "rogerfar/rdt-client",
+ "version": "v2.0.112",
+ "date": "2025-05-18T17:44:52Z"
+ },
+ {
+ "name": "YunoHost/yunohost",
+ "version": "debian/12.1.6.1",
+ "date": "2025-05-18T17:01:42Z"
+ },
+ {
+ "name": "clusterzx/paperless-ai",
+ "version": "v3.0.0",
+ "date": "2025-05-18T15:32:52Z"
+ },
+ {
+ "name": "kimai/kimai",
+ "version": "2.34.0",
+ "date": "2025-05-18T13:22:17Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
- "date": "2025-03-23T18:02:12Z"
+ "date": "2025-05-18T13:00:01Z"
},
{
- "name": "msgbyte/tianji",
- "version": "v1.19.2",
- "date": "2025-03-23T16:33:14Z"
- },
- {
- "name": "dgtlmoon/changedetection.io",
- "version": "0.49.7",
- "date": "2025-03-23T15:51:11Z"
- },
- {
- "name": "Lidarr/Lidarr",
- "version": "v2.10.3.4602",
- "date": "2025-03-23T11:00:37Z"
- },
- {
- "name": "YunoHost/yunohost",
- "version": "debian/12.0.12",
- "date": "2025-03-16T11:59:24Z"
- },
- {
- "name": "nicolargo/glances",
- "version": "v4.3.1",
- "date": "2025-03-23T09:02:54Z"
- },
- {
- "name": "forgejo/forgejo",
- "version": "v10.0.3",
- "date": "2025-03-23T08:58:24Z"
- },
- {
- "name": "Radarr/Radarr",
- "version": "v5.20.2.9777",
- "date": "2025-03-18T12:11:37Z"
+ "name": "hansmi/prometheus-paperless-exporter",
+ "version": "v0.0.8",
+ "date": "2025-05-18T11:37:31Z"
},
{
"name": "Prowlarr/Prowlarr",
- "version": "v1.32.2.4987",
- "date": "2025-03-16T09:41:37Z"
+ "version": "v1.35.1.5034",
+ "date": "2025-04-30T11:02:36Z"
},
{
"name": "Jackett/Jackett",
- "version": "v0.22.1680",
- "date": "2025-03-23T06:10:41Z"
- },
- {
- "name": "morpheus65535/bazarr",
- "version": "v1.5.1",
- "date": "2025-01-01T16:15:52Z"
+ "version": "v0.22.1917",
+ "date": "2025-05-18T05:59:41Z"
},
{
"name": "theonedev/onedev",
- "version": "v11.7.6",
- "date": "2025-03-23T05:08:22Z"
+ "version": "v11.9.8",
+ "date": "2025-05-17T13:13:22Z"
},
{
- "name": "esphome/esphome",
- "version": "2025.3.1",
- "date": "2025-03-23T04:45:21Z"
+ "name": "inventree/InvenTree",
+ "version": "0.17.12",
+ "date": "2025-05-17T19:16:00Z"
},
{
- "name": "usememos/memos",
- "version": "v0.24.2",
- "date": "2025-03-23T04:01:50Z"
+ "name": "crafty-controller/crafty-4",
+ "version": "v4.4.8",
+ "date": "2025-05-17T18:47:36Z"
},
{
- "name": "OliveTin/OliveTin",
- "version": "2025.3.23",
- "date": "2025-03-23T01:38:55Z"
- },
- {
- "name": "hoarder-app/hoarder",
- "version": "sdk/v0.23.0",
- "date": "2025-03-22T17:26:10Z"
- },
- {
- "name": "keycloak/keycloak",
- "version": "26.1.4",
- "date": "2025-03-13T15:41:42Z"
- },
- {
- "name": "firefly-iii/firefly-iii",
- "version": "v6.2.10",
- "date": "2025-03-22T13:02:26Z"
- },
- {
- "name": "documenso/documenso",
- "version": "v1.10.0-rc.1",
- "date": "2025-03-22T06:34:33Z"
- },
- {
- "name": "pocketbase/pocketbase",
- "version": "v0.26.2",
- "date": "2025-03-22T04:21:44Z"
- },
- {
- "name": "ollama/ollama",
- "version": "v0.6.2",
- "date": "2025-03-18T03:11:33Z"
- },
- {
- "name": "netbox-community/netbox",
- "version": "v4.2.6",
- "date": "2025-03-21T21:20:29Z"
- },
- {
- "name": "sabnzbd/sabnzbd",
- "version": "4.4.1",
- "date": "2024-12-20T13:21:31Z"
- },
- {
- "name": "home-assistant/core",
- "version": "2025.3.4",
- "date": "2025-03-21T20:22:46Z"
- },
- {
- "name": "leiweibau/Pi.Alert",
- "version": "v2025-03-21",
- "date": "2025-03-21T19:50:46Z"
- },
- {
- "name": "clusterzx/paperless-ai",
- "version": "v2.7.6",
- "date": "2025-03-21T19:24:53Z"
- },
- {
- "name": "homarr-labs/homarr",
- "version": "v1.12.0",
- "date": "2025-03-21T19:14:59Z"
- },
- {
- "name": "influxdata/influxdb",
- "version": "v1.12.0rc0",
- "date": "2025-03-21T17:24:38Z"
- },
- {
- "name": "ZoeyVid/NPMplus",
- "version": "2025-03-21-r1",
- "date": "2025-03-21T14:54:00Z"
- },
- {
- "name": "photoprism/photoprism",
- "version": "250321-57590c48b",
- "date": "2025-03-21T11:48:16Z"
- },
- {
- "name": "AdguardTeam/AdGuardHome",
- "version": "v0.107.59",
- "date": "2025-03-21T11:11:39Z"
- },
- {
- "name": "openobserve/openobserve",
- "version": "v0.14.5-rc5",
- "date": "2025-03-21T10:50:34Z"
- },
- {
- "name": "zwave-js/zwave-js-ui",
- "version": "v10.1.0",
- "date": "2025-03-21T09:17:45Z"
- },
- {
- "name": "StarFleetCPTN/GoMFT",
- "version": "v0.1.18",
- "date": "2025-03-21T04:36:04Z"
- },
- {
- "name": "jhuckaby/Cronicle",
- "version": "v0.9.77",
- "date": "2025-03-21T02:25:42Z"
- },
- {
- "name": "ipfs/kubo",
- "version": "v0.34.0",
- "date": "2025-03-20T21:51:05Z"
- },
- {
- "name": "pocket-id/pocket-id",
- "version": "v0.43.1",
- "date": "2025-03-20T20:38:06Z"
- },
- {
- "name": "stonith404/pingvin-share",
- "version": "v1.10.4",
- "date": "2025-03-20T18:56:10Z"
- },
- {
- "name": "dotnetfactory/fluid-calendar",
- "version": "v1.2.3",
- "date": "2025-03-20T17:54:55Z"
- },
- {
- "name": "ellite/Wallos",
- "version": "v2.48.0",
- "date": "2025-03-20T16:57:43Z"
- },
- {
- "name": "HabitRPG/habitica",
- "version": "v5.34.4",
- "date": "2025-03-20T16:54:45Z"
- },
- {
- "name": "neo4j/neo4j",
- "version": "4.4.42",
- "date": "2025-03-20T14:44:17Z"
- },
- {
- "name": "redis/redis",
- "version": "8.0-rc1",
- "date": "2025-03-11T18:16:27Z"
- },
- {
- "name": "Stirling-Tools/Stirling-PDF",
- "version": "v0.44.3",
- "date": "2025-03-20T09:43:56Z"
- },
- {
- "name": "jenkinsci/jenkins",
- "version": "jenkins-2.502",
- "date": "2025-03-18T15:02:59Z"
- },
- {
- "name": "wazuh/wazuh",
- "version": "coverity-w11-4.12.0",
- "date": "2025-03-14T20:04:02Z"
- },
- {
- "name": "jupyter/notebook",
- "version": "@jupyter-notebook/ui-components@7.4.0-beta.2",
- "date": "2025-03-20T07:41:24Z"
- },
- {
- "name": "evcc-io/evcc",
- "version": "0.201.1",
- "date": "2025-03-20T06:59:18Z"
- },
- {
- "name": "rabbitmq/rabbitmq-server",
- "version": "v4.0.7",
- "date": "2025-02-26T19:07:11Z"
- },
- {
- "name": "NodeBB/NodeBB",
- "version": "v4.2.0",
- "date": "2025-03-19T18:34:01Z"
- },
- {
- "name": "seanmorley15/AdventureLog",
- "version": "v0.9.0",
- "date": "2025-03-19T13:30:02Z"
- },
- {
- "name": "hakimel/reveal.js",
- "version": "5.2.0",
- "date": "2025-03-19T11:03:56Z"
- },
- {
- "name": "Luligu/matterbridge",
- "version": "2.2.5",
- "date": "2025-03-19T09:11:26Z"
- },
- {
- "name": "Checkmk/checkmk",
- "version": "v2.3.0p29",
- "date": "2025-03-19T07:42:50Z"
- },
- {
- "name": "Donkie/Spoolman",
- "version": "v0.22.1",
- "date": "2025-03-18T21:01:22Z"
- },
- {
- "name": "zitadel/zitadel",
- "version": "v2.66.14",
- "date": "2025-03-18T16:05:48Z"
- },
- {
- "name": "prometheus/prometheus",
- "version": "v2.53.4",
- "date": "2025-03-18T15:50:39Z"
- },
- {
- "name": "syncthing/syncthing",
- "version": "v1.29.3",
- "date": "2025-03-12T11:56:30Z"
- },
- {
- "name": "element-hq/synapse",
- "version": "v1.126.0",
- "date": "2025-03-11T16:29:42Z"
- },
- {
- "name": "OctoPrint/OctoPrint",
- "version": "1.10.3",
- "date": "2024-11-05T09:20:50Z"
- },
- {
- "name": "n8n-io/n8n",
- "version": "n8n@1.84.0",
- "date": "2025-03-17T13:58:36Z"
- },
- {
- "name": "zabbix/zabbix",
- "version": "7.2.5rc1",
- "date": "2025-03-18T14:10:32Z"
- },
- {
- "name": "crowdsecurity/crowdsec",
- "version": "v1.6.6",
- "date": "2025-03-18T13:05:01Z"
- },
- {
- "name": "apache/couchdb",
- "version": "3.4.3.post1",
- "date": "2025-03-18T09:44:59Z"
- },
- {
- "name": "nzbgetcom/nzbget",
- "version": "v24.8",
- "date": "2025-03-18T07:33:51Z"
- },
- {
- "name": "authelia/authelia",
- "version": "v4.39.1",
- "date": "2025-03-18T03:57:41Z"
- },
- {
- "name": "advplyr/audiobookshelf",
- "version": "v2.20.0",
- "date": "2025-03-17T22:44:56Z"
+ "name": "Radarr/Radarr",
+ "version": "v5.23.3.9987",
+ "date": "2025-05-17T12:55:29Z"
},
{
"name": "bastienwirtz/homer",
- "version": "v25.03.3",
- "date": "2025-03-17T20:55:37Z"
- },
- {
- "name": "semaphoreui/semaphore",
- "version": "v2.13.0",
- "date": "2025-03-17T19:39:10Z"
- },
- {
- "name": "Kareadita/Kavita",
- "version": "v0.8.5.11",
- "date": "2025-03-17T19:25:25Z"
- },
- {
- "name": "goauthentik/authentik",
- "version": "version/2025.2.2",
- "date": "2025-03-17T19:16:49Z"
- },
- {
- "name": "Sonarr/Sonarr",
- "version": "v4.0.14.2939",
- "date": "2025-03-17T19:12:37Z"
- },
- {
- "name": "TriliumNext/Notes",
- "version": "v0.92.4",
- "date": "2025-03-17T16:00:19Z"
- },
- {
- "name": "Graylog2/graylog2-server",
- "version": "6.2.0-beta.1",
- "date": "2025-03-17T13:00:39Z"
- },
- {
- "name": "home-assistant/operating-system",
- "version": "15.0",
- "date": "2025-03-17T10:26:18Z"
- },
- {
- "name": "webmin/webmin",
- "version": "2.303",
- "date": "2025-03-17T04:54:50Z"
- },
- {
- "name": "fallenbagel/jellyseerr",
- "version": "v2.5.1",
- "date": "2025-03-17T03:18:32Z"
- },
- {
- "name": "glanceapp/glance",
- "version": "v0.7.7",
- "date": "2025-03-17T02:24:06Z"
- },
- {
- "name": "gethomepage/homepage",
- "version": "v1.0.4",
- "date": "2025-03-16T22:19:31Z"
- },
- {
- "name": "autobrr/autobrr",
- "version": "v1.60.0",
- "date": "2025-03-16T18:39:49Z"
+ "version": "v25.05.2",
+ "date": "2025-05-17T12:53:29Z"
},
{
"name": "BookStackApp/BookStack",
- "version": "v25.02.1",
- "date": "2025-03-16T12:51:00Z"
+ "version": "v25.02.5",
+ "date": "2025-05-17T11:24:01Z"
},
{
- "name": "Kozea/Radicale",
- "version": "v3.5.0",
- "date": "2025-03-16T06:05:55Z"
+ "name": "Paymenter/Paymenter",
+ "version": "v1.1.1",
+ "date": "2025-05-17T10:10:36Z"
+ },
+ {
+ "name": "evcc-io/evcc",
+ "version": "0.203.6",
+ "date": "2025-05-17T07:30:49Z"
+ },
+ {
+ "name": "prometheus/prometheus",
+ "version": "v0.304.0",
+ "date": "2025-05-17T07:29:09Z"
+ },
+ {
+ "name": "cross-seed/cross-seed",
+ "version": "v6.12.5",
+ "date": "2025-05-17T02:52:33Z"
+ },
+ {
+ "name": "syncthing/syncthing",
+ "version": "v1.29.6",
+ "date": "2025-05-06T07:57:02Z"
+ },
+ {
+ "name": "advplyr/audiobookshelf",
+ "version": "v2.23.0",
+ "date": "2025-05-16T22:13:53Z"
+ },
+ {
+ "name": "home-assistant/core",
+ "version": "2025.5.2",
+ "date": "2025-05-16T21:09:45Z"
+ },
+ {
+ "name": "homarr-labs/homarr",
+ "version": "v1.20.0",
+ "date": "2025-05-16T19:18:10Z"
+ },
+ {
+ "name": "NodeBB/NodeBB",
+ "version": "v4.4.1",
+ "date": "2025-05-16T16:37:51Z"
+ },
+ {
+ "name": "influxdata/influxdb",
+ "version": "v3.0.3",
+ "date": "2025-05-16T15:41:16Z"
+ },
+ {
+ "name": "wavelog/wavelog",
+ "version": "2.0.4",
+ "date": "2025-05-16T15:09:53Z"
+ },
+ {
+ "name": "keycloak/keycloak",
+ "version": "26.0.12",
+ "date": "2025-05-15T14:06:52Z"
+ },
+ {
+ "name": "emqx/emqx",
+ "version": "e5.10.0-alpha.1",
+ "date": "2025-05-16T13:30:53Z"
+ },
+ {
+ "name": "wazuh/wazuh",
+ "version": "coverity-w20-4.13.0",
+ "date": "2025-05-14T12:06:20Z"
+ },
+ {
+ "name": "gotson/komga",
+ "version": "1.21.3",
+ "date": "2025-05-16T04:31:05Z"
+ },
+ {
+ "name": "mattermost/mattermost",
+ "version": "server/public/v0.1.13",
+ "date": "2025-05-16T03:44:25Z"
+ },
+ {
+ "name": "ipfs/kubo",
+ "version": "v0.34.1",
+ "date": "2025-03-25T18:11:12Z"
+ },
+ {
+ "name": "coder/code-server",
+ "version": "v4.100.2",
+ "date": "2025-05-15T23:02:46Z"
+ },
+ {
+ "name": "goauthentik/authentik",
+ "version": "version/2025.4.1",
+ "date": "2025-05-15T17:48:29Z"
+ },
+ {
+ "name": "cloudflare/cloudflared",
+ "version": "2025.5.0",
+ "date": "2025-05-15T17:09:50Z"
+ },
+ {
+ "name": "apache/cassandra",
+ "version": "4.1.9-tentative",
+ "date": "2025-05-15T15:52:53Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
- "version": "v1.17.0-victorialogs",
- "date": "2025-03-16T00:22:43Z"
+ "version": "pmm-6401-v1.117.1",
+ "date": "2025-05-15T15:45:22Z"
},
{
- "name": "pelican-dev/wings",
- "version": "v1.0.0-beta10",
- "date": "2025-03-15T20:24:34Z"
- },
- {
- "name": "pelican-dev/panel",
- "version": "v1.0.0-beta18",
- "date": "2025-03-15T20:24:04Z"
+ "name": "ellite/Wallos",
+ "version": "v3.1.1",
+ "date": "2025-05-15T15:17:57Z"
},
{
"name": "bunkerity/bunkerweb",
@@ -435,99 +205,34 @@
"date": "2025-03-15T17:29:17Z"
},
{
- "name": "duplicati/duplicati",
- "version": "v2.1.0.111-2.1.0.111_canary_2025-03-15",
- "date": "2025-03-15T11:06:44Z"
+ "name": "Checkmk/checkmk",
+ "version": "v2.4.0p1",
+ "date": "2025-05-15T12:41:12Z"
},
{
- "name": "henrygd/beszel",
- "version": "v0.10.2",
- "date": "2025-03-15T07:14:54Z"
+ "name": "zwave-js/zwave-js-ui",
+ "version": "v10.5.1",
+ "date": "2025-05-15T09:59:28Z"
},
{
- "name": "navidrome/navidrome",
- "version": "v0.55.1",
- "date": "2025-03-15T05:36:06Z"
- },
- {
- "name": "coder/code-server",
- "version": "v4.98.2",
- "date": "2025-03-15T02:11:28Z"
- },
- {
- "name": "Threadfin/Threadfin",
- "version": "1.2.31",
- "date": "2025-03-14T22:04:10Z"
- },
- {
- "name": "paperless-ngx/paperless-ngx",
- "version": "v2.15.0-beta",
- "date": "2025-03-14T18:05:28Z"
+ "name": "morpheus65535/bazarr",
+ "version": "v1.5.2",
+ "date": "2025-05-11T16:40:55Z"
},
{
"name": "FlowiseAI/Flowise",
- "version": "flowise@2.2.7-patch.1",
- "date": "2025-03-14T14:53:53Z"
+ "version": "flowise@3.0.0",
+ "date": "2025-05-15T01:49:47Z"
},
{
- "name": "docker/compose",
- "version": "v2.34.0",
- "date": "2025-03-14T09:11:17Z"
+ "name": "ollama/ollama",
+ "version": "v0.7.0",
+ "date": "2025-05-14T23:42:30Z"
},
{
- "name": "FreshRSS/FreshRSS",
- "version": "1.26.1",
- "date": "2025-03-13T21:34:25Z"
- },
- {
- "name": "kimai/kimai",
- "version": "2.31.0",
- "date": "2025-03-13T17:13:47Z"
- },
- {
- "name": "moghtech/komodo",
- "version": "v1.16.12",
- "date": "2024-12-02T08:46:29Z"
- },
- {
- "name": "diced/zipline",
- "version": "v4.0.1",
- "date": "2025-03-12T22:41:17Z"
- },
- {
- "name": "minio/minio",
- "version": "RELEASE.2025-03-12T18-04-18Z",
- "date": "2025-03-12T18:45:21Z"
- },
- {
- "name": "cockpit-project/cockpit",
- "version": "335",
- "date": "2025-03-12T13:03:27Z"
- },
- {
- "name": "transmission/transmission",
- "version": "4.0.1-beta.1",
- "date": "2024-12-13T00:16:24Z"
- },
- {
- "name": "emqx/emqx",
- "version": "e5.9.0-beta.1",
- "date": "2025-03-12T09:52:26Z"
- },
- {
- "name": "gotson/komga",
- "version": "1.21.2",
- "date": "2025-03-12T04:19:30Z"
- },
- {
- "name": "benjaminjonard/koillection",
- "version": "1.6.12",
- "date": "2025-03-11T15:04:43Z"
- },
- {
- "name": "excalidraw/excalidraw",
- "version": "v0.18.0",
- "date": "2025-03-11T12:47:22Z"
+ "name": "glanceapp/glance",
+ "version": "v0.8.2",
+ "date": "2025-05-14T21:34:41Z"
},
{
"name": "Ombi-app/Ombi",
@@ -535,619 +240,29 @@
"date": "2025-01-05T21:14:23Z"
},
{
- "name": "mylar3/mylar3",
- "version": "v0.8.2",
- "date": "2025-03-11T05:20:22Z"
+ "name": "Luligu/matterbridge",
+ "version": "3.0.2",
+ "date": "2025-05-14T20:38:06Z"
},
{
- "name": "stackblitz-labs/bolt.diy",
- "version": "v0.0.7-hf1",
- "date": "2025-03-10T20:49:39Z"
- },
- {
- "name": "icereed/paperless-gpt",
- "version": "v0.13.0",
- "date": "2025-03-10T10:03:12Z"
- },
- {
- "name": "AlexxIT/go2rtc",
- "version": "v1.9.9",
- "date": "2025-03-10T03:22:11Z"
- },
- {
- "name": "caddyserver/caddy",
- "version": "v2.9.1",
- "date": "2025-01-08T15:22:53Z"
- },
- {
- "name": "awawa-dev/HyperHDR",
- "version": "v21.0.0.0",
- "date": "2025-03-09T12:25:44Z"
- },
- {
- "name": "Readarr/Readarr",
- "version": "v2.0.0.4645",
- "date": "2017-03-07T18:56:06Z"
- },
- {
- "name": "Brandawg93/PeaNUT",
- "version": "v5.6.0",
- "date": "2025-03-08T19:02:31Z"
- },
- {
- "name": "YuukanOO/seelf",
- "version": "v2.4.2",
- "date": "2025-03-08T10:49:04Z"
- },
- {
- "name": "umami-software/umami",
- "version": "v2.17.0",
- "date": "2025-03-08T06:08:04Z"
- },
- {
- "name": "rogerfar/rdt-client",
- "version": "v2.0.102",
- "date": "2025-03-07T20:48:46Z"
- },
- {
- "name": "prometheus/alertmanager",
- "version": "v0.28.1",
- "date": "2025-03-07T15:41:35Z"
- },
- {
- "name": "hargata/lubelog",
- "version": "v1.4.5",
- "date": "2025-03-06T19:43:48Z"
- },
- {
- "name": "eclipse-mosquitto/mosquitto",
- "version": "v2.0.21",
- "date": "2025-03-06T16:24:56Z"
- },
- {
- "name": "Dolibarr/dolibarr",
- "version": "21.0.0",
- "date": "2025-03-06T16:20:45Z"
- },
- {
- "name": "open-webui/open-webui",
- "version": "v0.5.20",
- "date": "2025-03-06T03:44:57Z"
- },
- {
- "name": "matze/wastebin",
- "version": "3.0.0",
- "date": "2025-03-05T21:41:29Z"
- },
- {
- "name": "immich-app/immich",
- "version": "v1.129.0",
- "date": "2025-03-05T20:19:18Z"
- },
- {
- "name": "snipe/snipe-it",
- "version": "v8.0.4",
- "date": "2025-03-05T17:12:03Z"
- },
- {
- "name": "toniebox-reverse-engineering/teddycloud",
- "version": "tc_v0.6.4",
- "date": "2025-03-05T15:43:40Z"
- },
- {
- "name": "go-gitea/gitea",
- "version": "v1.23.5",
- "date": "2025-03-05T00:10:15Z"
- },
- {
- "name": "apache/tomcat",
- "version": "10.1.39",
- "date": "2025-03-04T19:05:18Z"
- },
- {
- "name": "tailscale/tailscale",
- "version": "v1.80.3",
- "date": "2025-03-04T18:47:25Z"
- },
- {
- "name": "pi-hole/pi-hole",
- "version": "v6.0.5",
- "date": "2025-03-04T17:28:41Z"
- },
- {
- "name": "sysadminsmedia/homebox",
- "version": "v0.18.0",
- "date": "2025-03-04T15:35:27Z"
- },
- {
- "name": "actualbudget/actual",
- "version": "v25.3.1",
- "date": "2025-03-03T02:05:36Z"
- },
- {
- "name": "Koenkk/zigbee2mqtt",
- "version": "2.1.3",
- "date": "2025-03-02T07:47:30Z"
- },
- {
- "name": "heiher/hev-socks5-server",
- "version": "2.8.0",
- "date": "2025-03-02T04:30:50Z"
- },
- {
- "name": "inspircd/inspircd",
- "version": "v4.6.0",
- "date": "2025-03-01T10:29:31Z"
- },
- {
- "name": "tobychui/zoraxy",
- "version": "v3.1.9",
- "date": "2025-03-01T02:24:33Z"
- },
- {
- "name": "grocy/grocy",
- "version": "v4.4.2",
- "date": "2025-02-28T16:26:05Z"
- },
- {
- "name": "jordan-dalby/ByteStash",
- "version": "v1.5.7",
- "date": "2025-02-27T20:04:08Z"
- },
- {
- "name": "docmost/docmost",
- "version": "v0.8.4",
- "date": "2025-02-27T16:18:45Z"
- },
- {
- "name": "cloudflare/cloudflared",
- "version": "2025.2.1",
- "date": "2025-02-27T11:36:11Z"
- },
- {
- "name": "cross-seed/cross-seed",
- "version": "v6.11.2",
- "date": "2025-02-26T14:54:49Z"
- },
- {
- "name": "Part-DB/Part-DB-server",
- "version": "v1.16.1",
- "date": "2025-02-26T11:29:15Z"
- },
- {
- "name": "silverbulletmd/silverbullet",
- "version": "0.10.4",
- "date": "2025-02-25T18:13:42Z"
- },
- {
- "name": "juanfont/headscale",
- "version": "v0.25.1",
- "date": "2025-02-25T17:30:48Z"
- },
- {
- "name": "benzino77/tasmocompiler",
- "version": "v12.5.0",
- "date": "2025-02-25T14:55:50Z"
- },
- {
- "name": "traefik/traefik",
- "version": "v3.3.4",
- "date": "2025-02-25T10:18:58Z"
- },
- {
- "name": "schlagmichdoch/PairDrop",
- "version": "v1.11.2",
- "date": "2025-02-24T19:47:06Z"
- },
- {
- "name": "drakkan/sftpgo",
- "version": "v2.6.6",
- "date": "2025-02-24T19:14:46Z"
- },
- {
- "name": "ioBroker/ioBroker",
- "version": "2025-02-23",
- "date": "2025-02-24T16:05:06Z"
- },
- {
- "name": "ventoy/Ventoy",
- "version": "v1.1.05",
- "date": "2025-02-24T11:53:12Z"
+ "name": "esphome/esphome",
+ "version": "2025.4.2",
+ "date": "2025-05-11T22:18:43Z"
},
{
"name": "Athou/commafeed",
- "version": "5.6.1",
- "date": "2025-02-23T20:39:48Z"
+ "version": "5.9.0",
+ "date": "2025-05-14T15:29:48Z"
},
{
- "name": "openhab/openhab-core",
- "version": "5.0.0.M1",
- "date": "2025-02-23T14:55:36Z"
- },
- {
- "name": "outline/outline",
- "version": "v0.82.1-15",
- "date": "2025-02-23T14:38:09Z"
- },
- {
- "name": "TechnitiumSoftware/DnsServer",
- "version": "v13.4.3",
- "date": "2025-02-23T11:08:26Z"
- },
- {
- "name": "azukaar/Cosmos-Server",
- "version": "v0.18.3",
- "date": "2025-02-21T20:51:12Z"
- },
- {
- "name": "wavelog/wavelog",
- "version": "2.0.1",
- "date": "2025-02-21T17:55:59Z"
- },
- {
- "name": "grafana/grafana",
- "version": "v11.5.2",
- "date": "2025-02-19T00:12:27Z"
- },
- {
- "name": "gristlabs/grist-core",
- "version": "v1.4.2",
- "date": "2025-02-18T21:43:36Z"
- },
- {
- "name": "prometheus-pve/prometheus-pve-exporter",
- "version": "v3.5.2",
- "date": "2025-02-18T16:43:41Z"
- },
- {
- "name": "typesense/typesense",
- "version": "v28.0",
- "date": "2025-02-18T15:49:57Z"
- },
- {
- "name": "qbittorrent/qBittorrent",
- "version": "release-5.0.4",
- "date": "2025-02-18T14:14:11Z"
- },
- {
- "name": "postgres/postgres",
- "version": "REL_13_20",
- "date": "2025-02-17T21:17:13Z"
- },
- {
- "name": "jellyfin/jellyfin",
- "version": "v10.10.6",
- "date": "2025-02-16T21:55:45Z"
- },
- {
- "name": "sbondCo/Watcharr",
- "version": "v2.0.2",
- "date": "2025-02-16T21:34:29Z"
- },
- {
- "name": "recyclarr/recyclarr",
- "version": "v7.4.1",
- "date": "2025-02-15T20:54:00Z"
- },
- {
- "name": "node-red/node-red",
- "version": "4.0.9",
- "date": "2025-02-14T17:10:20Z"
- },
- {
- "name": "mayswind/AriaNg",
- "version": "1.3.10",
- "date": "2025-02-14T16:23:14Z"
- },
- {
- "name": "MariaDB/server",
- "version": "mariadb-11.7.2",
- "date": "2025-02-13T04:13:46Z"
- },
- {
- "name": "glpi-project/glpi",
- "version": "10.0.18",
- "date": "2025-02-12T11:07:02Z"
- },
- {
- "name": "WordPress/WordPress",
- "version": "6.7.2",
- "date": "2025-02-11T16:13:18Z"
- },
- {
- "name": "homebridge/homebridge",
- "version": "v1.9.0",
- "date": "2025-02-11T13:26:42Z"
- },
- {
- "name": "TasmoAdmin/TasmoAdmin",
- "version": "v4.2.3",
- "date": "2025-02-09T23:07:48Z"
- },
- {
- "name": "dani-garcia/vaultwarden",
- "version": "1.33.2",
- "date": "2025-02-09T17:54:59Z"
- },
- {
- "name": "blakeblackshear/frigate",
- "version": "v0.15.0",
- "date": "2025-02-08T18:45:30Z"
- },
- {
- "name": "bluenviron/mediamtx",
- "version": "v1.11.3",
- "date": "2025-02-07T19:29:19Z"
- },
- {
- "name": "apache/cassandra",
- "version": "cassandra-4.0.17",
- "date": "2025-02-07T10:38:54Z"
- },
- {
- "name": "apache/tika",
- "version": "2.9.3",
- "date": "2025-02-07T00:15:40Z"
- },
- {
- "name": "actualbudget/actual-server",
- "version": "v25.2.1",
- "date": "2025-02-06T20:41:28Z"
- },
- {
- "name": "NginxProxyManager/nginx-proxy-manager",
- "version": "v2.12.3",
- "date": "2025-02-06T11:07:07Z"
+ "name": "juanfont/headscale",
+ "version": "v0.26.0",
+ "date": "2025-05-14T15:12:14Z"
},
{
"name": "mongodb/mongo",
- "version": "r8.0.5-rc1",
- "date": "2025-02-04T20:35:23Z"
- },
- {
- "name": "thomiceli/opengist",
- "version": "v1.9.1",
- "date": "2025-02-04T20:24:29Z"
- },
- {
- "name": "Forceu/Gokapi",
- "version": "v1.9.6",
- "date": "2024-12-18T14:35:37Z"
- },
- {
- "name": "requarks/wiki",
- "version": "v2.5.306",
- "date": "2025-02-02T21:19:29Z"
- },
- {
- "name": "PrivateBin/PrivateBin",
- "version": "1.7.6",
- "date": "2025-02-01T09:50:52Z"
- },
- {
- "name": "hivemq/hivemq-community-edition",
- "version": "2025.1",
- "date": "2025-01-29T10:04:27Z"
- },
- {
- "name": "rustdesk/rustdesk-server",
- "version": "1.1.14",
- "date": "2025-01-25T12:48:28Z"
- },
- {
- "name": "hansmi/prometheus-paperless-exporter",
- "version": "v0.0.6",
- "date": "2025-01-22T22:19:33Z"
- },
- {
- "name": "crafty-controller/crafty-4",
- "version": "v4.4.7",
- "date": "2025-01-20T15:45:06Z"
- },
- {
- "name": "owncast/owncast",
- "version": "v0.2.1",
- "date": "2025-01-19T22:40:40Z"
- },
- {
- "name": "donaldzou/WGDashboard",
- "version": "v4.1.4",
- "date": "2025-01-19T13:14:19Z"
- },
- {
- "name": "0xERR0R/blocky",
- "version": "v0.25",
- "date": "2025-01-17T20:49:31Z"
- },
- {
- "name": "petio-team/petio",
- "version": "v0.5.7",
- "date": "2025-01-17T15:57:17Z"
- },
- {
- "name": "readeck/readeck",
- "version": "0.17.1",
- "date": "2025-01-15T19:13:33Z"
- },
- {
- "name": "linkwarden/linkwarden",
- "version": "v2.9.3",
- "date": "2025-01-13T16:19:53Z"
- },
- {
- "name": "Tautulli/Tautulli",
- "version": "v2.15.1",
- "date": "2025-01-11T23:38:33Z"
- },
- {
- "name": "traccar/traccar",
- "version": "v6.6",
- "date": "2025-01-11T17:26:49Z"
- },
- {
- "name": "ErsatzTV/ErsatzTV",
- "version": "v25.1.0",
- "date": "2025-01-10T18:14:54Z"
- },
- {
- "name": "MagicMirrorOrg/MagicMirror",
- "version": "v2.30.0",
- "date": "2025-01-01T14:30:19Z"
- },
- {
- "name": "go-vikunja/vikunja",
- "version": "v0.24.6",
- "date": "2024-12-22T20:24:35Z"
- },
- {
- "name": "louislam/uptime-kuma",
- "version": "2.0.0-beta.1",
- "date": "2024-12-20T08:56:43Z"
- },
- {
- "name": "IceWhaleTech/CasaOS",
- "version": "v0.4.15",
- "date": "2024-12-19T03:19:49Z"
- },
- {
- "name": "mysql/mysql-server",
- "version": "mysql-cluster-7.6.33",
- "date": "2024-12-16T11:55:50Z"
- },
- {
- "name": "ArchiveBox/ArchiveBox",
- "version": "v0.7.3",
- "date": "2024-12-15T10:18:06Z"
- },
- {
- "name": "pymedusa/Medusa",
- "version": "v1.0.22",
- "date": "2024-12-13T12:22:19Z"
- },
- {
- "name": "MDeLuise/plant-it",
- "version": "0.10.0",
- "date": "2024-12-10T09:35:26Z"
- },
- {
- "name": "phpipam/phpipam",
- "version": "v1.7.3",
- "date": "2024-11-27T21:26:11Z"
- },
- {
- "name": "Bubka/2FAuth",
- "version": "v5.4.3",
- "date": "2024-11-27T14:02:18Z"
- },
- {
- "name": "lldap/lldap",
- "version": "v0.6.1",
- "date": "2024-11-22T21:48:41Z"
- },
- {
- "name": "gotify/server",
- "version": "v2.6.1",
- "date": "2024-11-16T08:44:53Z"
- },
- {
- "name": "janeczku/calibre-web",
- "version": "0.6.24",
- "date": "2024-11-16T06:47:56Z"
- },
- {
- "name": "sabre-io/Baikal",
- "version": "0.10.1",
- "date": "2024-11-10T10:25:45Z"
- },
- {
- "name": "nextcloud/nextcloudpi",
- "version": "v1.55.3",
- "date": "2024-11-08T22:21:10Z"
- },
- {
- "name": "caddyserver/xcaddy",
- "version": "v0.4.4",
- "date": "2024-11-05T23:06:11Z"
- },
- {
- "name": "linuxserver/Heimdall",
- "version": "v2.6.3",
- "date": "2024-11-05T11:00:43Z"
- },
- {
- "name": "zerotier/ZeroTierOne",
- "version": "1.14.2",
- "date": "2024-10-29T16:17:48Z"
- },
- {
- "name": "CorentinTh/it-tools",
- "version": "v2024.10.22-7ca5933",
- "date": "2024-10-22T09:58:03Z"
- },
- {
- "name": "aceberg/WatchYourLAN",
- "version": "2.0.4",
- "date": "2024-10-20T18:57:37Z"
- },
- {
- "name": "NLnetLabs/unbound",
- "version": "release-1.22.0",
- "date": "2024-10-17T08:43:37Z"
- },
- {
- "name": "Notifiarr/notifiarr",
- "version": "v0.8.3",
- "date": "2024-10-04T23:49:07Z"
- },
- {
- "name": "Kometa-Team/Kometa",
- "version": "v2.1.0",
- "date": "2024-09-30T17:59:43Z"
- },
- {
- "name": "FunkeyFlo/ps5-mqtt",
- "version": "v1.4.0",
- "date": "2024-08-06T19:57:33Z"
- },
- {
- "name": "projectsend/projectsend",
- "version": "r1720",
- "date": "2024-08-03T04:07:20Z"
- },
- {
- "name": "Pf2eToolsOrg/Pf2eTools",
- "version": "v0.8.13",
- "date": "2024-07-29T12:54:27Z"
- },
- {
- "name": "Paymenter/Paymenter",
- "version": "v0.9.5",
- "date": "2024-07-20T08:46:42Z"
- },
- {
- "name": "hywax/mafl",
- "version": "v0.15.4",
- "date": "2024-07-13T11:03:43Z"
- },
- {
- "name": "FlareSolverr/FlareSolverr",
- "version": "v3.3.21",
- "date": "2024-06-26T01:14:46Z"
- },
- {
- "name": "Suwayomi/Suwayomi-Server",
- "version": "v1.1.1",
- "date": "2024-06-15T17:23:48Z"
- },
- {
- "name": "Forceu/barcodebuddy",
- "version": "v1.8.1.8",
- "date": "2024-06-02T20:01:53Z"
- },
- {
- "name": "Lissy93/dashy",
- "version": "3.1.1",
- "date": "2024-05-30T17:20:53Z"
+ "version": "r6.0.24-alpha0",
+ "date": "2025-05-14T14:52:41Z"
},
{
"name": "motioneye-project/motioneye",
@@ -1155,48 +270,203 @@
"date": "2020-06-07T07:27:04Z"
},
{
- "name": "gnmyt/MySpeed",
- "version": "v1.0.9",
- "date": "2024-05-21T22:15:33Z"
+ "name": "firefly-iii/firefly-iii",
+ "version": "v6.2.12",
+ "date": "2025-04-20T19:22:17Z"
},
{
- "name": "binwiederhier/ntfy",
- "version": "v2.11.0",
- "date": "2024-05-13T20:19:54Z"
+ "name": "jenkinsci/jenkins",
+ "version": "jenkins-2.510",
+ "date": "2025-05-13T18:33:42Z"
},
{
- "name": "CrazyWolf13/web-check",
+ "name": "nzbgetcom/nzbget",
+ "version": "v25.0",
+ "date": "2025-05-12T09:12:04Z"
+ },
+ {
+ "name": "blakeblackshear/frigate",
+ "version": "v0.14.1",
+ "date": "2024-08-29T22:32:51Z"
+ },
+ {
+ "name": "TandoorRecipes/recipes",
+ "version": "2.0.0-alpha-4",
+ "date": "2025-05-14T05:01:45Z"
+ },
+ {
+ "name": "netbox-community/netbox",
+ "version": "v4.3.1",
+ "date": "2025-05-13T19:45:00Z"
+ },
+ {
+ "name": "pocketbase/pocketbase",
+ "version": "v0.28.1",
+ "date": "2025-05-13T18:45:47Z"
+ },
+ {
+ "name": "OctoPrint/OctoPrint",
+ "version": "1.11.1",
+ "date": "2025-05-13T13:32:07Z"
+ },
+ {
+ "name": "redis/redis",
+ "version": "8.0.1",
+ "date": "2025-05-13T13:31:53Z"
+ },
+ {
+ "name": "element-hq/synapse",
+ "version": "v1.129.0",
+ "date": "2025-05-06T12:28:54Z"
+ },
+ {
+ "name": "zabbix/zabbix",
+ "version": "7.2.7rc1",
+ "date": "2025-05-13T11:55:32Z"
+ },
+ {
+ "name": "Graylog2/graylog2-server",
+ "version": "6.3.0-alpha.4",
+ "date": "2025-05-13T11:18:29Z"
+ },
+ {
+ "name": "zitadel/zitadel",
+ "version": "v2.65.9",
+ "date": "2025-05-13T05:14:39Z"
+ },
+ {
+ "name": "go-gitea/gitea",
+ "version": "v1.23.8",
+ "date": "2025-05-12T22:40:50Z"
+ },
+ {
+ "name": "leiweibau/Pi.Alert",
+ "version": "v2025-05-11",
+ "date": "2025-05-12T19:14:57Z"
+ },
+ {
+ "name": "duplicati/duplicati",
+ "version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
+ "date": "2025-05-12T18:50:44Z"
+ },
+ {
+ "name": "neo4j/neo4j",
+ "version": "4.4.43",
+ "date": "2025-05-12T15:33:17Z"
+ },
+ {
+ "name": "usememos/memos",
+ "version": "v0.24.3",
+ "date": "2025-05-12T15:23:21Z"
+ },
+ {
+ "name": "n8n-io/n8n",
+ "version": "n8n@1.91.3",
+ "date": "2025-05-08T12:25:10Z"
+ },
+ {
+ "name": "apache/tika",
+ "version": "3.2.0-rc1",
+ "date": "2025-05-12T13:06:47Z"
+ },
+ {
+ "name": "dgtlmoon/changedetection.io",
+ "version": "0.49.17",
+ "date": "2025-05-12T08:48:30Z"
+ },
+ {
+ "name": "stackblitz-labs/bolt.diy",
"version": "1.0.0",
- "date": "2024-05-05T02:01:51Z"
+ "date": "2025-05-12T07:39:23Z"
},
{
- "name": "monicahq/monica",
- "version": "v4.1.2",
- "date": "2024-05-04T08:06:50Z"
+ "name": "umami-software/umami",
+ "version": "v2.18.1",
+ "date": "2025-05-12T07:16:12Z"
},
{
- "name": "thelounge/thelounge-deb",
- "version": "v4.4.3",
- "date": "2024-04-06T12:24:35Z"
+ "name": "outline/outline",
+ "version": "v0.84.0",
+ "date": "2025-05-11T15:50:48Z"
},
{
- "name": "louislam/dockge",
- "version": "1.4.2",
- "date": "2024-01-21T17:02:52Z"
+ "name": "Kozea/Radicale",
+ "version": "v3.5.3",
+ "date": "2025-05-11T15:17:13Z"
},
{
- "name": "hyperion-project/hyperion.ng",
- "version": "2.0.16",
- "date": "2024-01-18T16:11:07Z"
+ "name": "authelia/authelia",
+ "version": "v4.39.3",
+ "date": "2025-05-11T11:12:15Z"
},
{
- "name": "wger-project/wger",
- "version": "2.2",
- "date": "2023-12-06T12:08:09Z"
+ "name": "owncast/owncast",
+ "version": "v0.2.3",
+ "date": "2025-05-10T21:14:45Z"
},
{
- "name": "sct/overseerr",
- "version": "preview-test-node-18",
- "date": "2023-11-06T10:21:37Z"
+ "name": "open-webui/open-webui",
+ "version": "v0.6.9",
+ "date": "2025-05-10T19:05:02Z"
+ },
+ {
+ "name": "Stirling-Tools/Stirling-PDF",
+ "version": "v0.46.1",
+ "date": "2025-05-10T15:39:10Z"
+ },
+ {
+ "name": "pelican-dev/wings",
+ "version": "v1.0.0-beta13",
+ "date": "2025-05-09T23:14:41Z"
+ },
+ {
+ "name": "pelican-dev/panel",
+ "version": "v1.0.0-beta21",
+ "date": "2025-05-09T23:14:23Z"
+ },
+ {
+ "name": "crowdsecurity/crowdsec",
+ "version": "v1.6.8",
+ "date": "2025-03-25T13:33:10Z"
+ },
+ {
+ "name": "pocket-id/pocket-id",
+ "version": "v0.53.0",
+ "date": "2025-05-08T19:56:55Z"
+ },
+ {
+ "name": "apache/tomcat",
+ "version": "10.1.41",
+ "date": "2025-05-08T12:45:44Z"
+ },
+ {
+ "name": "semaphoreui/semaphore",
+ "version": "v2.14.10",
+ "date": "2025-05-07T20:23:29Z"
+ },
+ {
+ "name": "readeck/readeck",
+ "version": "0.18.2",
+ "date": "2025-05-07T19:22:22Z"
+ },
+ {
+ "name": "HabitRPG/habitica",
+ "version": "v5.36.3",
+ "date": "2025-05-07T17:22:07Z"
+ },
+ {
+ "name": "donaldzou/WGDashboard",
+ "version": "v4.2.3",
+ "date": "2025-05-07T15:35:04Z"
+ },
+ {
+ "name": "stonith404/pingvin-share",
+ "version": "v1.12.0",
+ "date": "2025-05-07T14:12:11Z"
+ },
+ {
+ "name": "Brandawg93/PeaNUT",
+ "version": "v5.7.5",
+ "date": "2025-05-07T14:01:45Z"
}
]
diff --git a/frontend/src/app/json-editor/_components/InstallMethod.tsx b/frontend/src/app/json-editor/_components/InstallMethod.tsx
index 8a597c5d0..3f3a7f4eb 100644
--- a/frontend/src/app/json-editor/_components/InstallMethod.tsx
+++ b/frontend/src/app/json-editor/_components/InstallMethod.tsx
@@ -1,12 +1,6 @@
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "@/components/ui/select";
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { OperatingSystems } from "@/config/siteConfig";
import { PlusCircle, Trash2 } from "lucide-react";
import { memo, useCallback, useRef } from "react";
@@ -20,21 +14,29 @@ type InstallMethodProps = {
setZodErrors: (zodErrors: z.ZodError | null) => void;
};
-function InstallMethod({
- script,
- setScript,
- setIsValid,
- setZodErrors,
-}: InstallMethodProps) {
+function InstallMethod({ script, setScript, setIsValid, setZodErrors }: InstallMethodProps) {
const cpuRefs = useRef<(HTMLInputElement | null)[]>([]);
const ramRefs = useRef<(HTMLInputElement | null)[]>([]);
const hddRefs = useRef<(HTMLInputElement | null)[]>([]);
const addInstallMethod = useCallback(() => {
setScript((prev) => {
+ const { type, slug } = prev;
+ const newMethodType = "default";
+
+ let scriptPath = "";
+
+ if (type === "pve") {
+ scriptPath = `tools/pve/${slug}.sh`;
+ } else if (type === "addon") {
+ scriptPath = `tools/addon/${slug}.sh`;
+ } else {
+ scriptPath = `${type}/${slug}.sh`;
+ }
+
const method = InstallMethodSchema.parse({
- type: "default",
- script: `${prev.type}/${prev.slug}.sh`,
+ type: newMethodType,
+ script: scriptPath,
resources: {
cpu: null,
ram: null,
@@ -43,6 +45,7 @@ function InstallMethod({
version: null,
},
});
+
return {
...prev,
install_methods: [...prev.install_methods, method],
@@ -63,9 +66,7 @@ function InstallMethod({
if (key === "type") {
updatedMethod.script =
- value === "alpine"
- ? `${prev.type}/alpine-${prev.slug}.sh`
- : `${prev.type}/${prev.slug}.sh`;
+ value === "alpine" ? `${prev.type}/alpine-${prev.slug}.sh` : `${prev.type}/${prev.slug}.sh`;
// Set OS to Alpine and reset version if type is alpine
if (value === "alpine") {
@@ -112,10 +113,7 @@ function InstallMethod({
Install Methods
{script.install_methods.map((method, index) => (
-
-