From 80f1330a758820e6b8faa999a47afe626487a679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 22 Apr 2025 09:30:29 +0200 Subject: [PATCH 01/42] qBittorrent: Update web page (#3969) * Set updateable to true * Update documentation link --- frontend/public/json/qbittorrent.json | 66 +++++++++++++-------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/frontend/public/json/qbittorrent.json b/frontend/public/json/qbittorrent.json index 77c036713..36e19d9d4 100644 --- a/frontend/public/json/qbittorrent.json +++ b/frontend/public/json/qbittorrent.json @@ -1,34 +1,34 @@ { - "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 + "name": "qBittorrent", + "slug": "qbittorrent", + "categories": [ + 11 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8090, + "documentation": "https://github.com/qbittorrent/qBittorrent/wiki/", + "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": [] +} From 3297df1d50f89afd2369799c4ce9958376cc4375 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 09:53:33 +0200 Subject: [PATCH 02/42] Update CHANGELOG.md (#3970) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f0209237..c3ef608d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-22 + +### 🌐 Website + + - #### 📝 Script Information + + - qBittorrent: Update web page [@tremor021](https://github.com/tremor021) ([#3969](https://github.com/community-scripts/ProxmoxVE/pull/3969)) + ## 2025-04-19 ### 🆕 New Scripts From 037332465397caa9977578fe7e28b6d10089c76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:51:50 +0200 Subject: [PATCH 03/42] FIx a bug in update procedure and general code maintenance (#3974) --- ct/wger.sh | 79 ++++++++++++++++++++--------------------- install/wger-install.sh | 8 ++--- 2 files changed, 43 insertions(+), 44 deletions(-) diff --git a/ct/wger.sh b/ct/wger.sh index 79476274c..cd0e4d267 100644 --- a/ct/wger.sh +++ b/ct/wger.sh @@ -20,46 +20,45 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /home/wger ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/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" - systemctl stop wger - msg_ok "Stopped $APP" - - msg_info "Updating $APP to v${RELEASE}" - temp_file=$(mktemp) - cd $temp_file -curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file" - tar xzf $temp_file - cp -rf wger-$RELEASE/* /home/wger/src - cd /home/wger/src - python3 manage.py migrate &>/dev/null - yarn install &>/dev/null - yarn build:css:sass &>/dev/null - python3 manage.py collectstatic --noinput &>/dev/null - echo "${RELEASE}" >/opt/${APP}_version.txt - msg_ok "Updated $APP to v${RELEASE}" - - msg_info "Starting $APP" - systemctl start wger - msg_ok "Started $APP" - - msg_info "Cleaning Up" - rm -rf $temp_file - msg_ok "Cleanup Completed" - - msg_ok "Update Successful" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi + header_info + check_container_storage + check_container_resources + if [[ ! -d /home/wger ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/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" + systemctl stop wger + msg_ok "Stopped $APP" + + msg_info "Updating $APP to v${RELEASE}" + temp_file=$(mktemp) + curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file" + tar xzf "$temp_file" + cp -rf wger-"$RELEASE"/* /home/wger/src + cd /home/wger/src + python3 manage.py migrate &>/dev/null + yarn install &>/dev/null + yarn build:css:sass &>/dev/null + python3 manage.py collectstatic --noinput &>/dev/null + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Starting $APP" + systemctl start wger + msg_ok "Started $APP" + + msg_info "Cleaning Up" + rm -rf "$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 @@ -69,4 +68,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}:3000${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/install/wger-install.sh b/install/wger-install.sh index 0f5560762..fe0f6c690 100644 --- a/install/wger-install.sh +++ b/install/wger-install.sh @@ -15,10 +15,10 @@ update_os msg_info "Installing Dependencies" $STD apt-get install -y \ - git \ - gnupg \ - apache2 \ - libapache2-mod-wsgi-py3 + git \ + gnupg \ + apache2 \ + libapache2-mod-wsgi-py3 msg_ok "Installed Dependencies" msg_info "Installing Python" From fcb674b7555a54692a74d48b59b09e22fcc2f4ac Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:56:30 +0200 Subject: [PATCH 04/42] Update CHANGELOG.md (#3976) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ef608d1..023af02c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-04-22 +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - wger: Fix a bug in update procedure and general code maintenance [@tremor021](https://github.com/tremor021) ([#3974](https://github.com/community-scripts/ProxmoxVE/pull/3974)) + ### 🌐 Website - #### 📝 Script Information From 22c960c99c4af646d2c8dcc92dc7829b0a8f3079 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 22 Apr 2025 14:41:17 +0200 Subject: [PATCH 05/42] Fix Turnkey Source Link (#3978) --- frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx index 180987503..61ccee44c 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -24,6 +24,8 @@ const generateSourceUrl = (slug: string, type: string) => { return `${baseUrl}/tools/pve/${slug}.sh`; case "addon": return `${baseUrl}/tools/addon/${slug}.sh`; + case "turnkey": + return `${baseUrl}/turnkey/${slug}.sh`; default: return `${baseUrl}/ct/${slug}.sh`; // fallback for "ct" } From 2583c110d25de73364cfaa622d6b20784508cb7d Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 15:35:40 +0200 Subject: [PATCH 06/42] Update CHANGELOG.md (#3979) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 023af02c3..f3da5318b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,10 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🌐 Website + - #### 🐞 Bug Fixes + + - Fix Turnkey Source Link in Button Component [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3978](https://github.com/community-scripts/ProxmoxVE/pull/3978)) + - #### 📝 Script Information - qBittorrent: Update web page [@tremor021](https://github.com/tremor021) ([#3969](https://github.com/community-scripts/ProxmoxVE/pull/3969)) From 3b12c0ca62678b2983f6417e06900666d7d95365 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Tue, 22 Apr 2025 15:48:01 +0200 Subject: [PATCH 07/42] Create close-ttek-issues.yaml (#3981) --- .github/workflows/close-ttek-issues.yaml | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/close-ttek-issues.yaml diff --git a/.github/workflows/close-ttek-issues.yaml b/.github/workflows/close-ttek-issues.yaml new file mode 100644 index 000000000..a921a5e61 --- /dev/null +++ b/.github/workflows/close-ttek-issues.yaml @@ -0,0 +1,51 @@ +name: Auto-Close tteck Issues +on: + issues: + types: [opened] + +jobs: + close_tteck_issues: + 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" + }); + } From bad84322eea25b7512a24f36c9ba38dfa21852ff Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 16:21:12 +0200 Subject: [PATCH 08/42] Update CHANGELOG.md (#3982) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3da5318b..5762ae771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,12 @@ All LXC instances created using this repository come pre-installed with Midnight - wger: Fix a bug in update procedure and general code maintenance [@tremor021](https://github.com/tremor021) ([#3974](https://github.com/community-scripts/ProxmoxVE/pull/3974)) +### 🧰 Maintenance + + - #### 📂 Github + + - Add workflow to close ttek Repo relatate issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3981](https://github.com/community-scripts/ProxmoxVE/pull/3981)) + ### 🌐 Website - #### 🐞 Bug Fixes From f46c3005b373dcfb7285a584e6354053ff462587 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:29:21 +0200 Subject: [PATCH 09/42] Update versions.json (#3963) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 266 ++++++++++++++--------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 412566a15..422f7c528 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -2,28 +2,148 @@ { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-04-20T10:33:19Z" + "date": "2025-04-22T10:34:10Z" + }, + { + "name": "OctoPrint/OctoPrint", + "version": "1.11.0", + "date": "2025-04-22T09:33:46Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.86.1", + "date": "2025-04-09T09:20:55Z" + }, + { + "name": "zabbix/zabbix", + "version": "6.0.40", + "date": "2025-04-22T08:43:35Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0b6-rc1", + "date": "2025-04-22T08:12:24Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v24.8", + "date": "2025-03-18T07:33:51Z" + }, + { + "name": "openobserve/openobserve", + "version": "v0.14.6-rc5", + "date": "2025-04-22T06:50:13Z" + }, + { + "name": "mattermost/mattermost", + "version": "v10.6.2", + "date": "2025-04-15T08:14:23Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.1", + "date": "2025-01-01T16:15:52Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.2.12", + "date": "2025-04-20T19:22:17Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1809", + "date": "2025-04-22T05:55:35Z" + }, + { + "name": "monicahq/monica", + "version": "v4.1.2", + "date": "2024-05-04T08:06:50Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.4.21", + "date": "2025-04-21T19:16:09Z" + }, + { + "name": "Suwayomi/Suwayomi-Server", + "version": "v2.0.1727", + "date": "2025-04-21T17:53:05Z" + }, + { + "name": "TasmoAdmin/TasmoAdmin", + "version": "v4.3.0", + "date": "2025-04-21T17:44:40Z" + }, + { + "name": "emqx/emqx", + "version": "e5.9.0-beta.4", + "date": "2025-04-21T17:08:59Z" + }, + { + "name": "runtipi/runtipi", + "version": "v3.10.0-beta.9", + "date": "2025-04-17T11:46:08Z" + }, + { + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.60", + "date": "2025-04-14T11:46:19Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.0", + "date": "2025-04-11T12:48:27Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.11.2", + "date": "2025-02-26T14:54:49Z" + }, + { + "name": "Prowlarr/Prowlarr", + "version": "v1.34.1.5021", + "date": "2025-04-20T19:29:50Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.13.14", + "date": "2025-04-19T20:39:23Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v0.49.0", + "date": "2025-04-20T18:03:03Z" + }, + { + "name": "YunoHost/yunohost", + "version": "debian/12.0.14", + "date": "2025-04-09T10:09:00Z" + }, + { + "name": "Kareadita/Kavita", + "version": "v0.8.6.2", + "date": "2025-04-20T16:55:38Z" + }, + { + "name": "openhab/openhab-core", + "version": "5.0.0.M2", + "date": "2025-04-20T13:16:29Z" + }, + { + "name": "pocketbase/pocketbase", + "version": "v0.27.1", + "date": "2025-04-20T11:26:50Z" }, { "name": "karakeep-app/karakeep", "version": "extension/v1.2.5", "date": "2025-04-20T10:19:06Z" }, - { - "name": "firefly-iii/firefly-iii", - "version": "v6.2.11", - "date": "2025-04-20T06:28:44Z" - }, { "name": "MediaBrowser/Emby.Releases", "version": "4.8.11.0", "date": "2025-03-10T06:39:11Z" }, - { - "name": "morpheus65535/bazarr", - "version": "v1.5.1", - "date": "2025-01-01T16:15:52Z" - }, { "name": "Readarr/Readarr", "version": "v2.0.0.4645", @@ -34,21 +154,11 @@ "version": "v5.21.1.9799", "date": "2025-03-24T15:52:12Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1797", - "date": "2025-04-20T05:53:57Z" - }, { "name": "paperless-ngx/paperless-ngx", "version": "v2.15.3", "date": "2025-04-19T23:02:17Z" }, - { - "name": "semaphoreui/semaphore", - "version": "v2.13.14", - "date": "2025-04-19T20:39:23Z" - }, { "name": "ellite/Wallos", "version": "v2.52.0", @@ -59,21 +169,6 @@ "version": "v1.20.7", "date": "2025-04-19T20:35:09Z" }, - { - "name": "TasmoAdmin/TasmoAdmin", - "version": "v4.2.3", - "date": "2025-02-09T23:07:48Z" - }, - { - "name": "cross-seed/cross-seed", - "version": "v6.11.2", - "date": "2025-02-26T14:54:49Z" - }, - { - "name": "YunoHost/yunohost", - "version": "debian/12.1.5", - "date": "2025-04-19T15:39:18Z" - }, { "name": "theonedev/onedev", "version": "v11.8.7", @@ -84,11 +179,6 @@ "version": "2025.4.3", "date": "2025-04-19T10:23:38Z" }, - { - "name": "runtipi/runtipi", - "version": "v3.10.0-beta.9", - "date": "2025-04-17T11:46:08Z" - }, { "name": "moghtech/komodo", "version": "v1.17.2", @@ -109,11 +199,6 @@ "version": "v1.17.0", "date": "2025-04-18T19:14:57Z" }, - { - "name": "pocket-id/pocket-id", - "version": "v0.48.0", - "date": "2025-04-18T16:34:56Z" - }, { "name": "Paymenter/Paymenter", "version": "v1.0.4", @@ -134,11 +219,6 @@ "version": "v3.3.6", "date": "2025-04-18T09:28:22Z" }, - { - "name": "Kareadita/Kavita", - "version": "v0.8.6.1", - "date": "2025-04-18T12:30:53Z" - }, { "name": "TandoorRecipes/recipes", "version": "1.5.34", @@ -164,16 +244,6 @@ "version": "v0.93.0", "date": "2025-04-17T20:05:25Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" - }, - { - "name": "AdguardTeam/AdGuardHome", - "version": "v0.107.60", - "date": "2025-04-14T11:46:19Z" - }, { "name": "coder/code-server", "version": "v4.99.3", @@ -234,26 +304,11 @@ "version": "v11.0.0", "date": "2025-04-16T19:25:53Z" }, - { - "name": "openobserve/openobserve", - "version": "v0.14.6-rc4", - "date": "2025-04-16T18:28:51Z" - }, { "name": "element-hq/synapse", "version": "v1.129.0rc1", "date": "2025-04-16T15:18:13Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v24.8", - "date": "2025-03-18T07:33:51Z" - }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.86.1", - "date": "2025-04-09T09:20:55Z" - }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.506", @@ -261,24 +316,14 @@ }, { "name": "wazuh/wazuh", - "version": "coverity-w16-4.12.0", - "date": "2025-04-15T08:25:08Z" - }, - { - "name": "pocketbase/pocketbase", - "version": "v0.27.0", - "date": "2025-04-16T04:54:37Z" + "version": "coverity-w17-4.12.0", + "date": "2025-04-16T11:20:57Z" }, { "name": "icereed/paperless-gpt", "version": "v0.15.0", "date": "2025-04-16T03:58:02Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0b5", - "date": "2025-04-15T17:59:06Z" - }, { "name": "rabbitmq/rabbitmq-server", "version": "v4.1.0", @@ -299,16 +344,6 @@ "version": "v0.45.6", "date": "2025-04-15T14:16:52Z" }, - { - "name": "mattermost/mattermost", - "version": "v10.6.2", - "date": "2025-04-15T08:14:23Z" - }, - { - "name": "zabbix/zabbix", - "version": "7.0.12rc1", - "date": "2025-04-15T08:00:11Z" - }, { "name": "slskd/slskd", "version": "0.22.5", @@ -324,11 +359,6 @@ "version": "v4.2.7", "date": "2025-04-10T20:08:13Z" }, - { - "name": "OliveTin/OliveTin", - "version": "2025.4.14", - "date": "2025-04-14T16:53:53Z" - }, { "name": "home-assistant/operating-system", "version": "15.2", @@ -399,11 +429,6 @@ "version": "v2.10.3.4602", "date": "2025-03-23T11:00:37Z" }, - { - "name": "Prowlarr/Prowlarr", - "version": "v1.33.3.5008", - "date": "2025-04-09T17:58:37Z" - }, { "name": "Tautulli/Tautulli", "version": "v2.15.2", @@ -424,11 +449,6 @@ "version": "v5.5.2", "date": "2025-04-11T22:00:06Z" }, - { - "name": "emqx/emqx", - "version": "e5.9.0-beta.3", - "date": "2025-04-11T14:17:53Z" - }, { "name": "NLnetLabs/unbound", "version": "release-1.23.0rc2", @@ -609,11 +629,6 @@ "version": "9.0.104", "date": "2025-04-04T12:58:11Z" }, - { - "name": "OctoPrint/OctoPrint", - "version": "1.10.3", - "date": "2024-11-05T09:20:50Z" - }, { "name": "BookStackApp/BookStack", "version": "v25.02.2", @@ -674,11 +689,6 @@ "version": "v1.17.0", "date": "2025-03-30T14:21:53Z" }, - { - "name": "openhab/openhab-core", - "version": "4.3.4", - "date": "2025-03-30T13:32:38Z" - }, { "name": "aceberg/WatchYourLAN", "version": "2.1.2-alpine", @@ -1184,11 +1194,6 @@ "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", @@ -1224,11 +1229,6 @@ "version": "1.0.0", "date": "2024-05-05T02:01:51Z" }, - { - "name": "monicahq/monica", - "version": "v4.1.2", - "date": "2024-05-04T08:06:50Z" - }, { "name": "thelounge/thelounge-deb", "version": "v4.4.3", From 2c46695b7239d59ce29b57278faa4abbdc9f66d2 Mon Sep 17 00:00:00 2001 From: "push-app-to-main[bot]" <203845782+push-app-to-main[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:48:13 +0200 Subject: [PATCH 10/42] reactive-resume (#3980) * 'Add new script' * Update reactive-resume.sh * Update reactive-resume-install.sh * fssl * fssl * date --------- Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com> Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- ct/reactive-resume.sh | 106 ++++++++++++ frontend/public/json/reactive-resume.json | 34 ++++ install/reactive-resume-install.sh | 190 ++++++++++++++++++++++ 3 files changed, 330 insertions(+) create mode 100644 ct/reactive-resume.sh create mode 100644 frontend/public/json/reactive-resume.json create mode 100644 install/reactive-resume-install.sh diff --git a/ct/reactive-resume.sh b/ct/reactive-resume.sh new file mode 100644 index 000000000..4a81e9d16 --- /dev/null +++ b/ct/reactive-resume.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://rxresu.me + +APP="Reactive-Resume" +var_tags="${var_tags:-documents}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-3072}" +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 [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/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 services" + systemctl stop Reactive-Resume + msg_ok "Stopped services" + + msg_info "Updating $APP to v${RELEASE}" + cp /opt/${APP}/.env /opt/rxresume.env + res_tmp=$(mktemp) + rm -rf /opt/${APP} + curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -O $res_tmp + unzip -q $res_tmp + mv ${APP}-${RELEASE}/ /opt/${APP} + cd /opt/${APP} + export PUPPETEER_SKIP_DOWNLOAD="true" + export NEXT_TELEMETRY_DISABLED=1 + export CI="true" + export NODE_ENV="production" + $STD pnpm install --frozen-lockfile + $STD pnpm run build + $STD pnpm run prisma:generate + mv /opt/rxresume.env /opt/${APP}/.env + msg_ok "Updated $APP to v${RELEASE}" + + msg_info "Updating Minio" + systemctl stop minio + cd /tmp + curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb + $STD dpkg -i minio.deb + msg_ok "Updated Minio" + + msg_info "Updating Browserless (Patience)" + systemctl stop browserless + cp /opt/browserless/.env /opt/browserless.env + rm -rf browserless + brwsr_tmp=$(mktemp) + TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }') + curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -O $brwsr_tmp + unzip -q $brwsr_tmp + mv browserless-${TAG}/ /opt/browserless + cd /opt/browserless + $STD npm install + rm -rf src/routes/{chrome,edge,firefox,webkit} + $STD node_modules/playwright-core/cli.js install --with-deps chromium + $STD npm run build + $STD npm run build:function + $STD npm prune production + mv /opt/browserless.env /opt/browserless/.env + msg_ok "Updated Browserless" + + msg_info "Restarting services" + systemctl start minio Reactive-Resume browserless + msg_ok "Restarted services" + + msg_info "Cleaning Up" + rm -f /tmp/minio.deb + rm -f $brwsr_tmp + rm -f $res_tmp + 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}:3000${CL}" diff --git a/frontend/public/json/reactive-resume.json b/frontend/public/json/reactive-resume.json new file mode 100644 index 000000000..9ea032e33 --- /dev/null +++ b/frontend/public/json/reactive-resume.json @@ -0,0 +1,34 @@ +{ + "name": "Reactive Resume", + "slug": "reactive-resume", + "categories": [ + 12 + ], + "date_created": "2025-04-22", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://docs.rxresu.me/", + "website": "https://rxresu.me", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png", + "description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.", + "install_methods": [ + { + "type": "default", + "script": "ct/reactive-resume.sh", + "resources": { + "cpu": 2, + "ram": 3072, + "hdd": 8, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} diff --git a/install/reactive-resume-install.sh b/install/reactive-resume-install.sh new file mode 100644 index 000000000..0e0a53235 --- /dev/null +++ b/install/reactive-resume-install.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: vhsdream +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://rxresu.me + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt-get install -y \ + gnupg \ + unzip \ + postgresql-common +msg_ok "Installed Dependencies" + +msg_info "Installing Additional Dependencies" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +echo "YES" | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh &>/dev/null +$STD apt-get install -y postgresql-16 nodejs +cd /tmp +curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb +$STD dpkg -i minio.deb + +msg_info "Setting up Database" +DB_USER="rxresume" +DB_NAME="rxresume" +DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13) +$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';" +$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" +$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;" +$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" +msg_ok "Set up Database" + +msg_info "Installing ${APPLICATION}" +MINIO_PASS=$(openssl rand -base64 48) +ACCESS_TOKEN=$(openssl rand -base64 48) +REFRESH_TOKEN=$(openssl rand -base64 48) +CHROME_TOKEN=$(openssl rand -hex 32) +LOCAL_IP=$(hostname -I | awk '{print $1}') +TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }') +RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -o v${RELEASE}.zip +unzip -q v${RELEASE}.zip +mv ${APPLICATION}-${RELEASE}/ /opt/${APPLICATION} +cd /opt/${APPLICATION} +corepack enable +export CI="true" +export PUPPETEER_SKIP_DOWNLOAD="true" +export NODE_ENV="production" +export NEXT_TELEMETRY_DISABLED=1 +$STD pnpm install --frozen-lockfile +$STD pnpm run build +$STD pnpm install --prod --frozen-lockfile +$STD pnpm run prisma:generate +msg_ok "Installed ${APPLICATION}" + +msg_info "Installing Browserless (Patience)" +cd /tmp +curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -o v${TAG}.zip +unzip -q v${TAG}.zip +mv browserless-${TAG} /opt/browserless +cd /opt/browserless +$STD npm install +rm -rf src/routes/{chrome,edge,firefox,webkit} +$STD node_modules/playwright-core/cli.js install --with-deps chromium +$STD npm run build +$STD npm run build:function +$STD npm prune production +msg_ok "Installed Browserless" + +msg_info "Configuring applications" +mkdir -p /opt/minio +cat </opt/minio/.env +MINIO_ROOT_USER="storageadmin" +MINIO_ROOT_PASSWORD="${MINIO_PASS}" +MINIO_VOLUMES=/opt/minio +MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001" +EOF +cat </opt/${APPLICATION}/.env +NODE_ENV=production +PORT=3000 +PUBLIC_URL=http://${LOCAL_IP}:3000 +STORAGE_URL=http://${LOCAL_IP}:9000/rxresume +DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public +ACCESS_TOKEN_SECRET=${ACCESS_TOKEN} +REFRESH_TOKEN_SECRET=${REFRESH_TOKEN} +CHROME_PORT=8080 +CHROME_TOKEN=${CHROME_TOKEN} +CHROME_URL=ws://localhost:8080 +CHROME_IGNORE_HTTPS_ERRORS=true +MAIL_FROM=noreply@locahost +# SMTP_URL=smtp://username:password@smtp.server.mail:587 # +STORAGE_ENDPOINT=localhost +STORAGE_PORT=9000 +STORAGE_REGION=us-east-1 +STORAGE_BUCKET=rxresume +STORAGE_ACCESS_KEY=storageadmin +STORAGE_SECRET_KEY=${MINIO_PASS} +STORAGE_USE_SSL=false +STORAGE_SKIP_BUCKET_CHECK=false + +# GitHub (OAuth, Optional) +# GITHUB_CLIENT_ID= +# GITHUB_CLIENT_SECRET= +# GITHUB_CALLBACK_URL=http://localhost:5173/api/auth/github/callback + +# Google (OAuth, Optional) +# GOOGLE_CLIENT_ID= +# GOOGLE_CLIENT_SECRET= +# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback +EOF +cat </opt/browserless/.env +DEBUG=browserless*,-**:verbose +HOST=localhost +PORT=8080 +TOKEN=${CHROME_TOKEN} +EOF +echo "${RELEASE}" >/opt/${APPLICATION}_version.txt +{ + echo "${APPLICATION} Credentials" + echo "Database User: $DB_USER" + echo "Database Password: $DB_PASS" + echo "Database Name: $DB_NAME" + echo "Minio Root Password: ${MINIO_PASS}" +} >>~/${APPLICATION}.creds +msg_ok "Configured applications" + +msg_info "Creating Services" +mkdir -p /etc/systemd/system/minio.service.d/ +cat </etc/systemd/system/minio.service.d/override.conf +[Service] +User=root +Group=root +WorkingDirectory=/usr/local/bin +EnvironmentFile=/opt/minio/.env +EOF + +cat </etc/systemd/system/${APPLICATION}.service +[Unit] +Description=${APPLICATION} Service +After=network.target postgresql.service minio.service +Wants=postgresql.service minio.service + +[Service] +WorkingDirectory=/opt/${APPLICATION} +EnvironmentFile=/opt/${APPLICATION}/.env +ExecStart=/usr/bin/pnpm run start +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + +cat </etc/systemd/system/browserless.service +[Unit] +Description=Browserless service +After=network.target ${APPLICATION}.service + +[Service] +WorkingDirectory=/opt/browserless +EnvironmentFile=/opt/browserless/.env +ExecStart=/usr/bin/npm run start +Restart=unless-stopped + +[Install] +WantedBy=multi-user.target +EOF +systemctl daemon-reload +systemctl enable -q --now minio.service ${APPLICATION}.service browserless.service +msg_ok "Created Services" + +motd_ssh +customize + +msg_info "Cleaning up" +rm -f /tmp/v${RELEASE}.zip +rm -f /tmp/v${TAG}.zip +rm -f /tmp/minio.deb +$STD apt-get -y autoremove +$STD apt-get -y autoclean +msg_ok "Cleaned" From 933539ca7cb9899b3acb6d9fc25383e4408f7241 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:56:13 +0200 Subject: [PATCH 11/42] Update .app files (#3985) Co-authored-by: GitHub Actions --- ct/headers/reactive-resume | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ct/headers/reactive-resume diff --git a/ct/headers/reactive-resume b/ct/headers/reactive-resume new file mode 100644 index 000000000..e897791a2 --- /dev/null +++ b/ct/headers/reactive-resume @@ -0,0 +1,6 @@ + ____ __ _ ____ + / __ \___ ____ ______/ /_(_) _____ / __ \___ _______ ______ ___ ___ + / /_/ / _ \/ __ `/ ___/ __/ / | / / _ \______/ /_/ / _ \/ ___/ / / / __ `__ \/ _ \ + / _, _/ __/ /_/ / /__/ /_/ /| |/ / __/_____/ _, _/ __(__ ) /_/ / / / / / / __/ +/_/ |_|\___/\__,_/\___/\__/_/ |___/\___/ /_/ |_|\___/____/\__,_/_/ /_/ /_/\___/ + From 46ca78abc893f876e00b158f0f17ec7dc159722c Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:57:02 +0200 Subject: [PATCH 12/42] Update CHANGELOG.md (#3984) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5762ae771..b59321226 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ All LXC instances created using this repository come pre-installed with Midnight ## 2025-04-22 +### 🆕 New Scripts + + - reactive-resume ([#3980](https://github.com/community-scripts/ProxmoxVE/pull/3980)) + ### 🚀 Updated Scripts - #### 🐞 Bug Fixes From 8dddea132c77f3574a985cc629b3346e8ffc1fb7 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 23 Apr 2025 02:08:28 -0400 Subject: [PATCH 13/42] karakeep: use nightly channel for yt-dlp (#3992) It's the recommended channel --- ct/karakeep.sh | 3 +++ install/karakeep-install.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ct/karakeep.sh b/ct/karakeep.sh index 0f3829cc5..5461fb7ad 100644 --- a/ct/karakeep.sh +++ b/ct/karakeep.sh @@ -33,6 +33,9 @@ function update_script() { msg_info "Stopping Services" systemctl stop karakeep-web karakeep-workers karakeep-browser msg_ok "Stopped Services" + msg_info "Updating yt-dlp" + $STD yt-dlp --update-to nightly + msg_ok "Updated yt-dlp" msg_info "Updating ${APP} to v${RELEASE}" if [[ $(corepack -v) < "0.31.0" ]]; then $STD npm install -g corepack@0.31.0 diff --git a/install/karakeep-install.sh b/install/karakeep-install.sh index 991012261..073bacba6 100644 --- a/install/karakeep-install.sh +++ b/install/karakeep-install.sh @@ -29,7 +29,7 @@ msg_ok "Installed Dependencies" msg_info "Installing Additional Tools" curl -fsSL "https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64" -o "/usr/bin/monolith" chmod +x /usr/bin/monolith -curl -fsSL "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux" -o "/usr/bin/yt-dlp" +curl -fsSL "https://github.com/yt-dlp/yt-dlp-nightly-builds/releases/latest/download/yt-dlp_linux" -o "/usr/bin/yt-dlp" chmod +x /usr/bin/yt-dlp msg_ok "Installed Additional Tools" From 235690658ca62b6d2eba6664fd7707640e7a6e77 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 08:29:56 +0200 Subject: [PATCH 14/42] Update versions.json (#3993) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 196 ++++++++++++++--------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 422f7c528..50903636f 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,29 +1,109 @@ [ + { + "name": "grafana/grafana", + "version": "v11.2.9", + "date": "2025-04-22T23:28:16Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.11.2", + "date": "2025-02-26T14:54:49Z" + }, + { + "name": "minio/minio", + "version": "RELEASE.2025-04-22T22-12-26Z", + "date": "2025-04-22T22:44:34Z" + }, + { + "name": "docmost/docmost", + "version": "v0.20.0", + "date": "2025-04-22T22:30:25Z" + }, + { + "name": "glanceapp/glance", + "version": "v0.7.13", + "date": "2025-04-22T22:19:16Z" + }, { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-04-22T10:34:10Z" + "date": "2025-04-22T20:30:58Z" + }, + { + "name": "netbox-community/netbox", + "version": "v4.2.8", + "date": "2025-04-22T19:44:49Z" + }, + { + "name": "donaldzou/WGDashboard", + "version": "v4.2.0", + "date": "2025-04-22T18:18:28Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.90.0", + "date": "2025-04-22T08:58:15Z" + }, + { + "name": "NodeBB/NodeBB", + "version": "v4.2.2", + "date": "2025-04-22T16:33:53Z" + }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.507", + "date": "2025-04-22T15:22:53Z" + }, + { + "name": "evcc-io/evcc", + "version": "0.203.2", + "date": "2025-04-22T15:07:28Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0b6", + "date": "2025-04-22T15:00:31Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v10.3.0", + "date": "2025-04-22T14:57:47Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.4.22", + "date": "2025-04-22T14:18:11Z" + }, + { + "name": "mongodb/mongo", + "version": "r8.2.0-alpha", + "date": "2025-04-22T13:19:07Z" + }, + { + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.61", + "date": "2025-04-22T12:42:26Z" + }, + { + "name": "VictoriaMetrics/VictoriaMetrics", + "version": "v1.20.0-victorialogs", + "date": "2025-04-22T12:00:23Z" + }, + { + "name": "zabbix/zabbix", + "version": "7.0.12", + "date": "2025-04-22T11:40:31Z" + }, + { + "name": "Graylog2/graylog2-server", + "version": "6.2.0-rc.2", + "date": "2025-04-22T11:35:32Z" }, { "name": "OctoPrint/OctoPrint", "version": "1.11.0", "date": "2025-04-22T09:33:46Z" }, - { - "name": "n8n-io/n8n", - "version": "n8n@1.86.1", - "date": "2025-04-09T09:20:55Z" - }, - { - "name": "zabbix/zabbix", - "version": "6.0.40", - "date": "2025-04-22T08:43:35Z" - }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0b6-rc1", - "date": "2025-04-22T08:12:24Z" - }, { "name": "nzbgetcom/nzbget", "version": "v24.8", @@ -59,11 +139,6 @@ "version": "v4.1.2", "date": "2024-05-04T08:06:50Z" }, - { - "name": "OliveTin/OliveTin", - "version": "2025.4.21", - "date": "2025-04-21T19:16:09Z" - }, { "name": "Suwayomi/Suwayomi-Server", "version": "v2.0.1727", @@ -81,24 +156,14 @@ }, { "name": "runtipi/runtipi", - "version": "v3.10.0-beta.9", - "date": "2025-04-17T11:46:08Z" - }, - { - "name": "AdguardTeam/AdGuardHome", - "version": "v0.107.60", - "date": "2025-04-14T11:46:19Z" + "version": "nightly", + "date": "2025-04-21T16:55:50Z" }, { "name": "keycloak/keycloak", "version": "26.2.0", "date": "2025-04-11T12:48:27Z" }, - { - "name": "cross-seed/cross-seed", - "version": "v6.11.2", - "date": "2025-02-26T14:54:49Z" - }, { "name": "Prowlarr/Prowlarr", "version": "v1.34.1.5021", @@ -249,11 +314,6 @@ "version": "v4.99.3", "date": "2025-04-17T18:33:11Z" }, - { - "name": "VictoriaMetrics/VictoriaMetrics", - "version": "v1.19.0-victorialogs", - "date": "2025-04-17T18:26:31Z" - }, { "name": "duplicati/duplicati", "version": "v2.1.0.116-2.1.0.116_canary_2025-04-17", @@ -294,11 +354,6 @@ "version": "2025.4.0", "date": "2025-04-17T00:55:34Z" }, - { - "name": "docmost/docmost", - "version": "v0.10.2", - "date": "2025-04-16T20:43:40Z" - }, { "name": "forgejo/forgejo", "version": "v11.0.0", @@ -309,11 +364,6 @@ "version": "v1.129.0rc1", "date": "2025-04-16T15:18:13Z" }, - { - "name": "jenkinsci/jenkins", - "version": "jenkins-2.506", - "date": "2025-04-15T15:40:50Z" - }, { "name": "wazuh/wazuh", "version": "coverity-w17-4.12.0", @@ -354,11 +404,6 @@ "version": "v0.14.1", "date": "2024-08-29T22:32:51Z" }, - { - "name": "netbox-community/netbox", - "version": "v4.2.7", - "date": "2025-04-10T20:08:13Z" - }, { "name": "home-assistant/operating-system", "version": "15.2", @@ -369,11 +414,6 @@ "version": "v0.0.7-hf1", "date": "2025-03-10T20:49:39Z" }, - { - "name": "Graylog2/graylog2-server", - "version": "6.2.0-rc.1", - "date": "2025-04-14T11:26:18Z" - }, { "name": "bluenviron/mediamtx", "version": "v1.12.0", @@ -384,21 +424,6 @@ "version": "v0.6.5", "date": "2025-04-14T09:13:36Z" }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.2.0", - "date": "2025-04-14T08:53:44Z" - }, - { - "name": "evcc-io/evcc", - "version": "0.203.1", - "date": "2025-04-14T07:23:02Z" - }, - { - "name": "glanceapp/glance", - "version": "v0.7.12", - "date": "2025-04-14T00:16:15Z" - }, { "name": "rogerfar/rdt-client", "version": "v2.0.108", @@ -474,16 +499,6 @@ "version": "cassandra-5.0.4", "date": "2025-04-10T16:32:00Z" }, - { - "name": "NodeBB/NodeBB", - "version": "v4.2.1", - "date": "2025-04-10T14:03:47Z" - }, - { - "name": "mongodb/mongo", - "version": "r8.0.5-rc2", - "date": "2025-04-09T22:37:52Z" - }, { "name": "jupyter/notebook", "version": "v7.4.0", @@ -499,11 +514,6 @@ "version": "v2.69.10", "date": "2025-04-09T12:16:51Z" }, - { - "name": "minio/minio", - "version": "RELEASE.2025-04-08T15-41-24Z", - "date": "2025-04-08T19:51:06Z" - }, { "name": "goauthentik/authentik", "version": "version/2025.2.4", @@ -744,11 +754,6 @@ "version": "v1.34.0", "date": "2025-03-26T08:48:34Z" }, - { - "name": "grafana/grafana", - "version": "v11.6.0", - "date": "2025-03-25T22:10:15Z" - }, { "name": "ipfs/kubo", "version": "v0.34.1", @@ -1069,11 +1074,6 @@ "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", From 563e73e65ebf545e914606f75612e098b2efc889 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 08:38:16 +0200 Subject: [PATCH 15/42] Update CHANGELOG.md (#3995) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b59321226..d0a55401a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-23 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - karakeep: use nightly channel for yt-dlp [@vhsdream](https://github.com/vhsdream) ([#3992](https://github.com/community-scripts/ProxmoxVE/pull/3992)) + ## 2025-04-22 ### 🆕 New Scripts From e3c2fba5991b78d8c7496d933d6dacbaf566845b Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Wed, 23 Apr 2025 09:40:58 +0200 Subject: [PATCH 16/42] Fix Workflow to close discussions (#3999) * Rework Discussion close WF * Rework Discussion close WF --- .github/workflows/close-discussion.yml | 107 +++++++++++++++++-------- 1 file changed, 72 insertions(+), 35 deletions(-) diff --git a/.github/workflows/close-discussion.yml b/.github/workflows/close-discussion.yml index a811371d4..a3047904a 100644 --- a/.github/workflows/close-discussion.yml +++ b/.github/workflows/close-discussion.yml @@ -1,8 +1,13 @@ name: Close Discussion on PR Merge on: - pull_request: - types: [closed] + push: + branches: + - main + +permissions: + contents: read + discussions: write jobs: close-discussion: @@ -11,56 +16,82 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - with: - repository: community-scripts/ProxmoxVE - ref: main - token: ${{ secrets.GITHUB_TOKEN }} - 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.PAT_MICHEL }} - PR_BODY: ${{ github.event.pull_request.body }} - PR_NUMBER: ${{ github.event.pull_request.number }} - REPO_OWNER: ${{ github.repository_owner }} - REPO_NAME: ${{ github.event.repository.name }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_SHA: ${{ github.sha }} + GITHUB_REPOSITORY: ${{ github.repository }} run: | npx zx << 'EOF' import { graphql } from "@octokit/graphql"; - (async function() { + + (async function () { try { const token = process.env.GITHUB_TOKEN; - const prBody = process.env.PR_BODY; - const prNumber = process.env.PR_NUMBER; - const owner = process.env.REPO_OWNER; - const repo = process.env.REPO_NAME; + const commitSha = process.env.GITHUB_SHA; + const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); - if (!token || !prBody || !prNumber || !owner || !repo) { + 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}`); - console.log(`PR Number: ${prNumber}`); - console.log(`Repository: ${owner}/${repo}`); - - const graphqlWithAuth = graphql.defaults({ - headers: { authorization: `Bearer ${token}` }, - }); + // Fetch GraphQL discussion ID const discussionQuery = ` query($owner: String!, $repo: String!, $number: Int!) { repository(owner: $owner, name: $repo) { @@ -70,21 +101,26 @@ jobs: } } `; - - const discussionResponse = await graphqlWithAuth(discussionQuery, { + + // + 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."); + }); + + 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; } - console.log(`GraphQL Discussion ID: ${discussionQLId}`); - + // Post comment const commentMutation = ` mutation($discussionId: ID!, $body: String!) { addDiscussionComment(input: { discussionId: $discussionId, body: $body }) { @@ -106,6 +142,7 @@ jobs: console.log(`Comment Posted Successfully! Comment ID: ${commentId}`); + // Mark comment as answer const markAnswerMutation = ` mutation($id: ID!) { markDiscussionCommentAsAnswer(input: { id: $id }) { @@ -120,7 +157,7 @@ jobs: } catch (error) { console.error("Error:", error); - return; + process.exit(1); } })(); - EOF \ No newline at end of file + EOF From 8a4dfa0cc76ee896e9db1f9035f2bc16cb576f1b Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Wed, 23 Apr 2025 09:45:35 +0200 Subject: [PATCH 17/42] Add check for corosync (#3998) --- tools/pve/post-pve-install.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/pve/post-pve-install.sh b/tools/pve/post-pve-install.sh index 39497608c..5afc3bd02 100644 --- a/tools/pve/post-pve-install.sh +++ b/tools/pve/post-pve-install.sh @@ -179,8 +179,20 @@ EOF msg_info "Disabling high availability" systemctl disable -q --now pve-ha-lrm systemctl disable -q --now pve-ha-crm - systemctl disable -q --now corosync msg_ok "Disabled high availability" + CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "COROSYNC" --menu "Disable Corosync for a Proxmox VE Cluster?" 10 58 2 \ + "yes" " " \ + "no" " " 3>&2 2>&1 1>&3) + case $CHOICE in + yes) + msg_info "Disabling Corosync" + systemctl disable -q --now corosync + msg_ok "Disabled Corosync" + ;; + no) + msg_error "Selected no to Disabling Corosync" + ;; + esac ;; no) msg_error "Selected no to Disabling high availability" From 90722de17d9717e6453fb4ad85e85706faac51ec Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 10:13:19 +0200 Subject: [PATCH 18/42] Update CHANGELOG.md (#4000) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0a55401a..9a02998cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,12 @@ All LXC instances created using this repository come pre-installed with Midnight - karakeep: use nightly channel for yt-dlp [@vhsdream](https://github.com/vhsdream) ([#3992](https://github.com/community-scripts/ProxmoxVE/pull/3992)) +### 🧰 Maintenance + + - #### 📂 Github + + - Fix Workflow to close discussions [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3999](https://github.com/community-scripts/ProxmoxVE/pull/3999)) + ## 2025-04-22 ### 🆕 New Scripts From 0bab7c06a64b46fb5f2e2624852f4fd3d9823316 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:13:20 +0200 Subject: [PATCH 19/42] Update versions.json (#4001) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 118 ++++++++++++++--------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 50903636f..dcc0d589e 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,8 +1,58 @@ [ + { + "name": "Graylog2/graylog2-server", + "version": "6.3.0-alpha.1", + "date": "2025-04-23T11:25:55Z" + }, + { + "name": "fhem/fhem-mirror", + "version": "6.2", + "date": "2025-04-23T10:36:12Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v24.8", + "date": "2025-03-18T07:33:51Z" + }, + { + "name": "cockpit-project/cockpit", + "version": "337", + "date": "2025-04-23T08:26:31Z" + }, + { + "name": "mattermost/mattermost", + "version": "v10.6.2", + "date": "2025-04-15T08:14:23Z" + }, + { + "name": "zabbix/zabbix", + "version": "7.2.6", + "date": "2025-04-23T08:06:23Z" + }, + { + "name": "jupyter/notebook", + "version": "v7.4.1", + "date": "2025-04-23T06:40:34Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1815", + "date": "2025-04-23T05:56:23Z" + }, + { + "name": "openobserve/openobserve", + "version": "v0.14.6-rc6", + "date": "2025-04-23T04:24:27Z" + }, + { + "name": "jhuckaby/Cronicle", + "version": "v0.9.78", + "date": "2025-04-23T01:38:28Z" + }, { "name": "grafana/grafana", - "version": "v11.2.9", - "date": "2025-04-22T23:28:16Z" + "version": "v11.3.6", + "date": "2025-04-23T00:18:05Z" }, { "name": "cross-seed/cross-seed", @@ -24,16 +74,16 @@ "version": "v0.7.13", "date": "2025-04-22T22:19:16Z" }, - { - "name": "fhem/fhem-mirror", - "version": "6.2", - "date": "2025-04-22T20:30:58Z" - }, { "name": "netbox-community/netbox", "version": "v4.2.8", "date": "2025-04-22T19:44:49Z" }, + { + "name": "keycloak/keycloak", + "version": "26.2.0", + "date": "2025-04-11T12:48:27Z" + }, { "name": "donaldzou/WGDashboard", "version": "v4.2.0", @@ -89,36 +139,11 @@ "version": "v1.20.0-victorialogs", "date": "2025-04-22T12:00:23Z" }, - { - "name": "zabbix/zabbix", - "version": "7.0.12", - "date": "2025-04-22T11:40:31Z" - }, - { - "name": "Graylog2/graylog2-server", - "version": "6.2.0-rc.2", - "date": "2025-04-22T11:35:32Z" - }, { "name": "OctoPrint/OctoPrint", "version": "1.11.0", "date": "2025-04-22T09:33:46Z" }, - { - "name": "nzbgetcom/nzbget", - "version": "v24.8", - "date": "2025-03-18T07:33:51Z" - }, - { - "name": "openobserve/openobserve", - "version": "v0.14.6-rc5", - "date": "2025-04-22T06:50:13Z" - }, - { - "name": "mattermost/mattermost", - "version": "v10.6.2", - "date": "2025-04-15T08:14:23Z" - }, { "name": "morpheus65535/bazarr", "version": "v1.5.1", @@ -129,11 +154,6 @@ "version": "v6.2.12", "date": "2025-04-20T19:22:17Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1809", - "date": "2025-04-22T05:55:35Z" - }, { "name": "monicahq/monica", "version": "v4.1.2", @@ -156,13 +176,8 @@ }, { "name": "runtipi/runtipi", - "version": "nightly", - "date": "2025-04-21T16:55:50Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" + "version": "v3.10.0-beta.9", + "date": "2025-04-17T11:46:08Z" }, { "name": "Prowlarr/Prowlarr", @@ -499,11 +514,6 @@ "version": "cassandra-5.0.4", "date": "2025-04-10T16:32:00Z" }, - { - "name": "jupyter/notebook", - "version": "v7.4.0", - "date": "2025-04-09T17:36:14Z" - }, { "name": "glpi-project/glpi", "version": "10.0.18", @@ -734,11 +744,6 @@ "version": "5.2.1", "date": "2025-03-28T13:00:23Z" }, - { - "name": "cockpit-project/cockpit", - "version": "336.2", - "date": "2025-03-28T10:16:47Z" - }, { "name": "gethomepage/homepage", "version": "v1.1.1", @@ -814,11 +819,6 @@ "version": "250321-57590c48b", "date": "2025-03-21T11:48:16Z" }, - { - "name": "jhuckaby/Cronicle", - "version": "v0.9.77", - "date": "2025-03-21T02:25:42Z" - }, { "name": "seanmorley15/AdventureLog", "version": "v0.9.0", From d28f33eb916239a5c0f13c8feb8078cf9f6ebd0b Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:34:22 +0200 Subject: [PATCH 20/42] Zipline: Add new ENV Variable and Change Update (#3997) * Rework Zipline * Rework Zipline * Add changes * Add changes * Add changes * Add changes --- ct/zipline.sh | 10 ++++++---- install/zipline-install.sh | 7 +++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ct/zipline.sh b/ct/zipline.sh index 9df0a110d..781b14999 100644 --- a/ct/zipline.sh +++ b/ct/zipline.sh @@ -40,10 +40,12 @@ function update_script() { msg_info "Updating ${APP} to ${RELEASE}" cp /opt/zipline/.env /opt/ - rm -R /opt/zipline + mkdir -p /opt/zipline-upload + cp -R /opt/zipline/upload/* /opt/zipline-upload/ curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip") - unzip -q v${RELEASE}.zip - mv zipline-${RELEASE} /opt/zipline + unzip -q v"${RELEASE}".zip + rm -R /opt/zipline + mv zipline-"${RELEASE}" /opt/zipline cd /opt/zipline mv /opt/.env /opt/zipline/.env $STD pnpm install @@ -56,7 +58,7 @@ function update_script() { msg_ok "Started ${APP}" msg_info "Cleaning Up" - rm -rf v${RELEASE}.zip + rm -rf v"${RELEASE}".zip msg_ok "Cleaned" msg_ok "Updated Successfully" else diff --git a/install/zipline-install.sh b/install/zipline-install.sh index c88958bfe..9e4b16497 100644 --- a/install/zipline-install.sh +++ b/install/zipline-install.sh @@ -53,8 +53,8 @@ msg_info "Installing Zipline (Patience)" cd /opt RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip") -unzip -q v${RELEASE}.zip -mv zipline-${RELEASE} /opt/zipline +unzip -q v"${RELEASE}".zip +mv zipline-"${RELEASE}" /opt/zipline cd /opt/zipline cat </opt/zipline/.env DATABASE_URL=postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME @@ -62,7 +62,10 @@ CORE_SECRET=$SECRET_KEY CORE_HOSTNAME=0.0.0.0 CORE_PORT=3000 CORE_RETURN_HTTPS=false +DATASOURCE_TYPE=local +DATASOURCE_LOCAL_DIRECTORY=/opt/zipline-upload EOF +mkdir -p /opt/zipline-upload $STD pnpm install $STD pnpm build echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" From 14313687c9836d3102d34e23bde40f4996692cbb Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:45:14 +0200 Subject: [PATCH 21/42] Update CHANGELOG.md (#4002) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a02998cf..ebff853ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - Zipline: Add new ENV Variable and Change Update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3997](https://github.com/community-scripts/ProxmoxVE/pull/3997)) - karakeep: use nightly channel for yt-dlp [@vhsdream](https://github.com/vhsdream) ([#3992](https://github.com/community-scripts/ProxmoxVE/pull/3992)) ### 🧰 Maintenance From f2fecc18e820c6c30890af391cb1ab30756ae940 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 07:33:40 +0200 Subject: [PATCH 22/42] Update versions.json (#4014) --- frontend/public/json/versions.json | 152 ++++++++++++++--------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index dcc0d589e..a496d0ec3 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,19 +1,89 @@ [ { - "name": "Graylog2/graylog2-server", - "version": "6.3.0-alpha.1", - "date": "2025-04-23T11:25:55Z" + "name": "immich-app/immich", + "version": "v1.132.1", + "date": "2025-04-23T22:08:21Z" }, { "name": "fhem/fhem-mirror", "version": "6.2", - "date": "2025-04-23T10:36:12Z" + "date": "2025-04-23T20:31:09Z" + }, + { + "name": "mongodb/mongo", + "version": "r6.0.22", + "date": "2025-04-23T19:53:55Z" + }, + { + "name": "Radarr/Radarr", + "version": "v5.22.4.9896", + "date": "2025-04-23T18:51:12Z" + }, + { + "name": "netbox-community/netbox", + "version": "v4.2.8", + "date": "2025-04-22T19:44:49Z" + }, + { + "name": "Kozea/Radicale", + "version": "v3.5.2", + "date": "2025-04-23T18:41:46Z" + }, + { + "name": "runtipi/runtipi", + "version": "nightly", + "date": "2025-04-21T16:55:50Z" + }, + { + "name": "NodeBB/NodeBB", + "version": "v4.2.2", + "date": "2025-04-22T16:33:53Z" + }, + { + "name": "grafana/grafana", + "version": "v11.6.1", + "date": "2025-04-23T17:04:02Z" + }, + { + "name": "syncthing/syncthing", + "version": "v2.0.0-beta.9", + "date": "2025-04-12T13:58:29Z" }, { "name": "nzbgetcom/nzbget", "version": "v24.8", "date": "2025-03-18T07:33:51Z" }, + { + "name": "docmost/docmost", + "version": "v0.20.1", + "date": "2025-04-23T13:44:12Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.3.0p31-rc1", + "date": "2025-04-23T13:16:47Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.2.1", + "date": "2025-04-23T12:17:17Z" + }, + { + "name": "redis/redis", + "version": "7.4.3", + "date": "2025-04-23T12:00:04Z" + }, + { + "name": "donaldzou/WGDashboard", + "version": "v4.2.1", + "date": "2025-04-23T11:42:05Z" + }, + { + "name": "Graylog2/graylog2-server", + "version": "6.3.0-alpha.1", + "date": "2025-04-23T11:25:55Z" + }, { "name": "cockpit-project/cockpit", "version": "337", @@ -49,11 +119,6 @@ "version": "v0.9.78", "date": "2025-04-23T01:38:28Z" }, - { - "name": "grafana/grafana", - "version": "v11.3.6", - "date": "2025-04-23T00:18:05Z" - }, { "name": "cross-seed/cross-seed", "version": "v6.11.2", @@ -64,41 +129,16 @@ "version": "RELEASE.2025-04-22T22-12-26Z", "date": "2025-04-22T22:44:34Z" }, - { - "name": "docmost/docmost", - "version": "v0.20.0", - "date": "2025-04-22T22:30:25Z" - }, { "name": "glanceapp/glance", "version": "v0.7.13", "date": "2025-04-22T22:19:16Z" }, - { - "name": "netbox-community/netbox", - "version": "v4.2.8", - "date": "2025-04-22T19:44:49Z" - }, - { - "name": "keycloak/keycloak", - "version": "26.2.0", - "date": "2025-04-11T12:48:27Z" - }, - { - "name": "donaldzou/WGDashboard", - "version": "v4.2.0", - "date": "2025-04-22T18:18:28Z" - }, { "name": "n8n-io/n8n", "version": "n8n@1.90.0", "date": "2025-04-22T08:58:15Z" }, - { - "name": "NodeBB/NodeBB", - "version": "v4.2.2", - "date": "2025-04-22T16:33:53Z" - }, { "name": "jenkinsci/jenkins", "version": "jenkins-2.507", @@ -109,11 +149,6 @@ "version": "0.203.2", "date": "2025-04-22T15:07:28Z" }, - { - "name": "Checkmk/checkmk", - "version": "v2.4.0b6", - "date": "2025-04-22T15:00:31Z" - }, { "name": "zwave-js/zwave-js-ui", "version": "v10.3.0", @@ -124,11 +159,6 @@ "version": "2025.4.22", "date": "2025-04-22T14:18:11Z" }, - { - "name": "mongodb/mongo", - "version": "r8.2.0-alpha", - "date": "2025-04-22T13:19:07Z" - }, { "name": "AdguardTeam/AdGuardHome", "version": "v0.107.61", @@ -174,11 +204,6 @@ "version": "e5.9.0-beta.4", "date": "2025-04-21T17:08:59Z" }, - { - "name": "runtipi/runtipi", - "version": "v3.10.0-beta.9", - "date": "2025-04-17T11:46:08Z" - }, { "name": "Prowlarr/Prowlarr", "version": "v1.34.1.5021", @@ -229,11 +254,6 @@ "version": "v2.0.0.4645", "date": "2017-03-07T18:56:06Z" }, - { - "name": "Radarr/Radarr", - "version": "v5.21.1.9799", - "date": "2025-03-24T15:52:12Z" - }, { "name": "paperless-ngx/paperless-ngx", "version": "v2.15.3", @@ -266,8 +286,8 @@ }, { "name": "ollama/ollama", - "version": "v0.6.6-rc1", - "date": "2025-04-17T01:56:29Z" + "version": "v0.6.6", + "date": "2025-04-19T01:13:05Z" }, { "name": "caddyserver/caddy", @@ -454,11 +474,6 @@ "version": "v4.47.1", "date": "2025-01-05T21:14:23Z" }, - { - "name": "syncthing/syncthing", - "version": "v2.0.0-beta.9", - "date": "2025-04-12T13:58:29Z" - }, { "name": "qbittorrent/qBittorrent", "version": "release-5.0.5", @@ -564,11 +579,6 @@ "version": "preview-back-to-axios", "date": "2025-04-07T09:23:08Z" }, - { - "name": "redis/redis", - "version": "8.0-rc1-int2", - "date": "2025-04-02T19:05:08Z" - }, { "name": "Dolibarr/dolibarr", "version": "21.0.1", @@ -624,11 +634,6 @@ "version": "v0.55.2", "date": "2025-04-05T12:07:32Z" }, - { - "name": "Kozea/Radicale", - "version": "v3.5.1", - "date": "2025-04-05T06:20:18Z" - }, { "name": "actualbudget/actual", "version": "v25.4.0", @@ -664,11 +669,6 @@ "version": "v1.4.6", "date": "2025-04-02T14:07:12Z" }, - { - "name": "immich-app/immich", - "version": "v1.131.3", - "date": "2025-04-01T22:48:22Z" - }, { "name": "MagicMirrorOrg/MagicMirror", "version": "v2.31.0", From c4caccfab19101fbcd27378a0718a64e89ac8d1b Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 24 Apr 2025 01:33:56 -0400 Subject: [PATCH 23/42] fix: always check for soularr update (#4012) --- ct/slskd.sh | 51 +++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/ct/slskd.sh b/ct/slskd.sh index adb9ff8d2..c9f357a93 100644 --- a/ct/slskd.sh +++ b/ct/slskd.sh @@ -31,9 +31,9 @@ function update_script() { 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" + msg_info "Stopping $APP" systemctl stop slskd soularr.timer soularr.service - msg_ok "Stopped $APP and Soularr" + msg_ok "Stopped $APP" msg_info "Updating $APP to v${RELEASE}" tmp_file=$(mktemp) @@ -42,31 +42,34 @@ function update_script() { 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 -o main.zip 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" + msg_info "Starting $APP" + systemctl start slskd + msg_ok "Started $APP" 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}" + msg_ok "No ${APP} update required. ${APP} is already at v${RELEASE}" fi + 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 -o main.zip 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 "Updated soularr" + + msg_info "Starting soularr timer" + systemctl start soularr.timer + msg_ok "Started soularr timer" + + msg_info "Cleaning Up" + rm -rf /tmp/main.zip + msg_ok "Cleanup Completed" exit } From fb3d0b24c7da3d6ea08778accc708edb4ba0a14b Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 08:24:13 +0200 Subject: [PATCH 24/42] Update CHANGELOG.md (#4015) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebff853ae..20325c46c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2025-04-24 + +### 🚀 Updated Scripts + + - #### 🐞 Bug Fixes + + - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) + ## 2025-04-23 ### 🚀 Updated Scripts From de89dd90cc2f7c84310a274260b808c018b41a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Thu, 24 Apr 2025 09:52:22 +0200 Subject: [PATCH 25/42] Element Synapse: Add Synapse-Admin web UI to manage Matrix (#4010) * Update script * Update --- ct/elementsynapse.sh | 58 +++++++++++++++---- frontend/public/json/elementsynapse.json | 71 +++++++++++++----------- install/elementsynapse-install.sh | 54 +++++++++++++++++- 3 files changed, 139 insertions(+), 44 deletions(-) diff --git a/ct/elementsynapse.sh b/ct/elementsynapse.sh index 0e3b11c4d..01dd0e306 100644 --- a/ct/elementsynapse.sh +++ b/ct/elementsynapse.sh @@ -20,18 +20,52 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /etc/matrix-synapse ]]; 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 /etc/matrix-synapse ]]; then + msg_error "No ${APP} Installation Found!" exit + fi + if [[ ! -f /opt/"${APP}"_version.txt ]]; then + touch /opt/"${APP}"_version.txt + fi + if ! dpkg -l | grep -q '^ii.*gpg'; then + $STD apt-get update + $STD apt-get install -y gpg + fi + if [[ ! -x /usr/bin/node ]]; then + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list + $STD apt-get update + $STD apt-get install -y nodejs + $STD npm install -g yarn + fi + msg_info "Updating $APP LXC" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Updated $APP LXC" + + msg_info "Updating Synapse-Admin" + RELEASE=$(curl -fsSL https://api.github.com/repos/etkecc/synapse-admin/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 + temp_file=$(mktemp) + systemctl stop synapse-admin + rm -rf /opt/synapse-admin + mkdir -p /opt/synapse-admin + curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" + tar xzf "$temp_file" -C /opt/synapse-admin + cd /opt/synapse-admin + $STD yarn install --ignore-engines + systemctl start synapse-admin + echo "${RELEASE}" >/opt/"${APP}"_version.txt + rm -f "$temp_file" + msg_ok "Update Successful" + else + msg_ok "No update required. ${APP} is already at v${RELEASE}" + fi + exit } start @@ -41,4 +75,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}:8008${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8008${CL}" diff --git a/frontend/public/json/elementsynapse.json b/frontend/public/json/elementsynapse.json index adb154a85..75ad3dc83 100644 --- a/frontend/public/json/elementsynapse.json +++ b/frontend/public/json/elementsynapse.json @@ -1,34 +1,43 @@ { - "name": "Element Synapse", - "slug": "elementsynapse", - "categories": [ - 4 - ], - "date_created": "2025-02-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8008, - "documentation": "https://element-hq.github.io/synapse/latest/welcome_and_overview.html", - "website": "https://element.io/", - "logo": "https://element.io/images/logo-mark-primary.svg", - "description": "Synapse is an open source Matrix homeserver implementation, written and maintained by Element. Matrix is the open standard for secure and interoperable real time communications. You can directly run and manage the source code in this repository, available under an AGPL license. There is no support provided from Element unless you have a subscription.", - "install_methods": [ - { - "type": "default", - "script": "ct/elementsynapse.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } + "name": "Element Synapse", + "slug": "elementsynapse", + "categories": [ + 4 + ], + "date_created": "2025-02-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8008, + "documentation": "https://element-hq.github.io/synapse/latest/welcome_and_overview.html", + "website": "https://element.io/", + "logo": "https://element.io/images/logo-mark-primary.svg", + "description": "Synapse is an open source Matrix homeserver implementation, written and maintained by Element. Matrix is the open standard for secure and interoperable real time communications. You can directly run and manage the source code in this repository, available under an AGPL license. There is no support provided from Element unless you have a subscription.", + "install_methods": [ + { + "type": "default", + "script": "ct/elementsynapse.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" } - ], - "default_credentials": { - "username": null, - "password": null + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "type": "info", + "text": "Type `cat ~/matrix.creds` to see admin username/password." }, - "notes": [] - } \ No newline at end of file + { + "type": "info", + "text": "Synapse-Admin is running on port 5173" + } + ] +} diff --git a/install/elementsynapse-install.sh b/install/elementsynapse-install.sh index 7a462c9a5..40215d2ea 100644 --- a/install/elementsynapse-install.sh +++ b/install/elementsynapse-install.sh @@ -17,9 +17,22 @@ msg_info "Installing Dependencies" $STD apt-get install -y \ lsb-release \ apt-transport-https \ - debconf-utils + debconf-utils \ + gpg msg_ok "Installed Dependencies" +msg_info "Setting up Node.js Repository" +mkdir -p /etc/apt/keyrings +curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list +msg_ok "Set up Node.js Repository" + +msg_info "Installing Node.js" +$STD apt-get update +$STD apt-get install -y nodejs +$STD npm install -g yarn +msg_ok "Installed Node.js" + read -p "Please enter the name for your server: " servername msg_info "Installing Element Synapse" @@ -32,9 +45,48 @@ $STD apt-get install matrix-synapse-py3 -y systemctl stop matrix-synapse sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml +SECRET=$(openssl rand -hex 32) +ADMIN_PASS="$(openssl rand -base64 18 | cut -c1-13)" +echo "enable_registration_without_verification: true" >>/etc/matrix-synapse/homeserver.yaml +echo "registration_shared_secret: ${SECRET}" >>/etc/matrix-synapse/homeserver.yaml systemctl enable -q --now matrix-synapse +$STD register_new_matrix_user -a --user admin --password "$ADMIN_PASS" --config /etc/matrix-synapse/homeserver.yaml +{ + echo "Matrix-Credentials" + echo "Admin username: admin" + echo "Admin password: $ADMIN_PASS" +} >>~/matrix.creds +systemctl stop matrix-synapse +sed -i '34d' /etc/matrix-synapse/homeserver.yaml +systemctl start matrix-synapse +temp_file=$(mktemp) +mkdir -p /opt/synapse-admin +RELEASE=$(curl -fsSL https://api.github.com/repos/etkecc/synapse-admin/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" +tar xzf "$temp_file" -C /opt/synapse-admin +cd /opt/synapse-admin +$STD yarn install --ignore-engines msg_ok "Installed Element Synapse" +msg_info "Creating Service" +cat </etc/systemd/system/synapse-admin.service +[Unit] +Description=Excalidraw Service +After=network.target +Requires=matrix-synapse.service + +[Service] +Type=simple +WorkingDirectory=/opt/synapse-admin +ExecStart=/usr/bin/yarn start --host +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now synapse-admin +msg_ok "Created Service" + motd_ssh customize From 792d370c49bf3fd870869dbdf25eecd8ee62756e Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 10:02:40 +0200 Subject: [PATCH 26/42] Update CHANGELOG.md (#4017) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20325c46c..7521464fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts + - Element Synapse: Add Synapse-Admin web UI to manage Matrix [@tremor021](https://github.com/tremor021) ([#4010](https://github.com/community-scripts/ProxmoxVE/pull/4010)) + - #### 🐞 Bug Fixes - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) From 1c2e708ccf1f5638c3336000f3c4969df960f236 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:39:04 +0200 Subject: [PATCH 27/42] Remove Whoogle (#4019) * Delete ct/whoogle.sh * Delete ct/headers/whoogle * Delete misc/images/whoogle.png * Delete install/whoogle-install.sh * Delete frontend/public/json/whoogle.json --- ct/headers/whoogle | 6 ---- ct/whoogle.sh | 44 --------------------------- frontend/public/json/whoogle.json | 34 --------------------- install/whoogle-install.sh | 48 ------------------------------ misc/images/whoogle.png | Bin 4477 -> 0 bytes 5 files changed, 132 deletions(-) delete mode 100644 ct/headers/whoogle delete mode 100644 ct/whoogle.sh delete mode 100644 frontend/public/json/whoogle.json delete mode 100644 install/whoogle-install.sh delete mode 100644 misc/images/whoogle.png diff --git a/ct/headers/whoogle b/ct/headers/whoogle deleted file mode 100644 index 39f3dd2c2..000000000 --- a/ct/headers/whoogle +++ /dev/null @@ -1,6 +0,0 @@ - _ ____ __ -| | / / /_ ____ ____ ____ _/ /__ -| | /| / / __ \/ __ \/ __ \/ __ `/ / _ \ -| |/ |/ / / / / /_/ / /_/ / /_/ / / __/ -|__/|__/_/ /_/\____/\____/\__, /_/\___/ - /____/ diff --git a/ct/whoogle.sh b/ct/whoogle.sh deleted file mode 100644 index 1b4c35c80..000000000 --- a/ct/whoogle.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/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://github.com/benbusby/whoogle-search - -APP="Whoogle" -var_tags="${var_tags:-network;seaching}" -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 [[ ! -f /usr/local/bin/whoogle-search ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ${APP} LXC" - $STD pip3 install whoogle-search --upgrade - systemctl restart whoogle.service - msg_ok "Updated Successfully" - 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}:5000${CL}" \ No newline at end of file diff --git a/frontend/public/json/whoogle.json b/frontend/public/json/whoogle.json deleted file mode 100644 index 9ae032800..000000000 --- a/frontend/public/json/whoogle.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "Whoogle", - "slug": "whoogle", - "categories": [ - 0 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 5000, - "documentation": null, - "website": "https://github.com/benbusby/whoogle-search", - "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/whoogle.png?raw=true", - "description": "Get Google search results, but without any ads, javascript, AMP links, cookies, or IP address tracking.", - "install_methods": [ - { - "type": "default", - "script": "ct/whoogle.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 2, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} \ No newline at end of file diff --git a/install/whoogle-install.sh b/install/whoogle-install.sh deleted file mode 100644 index ea4cff23e..000000000 --- a/install/whoogle-install.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/benbusby/whoogle-search - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Setup Python3" -$STD apt-get install -y \ - python3 \ - python3-dev \ - python3-pip -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Setup Python3" - -msg_info "Installing Whoogle" -$STD pip install brotli -$STD pip install whoogle-search - -service_path="/etc/systemd/system/whoogle.service" -echo "[Unit] -Description=Whoogle-Search -After=network.target -[Service] -ExecStart=/usr/local/bin/whoogle-search --host 0.0.0.0 -Restart=always -User=root -[Install] -WantedBy=multi-user.target" >$service_path - -$STD systemctl enable --now whoogle -msg_ok "Installed Whoogle" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned" diff --git a/misc/images/whoogle.png b/misc/images/whoogle.png deleted file mode 100644 index 9a6a997cdd5e22734aaa2c02614f401035dce313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4477 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 Date: Thu, 24 Apr 2025 11:41:24 +0200 Subject: [PATCH 28/42] Update CHANGELOG.md (#4022) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7521464fa..e5013b1bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,10 @@ All LXC instances created using this repository come pre-installed with Midnight - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) +### 🌐 Website + + - Remove Whoogle [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4019](https://github.com/community-scripts/ProxmoxVE/pull/4019)) + ## 2025-04-23 ### 🚀 Updated Scripts From 945a32dfeff20fde48d41b11cc9cb2482912fd14 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:49:40 +0200 Subject: [PATCH 29/42] Prepare JSON files for new website feature (#4004) * Prepare JSON files for new website feature * Update dashy.json * Update crafty-controller.json * Update ntfy.json * Update bookstack.json * Update add-lxc-iptag.json * Update zammad.json * Update adguard.json * Update apache-guacamole.json * Update authentik.json * Update authelia.json * Update gitea.json * Update forgejo.json * Update elementsynapse.json * Remove Whoogle --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com> --- frontend/public/json/2fauth.json | 3 +- frontend/public/json/add-lxc-iptag.json | 6 +-- frontend/public/json/add-netbird-lxc.json | 2 + frontend/public/json/add-tailscale-lxc.json | 2 + frontend/public/json/adguard.json | 2 + frontend/public/json/adventurelog.json | 3 +- frontend/public/json/agentdvr.json | 3 +- frontend/public/json/all-templates.json | 2 + frontend/public/json/alpine-it-tools.json | 2 + frontend/public/json/alpine.json | 2 + frontend/public/json/apache-cassandra.json | 3 +- frontend/public/json/apache-couchdb.json | 3 +- frontend/public/json/apache-guacamole.json | 2 + frontend/public/json/apache-tika.json | 2 + frontend/public/json/apache-tomcat.json | 2 + frontend/public/json/apt-cacher-ng.json | 3 +- frontend/public/json/archivebox.json | 3 +- frontend/public/json/archlinux-vm.json | 2 + frontend/public/json/aria2.json | 3 +- frontend/public/json/audiobookshelf.json | 2 + frontend/public/json/authelia.json | 2 + frontend/public/json/authentik.json | 2 + frontend/public/json/autobrr.json | 3 +- frontend/public/json/baikal.json | 3 +- frontend/public/json/barcode-buddy.json | 2 + frontend/public/json/bazarr.json | 2 + frontend/public/json/beszel.json | 3 +- frontend/public/json/blocky.json | 3 +- frontend/public/json/boltdiy.json | 2 + frontend/public/json/bookstack.json | 3 +- frontend/public/json/bunkerweb.json | 3 +- frontend/public/json/bytestash.json | 2 + frontend/public/json/caddy.json | 2 + frontend/public/json/calibre-web.json | 3 +- frontend/public/json/casaos.json | 3 +- frontend/public/json/changedetection.json | 2 + frontend/public/json/channels.json | 2 + frontend/public/json/checkmk.json | 2 + frontend/public/json/clean-lxcs.json | 2 + frontend/public/json/clean-orphaned-lvm.json | 2 + frontend/public/json/cloudflared.json | 2 + frontend/public/json/cockpit.json | 3 +- frontend/public/json/code-server.json | 2 + frontend/public/json/commafeed.json | 3 +- frontend/public/json/cosmos.json | 2 + frontend/public/json/crafty-controller.json | 3 +- frontend/public/json/cron-update-lxcs.json | 2 + frontend/public/json/cronicle.json | 3 +- frontend/public/json/cross-seed.json | 2 + frontend/public/json/crowdsec.json | 2 + frontend/public/json/cryptpad.json | 2 + frontend/public/json/daemonsync.json | 3 +- frontend/public/json/dashy.json | 3 +- frontend/public/json/debian-vm.json | 2 + frontend/public/json/debian.json | 2 + frontend/public/json/deconz.json | 3 +- frontend/public/json/deluge.json | 3 +- frontend/public/json/docker-vm.json | 2 + frontend/public/json/docker.json | 3 +- frontend/public/json/dockge.json | 3 +- frontend/public/json/docmost.json | 3 +- frontend/public/json/dolibarr.json | 2 + frontend/public/json/dotnetaspwebapi.json | 2 + frontend/public/json/duplicati.json | 3 +- frontend/public/json/elementsynapse.json | 53 ++++++++++--------- frontend/public/json/emby.json | 3 +- frontend/public/json/emqx.json | 3 +- frontend/public/json/ersatztv.json | 3 +- frontend/public/json/esphome.json | 3 +- frontend/public/json/evcc.json | 2 + frontend/public/json/excalidraw.json | 2 + frontend/public/json/fenrus.json | 3 +- frontend/public/json/fhem.json | 3 +- frontend/public/json/filebrowser.json | 2 + frontend/public/json/fileflows.json | 2 + frontend/public/json/firefly.json | 2 + frontend/public/json/flaresolverr.json | 3 +- frontend/public/json/flowiseai.json | 2 + frontend/public/json/fluid-calendar.json | 2 + frontend/public/json/forgejo.json | 3 +- frontend/public/json/freshrss.json | 2 + frontend/public/json/frigate.json | 3 +- frontend/public/json/fstrim.json | 2 + frontend/public/json/ghost.json | 2 + frontend/public/json/gitea.json | 2 + frontend/public/json/glance.json | 2 + frontend/public/json/glances.json | 2 + frontend/public/json/glpi.json | 2 + frontend/public/json/go2rtc.json | 3 +- frontend/public/json/gokapi.json | 3 +- frontend/public/json/gomft.json | 2 + frontend/public/json/gotify.json | 3 +- frontend/public/json/grafana.json | 3 +- frontend/public/json/graylog.json | 2 + frontend/public/json/grist.json | 2 + frontend/public/json/grocy.json | 3 +- frontend/public/json/habitica.json | 2 + frontend/public/json/haos-vm.json | 2 + frontend/public/json/headscale.json | 3 +- frontend/public/json/heimdall-dashboard.json | 3 +- frontend/public/json/hev-socks5-server.json | 2 + frontend/public/json/hivemq.json | 3 +- frontend/public/json/homarr.json | 2 + frontend/public/json/homeassistant-core.json | 2 + frontend/public/json/homeassistant.json | 2 + frontend/public/json/homebox.json | 2 + frontend/public/json/homebridge.json | 3 +- frontend/public/json/homepage.json | 2 + frontend/public/json/homer.json | 3 +- frontend/public/json/host-backup.json | 2 + frontend/public/json/hyperhdr.json | 3 +- frontend/public/json/hyperion.json | 3 +- frontend/public/json/influxdb.json | 2 + frontend/public/json/inspircd.json | 2 + frontend/public/json/inventree.json | 2 + frontend/public/json/iobroker.json | 3 +- frontend/public/json/iventoy.json | 3 +- frontend/public/json/jackett.json | 3 +- frontend/public/json/jellyfin.json | 3 +- frontend/public/json/jellyseerr.json | 3 +- frontend/public/json/jenkins.json | 2 + frontend/public/json/jupyternotebook.json | 2 + frontend/public/json/karakeep.json | 2 + frontend/public/json/kavita.json | 2 + frontend/public/json/kernel-clean.json | 2 + frontend/public/json/kernel-pin.json | 2 + frontend/public/json/keycloak.json | 2 + frontend/public/json/kimai.json | 3 +- frontend/public/json/koillection.json | 3 +- frontend/public/json/kometa.json | 2 + frontend/public/json/komga.json | 2 + frontend/public/json/komodo.json | 2 + frontend/public/json/kubo.json | 3 +- frontend/public/json/lazylibrarian.json | 3 +- frontend/public/json/lidarr.json | 2 + frontend/public/json/linkwarden.json | 2 + frontend/public/json/listmonk.json | 3 +- frontend/public/json/lldap.json | 3 +- frontend/public/json/lubelogger.json | 2 + frontend/public/json/lxc-delete.json | 2 + frontend/public/json/mafl.json | 3 +- frontend/public/json/magicmirror.json | 3 +- frontend/public/json/mariadb.json | 2 + frontend/public/json/matterbridge.json | 3 +- frontend/public/json/mattermost.json | 2 + frontend/public/json/mediamtx.json | 3 +- frontend/public/json/medusa.json | 3 +- frontend/public/json/meilisearch.json | 2 + frontend/public/json/memos.json | 2 + frontend/public/json/meshcentral.json | 3 +- frontend/public/json/metadata.json | 1 + frontend/public/json/metube.json | 3 +- frontend/public/json/microcode.json | 2 + frontend/public/json/mikrotik-routeros.json | 2 + frontend/public/json/minio.json | 2 + frontend/public/json/mongodb.json | 3 +- frontend/public/json/monica.json | 2 + frontend/public/json/monitor-all.json | 2 + frontend/public/json/motioneye.json | 3 +- frontend/public/json/mqtt.json | 3 +- frontend/public/json/mylar3.json | 2 + frontend/public/json/myspeed.json | 3 +- frontend/public/json/mysql.json | 2 + frontend/public/json/n8n.json | 3 +- frontend/public/json/navidrome.json | 3 +- frontend/public/json/neo4j.json | 3 +- frontend/public/json/netbox.json | 3 +- frontend/public/json/netdata.json | 2 + frontend/public/json/nextcloud-vm.json | 2 + frontend/public/json/nextcloudpi.json | 2 + frontend/public/json/nextpvr.json | 1 + frontend/public/json/nginxproxymanager.json | 2 + frontend/public/json/nocodb.json | 3 +- frontend/public/json/node-red.json | 2 + frontend/public/json/nodebb.json | 3 +- frontend/public/json/notifiarr.json | 2 + frontend/public/json/npmplus.json | 2 + frontend/public/json/ntfy.json | 3 +- frontend/public/json/nxwitness.json | 2 + frontend/public/json/nzbget.json | 2 + frontend/public/json/octoprint.json | 3 +- frontend/public/json/olivetin.json | 2 + frontend/public/json/omada.json | 2 + frontend/public/json/ombi.json | 3 +- frontend/public/json/omv.json | 2 + frontend/public/json/onedev.json | 3 +- frontend/public/json/opengist.json | 3 +- frontend/public/json/openhab.json | 2 + frontend/public/json/openobserve.json | 3 +- frontend/public/json/openproject.json | 2 + frontend/public/json/openwebui.json | 3 +- frontend/public/json/openwrt.json | 2 + frontend/public/json/openziti-controller.json | 2 + frontend/public/json/openziti-tunnel.json | 2 + frontend/public/json/opnsense-vm.json | 2 + frontend/public/json/outline.json | 3 +- frontend/public/json/overseerr.json | 3 +- frontend/public/json/owncast.json | 3 +- frontend/public/json/owncloud-vm.json | 2 + frontend/public/json/pairdrop.json | 3 +- frontend/public/json/paperless-ai.json | 2 + frontend/public/json/paperless-gpt.json | 2 + frontend/public/json/paperless-ngx.json | 3 +- frontend/public/json/part-db.json | 2 + frontend/public/json/paymenter.json | 2 + frontend/public/json/pbs-microcode.json | 2 + frontend/public/json/peanut.json | 3 +- frontend/public/json/pelican-panel.json | 2 + frontend/public/json/pelican-wings.json | 2 + frontend/public/json/petio.json | 3 +- frontend/public/json/pf2etools.json | 2 + frontend/public/json/photoprism.json | 2 + frontend/public/json/phpipam.json | 2 + frontend/public/json/pialert.json | 3 +- frontend/public/json/pihole.json | 2 + frontend/public/json/pimox-haos-vm.json | 2 + frontend/public/json/pingvin.json | 3 +- frontend/public/json/plant-it.json | 3 +- frontend/public/json/plex.json | 3 +- frontend/public/json/pocketbase.json | 2 + frontend/public/json/pocketid.json | 2 + .../public/json/podman-homeassistant.json | 3 +- frontend/public/json/podman.json | 3 +- frontend/public/json/post-pbs-install.json | 2 + frontend/public/json/post-pmg-install.json | 2 + frontend/public/json/post-pve-install.json | 2 + frontend/public/json/postgresql.json | 2 + frontend/public/json/privatebin.json | 2 + frontend/public/json/projectsend.json | 3 +- .../public/json/prometheus-alertmanager.json | 2 + .../prometheus-paperless-ngx-exporter.json | 2 + .../public/json/prometheus-pve-exporter.json | 3 +- frontend/public/json/prometheus.json | 3 +- frontend/public/json/prowlarr.json | 2 + .../public/json/proxmox-backup-server.json | 2 + .../json/proxmox-datacenter-manager.json | 2 + .../public/json/proxmox-mail-gateway.json | 2 + frontend/public/json/ps5-mqtt.json | 2 + frontend/public/json/pterodactyl-panel.json | 2 + frontend/public/json/pterodactyl-wings.json | 2 + frontend/public/json/qbittorrent.json | 2 + frontend/public/json/rabbitmq.json | 3 +- frontend/public/json/radarr.json | 2 + frontend/public/json/radicale.json | 2 + frontend/public/json/rdtclient.json | 3 +- frontend/public/json/reactive-resume.json | 2 + frontend/public/json/readarr.json | 2 + frontend/public/json/readeck.json | 3 +- frontend/public/json/recyclarr.json | 2 + frontend/public/json/redis.json | 3 +- frontend/public/json/revealjs.json | 6 +-- frontend/public/json/rtsptoweb.json | 3 +- frontend/public/json/runtipi.json | 3 +- frontend/public/json/rustdeskserver.json | 2 + frontend/public/json/sabnzbd.json | 2 + frontend/public/json/scaling-governor.json | 2 + frontend/public/json/seafile.json | 2 + frontend/public/json/searxng.json | 2 + frontend/public/json/seelf.json | 3 +- frontend/public/json/semaphore.json | 2 + frontend/public/json/sftpgo.json | 3 +- frontend/public/json/shinobi.json | 3 +- frontend/public/json/silverbullet.json | 2 + frontend/public/json/slskd.json | 2 + frontend/public/json/smokeping.json | 3 +- frontend/public/json/snipeit.json | 2 + frontend/public/json/sonarr.json | 2 + frontend/public/json/spoolman.json | 3 +- frontend/public/json/sqlserver2022.json | 2 + frontend/public/json/stirling-pdf.json | 3 +- frontend/public/json/suwayomi-server.json | 3 +- frontend/public/json/syncthing.json | 3 +- frontend/public/json/tandoor.json | 3 +- frontend/public/json/tasmoadmin.json | 3 +- frontend/public/json/tasmocompiler.json | 3 +- frontend/public/json/tautulli.json | 3 +- frontend/public/json/tdarr.json | 2 + frontend/public/json/technitiumdns.json | 3 +- frontend/public/json/teddycloud.json | 2 + frontend/public/json/the-lounge.json | 2 + frontend/public/json/threadfin.json | 2 + frontend/public/json/tianji.json | 3 +- frontend/public/json/traccar.json | 3 +- frontend/public/json/traefik.json | 3 +- frontend/public/json/transmission.json | 3 +- frontend/public/json/trilium.json | 2 + frontend/public/json/turnkey.json | 3 +- frontend/public/json/typesense.json | 2 + frontend/public/json/ubuntu.json | 3 +- frontend/public/json/ubuntu2204-vm.json | 2 + frontend/public/json/ubuntu2404-vm.json | 2 + frontend/public/json/ubuntu2410-vm.json | 2 + frontend/public/json/umami.json | 3 +- frontend/public/json/unbound.json | 2 + frontend/public/json/unifi.json | 2 + frontend/public/json/unmanic.json | 3 +- frontend/public/json/update-lxcs.json | 2 + frontend/public/json/update-repo.json | 2 + frontend/public/json/uptimekuma.json | 3 +- frontend/public/json/urbackupserver.json | 2 + frontend/public/json/vaultwarden.json | 2 + frontend/public/json/versions.json | 1 + frontend/public/json/victoriametrics.json | 2 + frontend/public/json/vikunja.json | 3 +- frontend/public/json/wallos.json | 2 + frontend/public/json/wastebin.json | 3 +- frontend/public/json/watcharr.json | 3 +- frontend/public/json/watchyourlan.json | 3 +- frontend/public/json/wavelog.json | 2 + frontend/public/json/wazuh.json | 2 + frontend/public/json/web-check.json | 2 + frontend/public/json/webmin.json | 2 + frontend/public/json/wger.json | 3 +- frontend/public/json/whisparr.json | 2 + frontend/public/json/wikijs.json | 2 + frontend/public/json/wireguard.json | 2 + frontend/public/json/wordpress.json | 3 +- frontend/public/json/yt-dlp-webui.json | 2 + frontend/public/json/yunohost.json | 3 +- frontend/public/json/zabbix.json | 2 + frontend/public/json/zammad.json | 2 + frontend/public/json/zerotier-one.json | 2 + frontend/public/json/zigbee2mqtt.json | 2 + frontend/public/json/zipline.json | 3 +- frontend/public/json/zitadel.json | 2 + frontend/public/json/zoraxy.json | 2 + frontend/public/json/zwave-js-ui.json | 3 +- 327 files changed, 677 insertions(+), 170 deletions(-) diff --git a/frontend/public/json/2fauth.json b/frontend/public/json/2fauth.json index 4989ac9db..1ca27aca4 100644 --- a/frontend/public/json/2fauth.json +++ b/frontend/public/json/2fauth.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://docs.2fauth.app/", "logo": "https://raw.githubusercontent.com/Bubka/2FAuth/refs/heads/master/public/logo.svg", + "config_path": "cat /opt/2fauth/.env", "description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] - } \ No newline at end of file + } diff --git a/frontend/public/json/add-lxc-iptag.json b/frontend/public/json/add-lxc-iptag.json index 91b3f189e..089cf11b7 100644 --- a/frontend/public/json/add-lxc-iptag.json +++ b/frontend/public/json/add-lxc-iptag.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "/opt/lxc-iptag/iptag.conf", "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": [ { @@ -33,13 +34,10 @@ "text": "Execute within the Proxmox shell", "type": "info" }, - { - "text": "Configuration: `nano /opt/lxc-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/add-netbird-lxc.json b/frontend/public/json/add-netbird-lxc.json index ebfafa51b..9256409bf 100644 --- a/frontend/public/json/add-netbird-lxc.json +++ b/frontend/public/json/add-netbird-lxc.json @@ -10,6 +10,7 @@ "documentation": "https://docs.netbird.io/", "website": "https://netbird.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/netbird.svg", + "config_path": "", "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.", "install_methods": [ { @@ -43,3 +44,4 @@ } ] } + diff --git a/frontend/public/json/add-tailscale-lxc.json b/frontend/public/json/add-tailscale-lxc.json index 5a919d7e8..d1838cb40 100644 --- a/frontend/public/json/add-tailscale-lxc.json +++ b/frontend/public/json/add-tailscale-lxc.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tailscale.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tailscale.svg", + "config_path": "", "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.", "install_methods": [ { @@ -45,3 +46,4 @@ } ] } + diff --git a/frontend/public/json/adguard.json b/frontend/public/json/adguard.json index be3eb1996..297dd8b97 100644 --- a/frontend/public/json/adguard.json +++ b/frontend/public/json/adguard.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started", "website": "https://adguard.com/en/adguard-home/overview.html", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/adguard-home.svg", + "config_path": "/opt/AdGuardHome/AdGuardHome.yaml", "description": "AdGuard Home is an open-source, self-hosted network-wide ad blocker. It blocks advertisements, trackers, phishing and malware websites, and provides protection against online threats. AdGuard Home is a DNS-based solution, which means it blocks ads and malicious content at the network level, before it even reaches your device. It runs on your home network and can be easily configured and managed through a web-based interface. It provides detailed statistics and logs, allowing you to see which websites are being blocked, and why. AdGuard Home is designed to be fast, lightweight, and easy to use, making it an ideal solution for home users who want to block ads, protect their privacy, and improve the speed and security of their online experience.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/adventurelog.json b/frontend/public/json/adventurelog.json index b5798005a..48a6e72ca 100644 --- a/frontend/public/json/adventurelog.json +++ b/frontend/public/json/adventurelog.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://adventurelog.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/adventurelog.svg", + "config_path": "", "description": "Adventure Log is an app designed to track outdoor activities and personal achievements, allowing users to log their adventures with photos, notes, and location data. It focuses on enhancing outdoor experiences by preserving memories and sharing them with others.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/agentdvr.json b/frontend/public/json/agentdvr.json index 7fbc19bf5..a722638d1 100644 --- a/frontend/public/json/agentdvr.json +++ b/frontend/public/json/agentdvr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.ispyconnect.com/", "logo": "https://ispycontent.azureedge.net/img/ispy2.png?raw=true", + "config_path": "", "description": "AgentDVR a new video surveillance solution for the Internet Of Things.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/all-templates.json b/frontend/public/json/all-templates.json index 7e9474319..5a5f5d4f1 100644 --- a/frontend/public/json/all-templates.json +++ b/frontend/public/json/all-templates.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/proxmox.svg", + "config_path": "", "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/alpine-it-tools.json b/frontend/public/json/alpine-it-tools.json index 91c042aa2..c4ea46f0c 100644 --- a/frontend/public/json/alpine-it-tools.json +++ b/frontend/public/json/alpine-it-tools.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://it-tools.tech/", "logo": "https://raw.githubusercontent.com/CorentinTh/it-tools/08d977b8cdb7ffb76adfa18ba6eb4b73795ec814/public/safari-pinned-tab.svg", + "config_path": "", "description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.", "install_methods": [ { @@ -43,3 +44,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/alpine.json b/frontend/public/json/alpine.json index ee78856ad..dc77f9fe7 100644 --- a/frontend/public/json/alpine.json +++ b/frontend/public/json/alpine.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.alpinelinux.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/alpinelinux.svg", + "config_path": "", "description": "A security-oriented, lightweight Linux distribution based on musl and BusyBox.\r\nBy default, the root password is set to alpine. If you choose to use advanced settings, you will need to define a password, autologin is currently unavailable.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/apache-cassandra.json b/frontend/public/json/apache-cassandra.json index 6b9969a37..210c2ed91 100644 --- a/frontend/public/json/apache-cassandra.json +++ b/frontend/public/json/apache-cassandra.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://cassandra.apache.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/apachecassandra.svg", + "config_path": "", "description": "Apache-Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/apache-couchdb.json b/frontend/public/json/apache-couchdb.json index 58471e897..221a24621 100644 --- a/frontend/public/json/apache-couchdb.json +++ b/frontend/public/json/apache-couchdb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://couchdb.apache.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/couchdb.svg", + "config_path": "", "description": "Apache-CouchDB Seamless multi-master sync, that scales from Big Data to Mobile, with an Intuitive HTTP/JSON API and designed for Reliability.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/apache-guacamole.json b/frontend/public/json/apache-guacamole.json index 408eb64f7..196ad5a01 100644 --- a/frontend/public/json/apache-guacamole.json +++ b/frontend/public/json/apache-guacamole.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://guacamole.apache.org/", "logo": "https://guacamole.apache.org/images/logos/guac-tricolor-logo.svg", + "config_path": "/etc/guacamole/guacd.conf", "description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/apache-tika.json b/frontend/public/json/apache-tika.json index 3bdea0580..ac38fb036 100644 --- a/frontend/public/json/apache-tika.json +++ b/frontend/public/json/apache-tika.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tika.apache.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/apache-tika.svg", + "config_path": "", "description": "The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/apache-tomcat.json b/frontend/public/json/apache-tomcat.json index 3003b7671..f297a8839 100644 --- a/frontend/public/json/apache-tomcat.json +++ b/frontend/public/json/apache-tomcat.json @@ -12,6 +12,7 @@ "documentation": "https://cwiki.apache.org/confluence/display/TOMCAT", "website": "https://tomcat.apache.org/", "logo": "https://upload.wikimedia.org/wikipedia/commons/f/fe/Apache_Tomcat_logo.svg", + "config_path": "", "description": "Apache Tomcat is an open-source application server that runs Java Servlets and JavaServer Pages (JSP). It allows developers to deploy and manage Java web applications by handling HTTP requests and serving dynamic content. Tomcat is widely used for lightweight web applications and supports various Java EE features like WebSockets and JNDI.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/apt-cacher-ng.json b/frontend/public/json/apt-cacher-ng.json index b36f46731..3d9bde262 100644 --- a/frontend/public/json/apt-cacher-ng.json +++ b/frontend/public/json/apt-cacher-ng.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.unix-ag.uni-kl.de/~bloch/acng/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/linux.svg", + "config_path": "", "description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/archivebox.json b/frontend/public/json/archivebox.json index ab1cfa995..6e51476a1 100644 --- a/frontend/public/json/archivebox.json +++ b/frontend/public/json/archivebox.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://archivebox.io/", "logo": "https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/refs/heads/dev/website/icon.png", + "config_path": "", "description": "ArchiveBox is an open source tool that lets organizations & individuals archive both public & private web content while retaining control over their data. It can be used to save copies of bookmarks, preserve evidence for legal cases, backup photos from FB/Insta/Flickr or media from YT/Soundcloud/etc., save research papers, and more...", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "helper-scripts.com" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/archlinux-vm.json b/frontend/public/json/archlinux-vm.json index 17f83bea6..75a7b9c69 100644 --- a/frontend/public/json/archlinux-vm.json +++ b/frontend/public/json/archlinux-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/arch-linux.svg", + "config_path": "", "description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/aria2.json b/frontend/public/json/aria2.json index 62c95f8c4..1f1dffb9e 100644 --- a/frontend/public/json/aria2.json +++ b/frontend/public/json/aria2.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://aria2.github.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/linux.svg", + "config_path": "", "description": "Aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/audiobookshelf.json b/frontend/public/json/audiobookshelf.json index 053e48b94..4c8bb82cc 100644 --- a/frontend/public/json/audiobookshelf.json +++ b/frontend/public/json/audiobookshelf.json @@ -12,6 +12,7 @@ "documentation": "https://www.audiobookshelf.org/guides/", "website": "https://www.audiobookshelf.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/audiobookshelf.svg", + "config_path": "", "description": "Audiobookshelf is a Self-hosted audiobook and podcast server.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/authelia.json b/frontend/public/json/authelia.json index 45051b2fb..f243243ee 100644 --- a/frontend/public/json/authelia.json +++ b/frontend/public/json/authelia.json @@ -12,6 +12,7 @@ "documentation": "https://www.authelia.com/integration/deployment/bare-metal/", "website": "https://www.authelia.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/authelia.svg", + "config_path": "/etc/authelia/configuration.yml", "description": "Authelia is an open-source authentication and authorization server and portal fulfilling the identity and access management (IAM) role of information security in providing multi-factor authentication and single sign-on (SSO) for your applications via a web portal. It acts as a companion for common reverse proxies.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/authentik.json b/frontend/public/json/authentik.json index cb8415406..19eb1ff68 100644 --- a/frontend/public/json/authentik.json +++ b/frontend/public/json/authentik.json @@ -12,6 +12,7 @@ "documentation": "https://docs.goauthentik.io/docs/", "website": "https://goauthentik.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/authentik.svg", + "config_path": "/etc/authentik/config.yml", "description": "authentik is an IdP (Identity Provider) and SSO (single sign on) that is built with security at the forefront of every piece of code, every feature, with an emphasis on flexibility and versatility.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/autobrr.json b/frontend/public/json/autobrr.json index c4f94ecb5..c8c060229 100644 --- a/frontend/public/json/autobrr.json +++ b/frontend/public/json/autobrr.json @@ -12,6 +12,7 @@ "documentation": "https://autobrr.com/configuration/autobrr", "website": "https://autobrr.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/autobrr.svg", + "config_path": "", "description": "Autobrr is a torrent downloading tool that automates the process of downloading torrents. It is designed to be modern and user-friendly, providing users with a convenient and efficient way to download torrent files. With Autobrr, you can schedule and manage your torrent downloads, and have the ability to automatically download torrents based on certain conditions, such as time of day or availability of seeds. This can save you time and effort, allowing you to focus on other tasks while your torrents are being downloaded in the background.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/baikal.json b/frontend/public/json/baikal.json index fb4d198cf..cf10f8d1e 100644 --- a/frontend/public/json/baikal.json +++ b/frontend/public/json/baikal.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://sabre.io/baikal/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/baikal.webp", + "config_path": "", "description": "Baïkal is a lightweight CalDAV+CardDAV server. It offers an extensive web interface with easy management of users, address books and calendars.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/barcode-buddy.json b/frontend/public/json/barcode-buddy.json index 27d5bc4e1..71551f2c0 100644 --- a/frontend/public/json/barcode-buddy.json +++ b/frontend/public/json/barcode-buddy.json @@ -12,6 +12,7 @@ "documentation": "https://barcodebuddy-documentation.readthedocs.io/en/latest/", "website": "https://github.com/Forceu/barcodebuddy", "logo": "https://raw.githubusercontent.com/Forceu/barcodebuddy/refs/heads/master/incl/img/favicon/android-icon-192x192.png", + "config_path": "", "description": "Barcode Buddy for Grocy is an extension for Grocy, allowing to pass barcodes to Grocy. It supports barcodes for products and chores. If you own a physical barcode scanner, it can be integrated, so that all barcodes scanned are automatically pushed to BarcodeBuddy/Grocy.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/bazarr.json b/frontend/public/json/bazarr.json index b51393f3c..856f204a8 100644 --- a/frontend/public/json/bazarr.json +++ b/frontend/public/json/bazarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.bazarr.media/", "logo": "https://www.bazarr.media/assets/img/logo.png", + "config_path": "", "description": "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/beszel.json b/frontend/public/json/beszel.json index 29abf283e..beac8cb31 100644 --- a/frontend/public/json/beszel.json +++ b/frontend/public/json/beszel.json @@ -12,6 +12,7 @@ "documentation": "https://beszel.dev/guide/what-is-beszel", "website": "https://beszel.dev/", "logo": "https://beszel.dev/icon.svg", + "config_path": "", "description": "A lightweight server monitoring platform that provides Docker statistics, historical data, and alert functions\n ", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] - } \ No newline at end of file + } diff --git a/frontend/public/json/blocky.json b/frontend/public/json/blocky.json index 3fb801df6..0db60737d 100644 --- a/frontend/public/json/blocky.json +++ b/frontend/public/json/blocky.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://0xerr0r.github.io/blocky/", "logo": "https://raw.githubusercontent.com/0xERR0R/blocky/main/docs/blocky.svg", + "config_path": "", "description": "Blocky is a software tool designed for blocking unwanted ads and trackers on local networks. It functions as a DNS proxy and runs on the Go programming language. Blocky intercepts requests to advertisements and other unwanted content and blocks them before they reach the end user. This results in a cleaner, faster, and more secure online experience for users connected to the local network. Blocky is open-source, easy to configure and can be run on a variety of devices, making it a versatile solution for small to medium-sized local networks.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/boltdiy.json b/frontend/public/json/boltdiy.json index 6705cd9b4..99c57df9e 100644 --- a/frontend/public/json/boltdiy.json +++ b/frontend/public/json/boltdiy.json @@ -12,6 +12,7 @@ "documentation": "https://stackblitz-labs.github.io/bolt.diy/", "website": "https://github.com/stackblitz-labs/bolt.diy", "logo": "https://github.com/stackblitz-labs/bolt.diy/raw/refs/heads/main/icons/logo-text.svg", + "config_path": "", "description": "The official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK!", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/bookstack.json b/frontend/public/json/bookstack.json index 2029eb015..e4a6456ec 100644 --- a/frontend/public/json/bookstack.json +++ b/frontend/public/json/bookstack.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.bookstackapp.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/bookstack.svg", + "config_path": "/opt/bookstack/.env", "description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/bunkerweb.json b/frontend/public/json/bunkerweb.json index 407767b5a..909659cb0 100644 --- a/frontend/public/json/bunkerweb.json +++ b/frontend/public/json/bunkerweb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.bunkerweb.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/bunkerweb.svg", + "config_path": "", "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/bytestash.json b/frontend/public/json/bytestash.json index d06c34e33..2df252973 100644 --- a/frontend/public/json/bytestash.json +++ b/frontend/public/json/bytestash.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/jordan-dalby/ByteStash/wiki", "website": "https://github.com/jordan-dalby/ByteStash", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/bytestash.svg", + "config_path": "", "description": "ByteStash is a self-hosted web application designed to store, organise, and manage your code snippets efficiently. With support for creating, editing, and filtering snippets, ByteStash helps you keep track of your code in one secure place.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/caddy.json b/frontend/public/json/caddy.json index bb53fd0d0..2ab46536b 100644 --- a/frontend/public/json/caddy.json +++ b/frontend/public/json/caddy.json @@ -12,6 +12,7 @@ "documentation": "https://caddyserver.com/docs/", "website": "https://caddyserver.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/caddy.svg", + "config_path": "", "description": "Caddy is a powerful, extensible platform to serve your sites, services, and apps, written in Go.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/calibre-web.json b/frontend/public/json/calibre-web.json index 5ec565c9d..808d689e9 100644 --- a/frontend/public/json/calibre-web.json +++ b/frontend/public/json/calibre-web.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/janeczku/calibre-web", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/calibre-web.svg", + "config_path": "", "description": "Calibre-Web is a web app for browsing, reading and downloading eBooks stored in a Calibre database.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/casaos.json b/frontend/public/json/casaos.json index 784a7475b..39f1aba38 100644 --- a/frontend/public/json/casaos.json +++ b/frontend/public/json/casaos.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.casaos.io/", "logo": "https://wiki.casaos.io/_assets/casaos-no-text.svg", + "config_path": "", "description": "CasaOS is a software that aims to make it easy for users to create a personal cloud system at home. It uses the Docker ecosystem to provide a simple, user-friendly experience for managing various applications and services.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/changedetection.json b/frontend/public/json/changedetection.json index 375c46338..200943928 100644 --- a/frontend/public/json/changedetection.json +++ b/frontend/public/json/changedetection.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://changedetection.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/changedetection.svg", + "config_path": "", "description": "Change Detection is a service that allows you to monitor changes to web pages and receive notifications when changes occur. It can be used for a variety of purposes such as keeping track of online price changes, monitoring news websites for updates, or tracking changes to online forums.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/channels.json b/frontend/public/json/channels.json index d555c9939..0f876ca84 100644 --- a/frontend/public/json/channels.json +++ b/frontend/public/json/channels.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://getchannels.com/dvr-server/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/channels-dvr.svg", + "config_path": "", "description": "Channels DVR Server runs on your computer or NAS device at home. There's no cloud to worry about. Your tv shows and movies will always be available.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/checkmk.json b/frontend/public/json/checkmk.json index bbe861a72..f49d20e7c 100644 --- a/frontend/public/json/checkmk.json +++ b/frontend/public/json/checkmk.json @@ -12,6 +12,7 @@ "documentation": "https://docs.checkmk.com/", "website": "https://checkmk.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/checkmk.svg", + "config_path": "", "description": "Checkmk is an IT monitoring software that tracks the health and performance of your systems, networks, servers, applications, and cloud services. It provides real-time insights, alerts for issues, and tools for troubleshooting, helping ensure smooth operations across your infrastructure.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/clean-lxcs.json b/frontend/public/json/clean-lxcs.json index 1a164023f..92c96c3f5 100644 --- a/frontend/public/json/clean-lxcs.json +++ b/frontend/public/json/clean-lxcs.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg", + "config_path": "", "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/clean-orphaned-lvm.json b/frontend/public/json/clean-orphaned-lvm.json index 6f9475a6e..229c1dbe0 100644 --- a/frontend/public/json/clean-orphaned-lvm.json +++ b/frontend/public/json/clean-orphaned-lvm.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/cloudflared.json b/frontend/public/json/cloudflared.json index 2a4aa2190..e9f235fa9 100644 --- a/frontend/public/json/cloudflared.json +++ b/frontend/public/json/cloudflared.json @@ -12,6 +12,7 @@ "documentation": "https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/", "website": "https://www.cloudflare.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/cloudflare.svg", + "config_path": "", "description": "Cloudflared is a command-line tool that allows you to securely access resources on the Cloudflare network, such as websites and APIs, from your local computer. It works by creating a secure tunnel between your computer and the Cloudflare network, allowing you to access resources as if they were on your local network.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/cockpit.json b/frontend/public/json/cockpit.json index b03d24663..bbcdf51ee 100644 --- a/frontend/public/json/cockpit.json +++ b/frontend/public/json/cockpit.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://cockpit-project.org/", "logo": "https://i0.wp.com/easycode.page/wp-content/uploads/2021/10/cockpit.png?fit=400%2C400&ssl=1", + "config_path": "", "description": "Cockpit is a web-based graphical interface for managing Linux servers. It allows users to perform tasks like configuring networks, managing storage, and monitoring system performance directly through a web browser. It integrates with existing system tools, making it suitable for both beginners and experienced admins.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/code-server.json b/frontend/public/json/code-server.json index 30b35d8a6..935e993cc 100644 --- a/frontend/public/json/code-server.json +++ b/frontend/public/json/code-server.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/visual-studio-code.svg", + "config_path": "", "description": "VS Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/commafeed.json b/frontend/public/json/commafeed.json index 07e418b23..7638882a7 100644 --- a/frontend/public/json/commafeed.json +++ b/frontend/public/json/commafeed.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.commafeed.com/", "logo": "https://raw.githubusercontent.com/Athou/commafeed/master/commafeed-client/public/app-icon-144.png", + "config_path": "", "description": "CommaFeed is a Google Reader inspired self-hosted RSS reader.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/cosmos.json b/frontend/public/json/cosmos.json index d29cdefbb..007222c71 100644 --- a/frontend/public/json/cosmos.json +++ b/frontend/public/json/cosmos.json @@ -13,6 +13,7 @@ "documentation": "https://cosmos-cloud.io/doc/1%20index/", "website": "https://cosmos-cloud.io/", "logo": "https://cosmos-cloud.io/Logo.png", + "config_path": "", "description": "Cosmos Cloud is a self-hosting platform that automates maintenance and security. It offers an app marketplace, reverse proxy management, container control, VPN integration, real-time monitoring, and disk management. Security features include SSO, anti-DDoS, and encryption. It simplifies self-hosting for all users.", "install_methods": [ { @@ -33,3 +34,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/crafty-controller.json b/frontend/public/json/crafty-controller.json index dd8d99e31..17428425f 100644 --- a/frontend/public/json/crafty-controller.json +++ b/frontend/public/json/crafty-controller.json @@ -12,6 +12,7 @@ "documentation": "https://docs.craftycontrol.com/", "website": "https://craftycontrol.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crafty-controller.svg", + "config_path": "/opt/crafty-controller/crafty/crafty-4/app/config/config.json", "description": "Crafty Controller is a free and open-source Minecraft launcher and manager that allows users to start and administer Minecraft servers from a user-friendly interface. The interface is run as a self-hosted web server that is accessible to devices on the local network by default and can be port forwarded to provide external access outside of your local network. Crafty is designed to be easy to install and use, requiring only a bit of technical knowledge and a desire to learn to get started. Crafty Controller is still actively being developed by Arcadia Technology and we are continually making major improvements to the software.\n\nCrafty Controller is a feature rich panel that allows you to create and run servers, manage players, run commands, change server settings, view and edit server files, and make backups. With the help of Crafty Controller managing a large number of Minecraft servers on separate versions is easy and intuitive to do.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] - } \ No newline at end of file + } diff --git a/frontend/public/json/cron-update-lxcs.json b/frontend/public/json/cron-update-lxcs.json index 22f2033fd..e5e22dd9e 100644 --- a/frontend/public/json/cron-update-lxcs.json +++ b/frontend/public/json/cron-update-lxcs.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/lxc.svg", + "config_path": "", "description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/cronicle.json b/frontend/public/json/cronicle.json index 2d46c1cee..049057375 100644 --- a/frontend/public/json/cronicle.json +++ b/frontend/public/json/cronicle.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/jhuckaby/Cronicle", "logo": "https://github.com/jhuckaby/Cronicle/blob/master/htdocs/images/logo-128.png?raw=true", + "config_path": "", "description": "Cronicle is a task scheduling and management software that allows users to schedule and run tasks automatically on multiple servers. It has a web-based user interface that provides a convenient and centralized way to manage tasks and view their execution status. With Cronicle, users can schedule tasks to run at specific times, or on demand, and assign tasks to specific worker servers. The software provides real-time statistics and a live log viewer to help users monitor the progress of tasks. Cronicle is designed for use in large-scale environments, making it a valuable tool for automation and management of complex and time-sensitive tasks.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/cross-seed.json b/frontend/public/json/cross-seed.json index a8a8a7cde..45f9092d4 100644 --- a/frontend/public/json/cross-seed.json +++ b/frontend/public/json/cross-seed.json @@ -12,6 +12,7 @@ "documentation": "https://www.cross-seed.org/docs/category/basics", "website": "https://www.cross-seed.org/", "logo": "https://www.cross-seed.org/img/cross-seed.svg", + "config_path": "", "description": "cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/crowdsec.json b/frontend/public/json/crowdsec.json index 04e5354b4..b65aa786b 100644 --- a/frontend/public/json/crowdsec.json +++ b/frontend/public/json/crowdsec.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://crowdsec.net/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crowdsec.svg", + "config_path": "", "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/cryptpad.json b/frontend/public/json/cryptpad.json index 06d45efce..7b0473060 100644 --- a/frontend/public/json/cryptpad.json +++ b/frontend/public/json/cryptpad.json @@ -12,6 +12,7 @@ "documentation": "https://docs.cryptpad.org/", "website": "https://cryptpad.org/", "logo": "https://raw.githubusercontent.com/cryptpad/cryptpad/refs/heads/main/customize.dist/CryptPad_logo.svg", + "config_path": "", "description": "CryptPad is a collaboration suite that is end-to-end encrypted and open-source. It is designed to facilitate collaboration by synchronizing changes to documents in real time. Since all the user data is encrypted, in the event of a breach, attackers have no way of accessing the stored content", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/daemonsync.json b/frontend/public/json/daemonsync.json index 1855ebfa6..44951a4c3 100644 --- a/frontend/public/json/daemonsync.json +++ b/frontend/public/json/daemonsync.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://daemonsync.me/", "logo": "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fimg.informer.com%2Ficons_mac%2Fpng%2F128%2F350%2F350335.png&f=1&nofb=1", + "config_path": "", "description": "Sync files from app to server, share photos & videos, back up your data and stay secure inside local network.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/dashy.json b/frontend/public/json/dashy.json index f6adc1fca..dd907f5b5 100644 --- a/frontend/public/json/dashy.json +++ b/frontend/public/json/dashy.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://dashy.to/", "logo": "https://github.com/Lissy93/dashy/raw/master/public/web-icons/dashy-logo.png", + "config_path": "/opt/dashy/public/conf.yml", "description": "Dashy is a solution that helps you organize your self-hosted services by centralizing access to them through a single interface.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/debian-vm.json b/frontend/public/json/debian-vm.json index ff2833074..0c6ca9ad8 100644 --- a/frontend/public/json/debian-vm.json +++ b/frontend/public/json/debian-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.debian.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/debian.svg", + "config_path": "", "description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/debian.json b/frontend/public/json/debian.json index 81cfae07a..8afab1e50 100644 --- a/frontend/public/json/debian.json +++ b/frontend/public/json/debian.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.debian.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/debian.svg", + "config_path": "", "description": "Debian Linux is a distribution that emphasizes free software. It supports many hardware platforms.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/deconz.json b/frontend/public/json/deconz.json index 2680e0166..86a0221f0 100644 --- a/frontend/public/json/deconz.json +++ b/frontend/public/json/deconz.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.phoscon.de/en/conbee2/software#deconz", "logo": "https://phoscon.de/img/phoscon-logo128x.svg", + "config_path": "", "description": "deCONZ is a software for managing and controlling Zigbee-based smart home devices. It allows for setting up, configuring and visualizing the status of connected devices, as well as for triggering actions and automations. It works as a bridge between the Zigbee network and other home automation systems and can be used as a standalone solution or integrated into existing setups.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/deluge.json b/frontend/public/json/deluge.json index 8d11be359..b10f817ed 100644 --- a/frontend/public/json/deluge.json +++ b/frontend/public/json/deluge.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.deluge-torrent.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/deluge.svg", + "config_path": "", "description": "Deluge is a free, open-source, lightweight BitTorrent client. It supports various platforms including Windows, Linux, and macOS, and offers features such as peer exchange, DHT, and magnet links.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "deluge" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/docker-vm.json b/frontend/public/json/docker-vm.json index b53107214..f7c409b6d 100644 --- a/frontend/public/json/docker-vm.json +++ b/frontend/public/json/docker-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.docker.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/docker.svg", + "config_path": "", "description": "Docker is an open-source project for automating the deployment of applications as portable, self-sufficient containers. This Template includes Docker Engine and Docker Compose Plugin.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/docker.json b/frontend/public/json/docker.json index e9bd5642d..4d5123b8a 100644 --- a/frontend/public/json/docker.json +++ b/frontend/public/json/docker.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.docker.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/docker.svg", + "config_path": "", "description": "Docker is an open-source project for automating the deployment of applications as portable, self-sufficient containers.", "install_methods": [ { @@ -55,4 +56,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/dockge.json b/frontend/public/json/dockge.json index a44ea51cc..efee2dda0 100644 --- a/frontend/public/json/dockge.json +++ b/frontend/public/json/dockge.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/louislam/dockge", "logo": "https://raw.githubusercontent.com/louislam/dockge/master/frontend/public/icon.svg", + "config_path": "", "description": "Dockge is a fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/docmost.json b/frontend/public/json/docmost.json index 15d110d50..0ed0acc24 100644 --- a/frontend/public/json/docmost.json +++ b/frontend/public/json/docmost.json @@ -12,6 +12,7 @@ "documentation": "https://docmost.com/docs/installation", "website": "https://docmost.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/docmost.webp", + "config_path": "", "description": "Open-source collaborative wiki and documentation software Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/dolibarr.json b/frontend/public/json/dolibarr.json index 97ed39124..c497fe63a 100644 --- a/frontend/public/json/dolibarr.json +++ b/frontend/public/json/dolibarr.json @@ -12,6 +12,7 @@ "documentation": "https://wiki.dolibarr.org/index.php?title=Home", "website": "https://www.dolibarr.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/dolibarr.svg", + "config_path": "", "description": "Dolibarr ERP CRM is a modern software package to manage your company or foundation's activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). it's an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/dotnetaspwebapi.json b/frontend/public/json/dotnetaspwebapi.json index e078427e6..a316098ca 100644 --- a/frontend/public/json/dotnetaspwebapi.json +++ b/frontend/public/json/dotnetaspwebapi.json @@ -12,6 +12,7 @@ "documentation":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu", "website":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu", "logo":"https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Microsoft_.NET_logo.svg/456px-Microsoft_.NET_logo.svg.png", + "config_path": "", "description":"Automatically setup a ASP.NET server up, as well as a FTP server so you can publish to this container from Visual Studio.", "install_methods":[ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/duplicati.json b/frontend/public/json/duplicati.json index 615ed03dd..e80c5af14 100644 --- a/frontend/public/json/duplicati.json +++ b/frontend/public/json/duplicati.json @@ -12,6 +12,7 @@ "documentation": "https://docs.duplicati.com/", "website": "https://duplicati.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/duplicati.svg", + "config_path": "", "description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/elementsynapse.json b/frontend/public/json/elementsynapse.json index 75ad3dc83..fc0c8fbb0 100644 --- a/frontend/public/json/elementsynapse.json +++ b/frontend/public/json/elementsynapse.json @@ -1,29 +1,31 @@ { - "name": "Element Synapse", - "slug": "elementsynapse", - "categories": [ - 4 - ], - "date_created": "2025-02-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8008, - "documentation": "https://element-hq.github.io/synapse/latest/welcome_and_overview.html", - "website": "https://element.io/", - "logo": "https://element.io/images/logo-mark-primary.svg", - "description": "Synapse is an open source Matrix homeserver implementation, written and maintained by Element. Matrix is the open standard for secure and interoperable real time communications. You can directly run and manage the source code in this repository, available under an AGPL license. There is no support provided from Element unless you have a subscription.", - "install_methods": [ - { - "type": "default", - "script": "ct/elementsynapse.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } + + "name": "Element Synapse", + "slug": "elementsynapse", + "categories": [ + 4 + ], + "date_created": "2025-02-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8008, + "documentation": "https://element-hq.github.io/synapse/latest/welcome_and_overview.html", + "website": "https://element.io/", + "logo": "https://element.io/images/logo-mark-primary.svg", + "config_path": "", + "description": "Synapse is an open source Matrix homeserver implementation, written and maintained by Element. Matrix is the open standard for secure and interoperable real time communications. You can directly run and manage the source code in this repository, available under an AGPL license. There is no support provided from Element unless you have a subscription.", + "install_methods": [ + { + "type": "default", + "script": "ct/elementsynapse.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } } ], "default_credentials": { @@ -41,3 +43,4 @@ } ] } + diff --git a/frontend/public/json/emby.json b/frontend/public/json/emby.json index d21f1055f..2a83aaccb 100644 --- a/frontend/public/json/emby.json +++ b/frontend/public/json/emby.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://emby.media/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/emby.svg", + "config_path": "", "description": "Emby brings together your personal videos, music, photos, and live television.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/emqx.json b/frontend/public/json/emqx.json index 0aa686554..7705594c3 100644 --- a/frontend/public/json/emqx.json +++ b/frontend/public/json/emqx.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.emqx.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/emqx.svg", + "config_path": "", "description": "EMQX is an open-source MQTT broker that features a high-performance, real-time message processing engine. It is designed to handle large-scale IoT deployments, providing fast and reliable message delivery for connected devices. EMQX is known for its scalability, reliability, and low latency, making it a popular choice for IoT and M2M applications. It also offers a wide range of features and plugins for enhanced security, monitoring, and management.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/ersatztv.json b/frontend/public/json/ersatztv.json index 9f09a9788..ae55f2bde 100644 --- a/frontend/public/json/ersatztv.json +++ b/frontend/public/json/ersatztv.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ersatztv.org/", "logo": "https://raw.githubusercontent.com/ErsatzTV/ErsatzTV/main/artwork/ersatztv-logo.svg", + "config_path": "", "description": "ErsatzTV is software for configuring and streaming custom live channels using your media library.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/esphome.json b/frontend/public/json/esphome.json index c1e9fa465..eca1af74c 100644 --- a/frontend/public/json/esphome.json +++ b/frontend/public/json/esphome.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://esphome.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/esphome.svg", + "config_path": "", "description": "ESPHome is a platform for controlling ESP8266/ESP32-based devices using configuration files and integrating them with Home Automation systems. It provides a simple and flexible way to set up and manage the functionality of these devices, including defining and automating actions, monitoring sensors, and connecting to networks and other services. ESPHome is designed to be user-friendly and easy to use, and supports a wide range of features and integrations, making it a popular choice for home automation projects and IoT applications.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/evcc.json b/frontend/public/json/evcc.json index f81fde712..0c767f895 100644 --- a/frontend/public/json/evcc.json +++ b/frontend/public/json/evcc.json @@ -12,6 +12,7 @@ "documentation": "https://evcc.io/#devices", "website": "https://evcc.io/en/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/evcc.svg", + "config_path": "", "description": "EVCC is an open-source tool that manages EV charging, prioritizing solar energy use to reduce costs and optimize charging times. It supports various EVs and chargers, adjusting power automatically based on real-time data.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/excalidraw.json b/frontend/public/json/excalidraw.json index b7ea89ecd..5eb4d3c89 100644 --- a/frontend/public/json/excalidraw.json +++ b/frontend/public/json/excalidraw.json @@ -12,6 +12,7 @@ "documentation": "https://docs.excalidraw.com/docs", "website": "https://excalidraw.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/excalidraw.svg", + "config_path": "", "description": "An open source virtual hand-drawn style whiteboard. Collaborative and end-to-end encrypted.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/fenrus.json b/frontend/public/json/fenrus.json index ff38d709f..74c9b736d 100644 --- a/frontend/public/json/fenrus.json +++ b/frontend/public/json/fenrus.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/revenz/Fenrus", "logo": "https://raw.githubusercontent.com/revenz/Fenrus/master/wwwroot/fenrus.svg", + "config_path": "", "description": "A personal home page for quick access to all your personal apps/sites.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/fhem.json b/frontend/public/json/fhem.json index 7a1f16ebc..0fb0cf9b9 100644 --- a/frontend/public/json/fhem.json +++ b/frontend/public/json/fhem.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://fhem.de/", "logo": "https://avatars.githubusercontent.com/u/45183393?s=100&v=4", + "config_path": "", "description": "FHEM stands for \"Freundliche Hausautomation und Energie-Messung,\" which translates to \"Friendly Home Automation and Energy Measurement\" in English. The software can interface with a wide range of devices, including lighting systems, thermostats, weather stations, and media devices, among others.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/filebrowser.json b/frontend/public/json/filebrowser.json index 62cb6520d..de04f278e 100644 --- a/frontend/public/json/filebrowser.json +++ b/frontend/public/json/filebrowser.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://filebrowser.org/features", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/file-browser.svg", + "config_path": "", "description": "File Browser offers a user-friendly web interface for managing files within a designated directory. It allows you to perform various actions such as uploading, deleting, previewing, renaming, and editing files.", "install_methods": [ { @@ -46,3 +47,4 @@ } ] } + diff --git a/frontend/public/json/fileflows.json b/frontend/public/json/fileflows.json index 70aa2753e..d74fe9ca7 100644 --- a/frontend/public/json/fileflows.json +++ b/frontend/public/json/fileflows.json @@ -12,6 +12,7 @@ "documentation": "https://fileflows.com/docs", "website": "https://fileflows.com/", "logo": "https://raw.githubusercontent.com/revenz/FileFlows/refs/heads/develop/icon.png", + "config_path": "", "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": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/firefly.json b/frontend/public/json/firefly.json index 5a687d05c..b5f251dd8 100644 --- a/frontend/public/json/firefly.json +++ b/frontend/public/json/firefly.json @@ -12,6 +12,7 @@ "documentation": "https://docs.firefly-iii.org/", "website": "https://firefly-iii.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/firefly-iii.svg", + "config_path": "", "description": "Firefly III is a free, self-hosted tool for managing your finances. Track expenses, plan budgets, and get detailed reports.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/flaresolverr.json b/frontend/public/json/flaresolverr.json index 7f1bbd85d..d02aaa3ab 100644 --- a/frontend/public/json/flaresolverr.json +++ b/frontend/public/json/flaresolverr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/FlareSolverr/FlareSolverr", "logo": "https://raw.githubusercontent.com/FlareSolverr/FlareSolverr/master/resources/flaresolverr_logo.svg", + "config_path": "", "description": "FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/flowiseai.json b/frontend/public/json/flowiseai.json index 0502d32f1..23662c17d 100644 --- a/frontend/public/json/flowiseai.json +++ b/frontend/public/json/flowiseai.json @@ -12,6 +12,7 @@ "documentation": "https://docs.flowiseai.com/", "website": "https://flowiseai.com/", "logo": "https://flowiseai.com/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Flogo-color-high.e60de2f8.png&w=256&q=75", + "config_path": "", "description": "FlowiseAI is an open source low-code tool for developers to build customized LLM orchestration flow & AI agents", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/fluid-calendar.json b/frontend/public/json/fluid-calendar.json index 05f4aa56b..ed30de281 100644 --- a/frontend/public/json/fluid-calendar.json +++ b/frontend/public/json/fluid-calendar.json @@ -13,6 +13,7 @@ "documentation": "https://github.com/dotnetfactory/fluid-calendar/tree/main/docs", "website": "https://github.com/dotnetfactory/fluid-calendar", "logo": "https://raw.githubusercontent.com/dotnetfactory/fluid-calendar/refs/heads/main/src/app/favicon.ico", + "config_path": "", "description": "The open-source intelligent calendar that adapts to your workflow. Experience seamless task scheduling powered by AI, designed to make your time management effortless.", "install_methods": [ { @@ -38,3 +39,4 @@ } ] } + diff --git a/frontend/public/json/forgejo.json b/frontend/public/json/forgejo.json index 3291eb57d..d5b44b125 100644 --- a/frontend/public/json/forgejo.json +++ b/frontend/public/json/forgejo.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://forgejo.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/forgejo.svg", + "config_path": "/etc/forgejo/app.ini", "description": "Forgejo is an open-source, self-hosted Git service that allows individuals and teams to manage their code repositories.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/freshrss.json b/frontend/public/json/freshrss.json index 105a99616..644f4bb15 100644 --- a/frontend/public/json/freshrss.json +++ b/frontend/public/json/freshrss.json @@ -12,6 +12,7 @@ "documentation": "https://freshrss.github.io/FreshRSS/en/", "website": "https://freshrss.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/freshrss.svg", + "config_path": "", "description": "FreshRSS is a self-hosted RSS and Atom feed aggregator that lets users collect, organize, and read from multiple sources in one place. It is lightweight, easy to work with, powerful, and customizable.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/frigate.json b/frontend/public/json/frigate.json index e1c4c1b63..ddac6e8ae 100644 --- a/frontend/public/json/frigate.json +++ b/frontend/public/json/frigate.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://frigate.video/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/frigate.svg", + "config_path": "", "description": "Frigate is an open source NVR built around real-time AI object detection. All processing is performed locally on your own hardware, and your camera feeds never leave your home.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/fstrim.json b/frontend/public/json/fstrim.json index d64fdf07f..05abd997e 100644 --- a/frontend/public/json/fstrim.json +++ b/frontend/public/json/fstrim.json @@ -10,6 +10,7 @@ "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/805", "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg", + "config_path": "", "description": "This maintains SSD performance by managing unused blocks. Thin-provisioned storage systems also require management to prevent unnecessary storage use. VMs automate fstrim, while LXC containers need manual or automated fstrim processes for optimal performance.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/ghost.json b/frontend/public/json/ghost.json index 8b2d7e6b3..778e78532 100644 --- a/frontend/public/json/ghost.json +++ b/frontend/public/json/ghost.json @@ -12,6 +12,7 @@ "documentation": "https://ghost.org/docs/", "website": "https://ghost.org", "logo": "https://raw.githubusercontent.com/TryGhost/Ghost/b6fe724b577e84f7dd174646d0323dabdcdf576e/apps/shade/src/assets/images/ghost-orb.svg", + "config_path": "", "description": "Ghost is a powerful app for professional publishers to create, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.", "install_methods": [ { @@ -39,3 +40,4 @@ } + diff --git a/frontend/public/json/gitea.json b/frontend/public/json/gitea.json index c27c95936..7036bfe5b 100644 --- a/frontend/public/json/gitea.json +++ b/frontend/public/json/gitea.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://gitea.com", "logo": "https://gitea.com/gitea/design/raw/branch/main/logo/logo.svg", + "config_path": "/etc/gitea/app.ini", "description": "Gitea is a self-hosted Git service. It provides a lightweight and easy-to-install solution for managing Git repositories. Users can collaborate on code, track issues, and manage project tasks. Gitea includes features like pull requests, code reviews, wiki, and project management tools. It is suitable for small to medium-sized teams seeking control over their Git hosting.", "install_methods": [ { @@ -43,3 +44,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/glance.json b/frontend/public/json/glance.json index 6b879a8b6..8d042d2ce 100644 --- a/frontend/public/json/glance.json +++ b/frontend/public/json/glance.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/glanceapp/glance/blob/main/docs/configuration.md", "website": "https://github.com/glanceapp/glance", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/glance.svg", + "config_path": "", "description": "A self-hosted dashboard that puts all your feeds in one place", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/glances.json b/frontend/public/json/glances.json index 031d81d8e..d0ac46f1b 100644 --- a/frontend/public/json/glances.json +++ b/frontend/public/json/glances.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://nicolargo.github.io/glances/", "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/Glances%20Logo.svg", + "config_path": "", "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/glpi.json b/frontend/public/json/glpi.json index 3e738fab1..eb80fb533 100644 --- a/frontend/public/json/glpi.json +++ b/frontend/public/json/glpi.json @@ -12,6 +12,7 @@ "documentation": "https://glpi-project.org/documentation/", "website": "https://glpi-project.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/glpi.svg", + "config_path": "", "description": "GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/go2rtc.json b/frontend/public/json/go2rtc.json index fcdd6ed7b..dace56ff9 100644 --- a/frontend/public/json/go2rtc.json +++ b/frontend/public/json/go2rtc.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/AlexxIT/go2rtc", "logo": "https://github.com/AlexxIT/go2rtc/blob/master/assets/logo.png?raw=true", + "config_path": "", "description": "go2rtc is the ultimate camera streaming application with support RTSP, WebRTC, HomeKit, FFmpeg, RTMP, etc.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/gokapi.json b/frontend/public/json/gokapi.json index 3d958dd88..25bce9bec 100644 --- a/frontend/public/json/gokapi.json +++ b/frontend/public/json/gokapi.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Forceu/Gokapi", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/linux.svg", + "config_path": "", "description": "Gokapi is a lightweight server to share files, which expire after a set amount of downloads or days.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/gomft.json b/frontend/public/json/gomft.json index 870ce3743..f0bee4849 100644 --- a/frontend/public/json/gomft.json +++ b/frontend/public/json/gomft.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/StarFleetCPTN/GoMFT#configuration", "website": "https://github.com/StarFleetCPTN/GoMFT", "logo": "https://raw.githubusercontent.com/StarFleetCPTN/GoMFT/83be259754689acc49a4b0dba25ba8384088a0fc/static/img/logo.svg", + "config_path": "", "description": "GoMFT is a web-based managed file transfer application built with Go, leveraging rclone for robust file transfer capabilities. It provides a user-friendly interface for configuring, scheduling, and monitoring file transfers across various storage providers.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/gotify.json b/frontend/public/json/gotify.json index 1ffc74ac7..ce30b147c 100644 --- a/frontend/public/json/gotify.json +++ b/frontend/public/json/gotify.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://gotify.net/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/gotify.svg", + "config_path": "", "description": "Gotify is a simple server for sending and receiving messages", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/grafana.json b/frontend/public/json/grafana.json index 8017b4edc..abb8a3567 100644 --- a/frontend/public/json/grafana.json +++ b/frontend/public/json/grafana.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://grafana.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/grafana.svg", + "config_path": "/etc/conf.d/grafana", "description": "Grafana is a data visualization and monitoring platform that enables users to query, visualize, alert on and understand metrics, logs, and other data sources. It integrates with various data sources, including Prometheus, InfluxDB, Elasticsearch, and many others, to present a unified view of the data and enable users to create insightful and interactive dashboards.", "install_methods": [ { @@ -42,4 +43,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/graylog.json b/frontend/public/json/graylog.json index 7258b2d15..861cf8e09 100644 --- a/frontend/public/json/graylog.json +++ b/frontend/public/json/graylog.json @@ -12,6 +12,7 @@ "documentation": "https://go2docs.graylog.org/current/home.htm", "website": "https://graylog.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/graylog.svg", + "config_path": "/etc/graylog/server/server.conf", "description": "Graylog is an open-source log management and analysis platform that centralizes and processes log data from various sources, enabling real-time search, analysis, and alerting for IT infrastructure monitoring and troubleshooting.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/grist.json b/frontend/public/json/grist.json index 86d42009c..f475f0070 100644 --- a/frontend/public/json/grist.json +++ b/frontend/public/json/grist.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.getgrist.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/grist.svg", + "config_path": "/opt/grist/.env", "description": "Grist is a modern, open source spreadsheet that goes beyond the grid", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/grocy.json b/frontend/public/json/grocy.json index 5bc73e0e5..5e56c2ca4 100644 --- a/frontend/public/json/grocy.json +++ b/frontend/public/json/grocy.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://grocy.info/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/grocy.svg", + "config_path": "", "description": "grocy is a web-based self-hosted groceries & household management solution for your home. It helps you keep track of your groceries and household items, manage your shopping list, and keep track of your pantry, recipes, meal plans, and more.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/habitica.json b/frontend/public/json/habitica.json index 6c6847e30..ecd3ed277 100644 --- a/frontend/public/json/habitica.json +++ b/frontend/public/json/habitica.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/HabitRPG/habitica/wiki", "website": "https://habitica.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/habitica.svg", + "config_path": "/etc/headscale/config.yaml", "description": "Habitica is an open-source habit-building program that treats your life like a role-playing game. Level up as you succeed, lose HP as you fail, and earn Gold to buy weapons and armor!", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/haos-vm.json b/frontend/public/json/haos-vm.json index eb945c24c..25d2632dd 100644 --- a/frontend/public/json/haos-vm.json +++ b/frontend/public/json/haos-vm.json @@ -12,6 +12,7 @@ "documentation": "https://www.home-assistant.io/docs/", "website": "https://www.home-assistant.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", + "config_path": "", "description": "This script automates the process of creating a Virtual Machine (VM) using the official KVM (qcow2) disk image provided by the Home Assistant Team. It involves finding, downloading, and extracting the image, defining user-defined settings, importing and attaching the disk, setting the boot order, and starting the VM. It supports various storage types, and does not involve any hidden installations. After the script completes, click on the VM, then on the Summary tab to find the VM IP.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/headscale.json b/frontend/public/json/headscale.json index d6a6c811f..d8dc0857a 100644 --- a/frontend/public/json/headscale.json +++ b/frontend/public/json/headscale.json @@ -12,6 +12,7 @@ "documentation": "https://headscale.net/", "website": "https://github.com/juanfont/headscale", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/headscale.svg", + "config_path": "/etc/headscale/config.yaml", "description": "An open source, self-hosted implementation of the Tailscale control server", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/heimdall-dashboard.json b/frontend/public/json/heimdall-dashboard.json index 0b7132e3a..65df0ba20 100644 --- a/frontend/public/json/heimdall-dashboard.json +++ b/frontend/public/json/heimdall-dashboard.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://heimdall.site/", "logo": "https://raw.githubusercontent.com/linuxserver/Heimdall/refs/heads/master/public/img/heimdall-logo.svg", + "config_path": "", "description": "Heimdall Dashboard is a self-hosted, web-based dashboard for managing and monitoring the health of applications and servers. It allows you to keep track of the status of your systems from a single, centralized location, and receive notifications when things go wrong. With Heimdall Dashboard, you have full control over your data and can customize it to meet your specific needs. Self-hosting the dashboard gives you the flexibility to run it on your own infrastructure, making it a suitable solution for organizations that prioritize data security and privacy.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/hev-socks5-server.json b/frontend/public/json/hev-socks5-server.json index 0be495b08..2001b8fec 100644 --- a/frontend/public/json/hev-socks5-server.json +++ b/frontend/public/json/hev-socks5-server.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/heiher/hev-socks5-server", "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/405px-Tux.svg.png", + "config_path": "/opt/hivemq/conf/config.xml", "description": "HevSocks5Server is a simple, lightweight socks5 server.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/hivemq.json b/frontend/public/json/hivemq.json index 8f710c564..d027d44be 100644 --- a/frontend/public/json/hivemq.json +++ b/frontend/public/json/hivemq.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.hivemq.com/", "logo": "https://hivemq.com/img/svg/hivemq-bee.svg", + "config_path": "/opt/hivemq/conf/config.xml", "description": "HiveMQ CE is a Java-based open source MQTT broker that fully supports MQTT 3.x and MQTT 5.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/homarr.json b/frontend/public/json/homarr.json index abbfda375..61439ad73 100644 --- a/frontend/public/json/homarr.json +++ b/frontend/public/json/homarr.json @@ -12,6 +12,7 @@ "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": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/homeassistant-core.json b/frontend/public/json/homeassistant-core.json index daa112323..c4c05e241 100644 --- a/frontend/public/json/homeassistant-core.json +++ b/frontend/public/json/homeassistant-core.json @@ -12,6 +12,7 @@ "documentation": "https://www.home-assistant.io/docs/", "website": "https://www.home-assistant.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", + "config_path": "/root/.homeassistant", "description": "A standalone installation of Home Assistant Core refers to a setup where the Home Assistant Core software is installed directly on a device or operating system, without the use of Docker containers. This provides a simpler, but less flexible and scalable solution, as the software is tightly coupled with the underlying system.", "install_methods": [ { @@ -49,3 +50,4 @@ } ] } + diff --git a/frontend/public/json/homeassistant.json b/frontend/public/json/homeassistant.json index 833958ff9..b4ab0d42a 100644 --- a/frontend/public/json/homeassistant.json +++ b/frontend/public/json/homeassistant.json @@ -12,6 +12,7 @@ "documentation": "https://www.home-assistant.io/docs/", "website": "https://www.home-assistant.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", + "config_path": "/var/lib/docker/volumes/hass_config/_data", "description": "A standalone container-based installation of Home Assistant Core means that the software is installed inside a Docker container, separate from the host operating system. This allows for flexibility and scalability, as well as improved security, as the container can be easily moved or isolated from other processes on the host.", "install_methods": [ { @@ -49,3 +50,4 @@ } ] } + diff --git a/frontend/public/json/homebox.json b/frontend/public/json/homebox.json index 2f9aeea1d..05208c07d 100644 --- a/frontend/public/json/homebox.json +++ b/frontend/public/json/homebox.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://homebox.software/en/", "logo": "https://homebox.software/lilbox.svg", + "config_path": "/opt/.env", "description": "HomeBox is a simple, home-focused inventory management software. It allows users to organize and track household items by adding, updating, or deleting them. Features include optional details like warranty info, CSV import/export, custom labels, locations, and multi-tenant support for sharing with others. It\u2019s designed to be fast, easy to use, and portable.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/homebridge.json b/frontend/public/json/homebridge.json index ff524aba7..91e61d6ee 100644 --- a/frontend/public/json/homebridge.json +++ b/frontend/public/json/homebridge.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://homebridge.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/homebridge.svg", + "config_path": "", "description": "Homebridge is a popular open-source software platform that enables you to integrate smart home devices and services that do not natively support Apple's HomeKit protocol into the HomeKit ecosystem. This allows you to control and automate these devices using Siri, the Home app, or other HomeKit-enabled apps, making it easy to bring together a variety of different devices into a unified smart home system. With Homebridge, you can expand the capabilities of your smart home, unlocking new possibilities for automating and controlling your devices and systems.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/homepage.json b/frontend/public/json/homepage.json index 30002b3de..7cfe74aff 100644 --- a/frontend/public/json/homepage.json +++ b/frontend/public/json/homepage.json @@ -12,6 +12,7 @@ "documentation": "https://gethomepage.dev/configs/", "website": "https://gethomepage.dev", "logo": "https://avatars.githubusercontent.com/u/122929872?v=4", + "config_path": "/opt/homepage/config/", "description": "Homepage is a self-hosted dashboard solution for centralizing and organizing data and information.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/homer.json b/frontend/public/json/homer.json index d997a01c4..c36ff0a0f 100644 --- a/frontend/public/json/homer.json +++ b/frontend/public/json/homer.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/bastienwirtz/homer#---------homer", "logo": "https://raw.githubusercontent.com/bastienwirtz/homer/main/public/assets/icons/logo.svg", + "config_path": "/opt/homer/assets/config.yml", "description": "Homer is a simple and lightweight static homepage generator that allows you to create and manage a home page for your server. It uses a YAML configuration file to define the layout and content of your homepage, making it easy to set up and customize. The generated homepage is static, meaning it does not require any server-side processing, making it fast and efficient to serve. Homer is designed to be a flexible and low-maintenance solution for organizing and accessing your services and information from a single, centralized location.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/host-backup.json b/frontend/public/json/host-backup.json index 138db07b6..2245b5adc 100644 --- a/frontend/public/json/host-backup.json +++ b/frontend/public/json/host-backup.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/bash-dark.svg", + "config_path": "", "description": "This script serves as a versatile backup utility, enabling users to specify both the backup path and the directory they want to work in. This flexibility empowers users to select the specific files and directories they wish to back up, making it compatible with a wide range of hosts, not limited to Proxmox.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/hyperhdr.json b/frontend/public/json/hyperhdr.json index d5f10ef1a..b91511987 100644 --- a/frontend/public/json/hyperhdr.json +++ b/frontend/public/json/hyperhdr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/awawa-dev/HyperHDR", "logo": "https://raw.githubusercontent.com/awawa-dev/HyperHDR/master/resources/icons/hyperhdr-icon-256px.png", + "config_path": "", "description": "HyperHDR is a highly optimized open source ambient lighting implementation based on modern digital video and audio stream analysis.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/hyperion.json b/frontend/public/json/hyperion.json index 9fdcec4bb..758ac17e3 100644 --- a/frontend/public/json/hyperion.json +++ b/frontend/public/json/hyperion.json @@ -12,6 +12,7 @@ "documentation": "https://docs.hyperion-project.org/", "website": "https://hyperion-project.org/forum/", "logo": "https://github.com/hyperion-project/hyperion.ng/raw/master/doc/logo_dark.png?raw=true", + "config_path": "", "description": "Hyperion is an opensource Ambient Lighting implementation. It supports many LED devices and video grabbers.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/influxdb.json b/frontend/public/json/influxdb.json index 7fac00d9c..5ea818245 100644 --- a/frontend/public/json/influxdb.json +++ b/frontend/public/json/influxdb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.influxdata.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/influx.svg", + "config_path": "", "description": "InfluxDB is designed to handle high write and query loads, and is optimized for storing and analyzing time-stamped data, such as metrics, events, and logs. InfluxDB supports SQL-like query language and has a built-in HTTP API for data ingestion and retrieval. It's commonly used for IoT and industrial applications where time-series data is involved.\r\n\r\nTelegraf is a server agent that collects, processes, and aggregates metrics and events data from different sources, such as systems, databases, and APIs, and outputs the data to various outputs, such as InfluxDB, Prometheus, Elasticsearch, and many others.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/inspircd.json b/frontend/public/json/inspircd.json index 391b0123c..1a4db7742 100644 --- a/frontend/public/json/inspircd.json +++ b/frontend/public/json/inspircd.json @@ -12,6 +12,7 @@ "documentation": "https://docs.inspircd.org/", "website": "https://www.inspircd.org/", "logo": "https://avatars.githubusercontent.com/u/1560750?s=200&v=4", + "config_path": "/etc/inspircd/inspircd.conf", "description": "InspIRCd is a modular C++ Internet Relay Chat (IRC) server for UNIX-like and Windows systems.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/inventree.json b/frontend/public/json/inventree.json index cd535d281..e2686bb6d 100644 --- a/frontend/public/json/inventree.json +++ b/frontend/public/json/inventree.json @@ -12,6 +12,7 @@ "documentation": "https://docs.inventree.org/en/latest/", "website": "https://inventree.org", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/inventree.svg", + "config_path": "", "description": "InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is designed to be lightweight and easy to use for SME or hobbyist applications.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/iobroker.json b/frontend/public/json/iobroker.json index 9a3539e68..304c72180 100644 --- a/frontend/public/json/iobroker.json +++ b/frontend/public/json/iobroker.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.iobroker.net/#en/intro", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/iobroker.svg", + "config_path": "", "description": "ioBroker is an open-source platform for building and managing smart home automation systems. It provides a centralized control and management interface for connected devices, sensors, and other IoT devices. ioBroker integrates with a wide range of popular smart home systems, devices, and services, making it easy to automate tasks and processes, monitor and control devices, and collect and analyze data from a variety of sources. With its flexible architecture and easy-to-use interface, ioBroker is designed to make it simple for users to build and customize their own smart home automation systems, regardless of their technical background or experience.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/iventoy.json b/frontend/public/json/iventoy.json index 3213567c1..8a3f12dac 100644 --- a/frontend/public/json/iventoy.json +++ b/frontend/public/json/iventoy.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.iventoy.com/", "logo": "https://www.iventoy.com/static/img/iventoy.png", + "config_path": "", "description": "iVentoy is an upgraded PXE server that allows simultaneous OS booting and installation on multiple machines via network. It is user-friendly, requiring only the placement of ISO files in a designated folder and selecting PXE boot on the client machine. iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, and ARM64 UEFI modes. It is compatible with over 110 OS types, including Windows, WinPE, Linux, and VMware.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/jackett.json b/frontend/public/json/jackett.json index 0a93bbc9b..4ed29ea8e 100644 --- a/frontend/public/json/jackett.json +++ b/frontend/public/json/jackett.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Jackett/Jackett", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jackett.svg", + "config_path": "", "description": "Jackett supports a wide range of trackers, including popular ones like The Pirate Bay, RARBG, and Torrentz2, as well as many private trackers. It can be integrated with several BitTorrent clients, including qBittorrent, Deluge, and uTorrent, among others.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/jellyfin.json b/frontend/public/json/jellyfin.json index 6549a6e35..2535b0f96 100644 --- a/frontend/public/json/jellyfin.json +++ b/frontend/public/json/jellyfin.json @@ -12,6 +12,7 @@ "documentation": "https://jellyfin.org/docs/", "website": "https://jellyfin.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/jellyfin.svg", + "config_path": "", "description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/jellyseerr.json b/frontend/public/json/jellyseerr.json index ba69e327c..440c90d5d 100644 --- a/frontend/public/json/jellyseerr.json +++ b/frontend/public/json/jellyseerr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Fallenbagel/jellyseerr", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/jellyseerr.svg", + "config_path": "/etc/jellyseerr/jellyseerr.conf", "description": "Jellyseerr is a free and open source software application for managing requests for your media library. It is a a fork of Overseerr built to bring support for Jellyfin & Emby media servers.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/jenkins.json b/frontend/public/json/jenkins.json index 786791675..7286eb7a6 100644 --- a/frontend/public/json/jenkins.json +++ b/frontend/public/json/jenkins.json @@ -12,6 +12,7 @@ "documentation": "https://www.jenkins.io/doc/", "website": "https://www.jenkins.io/", "logo": "https://www.jenkins.io/images/logos/jenkins/jenkins.svg", + "config_path": "", "description": "Jenkins provides hundreds of plugins to support building, deploying and automating any project. ", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/jupyternotebook.json b/frontend/public/json/jupyternotebook.json index a81e51058..bc4dfdcf4 100644 --- a/frontend/public/json/jupyternotebook.json +++ b/frontend/public/json/jupyternotebook.json @@ -12,6 +12,7 @@ "documentation": "https://jupyter-notebook.readthedocs.io/en/stable/", "website": "https://jupyter.org/", "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Jupyter_logo.svg/800px-Jupyter_logo.svg.png", + "config_path": "", "description": "The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/karakeep.json b/frontend/public/json/karakeep.json index e118e5011..1b82b8180 100644 --- a/frontend/public/json/karakeep.json +++ b/frontend/public/json/karakeep.json @@ -12,6 +12,7 @@ "documentation": "https://docs.karakeep.app/", "website": "https://karakeep.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/karakeep.svg", + "config_path": "/etc/karakeep/karakeep.env", "description": "karakeep (formerly: hoarder) is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, karakeep is the perfect tool for anyone who wants to keep track of their digital life.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/kavita.json b/frontend/public/json/kavita.json index 6e86d6fc0..78ff26512 100644 --- a/frontend/public/json/kavita.json +++ b/frontend/public/json/kavita.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.kavitareader.com/", "logo": "https://raw.githubusercontent.com/Kareadita/Kavita/develop/Logo/kavita.svg", + "config_path": "", "description": "Kavita is a fast, feature rich, cross platform reading server. Built with a focus for manga, and the goal of being a full solution for all your reading needs.", "install_methods": [ { @@ -36,3 +37,4 @@ } ] } + diff --git a/frontend/public/json/kernel-clean.json b/frontend/public/json/kernel-clean.json index a95b8296a..b6cc38c66 100644 --- a/frontend/public/json/kernel-clean.json +++ b/frontend/public/json/kernel-clean.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "Cleaning unused kernel images is beneficial for reducing the length of the GRUB menu and freeing up disk space. By removing old, unused kernels, the system is able to conserve disk space and streamline the boot process.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/kernel-pin.json b/frontend/public/json/kernel-pin.json index 9dfc5d297..129d7804b 100644 --- a/frontend/public/json/kernel-pin.json +++ b/frontend/public/json/kernel-pin.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "Kernel Pin is an essential tool for effortlessly managing kernel pinning and unpinning.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/keycloak.json b/frontend/public/json/keycloak.json index f182d81e3..579dbd96d 100644 --- a/frontend/public/json/keycloak.json +++ b/frontend/public/json/keycloak.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/193", "website": "https://www.keycloak.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/keycloak.svg", + "config_path": "", "description": "Keycloak is an open-source identity and access management solution that provides centralized authentication and authorization for modern applications and services. It enables organizations to secure their applications and services with a single sign-on (SSO) solution, reducing the need for users to remember multiple login credentials. Keycloak supports various authentication protocols, including SAML, OAuth, and OpenID Connect, and integrates with a wide range of applications and services. With Keycloak, administrators can manage user identities, define security policies, and monitor access to their applications and services. The software is designed to be scalable, flexible, and easy to use, making it a valuable tool for enhancing the security and usability of modern applications and services.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/kimai.json b/frontend/public/json/kimai.json index aac7ce01e..403a2c92f 100644 --- a/frontend/public/json/kimai.json +++ b/frontend/public/json/kimai.json @@ -12,6 +12,7 @@ "documentation": "https://www.kimai.org/documentation/", "website": "https://www.kimai.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/kimai.svg", + "config_path": "/opt/kimai/.env", "description": "Kimai is an open-source time-tracking software designed for freelancers, small teams, and businesses to efficiently track, manage, and analyze work hours. This web-based tool enables users to log their work time with ease, associating entries with specific clients, projects, and tasks.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "helper-scripts.com" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/koillection.json b/frontend/public/json/koillection.json index 25fe0b818..bc0398583 100644 --- a/frontend/public/json/koillection.json +++ b/frontend/public/json/koillection.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/benjaminjonard/koillection/wiki", "website": "https://koillection.github.io/", "logo": "https://user-images.githubusercontent.com/20560781/80213166-0e560e00-8639-11ea-944e-4f79fdbcef55.png", + "config_path": "ct/koillection.sh", "description": "Koillection is a self-hosted collection manager created to keep track of physical (mostly) collections of any kind like books, DVDs, stamps, games... Koillection is meant to be used for any kind of collections and doesn't come with pre-built metadata download. But you can tailor your own HTML scraper, or you can add your own metadata freely.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] - } \ No newline at end of file + } diff --git a/frontend/public/json/kometa.json b/frontend/public/json/kometa.json index 0a36b2b0b..6dac113d6 100644 --- a/frontend/public/json/kometa.json +++ b/frontend/public/json/kometa.json @@ -12,6 +12,7 @@ "documentation": "https://kometa.wiki/en/latest/", "website": "https://github.com/Kometa-Team/Kometa", "logo": "https://kometa.wiki/en/latest/assets/icon.png", + "config_path": "/opt/kometa/config/config.yml", "description": "Kometa (formerly known as Plex Meta Manager) is a powerful tool designed to give you complete control over your media libraries", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/komga.json b/frontend/public/json/komga.json index 79a077983..91282ad41 100644 --- a/frontend/public/json/komga.json +++ b/frontend/public/json/komga.json @@ -12,6 +12,7 @@ "documentation": "https://komga.org/docs/introduction", "website": "https://komga.org/", "logo": "https://raw.githubusercontent.com/gotson/komga/25a1cfa8660c57335313c244e41c248371ffd9d6/komga-webui/src/assets/logo.svg", + "config_path": "", "description": "A media server for your comics, mangas, BDs, magazines and eBooks. Organize your CBZ, CBR, PDF and EPUB files in different libraries, collections or reading lists. Use the integrated Webreader, the Mihon extension, any OPDS reader, or other integrations. Edit metadata for your series and books.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/komodo.json b/frontend/public/json/komodo.json index cbe372963..85219ea74 100644 --- a/frontend/public/json/komodo.json +++ b/frontend/public/json/komodo.json @@ -12,6 +12,7 @@ "documentation": "https://komo.do/docs/intro", "website": "https://komo.do", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/komodo.svg", + "config_path": "/opt/komodo/compose.env", "description": "Komodo is a build and deployment system that automates the creation of versioned Docker images from Git repositories and facilitates the deployment of Docker containers and Docker Compose setups. It provides features such as build automation triggered by Git pushes, deployment management, and monitoring of uptime and logs across multiple servers. The core API and associated agent are developed in Rust.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/kubo.json b/frontend/public/json/kubo.json index be7343ffb..eded3cb3b 100644 --- a/frontend/public/json/kubo.json +++ b/frontend/public/json/kubo.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/ipfs/kubo", "logo": "https://user-images.githubusercontent.com/157609/250148884-d6d12db8-fdcf-4be3-8546-2550b69845d8.png", + "config_path": "", "description": "Kubo, developed by IPFS, is a decentralized file storage and sharing protocol. It implements the IPFS protocol, allowing users to manage files across a distributed network, ensuring data integrity and availability. Kubo supports file versioning, pinning, provides APIs and CLI tools for developers, and allows customizable node configurations for enhanced privacy and control.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/lazylibrarian.json b/frontend/public/json/lazylibrarian.json index 9e4d9312c..58d307b9a 100644 --- a/frontend/public/json/lazylibrarian.json +++ b/frontend/public/json/lazylibrarian.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://gitlab.com/LazyLibrarian/LazyLibrarian", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/lazylibrarian.webp", + "config_path": "", "description": "LazyLibrarian is a SickBeard, CouchPotato, Headphones-like application for ebooks, audiobooks and magazines.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/lidarr.json b/frontend/public/json/lidarr.json index bfbdf3386..a7ca753d4 100644 --- a/frontend/public/json/lidarr.json +++ b/frontend/public/json/lidarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://lidarr.audio/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/lidarr.svg", + "config_path": "", "description": "Lidarr is a music management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their music collection with ease. Lidarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Radarr, to automate the downloading and organizing of music files. The software provides a web-based interface for managing and organizing music, making it easy to search and find songs, albums, and artists. Lidarr also supports metadata management, including album art, artist information, and lyrics, making it easy for users to keep their music collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing music collections, making it a valuable tool for music lovers who want to keep their collection organized and up-to-date. With Lidarr, users can enjoy their music collection from anywhere, making it a powerful tool for managing and sharing music files.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/linkwarden.json b/frontend/public/json/linkwarden.json index ea1d42abe..6c217662b 100644 --- a/frontend/public/json/linkwarden.json +++ b/frontend/public/json/linkwarden.json @@ -12,6 +12,7 @@ "documentation": "https://docs.linkwarden.app/", "website": "https://linkwarden.app/", "logo": "https://raw.githubusercontent.com/linkwarden/linkwarden/main/assets/logo.png", + "config_path": "/opt/linkwarden/.env", "description": "Linkwarden is a fully self-hostable, open-source collaborative bookmark manager to collect, organize and archive webpages.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/listmonk.json b/frontend/public/json/listmonk.json index 8010ac25a..0ee3da8be 100644 --- a/frontend/public/json/listmonk.json +++ b/frontend/public/json/listmonk.json @@ -12,6 +12,7 @@ "documentation": "https://listmonk.app/docs/", "website": "https://listmonk.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/listmonk.svg", + "config_path": "/opt/listmonk/config.toml", "description": "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/lldap.json b/frontend/public/json/lldap.json index 7178d7b4c..3decc012b 100644 --- a/frontend/public/json/lldap.json +++ b/frontend/public/json/lldap.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/lldap/lldap", "logo": "https://avatars.githubusercontent.com/u/129409591?s=64&v=4", + "config_path": "", "description": "LLDAP is a lightweight LDAP server designed for simplicity and ease of use. It provides secure user authentication and authorization management through LDAP over TLS. Ideal for small to medium-sized environments, It aims to streamline identity management tasks with a minimalistic and straightforward setup.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "password" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/lubelogger.json b/frontend/public/json/lubelogger.json index d42008334..d6db7ad6d 100644 --- a/frontend/public/json/lubelogger.json +++ b/frontend/public/json/lubelogger.json @@ -12,6 +12,7 @@ "documentation": "https://docs.lubelogger.com/", "website": "https://lubelogger.com/", "logo": "https://docs.lubelogger.com/Misc/Branding/a/image-1731645976107.png", + "config_path": "/opt/lubelogger/appsettings.json", "description": "Web-Based Vehicle Maintenance and Fuel Mileage Tracker", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/lxc-delete.json b/frontend/public/json/lxc-delete.json index b1cabc5ea..e2bd2ed57 100644 --- a/frontend/public/json/lxc-delete.json +++ b/frontend/public/json/lxc-delete.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg", + "config_path": "", "description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/mafl.json b/frontend/public/json/mafl.json index 9ed6f2e2f..60e8065c5 100644 --- a/frontend/public/json/mafl.json +++ b/frontend/public/json/mafl.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://mafl.hywax.space/", "logo": "https://raw.githubusercontent.com/hywax/mafl/main/docs/public/logotype.svg", + "config_path": "/opt/mafl/data/config.yml", "description": "Mafl is an intuitive service for organizing your homepage. Customize Mafl to your individual needs and work even more efficiently!", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/magicmirror.json b/frontend/public/json/magicmirror.json index d9b876373..08a268e48 100644 --- a/frontend/public/json/magicmirror.json +++ b/frontend/public/json/magicmirror.json @@ -12,6 +12,7 @@ "documentation": "https://docs.magicmirror.builders/configuration/introduction.html#configuring-your-magicmirror", "website": "https://docs.magicmirror.builders/", "logo": "https://github.com/MichMich/MagicMirror/raw/master/.github/header.png", + "config_path": "/opt/magicmirror/config/config.js", "description": "MagicMirror\u00b2 is a smart mirror software that allows you to build your own personal smart mirror. It uses modular components that you can customize to display information such as the weather, news, calendar, to-do list, and more. The platform is open source, allowing for community contributions and customization.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/mariadb.json b/frontend/public/json/mariadb.json index f4d656b1e..5a9a6f9c2 100644 --- a/frontend/public/json/mariadb.json +++ b/frontend/public/json/mariadb.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/192", "website": "https://mariadb.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/mariadb.svg", + "config_path": "", "description": "MariaDB is a fork of the popular MySQL database management system that is developed and maintained by the open-source community. It is also commercially supported, offering enterprise-level features and support for organizations that require them. MariaDB aims to maintain high compatibility with MySQL, ensuring a drop-in replacement capability.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/matterbridge.json b/frontend/public/json/matterbridge.json index c3307153f..26863eca3 100644 --- a/frontend/public/json/matterbridge.json +++ b/frontend/public/json/matterbridge.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Luligu/matterbridge", "logo": "https://raw.githubusercontent.com/Luligu/matterbridge/main/frontend/public/matterbridge%20624x624.png", + "config_path": "", "description": "Matterbridge allows you to have all your Matter devices up and running in a couple of minutes without having to deal with the pairing process of each single device.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/mattermost.json b/frontend/public/json/mattermost.json index cc9a3ed20..55ca85970 100644 --- a/frontend/public/json/mattermost.json +++ b/frontend/public/json/mattermost.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://mattermost.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/mattermost.svg", + "config_path": "/opt/mattermost/config/config.json", "description": "Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. It's written in Go and React and runs as a single Linux binary with MySQL or PostgreSQL. It has a slimilar interface and features to Slack or Discord.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/mediamtx.json b/frontend/public/json/mediamtx.json index b2ee80db4..8e7c7d04a 100644 --- a/frontend/public/json/mediamtx.json +++ b/frontend/public/json/mediamtx.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/bluenviron/mediamtx/blob/main/README.md", "website": "https://github.com/bluenviron/mediamtx", "logo": "https://raw.githubusercontent.com/bluenviron/mediamtx/main/logo.png", + "config_path": "", "description": "MediaMTX is a ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows you to read, publish, proxy, record and playback video and audio streams.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/medusa.json b/frontend/public/json/medusa.json index cf3ad4d99..101b588a5 100644 --- a/frontend/public/json/medusa.json +++ b/frontend/public/json/medusa.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://pymedusa.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/py-medusa.webp", + "config_path": "", "description": "Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic: automatic torrent/nzb searching, downloading, and processing at the qualities you want.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/meilisearch.json b/frontend/public/json/meilisearch.json index 6dd88e9fd..d1a851802 100644 --- a/frontend/public/json/meilisearch.json +++ b/frontend/public/json/meilisearch.json @@ -12,6 +12,7 @@ "documentation": "https://www.meilisearch.com/docs", "website": "https://www.meilisearch.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg", + "config_path": "/etc/meilisearch.toml", "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": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/memos.json b/frontend/public/json/memos.json index 84433fd61..7125eae07 100644 --- a/frontend/public/json/memos.json +++ b/frontend/public/json/memos.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.usememos.com/", "logo": "https://camo.githubusercontent.com/aa5a8cac358e3448ef7bad80fc178699841913ec438ed0ddfe18f867f931d7ee/68747470733a2f2f7777772e7573656d656d6f732e636f6d2f6c6f676f2d726f756e6465642e706e67", + "config_path": "", "description": "Memos is an open-source, self-hosted platform designed for fast, privacy-focused note-taking. Users can create, organize, and format notes with Markdown, which are securely stored in a local database. It\u2019s lightweight and customizable, built for quick access and adaptability to individual or team needs.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/meshcentral.json b/frontend/public/json/meshcentral.json index 8b434f7db..fa8d9a7c9 100644 --- a/frontend/public/json/meshcentral.json +++ b/frontend/public/json/meshcentral.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://meshcentral.com/", "logo": "https://github.com/Ylianst/MeshCentral/blob/master/public/favicon-303x303.png?raw=true", + "config_path": "", "description": "MeshCentral is a web-based computer management platform that provides remote control and management capabilities for computers. It allows administrators to manage and control computers over a local network or the internet through a single, centralized web-based interface. With MeshCentral, users can monitor the status of computers, perform remote administration tasks, and control the power state of machines. The software supports various operating systems and provides real-time updates and alerts to keep administrators informed of the status of their systems. MeshCentral is designed to provide an easy-to-use, scalable, and secure solution for remote computer management, making it a valuable tool for IT administrators, helpdesk support, and remote workers.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} 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/metube.json b/frontend/public/json/metube.json index 06efbe1e4..cb0f0cb12 100644 --- a/frontend/public/json/metube.json +++ b/frontend/public/json/metube.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/alexta69/metube", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/metube.svg", + "config_path": "/opt/metube/.env", "description": "MeTube allows you to download videos from YouTube and dozens of other sites.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/microcode.json b/frontend/public/json/microcode.json index bc79b0eb4..aedce80f0 100644 --- a/frontend/public/json/microcode.json +++ b/frontend/public/json/microcode.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true", + "config_path": "", "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor.\r\n\r\nIt's important to note that the availability of firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on the processor and its specific implementation. Therefore, it's recommended to consult the documentation for your processor to confirm whether firmware updates can be applied through the operating system.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/mikrotik-routeros.json b/frontend/public/json/mikrotik-routeros.json index a40149972..4fe95107b 100644 --- a/frontend/public/json/mikrotik-routeros.json +++ b/frontend/public/json/mikrotik-routeros.json @@ -13,6 +13,7 @@ "documentation": null, "website": "https://help.mikrotik.com/docs/display/ROS/Cloud+Hosted+Router%2C+CHR", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/mikrotik.svg", + "config_path": "", "description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.", "install_methods": [ { @@ -33,3 +34,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/minio.json b/frontend/public/json/minio.json index dc8075a9c..51b1bb1b5 100644 --- a/frontend/public/json/minio.json +++ b/frontend/public/json/minio.json @@ -12,6 +12,7 @@ "documentation": "https://min.io/docs/minio/linux/index.html", "website": "https://min.io/", "logo": "https://raw.githubusercontent.com/minio/minio/refs/heads/master/.github/logo.svg", + "config_path": "/etc/default/minio", "description": "MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/mongodb.json b/frontend/public/json/mongodb.json index a045630e4..e72fe94a0 100644 --- a/frontend/public/json/mongodb.json +++ b/frontend/public/json/mongodb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.mongodb.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/mongodb.svg", + "config_path": "", "description": "MongoDB is a NoSQL database that uses a document-oriented data model, storing data in JSON-like documents with dynamic schemas. This design offers flexibility and scalability, making it ideal for handling large volumes of data. MongoDB supports indexing, replication, and load balancing, ensuring high performance and availability, and can distribute data across multiple servers, making it well-suited for big data applications.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/monica.json b/frontend/public/json/monica.json index dbea31833..538022ac4 100644 --- a/frontend/public/json/monica.json +++ b/frontend/public/json/monica.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/monicahq/monica/tree/4.x/docs", "website": "https://www.monicahq.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/monica.svg", + "config_path": "/opt/monica/.env", "description": "Monica is an open-source personal CRM designed to help you manage and strengthen your relationships. It allows you to store important details about your contacts, track interactions, set reminders for special dates, and log activities—all in one secure, private place. Perfect for busy individuals, Monica helps you stay organized, remember meaningful moments, and nurture your connections without ads or data mining. Install it on your own server for full control!", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/monitor-all.json b/frontend/public/json/monitor-all.json index 4332fe68f..2404322bc 100644 --- a/frontend/public/json/monitor-all.json +++ b/frontend/public/json/monitor-all.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/monitor.png?raw=true", + "config_path": "", "description": "This script will add Monitor-All to Proxmox VE, which will monitor the status of all your instances, both containers and virtual machines, excluding templates and user-defined ones, and automatically restart or reset them if they become unresponsive. This is particularly useful if you're experiencing problems with Home Assistant becoming non-responsive every few days/weeks. Monitor-All also maintains a log of the entire process, which can be helpful for troubleshooting and monitoring purposes.\r\n\r\n\ud83d\udec8 Virtual machines without the QEMU guest agent installed must be excluded.\r\n\ud83d\udec8 Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running systemctl stop ping-instances.", "install_methods": [ { @@ -63,3 +64,4 @@ } ] } + diff --git a/frontend/public/json/motioneye.json b/frontend/public/json/motioneye.json index f303a7103..58197f491 100644 --- a/frontend/public/json/motioneye.json +++ b/frontend/public/json/motioneye.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/motioneye-project/motioneye/wiki", "website": "https://github.com/motioneye-project/motioneye", "logo": "https://github.com/home-assistant/brands/blob/master/core_integrations/motioneye/icon.png?raw=true", + "config_path": "/etc/motioneye/motioneye.conf", "description": "MotionEye is an open-source, self-hosted network video recording (NVR) software designed to manage and monitor IP cameras. It runs on various platforms such as Linux, Raspberry Pi, and Docker, and offers features such as real-time video streaming, motion detection, and customizable camera views.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "none" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/mqtt.json b/frontend/public/json/mqtt.json index 5685ac331..188f3e623 100644 --- a/frontend/public/json/mqtt.json +++ b/frontend/public/json/mqtt.json @@ -12,6 +12,7 @@ "documentation": "https://mosquitto.org/documentation/", "website": "https://mosquitto.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/eclipsemosquitto.svg", + "config_path": "/etc/mosquitto/conf.d/default.conf", "description": "Eclipse Mosquitto is an open-source message broker that implements the MQTT (Message Queuing Telemetry Transport) protocol. It is a lightweight and simple-to-use message broker that allows IoT devices and applications to communicate with each other by exchanging messages in real-time. Mosquitto is widely used in IoT applications, due to its low resource requirements and its compatibility with a wide range of devices and platforms", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/mylar3.json b/frontend/public/json/mylar3.json index 520e545d0..658de5bc2 100644 --- a/frontend/public/json/mylar3.json +++ b/frontend/public/json/mylar3.json @@ -12,6 +12,7 @@ "documentation": "https://mylarcomics.com/docs/introduction/", "website": "https://mylarcomics.com/", "logo": "https://mylarcomics.com/img/mylarlogo.png", + "config_path": "", "description": "Mylar is an automated Comic Book (cbr/cbz) downloader program for use with NZB and torrents.\r\nMylar allows you to create a watchlist of series that it monitors for various things (new issues, updated information, etc). It will grab, sort, and rename downloaded issues. It will also allow you to monitor weekly pull-lists for items belonging to said watchlisted series to download, as well as being able to monitor and maintain story-arcs.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/myspeed.json b/frontend/public/json/myspeed.json index 59d0a2a79..3d60842a8 100644 --- a/frontend/public/json/myspeed.json +++ b/frontend/public/json/myspeed.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://myspeed.dev/", "logo": "https://raw.githubusercontent.com/gnmyt/myspeed/development/web/public/assets/img/logo.png", + "config_path": "", "description": "MySpeed is a speed test analysis tool that records and displays internet speed metrics for up to 30 days. It offers automated tests using Cron expressions and supports multiple speed test servers (Ookla, LibreSpeed, Cloudflare). MySpeed provides detailed statistics, health check notifications via email or messaging apps, and integrates with Prometheus and Grafana for advanced monitoring.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/mysql.json b/frontend/public/json/mysql.json index c5b693a50..03fc63370 100644 --- a/frontend/public/json/mysql.json +++ b/frontend/public/json/mysql.json @@ -12,6 +12,7 @@ "documentation": "https://dev.mysql.com/doc/", "website": "https://www.mysql.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/mysql.svg", + "config_path": "", "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/n8n.json b/frontend/public/json/n8n.json index e7c72421e..1f7adffc3 100644 --- a/frontend/public/json/n8n.json +++ b/frontend/public/json/n8n.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://n8n.io/", "logo": "https://docs.n8n.io/_images/n8n-docs-icon.svg", + "config_path": "", "description": "n8n is a workflow automation tool that enables users to automate various tasks and processes by connecting various data sources, systems, and services. It provides a visual interface for building workflows, allowing users to easily define and automate complex sequences of actions, such as data processing, conditional branching, and API calls. n8n supports a wide range of integrations, making it a versatile tool for automating a variety of use cases, from simple data processing workflows to complex business processes. With its extendable architecture, n8n is designed to be easily customizable and can be adapted to meet the specific needs of different users and industries.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/navidrome.json b/frontend/public/json/navidrome.json index 8b7b2ff82..65c5f6901 100644 --- a/frontend/public/json/navidrome.json +++ b/frontend/public/json/navidrome.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.navidrome.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg", + "config_path": "/var/lib/navidrome/navidrome.toml", "description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/neo4j.json b/frontend/public/json/neo4j.json index 66f485cc3..131b67768 100644 --- a/frontend/public/json/neo4j.json +++ b/frontend/public/json/neo4j.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://neo4j.com/product/neo4j-graph-database/", "logo": "https://avatars.githubusercontent.com/u/201120?s=200&v=4", + "config_path": "/etc/neo4j/neo4j.conf", "description": "Neo4j is a graph database designed to manage complex data relationships. It uses nodes, relationships, and properties to store and analyze connected data, making it ideal for applications like recommendation engines, fraud detection, and network analysis. Its structure allows for fast querying and deep data insights through native graph storage.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "neo4j" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/netbox.json b/frontend/public/json/netbox.json index b46de4b8f..20fc24237 100644 --- a/frontend/public/json/netbox.json +++ b/frontend/public/json/netbox.json @@ -12,6 +12,7 @@ "documentation": "https://netboxlabs.com/docs/netbox/en/stable/", "website": "https://netboxlabs.com/", "logo": "https://github.com/netbox-community/netbox/wiki/images/logos/netbox_icon.svg", + "config_path": "/opt/netbox/netbox/netbox/configuration.py", "description": "NetBox is the source of truth for everything on your network, from physical components like power systems and cabling to virtual assets like IP addresses and VLANs. Network automation and observability tools depend on NetBox’s authoritative data to roll out configurations, monitor changes, and accelerate operations across the enterprise", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/netdata.json b/frontend/public/json/netdata.json index 0dd78bacd..347d7c53b 100644 --- a/frontend/public/json/netdata.json +++ b/frontend/public/json/netdata.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://www.netdata.cloud/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/netdata.svg", + "config_path": "", "description": "Netdata is an open-source, real-time performance monitoring tool designed to provide insights into the performance and health of systems and applications. It is often used by system administrators, DevOps professionals, and developers to monitor and troubleshoot issues on servers and other devices.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/nextcloud-vm.json b/frontend/public/json/nextcloud-vm.json index 3bd500d75..49602cab5 100644 --- a/frontend/public/json/nextcloud-vm.json +++ b/frontend/public/json/nextcloud-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.turnkeylinux.org/nextcloud", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nextcloud.svg", + "config_path": "", "description": "TurnKey Nextcloud is an open-source file sharing server and collaboration platform that can store your personal content, like documents and pictures, in a centralized location.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/nextcloudpi.json b/frontend/public/json/nextcloudpi.json index 7e3146688..1fd63904b 100644 --- a/frontend/public/json/nextcloudpi.json +++ b/frontend/public/json/nextcloudpi.json @@ -12,6 +12,7 @@ "documentation": "https://docs.nextcloudpi.com/", "website": "https://github.com/nextcloud/nextcloudpi", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nextcloud.svg", + "config_path": "", "description": "NextCloudPi is a popular self-hosted solution for file collaboration and data storage. It is built on the NextCloud software, which is an open-source platform for data management.", "install_methods": [ { @@ -52,3 +53,4 @@ } ] } + diff --git a/frontend/public/json/nextpvr.json b/frontend/public/json/nextpvr.json index 2d238598d..729b58dcb 100644 --- a/frontend/public/json/nextpvr.json +++ b/frontend/public/json/nextpvr.json @@ -32,3 +32,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/nginxproxymanager.json b/frontend/public/json/nginxproxymanager.json index e937ecc3c..a698bf7c3 100644 --- a/frontend/public/json/nginxproxymanager.json +++ b/frontend/public/json/nginxproxymanager.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://nginxproxymanager.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nginxproxymanager.svg", + "config_path": "", "description": "Nginx Proxy Manager is a tool that provides a web-based interface to manage Nginx reverse proxies. It enables users to easily and securely expose their services to the internet by providing features such as HTTPS encryption, domain mapping, and access control. It eliminates the need for manual configuration of Nginx reverse proxies, making it easy for users to quickly and securely expose their services to the public.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/nocodb.json b/frontend/public/json/nocodb.json index bdead1cd8..3ac6fa86c 100644 --- a/frontend/public/json/nocodb.json +++ b/frontend/public/json/nocodb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.nocodb.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/nocodb.svg", + "config_path": "", "description": "NocoDB is a document-oriented database management system. It uses the NoSQL (Not Only SQL) data model, which allows for more flexible and scalable data storage than traditional relational databases. NoCoDB stores data in JSON format, making it easier to manage and query complex data structures, and supports a range of data types, including strings, numbers, arrays, and objects. The software provides a web-based interface for managing and querying data, and includes features such as real-time data synchronization, auto-indexing, and full-text search. NoCoDB is designed to be scalable, and can be used for a range of applications, from small projects to large enterprise systems. The software is free and open-source, and is designed to be easy to use and integrate with other applications.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/node-red.json b/frontend/public/json/node-red.json index 12ac9ce75..876210324 100644 --- a/frontend/public/json/node-red.json +++ b/frontend/public/json/node-red.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://nodered.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/node-red.svg", + "config_path": "", "description": "Node-RED is a visual programming tool that allows developers and non-developers alike to easily wire together hardware devices, APIs, and online services to create custom applications. It provides a visual interface for building workflows, making it easy to create and modify complex integrations without having to write any code. Node-RED is used in a wide range of applications, from simple automations to complex integrations, and is known for its simplicity, versatility, and ease of use.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/nodebb.json b/frontend/public/json/nodebb.json index 61b9f0159..e06beb279 100644 --- a/frontend/public/json/nodebb.json +++ b/frontend/public/json/nodebb.json @@ -13,6 +13,7 @@ "documentation": "https://docs.nodebb.org/", "website": "https://nodebb.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/nodebb.svg", + "config_path": "", "description": "NodeBB Forum Software is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format → categorical hierarchies, local user accounts, and asynchronous messaging.", "install_methods": [ { @@ -37,4 +38,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/notifiarr.json b/frontend/public/json/notifiarr.json index 3e040d0a2..b2a539053 100644 --- a/frontend/public/json/notifiarr.json +++ b/frontend/public/json/notifiarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://notifiarr.com/", "logo": "https://notifiarr.com/images/logo/notifiarr.png?raw=true", + "config_path": "/etc/notifiarr/notifiarr.conf", "description": "Notifiarr is a purpose built system to bring many applications together to manage and customize notifications via Discord. You can monitor many aspects of your network(s), be notified of downtime, be notified of health issues, etc", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/npmplus.json b/frontend/public/json/npmplus.json index cb0d5ceb0..4259656e2 100644 --- a/frontend/public/json/npmplus.json +++ b/frontend/public/json/npmplus.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/ZoeyVid/NPMplus", "logo": "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/frontend/app-images/logo-256.png", + "config_path": "", "description": "NPMplus is an enhanced version of Nginx Proxy Manager. It simplifies the process of setting up reverse proxies with TLS termination through a user-friendly web interface. Key features include HTTP/3 support, integration with CrowdSec IPS, inclusion of GoAccess for real-time log analysis, and support for ModSecurity with the Core Rule Set.", "install_methods": [ { @@ -56,3 +57,4 @@ } ] } + diff --git a/frontend/public/json/ntfy.json b/frontend/public/json/ntfy.json index 6b60c42f8..db3254610 100644 --- a/frontend/public/json/ntfy.json +++ b/frontend/public/json/ntfy.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ntfy.sh/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/ntfy.svg", + "config_path": "/etc/ntfy/server.yml", "description": "ntfy (pronounced notify) is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API. It's infinitely flexible, and 100% free software.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/nxwitness.json b/frontend/public/json/nxwitness.json index b9b587f29..be5a11d13 100644 --- a/frontend/public/json/nxwitness.json +++ b/frontend/public/json/nxwitness.json @@ -12,6 +12,7 @@ "documentation": "https://support.networkoptix.com/hc/en-us/articles/360006863413-Access-the-Nx-Witness-User-Manual", "website": "https://www.networkoptix.com/nx-witness", "logo": "https://www.networkoptix.com/hs-fs/hubfs/raw_assets/public/NetworkOptix-NB/images/logo.png?width=300&height=75&name=logo.png", + "config_path": "", "description": "Nx Witness is a professional video management system (VMS) designed for IP cameras and surveillance systems. It provides real-time video streaming, recording, and remote access with an intuitive user interface. The software supports AI-based video analytics, integrates with third-party security systems, and offers advanced search and event management features. It is used for security monitoring, business intelligence, and large-scale surveillance deployments.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/nzbget.json b/frontend/public/json/nzbget.json index 322fb8581..59bc862b5 100644 --- a/frontend/public/json/nzbget.json +++ b/frontend/public/json/nzbget.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://nzbget.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/nzbget.svg", + "config_path": "", "description": "NZBGet is a Usenet downloader focused on efficiency and performance, designed to handle NZB files for downloading content from Usenet. It automates downloading, checking, repairing, and extracting files, optimizing resources to run well on lower-powered devices.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/octoprint.json b/frontend/public/json/octoprint.json index 67b4071f8..bb9c682ac 100644 --- a/frontend/public/json/octoprint.json +++ b/frontend/public/json/octoprint.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://octoprint.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/octoprint.svg", + "config_path": "", "description": "OctoPrint is a free and open-source web-based 3D printer control software that allows you to remotely control and monitor your 3D printer from a web interface. It was designed to be compatible with a wide range of 3D printers.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/olivetin.json b/frontend/public/json/olivetin.json index cdbc684ee..5740bf243 100644 --- a/frontend/public/json/olivetin.json +++ b/frontend/public/json/olivetin.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://www.olivetin.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/olivetin.svg", + "config_path": "/etc/OliveTin/config.yaml", "description": "OliveTin provides a secure and straightforward way to execute pre-determined shell commands through a web-based interface.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/omada.json b/frontend/public/json/omada.json index 0eccf6b02..f0d142127 100644 --- a/frontend/public/json/omada.json +++ b/frontend/public/json/omada.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.tp-link.com/us/support/download/omada-software-controller/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/omada.svg", + "config_path": "", "description": "Omada Controller is a software application used to manage TP-Link's Omada EAP (Enterprise Access Point) devices. It allows administrators to centrally manage a large number of EAPs, monitor network performance, and control user access to the network. The software provides an intuitive interface for network configuration, firmware upgrades, and network monitoring. By using the Omada Controller, administrators can streamline the management process, reduce manual intervention, and improve the overall security and reliability of the network.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/ombi.json b/frontend/public/json/ombi.json index a85f63214..5b1a7826c 100644 --- a/frontend/public/json/ombi.json +++ b/frontend/public/json/ombi.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ombi.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/ombi.svg", + "config_path": "", "description": "Ombi is a self-hosted web application designed to empower shared Plex, Emby or Jellyfin users with automated content request capabilities. By integrating with various TV Show and Movie DVR tools, Ombi ensures a smooth and comprehensive experience for your users, allowing them to effortlessly request content on their own.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/omv.json b/frontend/public/json/omv.json index 41fe9c20e..d62137d15 100644 --- a/frontend/public/json/omv.json +++ b/frontend/public/json/omv.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.openmediavault.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/openmediavault.svg", + "config_path": "", "description": "OpenMediaVault is a next-generation network-attached storage (NAS) solution based on Debian Linux. It provides a web-based interface for managing and storing digital data, making it easy to use and set up. OpenMediaVault supports various storage protocols, including SMB/CIFS, NFS, and FTP, and provides a wide range of features for data management, such as user and group management, disk quotas, and data backup and recovery. The software is designed to be flexible and scalable, making it a valuable solution for both personal and enterprise use. OpenMediaVault provides a stable and reliable platform for managing and storing digital data, making it a popular choice for those who want to host their own data and ensure its security and privacy. With OpenMediaVault, users can access their data from anywhere and easily share it with others, making it a valuable tool for collaboration and data management.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/onedev.json b/frontend/public/json/onedev.json index d8ce9c168..8a941dde9 100644 --- a/frontend/public/json/onedev.json +++ b/frontend/public/json/onedev.json @@ -12,6 +12,7 @@ "documentation": "https://docs.onedev.io/", "website": "https://onedev.io/", "logo": "https://docs.onedev.io/img/logo.svg", + "config_path": "", "description": "Git server with CI/CD, kanban, and packages.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] - } \ No newline at end of file + } diff --git a/frontend/public/json/opengist.json b/frontend/public/json/opengist.json index 0d285a9a2..bf7c03621 100644 --- a/frontend/public/json/opengist.json +++ b/frontend/public/json/opengist.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://opengist.io/", "logo": "https://raw.githubusercontent.com/thomiceli/opengist/master/public/opengist.svg", + "config_path": "/opt/opengist/config.yml", "description": "Self-hosted pastebin powered by Git, open-source alternative to Github Gist.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/openhab.json b/frontend/public/json/openhab.json index 1eadbc927..bc8ac3e35 100644 --- a/frontend/public/json/openhab.json +++ b/frontend/public/json/openhab.json @@ -12,6 +12,7 @@ "documentation": "https://www.openhab.org/docs/", "website": "https://www.openhab.org/", "logo": "https://www.coxprod.org/domotique/wp-content/uploads/2019/01/openhab-logo-square.png", + "config_path": "", "description": "openHAB is a popular open-source home automation platform that provides a vendor and technology agnostic solution for integrating and automating various smart home devices and services. It supports a wide range of devices and protocols, making it easy to bring together different systems and devices into a unified smart home ecosystem. With its user-friendly interface and powerful automation capabilities, openHAB makes it easy to create custom automations and monitor and control your smart home devices and systems, all from a single interface.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/openobserve.json b/frontend/public/json/openobserve.json index 231297e69..9e4e71657 100644 --- a/frontend/public/json/openobserve.json +++ b/frontend/public/json/openobserve.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://openobserve.ai/", "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/openobsecure.png?raw=true", + "config_path": "/opt/openobserve/data/.env", "description": "OpenObserve is a simple yet sophisticated log search, infrastructure monitoring, and APM solution.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/openproject.json b/frontend/public/json/openproject.json index 6a4a818d6..8df151ac7 100644 --- a/frontend/public/json/openproject.json +++ b/frontend/public/json/openproject.json @@ -12,6 +12,7 @@ "documentation": "https://www.openproject.org", "website": "https://www.openproject.org", "logo": "https://raw.githubusercontent.com/opf/openproject/dev/docker/prod/logo.png", + "config_path": "", "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": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/openwebui.json b/frontend/public/json/openwebui.json index 404e3da4d..43c56501c 100644 --- a/frontend/public/json/openwebui.json +++ b/frontend/public/json/openwebui.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://openwebui.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/open-webui.svg", + "config_path": "/opt/open-webui/.env", "description": "OpenWebUI is a self-hosted, web-based interface that allows you to run AI models entirely offline. It integrates with various LLM runners, such as OpenAI and Ollama, and supports features like markdown and LaTeX rendering, model management, and voice/video calls. It also offers multilingual support and the ability to generate images using APIs like DALL-E or ComfyUI", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/openwrt.json b/frontend/public/json/openwrt.json index 7f2d01caa..07a7f80d1 100644 --- a/frontend/public/json/openwrt.json +++ b/frontend/public/json/openwrt.json @@ -13,6 +13,7 @@ "documentation": null, "website": "https://openwrt.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/openwrt.svg", + "config_path": "", "description": "OpenWrt is a powerful open-source firmware that can transform a wide range of networking devices into highly customizable and feature-rich routers, providing users with greater control and flexibility over their network infrastructure.", "install_methods": [ { @@ -33,3 +34,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/openziti-controller.json b/frontend/public/json/openziti-controller.json index 47a119100..ad722f160 100644 --- a/frontend/public/json/openziti-controller.json +++ b/frontend/public/json/openziti-controller.json @@ -12,6 +12,7 @@ "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", + "config_path": "/opt/openziti/etc/controller/bootstrap.env", "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": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/openziti-tunnel.json b/frontend/public/json/openziti-tunnel.json index b195c32aa..d19eb4d0c 100644 --- a/frontend/public/json/openziti-tunnel.json +++ b/frontend/public/json/openziti-tunnel.json @@ -12,6 +12,7 @@ "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", + "config_path": "", "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": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/opnsense-vm.json b/frontend/public/json/opnsense-vm.json index 61a3f0f54..d1a8d2712 100644 --- a/frontend/public/json/opnsense-vm.json +++ b/frontend/public/json/opnsense-vm.json @@ -13,6 +13,7 @@ "documentation": "https://docs.opnsense.org/", "website": "https://opnsense.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/opnsense.svg", + "config_path": "", "description": "OPNsense is an open-source firewall and routing platform based on FreeBSD. It provides advanced security features, including intrusion detection, VPN support, traffic shaping, and web filtering, with an intuitive web interface for easy management. Known for its reliability and regular updates, OPNsense is a popular choice for both businesses and home networks.", "install_methods": [ { @@ -38,3 +39,4 @@ } ] } + diff --git a/frontend/public/json/outline.json b/frontend/public/json/outline.json index 184a899e6..97ccb858b 100644 --- a/frontend/public/json/outline.json +++ b/frontend/public/json/outline.json @@ -12,6 +12,7 @@ "documentation": "https://docs.getoutline.com/s/hosting/", "website": "https://www.getoutline.com", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/outline.svg", + "config_path": "/opt/outline/.env", "description": "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible. It’s time to get your team’s knowledge organized.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/overseerr.json b/frontend/public/json/overseerr.json index a2983d6d5..c41f85a30 100644 --- a/frontend/public/json/overseerr.json +++ b/frontend/public/json/overseerr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://overseerr.dev/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/overseerr.svg", + "config_path": "", "description": "Overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/owncast.json b/frontend/public/json/owncast.json index e2b7117eb..1c38b73f6 100644 --- a/frontend/public/json/owncast.json +++ b/frontend/public/json/owncast.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://owncast.online/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/owncast.svg", + "config_path": "", "description": "Owncast is a free and open source live video and web chat server for use with existing popular broadcasting software.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "abc123" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/owncloud-vm.json b/frontend/public/json/owncloud-vm.json index c7b2175a3..80e46265d 100644 --- a/frontend/public/json/owncloud-vm.json +++ b/frontend/public/json/owncloud-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.turnkeylinux.org/owncloud", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/owncloud.svg", + "config_path": "", "description": "TurnKey ownCloud is an open-source file sharing server and collaboration platform that can store your personal content, like documents and pictures, in a centralized location.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/pairdrop.json b/frontend/public/json/pairdrop.json index b72bbb60d..e89194d13 100644 --- a/frontend/public/json/pairdrop.json +++ b/frontend/public/json/pairdrop.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/schlagmichdoch/PairDrop", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/pairdrop.svg", + "config_path": "", "description": "PairDrop: Local file sharing in your browser.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/paperless-ai.json b/frontend/public/json/paperless-ai.json index 16a0fb8a2..9be7c7761 100644 --- a/frontend/public/json/paperless-ai.json +++ b/frontend/public/json/paperless-ai.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/clusterzx/paperless-ai", "logo": "https://raw.githubusercontent.com/clusterzx/paperless-ai/refs/heads/main/icon.png", + "config_path": "/opt/paperless-ai/data/.env", "description": "An automated document analyzer for Paperless-ngx using OpenAI API, Ollama and all OpenAI API compatible Services to automatically analyze and tag your documents.It features: Automode, Manual Mode, Ollama and OpenAI, a Chat function to query your documents with AI, a modern and intuitive Webinterface.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/paperless-gpt.json b/frontend/public/json/paperless-gpt.json index 59ff75b92..8fdc0255e 100644 --- a/frontend/public/json/paperless-gpt.json +++ b/frontend/public/json/paperless-gpt.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/icereed/paperless-gpt", "logo": "https://raw.githubusercontent.com/icereed/paperless-gpt/refs/heads/main/web-app/src/assets/logo.svg", + "config_path": "/opt/paperless-gpt-data/.env", "description": "Paperless-GPT seamlessly pairs with paperless-ngx to generate AI-powered document titles and tags, saving you hours of manual sorting. While other tools may offer AI chat features, paperless-gpt stands out by supercharging OCR with LLMs-ensuring high accuracy, even with tricky scans. If you’re craving next-level text extraction and effortless document organization, this is your solution.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/paperless-ngx.json b/frontend/public/json/paperless-ngx.json index 5c64c7ebf..41ef54abc 100644 --- a/frontend/public/json/paperless-ngx.json +++ b/frontend/public/json/paperless-ngx.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://docs.paperless-ngx.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/paperless-ngx.svg", + "config_path": "/opt/paperless/paperless.conf", "description": "Paperless-ngx is a software tool designed for digitizing and organizing paper documents. It provides a web-based interface for scanning, uploading, and organizing paper documents, making it easier to manage, search, and access important information. Paperless-ngx uses the OCR (Optical Character Recognition) technology to extract text from scanned images and makes it searchable, thus increasing the efficiency of document management.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/part-db.json b/frontend/public/json/part-db.json index 67d66bb3f..551f27f89 100644 --- a/frontend/public/json/part-db.json +++ b/frontend/public/json/part-db.json @@ -12,6 +12,7 @@ "documentation": "https://docs.part-db.de/", "website": "https://github.com/Part-DB/Part-DB-server", "logo": "https://avatars.githubusercontent.com/u/36010898?s=48&v=4", + "config_path": "/opt/partdb/.env.local", "description": "Part-DB is an Open source inventory management system for your electronic components", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/paymenter.json b/frontend/public/json/paymenter.json index 29396655c..939889249 100644 --- a/frontend/public/json/paymenter.json +++ b/frontend/public/json/paymenter.json @@ -12,6 +12,7 @@ "documentation": "https://paymenter.org/docs", "website": "https://paymenter.org/", "logo": "https://avatars.githubusercontent.com/u/115177786?s=200&v=4", + "config_path": "/opt/paymenter/.env", "description": "Paymenter is an open source webshop solution for hosting companies. It's developed to provide an more easy way to manage your hosting company.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/pbs-microcode.json b/frontend/public/json/pbs-microcode.json index e066d0e39..f6cecae83 100644 --- a/frontend/public/json/pbs-microcode.json +++ b/frontend/public/json/pbs-microcode.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true", + "config_path": "", "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor. This script is adapted for the Proxmox Backup Server environment and will only run on bare metal systems. If running in a virtualized environment, the script will exit. Note that firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on your processor and its implementation. Please consult your processor's documentation to verify if firmware updates can be applied through the operating system.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/peanut.json b/frontend/public/json/peanut.json index 139c990ae..6a92c25cb 100644 --- a/frontend/public/json/peanut.json +++ b/frontend/public/json/peanut.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Brandawg93/PeaNUT/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/peanut.svg", + "config_path": "/etc/peanut/settings.yml", "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/pelican-panel.json b/frontend/public/json/pelican-panel.json index 42c367752..46aba16ce 100644 --- a/frontend/public/json/pelican-panel.json +++ b/frontend/public/json/pelican-panel.json @@ -12,6 +12,7 @@ "documentation": "https://pelican.dev/docs/panel/getting-started", "website": "https://pelican.dev/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pelican-panel.svg", + "config_path": "", "description": "Pelican Panel is a web-based control panel for managing game and application servers. It provides an intuitive interface to start, stop, configure, and monitor servers easily. It works alongside Pelican Wings, a lightweight daemon that handles server deployments and resource management.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/pelican-wings.json b/frontend/public/json/pelican-wings.json index b074ad880..7232945c9 100644 --- a/frontend/public/json/pelican-wings.json +++ b/frontend/public/json/pelican-wings.json @@ -12,6 +12,7 @@ "documentation": "https://pelican.dev/docs/wings/install", "website": "https://pelican.dev/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pelican-panel.svg", + "config_path": "", "description": "Pelican Wings is Pelican's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/petio.json b/frontend/public/json/petio.json index d8fc23b6d..e0bae1281 100644 --- a/frontend/public/json/petio.json +++ b/frontend/public/json/petio.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://petio.tv/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/petio.webp", + "config_path": "", "description": "Petio is a third party companion app available to Plex server owners to allow their users to request, review and discover content.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/pf2etools.json b/frontend/public/json/pf2etools.json index 6db3e37b7..f82939b86 100644 --- a/frontend/public/json/pf2etools.json +++ b/frontend/public/json/pf2etools.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/Pf2eToolsOrg/Pf2eTools/wiki", "website": "https://pf2etools.com/", "logo": "https://raw.githubusercontent.com/Pf2eToolsOrg/Pf2eTools/refs/heads/dev/android-chrome-192x192.png", + "config_path": "", "description": "Pf2eTools is an open-source website aiming to provide tools and information for Pathfinder 2nd Edition players and gamemasters. It's built using basic web technologies to ensure wide compatibility, and utilises client-side caching for speed, efficiency, and offline access.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/photoprism.json b/frontend/public/json/photoprism.json index 4917d10b7..13dbf5236 100644 --- a/frontend/public/json/photoprism.json +++ b/frontend/public/json/photoprism.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://photoprism.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/photoprism.svg", + "config_path": "/opt/photoprism/config/.env", "description": "PhotoPrism is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/phpipam.json b/frontend/public/json/phpipam.json index 7d0592a19..d1c168e9c 100644 --- a/frontend/public/json/phpipam.json +++ b/frontend/public/json/phpipam.json @@ -12,6 +12,7 @@ "documentation": "https://phpipam.net/documents/all-documents/", "website": "https://phpipam.net/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/phpipam.webp", + "config_path": "/opt/phpipam/config.php", "description": "phpipam is an open-source web IP address management application (IPAM). Its goal is to provide light, modern and useful IP address management.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/pialert.json b/frontend/public/json/pialert.json index f661c01dd..77f6c7f9c 100644 --- a/frontend/public/json/pialert.json +++ b/frontend/public/json/pialert.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/leiweibau/Pi.Alert/", "logo": "https://raw.githubusercontent.com/leiweibau/Pi.Alert/main/front/img/favicons/glass_black_white.png", + "config_path": "/opt/pialert/config/pialert.conf", "description": "Pi.Alert is a WIFI / LAN intruder detector. Checks the devices connected and alert you with unknown devices. It also warns of the disconnection of \"always connected\" devices.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/pihole.json b/frontend/public/json/pihole.json index 9e885488b..fd7ae9768 100644 --- a/frontend/public/json/pihole.json +++ b/frontend/public/json/pihole.json @@ -12,6 +12,7 @@ "documentation": "https://docs.pi-hole.net/", "website": "https://pi-hole.net/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pi-hole.svg", + "config_path": "/etc/pihole/pihole.toml", "description": "Pi-hole is a free, open-source network-level advertisement and Internet tracker blocking application. It runs on a Raspberry Pi or other Linux-based systems and acts as a DNS sinkhole, blocking unwanted traffic before it reaches a user's device. Pi-hole can also function as a DHCP server, providing IP addresses and other network configuration information to devices on a network. The software is highly configurable and supports a wide range of customizations, such as allowing or blocking specific domains, setting up blocklists and whitelists, and customizing the appearance of the web-based interface. The main purpose of Pi-hole is to protect users' privacy and security by blocking unwanted and potentially malicious content, such as ads, trackers, and malware. It is designed to be easy to set up and use, and can be configured through a web-based interface or through a terminal-based command-line interface.", "install_methods": [ { @@ -49,3 +50,4 @@ } ] } + diff --git a/frontend/public/json/pimox-haos-vm.json b/frontend/public/json/pimox-haos-vm.json index 02b8f31b6..b69841c4c 100644 --- a/frontend/public/json/pimox-haos-vm.json +++ b/frontend/public/json/pimox-haos-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/jiangcuo/Proxmox-Port", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", + "config_path": "", "description": "The script automates the manual process of finding, downloading and extracting the aarch64 (qcow2) disk image provided by the Home Assistant Team, creating a VM with user defined settings, importing and attaching the disk, setting the boot order and starting the VM.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/pingvin.json b/frontend/public/json/pingvin.json index 67cf2e138..12bee6cbb 100644 --- a/frontend/public/json/pingvin.json +++ b/frontend/public/json/pingvin.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/stonith404/pingvin-share", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pingvin-share.svg", + "config_path": "", "description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/plant-it.json b/frontend/public/json/plant-it.json index 41c397bb2..37c09c100 100644 --- a/frontend/public/json/plant-it.json +++ b/frontend/public/json/plant-it.json @@ -12,6 +12,7 @@ "documentation": "https://docs.plant-it.org/latest/", "website": "https://plant-it.org/", "logo": "https://raw.githubusercontent.com/MDeLuise/plant-it/refs/heads/main/images/plant-it-logo.png", + "config_path": "/opt/plant-it/backend/server.env", "description": "Plant-it is a self-hosted, open-source app designed to help users manage and track plant care. It allows users to add plants, log activities like watering, fertilizing, and pruning, set reminders, and upload photos for visual tracking. The app includes a database of over 400,000 plant species, offering detailed care information such as optimal growing conditions and maintenance tips.\n\nUsers can organize their plant collection, monitor growth, and share data with others. The app is free to use and works on Android, iOS, and the web.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/plex.json b/frontend/public/json/plex.json index ace3f472d..20022725a 100644 --- a/frontend/public/json/plex.json +++ b/frontend/public/json/plex.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.plex.tv/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/plex.svg", + "config_path": "", "description": "Plex personal media server magically scans and organizes your files, sorting your media intuitively and beautifully.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/pocketbase.json b/frontend/public/json/pocketbase.json index 088cd5966..c741f7de1 100644 --- a/frontend/public/json/pocketbase.json +++ b/frontend/public/json/pocketbase.json @@ -12,6 +12,7 @@ "documentation": "https://pocketbase.io/docs/", "website": "https://pocketbase.io/", "logo": "https://pocketbase.io/images/logo.svg", + "config_path": "", "description": "PocketBase is an open source backend consisting of embedded database (SQLite) with realtime subscriptions, built-in auth management, convenient dashboard UI and simple REST-ish API.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/pocketid.json b/frontend/public/json/pocketid.json index 942bbe648..ba8ede862 100644 --- a/frontend/public/json/pocketid.json +++ b/frontend/public/json/pocketid.json @@ -12,6 +12,7 @@ "documentation": "https://pocket-id.org/docs/", "website": "https://github.com/pocket-id/pocket-id", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/pocket-id.svg", + "config_path": "/opt/pocket-id/backend/.env and /opt/pocket-id/frontend/.env", "description": "Pocket ID is a simple OIDC provider that allows users to authenticate with their passkeys to your services.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/podman-homeassistant.json b/frontend/public/json/podman-homeassistant.json index 56a54d6da..503735ab2 100644 --- a/frontend/public/json/podman-homeassistant.json +++ b/frontend/public/json/podman-homeassistant.json @@ -12,6 +12,7 @@ "documentation": "https://www.home-assistant.io/docs/", "website": "https://www.home-assistant.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", + "config_path": "", "description": "A standalone Podman container-based installation of Home Assistant Core means that the Home Assistant Core software is installed inside a container managed by Podman, separate from the host operating system. This provides a flexible and scalable solution for running the software, as the container can be easily moved between host systems or isolated from other processes for security. Podman is a popular open-source tool for managing containers that is similar to Docker, but designed for use on Linux systems without a daemon.\r\n\r\n\ud83d\udec8 If the LXC is created Privileged, the script will automatically set up USB passthrough.", "install_methods": [ { @@ -48,4 +49,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/podman.json b/frontend/public/json/podman.json index eb2871f11..49a036b0f 100644 --- a/frontend/public/json/podman.json +++ b/frontend/public/json/podman.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://podman.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/podman.svg", + "config_path": "", "description": "Podman is an open-source, daemonless, and portable container engine that allows users to manage containers on Linux systems without the need for a daemon or system service to be running in the background. It provides an API and a command-line interface that can be used to create, run, and manage containers and their associated networks, volumes, and images. It is built on top of the Open Container Initiative (OCI) runtime specification, making it compatible with other OCI-compliant container engines.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/post-pbs-install.json b/frontend/public/json/post-pbs-install.json index d5e4e9ce1..05e3ff94e 100644 --- a/frontend/public/json/post-pbs-install.json +++ b/frontend/public/json/post-pbs-install.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.", "install_methods": [ { @@ -43,3 +44,4 @@ } ] } + diff --git a/frontend/public/json/post-pmg-install.json b/frontend/public/json/post-pmg-install.json index 9875f5289..d1b9a9599 100644 --- a/frontend/public/json/post-pmg-install.json +++ b/frontend/public/json/post-pmg-install.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.", "install_methods": [ { @@ -43,3 +44,4 @@ } ] } + diff --git a/frontend/public/json/post-pve-install.json b/frontend/public/json/post-pve-install.json index ef7fa12eb..57116c31e 100644 --- a/frontend/public/json/post-pve-install.json +++ b/frontend/public/json/post-pve-install.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "This script provides options for managing Proxmox VE repositories, including disabling the Enterprise Repo, adding or correcting PVE sources, enabling the No-Subscription Repo, adding the test Repo, disabling the subscription nag, updating Proxmox VE, and rebooting the system.", "install_methods": [ { @@ -39,3 +40,4 @@ } ] } + diff --git a/frontend/public/json/postgresql.json b/frontend/public/json/postgresql.json index 9a9537933..ae4839dc3 100644 --- a/frontend/public/json/postgresql.json +++ b/frontend/public/json/postgresql.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://www.postgresql.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/postgresql.svg", + "config_path": "", "description": "PostgreSQL (often referred to as Postgres) is an open-source relational database management system that is known for its extensibility and strict adherence to SQL standards. It is a free and powerful database solution, suitable for a wide range of applications, from small projects to large enterprise systems. PostgreSQL is widely used for its reliability, feature-richness, and robustness.", "install_methods": [ { @@ -46,3 +47,4 @@ } ] } + diff --git a/frontend/public/json/privatebin.json b/frontend/public/json/privatebin.json index 62cc187cb..b0b442989 100644 --- a/frontend/public/json/privatebin.json +++ b/frontend/public/json/privatebin.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/PrivateBin/PrivateBin/wiki", "website": "https://github.com/PrivateBin/PrivateBin", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/privatebin.svg", + "config_path": "/opt/privatebin/cfg/conf.php", "description": "PrivateBin is a minimalist, open-source pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256-bit AES.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/projectsend.json b/frontend/public/json/projectsend.json index 6cb6bbf65..e370a0a48 100644 --- a/frontend/public/json/projectsend.json +++ b/frontend/public/json/projectsend.json @@ -12,6 +12,7 @@ "documentation": "https://docs.projectsend.org/", "website": "https://projectsend.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/projectsend.svg", + "config_path": "/opt/projectsend/includes/sys.config.php", "description": "ProjectSend is a free, open source software that lets you share files with your clients, focused on ease of use and privacy. It supports clients groups, system users roles, statistics, multiple languages, detailed logs... and much more!", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] - } \ No newline at end of file + } diff --git a/frontend/public/json/prometheus-alertmanager.json b/frontend/public/json/prometheus-alertmanager.json index 5247feac5..3fa2f5d54 100644 --- a/frontend/public/json/prometheus-alertmanager.json +++ b/frontend/public/json/prometheus-alertmanager.json @@ -12,6 +12,7 @@ "documentation": "https://prometheus.io/docs/alerting/latest/overview/", "website": "https://prometheus.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/prometheus.svg", + "config_path": "/etc/alertmanager/alertmanager.yml", "description": "Alerting with Prometheus is separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The Alertmanager then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, on-call notification systems, and chat platforms.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/prometheus-paperless-ngx-exporter.json b/frontend/public/json/prometheus-paperless-ngx-exporter.json index 05dd437d2..5460d4680 100644 --- a/frontend/public/json/prometheus-paperless-ngx-exporter.json +++ b/frontend/public/json/prometheus-paperless-ngx-exporter.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/hansmi/prometheus-paperless-exporter", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/paperless-ngx.svg", + "config_path": "", "description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/prometheus-pve-exporter.json b/frontend/public/json/prometheus-pve-exporter.json index ecaa9df63..9f97fa908 100644 --- a/frontend/public/json/prometheus-pve-exporter.json +++ b/frontend/public/json/prometheus-pve-exporter.json @@ -13,6 +13,7 @@ "documentation": "https://github.com/prometheus-pve/prometheus-pve-exporter", "website": "https://github.com/prometheus-pve/prometheus-pve-exporter", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "An exporter that exposes information gathered from Proxmox VE node for use by the Prometheus monitoring system.", "install_methods": [ { @@ -37,4 +38,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/prometheus.json b/frontend/public/json/prometheus.json index db7d86676..6fbe9356b 100644 --- a/frontend/public/json/prometheus.json +++ b/frontend/public/json/prometheus.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://prometheus.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/prometheus.svg", + "config_path": "/etc/prometheus/prometheus.yml", "description": "Prometheus is widely used to monitor the performance and health of various infrastructure components and applications, and trigger alerts based on predefined rules. It has a multi-dimensional data model and supports various data sources and exporters, making it an extremely flexible and scalable monitoring solution.", "install_methods": [ { @@ -42,4 +43,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/prowlarr.json b/frontend/public/json/prowlarr.json index 9020a2393..b95ca7fe0 100644 --- a/frontend/public/json/prowlarr.json +++ b/frontend/public/json/prowlarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Prowlarr/Prowlarr", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/prowlarr.svg", + "config_path": "", "description": "Prowlarr is a software tool designed to integrate with various PVR (Personal Video Recorder) apps. It is built on a popular *arr .net/ReactJS base stack and serves as an indexer manager and proxy. Prowlarr makes it easy to manage and organize TV show and movie collections, by integrating with popular PVR apps and automating the downloading and organizing of media files. The software provides a web-based interface for managing and organizing TV shows and movies, making it easy to search and find content. Prowlarr also supports metadata management, including show and movie information, making it easy for users to keep their media collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing media collections, making it a valuable tool for media enthusiasts who want to keep their collection organized and up-to-date. With Prowlarr, users can enjoy their media collection from anywhere, making it a powerful tool for managing and sharing media files.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/proxmox-backup-server.json b/frontend/public/json/proxmox-backup-server.json index f1bfd9af7..49c9957d8 100644 --- a/frontend/public/json/proxmox-backup-server.json +++ b/frontend/public/json/proxmox-backup-server.json @@ -12,6 +12,7 @@ "documentation": "https://pbs.proxmox.com/docs/", "website": "https://www.proxmox.com/en/proxmox-backup-server/overview", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "Proxmox Backup Server is an enterprise backup solution, for backing up and restoring VMs, containers, and physical hosts. By supporting incremental, fully deduplicated backups, Proxmox Backup Server significantly reduces network load and saves valuable storage space.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/proxmox-datacenter-manager.json b/frontend/public/json/proxmox-datacenter-manager.json index 72f960c03..0ae57df9f 100644 --- a/frontend/public/json/proxmox-datacenter-manager.json +++ b/frontend/public/json/proxmox-datacenter-manager.json @@ -12,6 +12,7 @@ "documentation": "https://pve.proxmox.com/wiki/Proxmox_Datacenter_Manager_Roadmap", "website": "https://pve.proxmox.com/wiki/Proxmox_Datacenter_Manager_Roadmap", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "The Proxmox Datacenter Manager project has been developed with the objective of providing a centralized overview of all your individual nodes and clusters. It also enables basic management like migrations of virtual guests without any cluster network requirements. ", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/proxmox-mail-gateway.json b/frontend/public/json/proxmox-mail-gateway.json index 79d364979..25673663c 100644 --- a/frontend/public/json/proxmox-mail-gateway.json +++ b/frontend/public/json/proxmox-mail-gateway.json @@ -12,6 +12,7 @@ "documentation": "https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html", "website": "https://www.proxmox.com/en/products/proxmox-mail-gateway/overview", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg", + "config_path": "", "description": "Proxmox Mail Gateway is the leading open-source email security solution helping you to protect your mail server against all email threats from the moment they emerge.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/ps5-mqtt.json b/frontend/public/json/ps5-mqtt.json index 355a66801..350757fa7 100644 --- a/frontend/public/json/ps5-mqtt.json +++ b/frontend/public/json/ps5-mqtt.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/FunkeyFlo/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/ps5-mqtt.svg", + "config_path": "/opt/.config/ps5-mqtt/config.json", "description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/pterodactyl-panel.json b/frontend/public/json/pterodactyl-panel.json index 87b326112..eae913f0c 100644 --- a/frontend/public/json/pterodactyl-panel.json +++ b/frontend/public/json/pterodactyl-panel.json @@ -12,6 +12,7 @@ "documentation": "https://pterodactyl.io/panel/1.0/getting_started.html", "website": "https://pterodactyl.io", "logo": "https://pterodactyl.io/logos/pterry.svg", + "config_path": "/opt/pterodactyl-panel/.env", "description": "Pterodactyl Panel is a web-based control panel for managing game and application servers. It provides an intuitive interface to start, stop, configure, and monitor servers easily. It works alongside Pterodactyl Wings, a lightweight daemon that handles server deployments and resource management.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/pterodactyl-wings.json b/frontend/public/json/pterodactyl-wings.json index 0d04915b7..d0edeaa80 100644 --- a/frontend/public/json/pterodactyl-wings.json +++ b/frontend/public/json/pterodactyl-wings.json @@ -12,6 +12,7 @@ "documentation": "https://pterodactyl.io/wings/1.0/installing.html", "website": "https://pterodactyl.io", "logo": "https://pterodactyl.io/logos/pterry.svg", + "config_path": "", "description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/qbittorrent.json b/frontend/public/json/qbittorrent.json index 36e19d9d4..767e0682c 100644 --- a/frontend/public/json/qbittorrent.json +++ b/frontend/public/json/qbittorrent.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/qbittorrent/qBittorrent/wiki/", "website": "https://www.qbittorrent.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/qbittorrent.svg", + "config_path": "$HOME/.config/qBittorrent/qBittorrent.conf", "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": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/rabbitmq.json b/frontend/public/json/rabbitmq.json index ab9b9c8d3..7a927b874 100644 --- a/frontend/public/json/rabbitmq.json +++ b/frontend/public/json/rabbitmq.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.rabbitmq.com/", "logo": "https://raw.githubusercontent.com/rabbitmq/rabbitmq-website/main/static/img/rabbitmq-logo.svg", + "config_path": "", "description": "RabbitMQ is a robust messaging broker widely used for message queuing, streaming, and decoupling services. It supports multiple messaging protocols, ensures reliable message delivery, and offers features like routing, clustering, and federation. RabbitMQ is suitable for various use cases, including microservices communication, real-time data processing, and IoT applications.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/radarr.json b/frontend/public/json/radarr.json index 78903b3f7..2dd4de24d 100644 --- a/frontend/public/json/radarr.json +++ b/frontend/public/json/radarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://radarr.video/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/radarr.svg", + "config_path": "", "description": "Radarr is a movie management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their movie collection with ease. Radarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of movie files. The software provides a web-based interface for managing and organizing movies, making it easy to search and find titles, genres, and release dates. Radarr also supports metadata management, including movie posters and information, making it easy for users to keep their movie collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing movie collections, making it a valuable tool for movie enthusiasts who want to keep their collection organized and up-to-date. With Radarr, users can enjoy their movie collection from anywhere, making it a powerful tool for managing and sharing movie files.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/radicale.json b/frontend/public/json/radicale.json index 5cb507787..609839115 100644 --- a/frontend/public/json/radicale.json +++ b/frontend/public/json/radicale.json @@ -12,6 +12,7 @@ "documentation": "https://radicale.org/master.html#documentation-1", "website": "https://radicale.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/radicale.svg", + "config_path": "", "description": "Radicale is a small but powerful CalDAV (calendars, to-do lists) and CardDAV (contacts)", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/rdtclient.json b/frontend/public/json/rdtclient.json index 983e95e46..2ffd3b3ca 100644 --- a/frontend/public/json/rdtclient.json +++ b/frontend/public/json/rdtclient.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/rogerfar/rdt-client", "logo": "https://fcdn.real-debrid.com/0820/images/logo.png", + "config_path": "/opt/rdtc/appsettings.json", "description": "RDTClient is a web interface to manage your torrents on Real-Debrid, AllDebrid or Premiumize.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/reactive-resume.json b/frontend/public/json/reactive-resume.json index 9ea032e33..0d86c3159 100644 --- a/frontend/public/json/reactive-resume.json +++ b/frontend/public/json/reactive-resume.json @@ -12,6 +12,7 @@ "documentation": "https://docs.rxresu.me/", "website": "https://rxresu.me", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png", + "config_path": "/opt/reactive-resume/.env", "description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/readarr.json b/frontend/public/json/readarr.json index 19bb9d75d..725d8b0a7 100644 --- a/frontend/public/json/readarr.json +++ b/frontend/public/json/readarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://readarr.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/readarr.svg", + "config_path": "", "description": "Readarr is an eBook and audiobook management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their eBook and audiobook collection with ease. Readarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of eBook and audiobook files. The software provides a web-based interface for managing and organizing eBooks and audiobooks, making it easy to search and find titles, authors, and genres. Readarr also supports metadata management, including cover art and information, making it easy for users to keep their eBook and audiobook collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing eBook and audiobook collections, making it a valuable tool for book and audiobook enthusiasts who want to keep their collection organized and up-to-date. With Readarr, users can enjoy their eBook and audiobook collection from anywhere, making it a powerful tool for managing and sharing book and audiobook files.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/readeck.json b/frontend/public/json/readeck.json index 9b1dbefe0..9d4c24080 100644 --- a/frontend/public/json/readeck.json +++ b/frontend/public/json/readeck.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://readeck.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/readeck.svg", + "config_path": "", "description": "Readeck helps you keep all that web content you want to revisit in an hour, tomorrow, or in 20 years.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/recyclarr.json b/frontend/public/json/recyclarr.json index 53c2ea798..58b45baa5 100644 --- a/frontend/public/json/recyclarr.json +++ b/frontend/public/json/recyclarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://recyclarr.dev/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/recyclarr.svg", + "config_path": "", "description": "Recyclarr is an automation tool that integrates with media management software like Sonarr and Radarr. It helps users manage and organize their media libraries by automatically searching for and adding content from indexers, based on user-defined criteria. It streamlines the process of maintaining and updating media collections without manual intervention.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/redis.json b/frontend/public/json/redis.json index 3f633f8c4..dabd2590b 100644 --- a/frontend/public/json/redis.json +++ b/frontend/public/json/redis.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://redis.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/redis.svg", + "config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf", "description": "Redis is an open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker.", "install_methods": [ { @@ -47,4 +48,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/revealjs.json b/frontend/public/json/revealjs.json index ed0fd0f09..0697bae9d 100644 --- a/frontend/public/json/revealjs.json +++ b/frontend/public/json/revealjs.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/hakimel/reveal.js/wiki", "website": "https://github.com/hakimel/reveal.js", "logo": "https://static.slid.es/reveal/logo-v1/reveal-white-text.svg", + "config_path": "/opt/revealjs/gulpfile.js", "description": "reveal.js is an open source HTML presentation framework. It's a tool that enables anyone with a web browser to create fully-featured and beautiful presentations for free.", "install_methods": [ { @@ -31,13 +32,10 @@ "password": null }, "notes": [ - { - "text": "Config file is at `/opt/revealjs/gulpfile.js`. Check the documentation for more information.", - "type": "info" - }, { "text": "LiveReload is on port: 35729", "type": "info" } ] } + diff --git a/frontend/public/json/rtsptoweb.json b/frontend/public/json/rtsptoweb.json index 2c29791d0..9ed9afac7 100644 --- a/frontend/public/json/rtsptoweb.json +++ b/frontend/public/json/rtsptoweb.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/deepch/RTSPtoWeb", "logo": "https://brands.home-assistant.io/_/rtsp_to_webrtc/logo.png?raw=true", + "config_path": "", "description": "RTSPtoWeb converts your RTSP streams to formats consumable in a web browser like MSE (Media Source Extensions), WebRTC, or HLS. It's fully native Golang without the use of FFmpeg or GStreamer", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/runtipi.json b/frontend/public/json/runtipi.json index 5980e2fb9..f9eaab051 100644 --- a/frontend/public/json/runtipi.json +++ b/frontend/public/json/runtipi.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://runtipi.io/", "logo": "https://runtipi.io/_next/static/media/tipi.c0b9b68e.png", + "config_path": "opt/runtipi/state/settings.json", "description": "Runtipi lets you install all your favorite self-hosted apps without the hassle of configuring and managing each service. One-click installs and updates for more than 180 popular apps.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/rustdeskserver.json b/frontend/public/json/rustdeskserver.json index 7536a6a31..582c50bc1 100644 --- a/frontend/public/json/rustdeskserver.json +++ b/frontend/public/json/rustdeskserver.json @@ -12,6 +12,7 @@ "documentation": "https://rustdesk.com/docs/en/", "website": "https://rustdesk.com/", "logo": "https://rustdesk.com/_astro/logo.BKb61-he.svg", + "config_path": "", "description": "RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/sabnzbd.json b/frontend/public/json/sabnzbd.json index 233397abb..1ea34c4f3 100644 --- a/frontend/public/json/sabnzbd.json +++ b/frontend/public/json/sabnzbd.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://sabnzbd.org/", "logo": "https://raw.githubusercontent.com/sabnzbd/sabnzbd/develop/icons/logo-arrow.svg", + "config_path": "", "description": "SABnzbd is a free, open-source software program for downloading binary files from Usenet newsgroups. It is designed to be easy to use, and provides a number of features to simplify the downloading process, such as automatic error detection and repair, download scheduling, and integration with other applications. SABnzbd is a binary newsreader, which means it is specifically designed for downloading binary files, such as images, music, and video, from Usenet newsgroups. With its user-friendly interface and powerful features, SABnzbd makes it easy to manage your Usenet downloads and keep your download queue organized.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/scaling-governor.json b/frontend/public/json/scaling-governor.json index f8a41ebca..2668a826b 100644 --- a/frontend/public/json/scaling-governor.json +++ b/frontend/public/json/scaling-governor.json @@ -10,6 +10,7 @@ "documentation": "https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html?#generic-scaling-governors", "website": null, "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/cpu.png?raw=true", + "config_path": "", "description": "The CPU scaling governor determines how the CPU frequency is adjusted based on the workload, with the goal of either conserving power or improving performance. By scaling the frequency up or down, the operating system can optimize the CPU usage and conserve energy when possible. Generic Scaling Governors", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/seafile.json b/frontend/public/json/seafile.json index ddabe7eca..8cda3235b 100644 --- a/frontend/public/json/seafile.json +++ b/frontend/public/json/seafile.json @@ -12,6 +12,7 @@ "documentation": "https://manual.seafile.com/11.0/deploy", "website": "https://seafile.com", "logo": "https://manual.seafile.com/11.0/media/seafile-transparent-1024.png", + "config_path": "/opt/seafile/conf/seahub_settings.py", "description": "Seafile is an open source file sync and share platform, focusing on reliability and performance.", "install_methods": [ { @@ -45,3 +46,4 @@ } ] } + diff --git a/frontend/public/json/searxng.json b/frontend/public/json/searxng.json index 32565a035..b015ce9ae 100644 --- a/frontend/public/json/searxng.json +++ b/frontend/public/json/searxng.json @@ -12,6 +12,7 @@ "documentation": "https://docs.searxng.org/", "website": "https://github.com/searxng/searxng", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/searxng.svg", + "config_path": "/etc/searxng/settings.yml", "description": "SearXNG is a free internet metasearch engine which aggregates results from up to 215 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor for online anonymity.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/seelf.json b/frontend/public/json/seelf.json index a27feda43..9cc341630 100644 --- a/frontend/public/json/seelf.json +++ b/frontend/public/json/seelf.json @@ -12,6 +12,7 @@ "documentation": "https://yuukanoo.github.io/seelf/guide/quickstart.html", "website": "https://yuukanoo.github.io/seelf/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/seelf.svg", + "config_path": "", "description": "seelf is a self-hosted software which makes it easy to deploy your own applications on your own hardware using an easy to use interface.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/semaphore.json b/frontend/public/json/semaphore.json index 30ff770f3..d52f29af3 100644 --- a/frontend/public/json/semaphore.json +++ b/frontend/public/json/semaphore.json @@ -12,6 +12,7 @@ "documentation": "https://docs.semaphoreui.com/", "website": "https://semaphoreui.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/semaphore-ui.svg", + "config_path": "/opt/semaphore/config.json", "description": "Semaphore UI is a modern web interface for managing popular DevOps tools", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/sftpgo.json b/frontend/public/json/sftpgo.json index 9d8f9391b..278869999 100644 --- a/frontend/public/json/sftpgo.json +++ b/frontend/public/json/sftpgo.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/drakkan/sftpgo", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/sftpgo.webp", + "config_path": "", "description": "SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support. Several storage backends are supported: local filesystem, encrypted local filesystem, S3 (compatible) Object Storage, Google Cloud Storage, Azure Blob Storage, SFTP.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/shinobi.json b/frontend/public/json/shinobi.json index 05d8970ab..b19a822b7 100644 --- a/frontend/public/json/shinobi.json +++ b/frontend/public/json/shinobi.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://shinobi.video/", "logo": "https://gitlab.com/uploads/-/system/project/avatar/6947723/mstile-150x150.png?raw=true", + "config_path": "/opt/Shinobi/conf.json", "description": "Shinobi is an open-source, self-hosted network video recording (NVR) software. It allows you to manage and monitor security cameras and record video footage. Shinobi can be run on various platforms including Linux, macOS, and Raspberry Pi, and offers features such as real-time streaming, motion detection, and email notifications.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/silverbullet.json b/frontend/public/json/silverbullet.json index 0c24ff578..f7323d2e6 100644 --- a/frontend/public/json/silverbullet.json +++ b/frontend/public/json/silverbullet.json @@ -12,6 +12,7 @@ "documentation": "https://silverbullet.md/Manual", "website": "https://silverbullet.md", "logo": "https://silverbullet.md/.client/logo.png", + "config_path": "", "description": "SilverBullet is a note-taking application optimized for people with a hacker mindset.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/slskd.json b/frontend/public/json/slskd.json index 9919ccdb7..45f8fba34 100644 --- a/frontend/public/json/slskd.json +++ b/frontend/public/json/slskd.json @@ -12,6 +12,7 @@ "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", + "config_path": "/opt/slskd/config/slskd.yml", "description": "A modern client-server application for the Soulseek file sharing network. ", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/smokeping.json b/frontend/public/json/smokeping.json index c4b8c830b..01ec16bc9 100644 --- a/frontend/public/json/smokeping.json +++ b/frontend/public/json/smokeping.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://oss.oetiker.ch/smokeping/", "logo": "https://images.g2crowd.com/uploads/product/image/large_detail/large_detail_5ca8465f5b01fc1048c47aba6f79b6c6/smokeping.png", + "config_path": "/etc/smokeping/config.d/Targets", "description": "SmokePing is a deluxe latency measurement tool. It can measure, store and display latency, latency distribution and packet loss.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/snipeit.json b/frontend/public/json/snipeit.json index c12cd102d..b5f1fc70c 100644 --- a/frontend/public/json/snipeit.json +++ b/frontend/public/json/snipeit.json @@ -12,6 +12,7 @@ "documentation": "https://snipe-it.readme.io/docs/overview", "website": "https://snipeitapp.com/", "logo": "https://raw.githubusercontent.com/snipe/snipe-it/refs/heads/master/public/img/snipe-logo-bug.png", + "config_path": "/opt/snipe-it/.env", "description": "This is a FOSS project for asset management in IT Operations. Knowing who has which laptop, when it was purchased in order to depreciate it correctly, handling software licenses, etc.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/sonarr.json b/frontend/public/json/sonarr.json index 4fe862bea..05bcac81f 100644 --- a/frontend/public/json/sonarr.json +++ b/frontend/public/json/sonarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://sonarr.tv/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/sonarr.svg", + "config_path": "", "description": "Sonarr is a personal video recorder (PVR) software designed for Usenet and BitTorrent users. It allows users to manage and organize their TV show collection with ease. Sonarr integrates with popular Usenet and BitTorrent clients, such as NZBget and Transmission, to automate the downloading and organizing of TV show files. The software provides a web-based interface for managing and organizing TV shows, making it easy to search and find titles, seasons, and episodes. Sonarr also supports metadata management, including TV show posters and information, making it easy for users to keep their TV show collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing TV show collections, making it a valuable tool for TV show enthusiasts who want to keep their collection organized and up-to-date. With Sonarr, users can enjoy their TV show collection from anywhere, making it a powerful tool for managing and sharing TV show files.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/spoolman.json b/frontend/public/json/spoolman.json index 76c37b38d..e1e1a39f7 100644 --- a/frontend/public/json/spoolman.json +++ b/frontend/public/json/spoolman.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Donkie/Spoolman", "logo": "https://raw.githubusercontent.com/Donkie/Spoolman/master/client/public/favicon.svg", + "config_path": "/opt/spoolman/.env", "description": "Spoolman is a self-hosted web service designed to help you efficiently manage your 3D printer filament spools and monitor their usage.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/sqlserver2022.json b/frontend/public/json/sqlserver2022.json index ea907ae4b..9a73c92bc 100644 --- a/frontend/public/json/sqlserver2022.json +++ b/frontend/public/json/sqlserver2022.json @@ -12,6 +12,7 @@ "documentation":"https://learn.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver16", "website":"https://www.microsoft.com/en-us/sql-server/sql-server-2022", "logo":"https://www.svgrepo.com/show/303229/microsoft-sql-server-logo.svg", + "config_path": "", "description":"Script to automatically set up a SQL Server 2022 installation.", "install_methods":[ { @@ -45,3 +46,4 @@ } ] } + diff --git a/frontend/public/json/stirling-pdf.json b/frontend/public/json/stirling-pdf.json index 2548f21b4..ccd188417 100644 --- a/frontend/public/json/stirling-pdf.json +++ b/frontend/public/json/stirling-pdf.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Stirling-Tools/Stirling-PDF", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/stirling-pdf.svg", + "config_path": "/opt/Stirling-PDF/.env", "description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/suwayomi-server.json b/frontend/public/json/suwayomi-server.json index b28a99132..f5a171acc 100644 --- a/frontend/public/json/suwayomi-server.json +++ b/frontend/public/json/suwayomi-server.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/Suwayomi/Suwayomi-Server/wiki", "website": "https://github.com/Suwayomi/Suwayomi-Server", "logo": "https://github.com/Suwayomi/Suwayomi-Server/raw/master/server/src/main/resources/icon/faviconlogo.png", + "config_path": "", "description": "A free and open source manga reader server that runs extensions built for Mihon (Tachiyomi).", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/syncthing.json b/frontend/public/json/syncthing.json index 27c6ee982..10c94e235 100644 --- a/frontend/public/json/syncthing.json +++ b/frontend/public/json/syncthing.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://syncthing.net/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/syncthing.svg", + "config_path": "/root/.local/state/syncthing/config.xml", "description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/tandoor.json b/frontend/public/json/tandoor.json index bf8f7a021..b3d4f3229 100644 --- a/frontend/public/json/tandoor.json +++ b/frontend/public/json/tandoor.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tandoor.dev/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/tandoor.svg", + "config_path": "/opt/tandoor/.env", "description": "Tandoor Recipes is an application for managing recipes, planning meals, building shopping lists and much much more!", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/tasmoadmin.json b/frontend/public/json/tasmoadmin.json index 826c07e63..206fed1ba 100644 --- a/frontend/public/json/tasmoadmin.json +++ b/frontend/public/json/tasmoadmin.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/TasmoAdmin/TasmoAdmin#readme", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tasmoadmin.svg", + "config_path": "", "description": "TasmoAdmin is an administrative platform for devices flashed with Tasmota.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/tasmocompiler.json b/frontend/public/json/tasmocompiler.json index be7400407..9ddbdd606 100644 --- a/frontend/public/json/tasmocompiler.json +++ b/frontend/public/json/tasmocompiler.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/benzino77/tasmocompiler/blob/master/README.md", "website": "https://github.com/benzino77/tasmocompiler", "logo": "https://github.com/benzino77/tasmocompiler/raw/master/docs/logo/tasmocompiler-symbol.svg", + "config_path": "", "description": "TasmoCompiler is a simple web GUI which allows you to compile fantastic Tasmota firmware with your own settings.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/tautulli.json b/frontend/public/json/tautulli.json index 034be7914..54cc57153 100644 --- a/frontend/public/json/tautulli.json +++ b/frontend/public/json/tautulli.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tautulli.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tautulli.svg", + "config_path": "", "description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/tdarr.json b/frontend/public/json/tdarr.json index a712d935e..48fb39f11 100644 --- a/frontend/public/json/tdarr.json +++ b/frontend/public/json/tdarr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tdarr.io/", "logo": "https://home.tdarr.io/static/media/logo3-min.246d6df44c7f16ddebaf.png", + "config_path": "", "description": "Tdarr is a media transcoding application designed to automate the transcode and remux management of a media library. It uses conditional-based processing to determine the required encoding and remux operations for each file in the library. The software integrates with popular media management tools, such as Sonarr and Radarr, to ensure that newly added media files are automatically processed and optimized for the user's desired playback device. Tdarr provides a web-based interface for monitoring and managing the transcoding process, and also supports real-time logging and reporting. The software is designed to be flexible and configurable, with a wide range of encoding and remux options available to users. Tdarr is an ideal solution for media enthusiasts who want to optimize their library for seamless playback on a variety of devices, while also streamlining the management and maintenance of their media library.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/technitiumdns.json b/frontend/public/json/technitiumdns.json index 44177de81..46142ddbe 100644 --- a/frontend/public/json/technitiumdns.json +++ b/frontend/public/json/technitiumdns.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://technitium.com/dns/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/technitium.svg", + "config_path": "", "description": "Technitium DNS Server is a free, open-source and privacy-focused DNS (Domain Name System) server software for Windows, Linux, and macOS. It is designed to provide a secure, fast, and reliable DNS resolution service to its users. The server can be configured through a web-based interface, and it supports a variety of advanced features, such as automatic IP updates, IPv6 support, caching of DNS queries, and the ability to block unwanted domains. It is also designed to be highly secure, with built-in measures to prevent common types of DNS attacks and data leaks. Technitium DNS Server is aimed at providing an alternative to traditional DNS servers, which often have privacy and security concerns associated with them, and it is ideal for users who are looking for a more secure and private DNS resolution service.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/teddycloud.json b/frontend/public/json/teddycloud.json index a807317a7..1d4a851c5 100644 --- a/frontend/public/json/teddycloud.json +++ b/frontend/public/json/teddycloud.json @@ -12,6 +12,7 @@ "documentation": "https://tonies-wiki.revvox.de/docs/tools/teddycloud/", "website": "https://tonies-wiki.revvox.de/docs/tools/teddycloud/", "logo": "https://avatars.githubusercontent.com/u/57543015", + "config_path": "", "description": "TeddyCloud is an open source server replacement for the Boxine Cloud.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/the-lounge.json b/frontend/public/json/the-lounge.json index 493e7ab55..60cf5dd20 100644 --- a/frontend/public/json/the-lounge.json +++ b/frontend/public/json/the-lounge.json @@ -12,6 +12,7 @@ "documentation": "https://thelounge.chat/docs", "website": "https://thelounge.chat/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/the-lounge.svg", + "config_path": "", "description": "Modern web IRC client designed for self-hosting ", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/threadfin.json b/frontend/public/json/threadfin.json index bea0c5734..cdf0c2507 100644 --- a/frontend/public/json/threadfin.json +++ b/frontend/public/json/threadfin.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Threadfin/Threadfin", "logo": "https://raw.githubusercontent.com/Threadfin/Threadfin/main/html/img/threadfin.png", + "config_path": "", "description": "Threadfin is a M3U proxy for Kernel, Plex, Jellyfin, or Emby, based on xTeVe.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/tianji.json b/frontend/public/json/tianji.json index 944a233d3..ccaacfa80 100644 --- a/frontend/public/json/tianji.json +++ b/frontend/public/json/tianji.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://tianji.msgbyte.com/", "logo": "https://tianji.msgbyte.com/img/logo.svg", + "config_path": "/opt/tianji/src/server/.env", "description": "Tianji is an open-source tool for website analytics, uptime monitoring, and server status tracking, all in one. It\u2019s lightweight, privacy-focused, and helps teams monitor web traffic, server health, and gather user interaction data", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "admin" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/traccar.json b/frontend/public/json/traccar.json index 33206b3e0..90adbc5ca 100644 --- a/frontend/public/json/traccar.json +++ b/frontend/public/json/traccar.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.traccar.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/traccar.svg", + "config_path": "", "description": "Traccar is an open source GPS tracking system. It supports more than 200 GPS protocols and more than 2000 models of GPS tracking devices.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/traefik.json b/frontend/public/json/traefik.json index 80fa93574..5655a98a2 100644 --- a/frontend/public/json/traefik.json +++ b/frontend/public/json/traefik.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://traefik.io/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/traefik-gopher.svg", + "config_path": "/etc/traefik/traefik.yaml", "description": "Traefik (pronounced traffic) is an open-source edge router and reverse proxy that simplifies managing microservices. It automatically discovers services, dynamically updates routing rules without downtime, provides load balancing, handles SSL termination, and supports various middleware for added functionality. Ideal for cloud-native environments, it integrates seamlessly with platforms like Docker and Kubernetes.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/transmission.json b/frontend/public/json/transmission.json index ea7c722a0..a73588759 100644 --- a/frontend/public/json/transmission.json +++ b/frontend/public/json/transmission.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://transmissionbt.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/transmission.svg", + "config_path": "/etc/transmission-daemon/settings.json", "description": "Transmission is a free, open-source BitTorrent client known for its fast download speeds and ease of use. It supports various platforms such as Windows, Linux, and macOS and has features like web interface, peer exchange, and encrypted transfers.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "transmission" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/trilium.json b/frontend/public/json/trilium.json index acf0a01b8..85a6e0bd7 100644 --- a/frontend/public/json/trilium.json +++ b/frontend/public/json/trilium.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/TriliumNext/Notes", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/triliumnext.svg", + "config_path": "", "description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/turnkey.json b/frontend/public/json/turnkey.json index 91aa6bbec..476006e9f 100644 --- a/frontend/public/json/turnkey.json +++ b/frontend/public/json/turnkey.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.turnkeylinux.org/", "logo": "https://blog.desdelinux.net/wp-content/uploads/2017/01/TurnKey-Linux.png", + "config_path": "", "description": "TurnKey LXC Appliances is an open-source project that provides a collection of free, ready-to-use virtual appliances and installation images for various software applications and services. These appliances are pre-configured and come with all the necessary software and settings to simplify deployment and management. The goal of TurnKey Linux is to make it easier for users to set up and run popular software applications without the need for extensive manual configuration.", "install_methods": [ { @@ -40,4 +41,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/typesense.json b/frontend/public/json/typesense.json index 61f35efad..b4a8f14f4 100644 --- a/frontend/public/json/typesense.json +++ b/frontend/public/json/typesense.json @@ -12,6 +12,7 @@ "documentation": "https://typesense.org/docs/", "website": "https://typesense.org/", "logo": "https://typesense.org/_nuxt/img/typesense_logo_white.0f9fb0a.svg", + "config_path": "/etc/typesense/typesense-server.ini", "description": "Typesense is an open-source, fast, and lightweight search engine optimized for delivering instant, relevant, and typo-tolerant search results. Designed for ease of use and high performance, it offers features like real-time indexing, fuzzy matching, customizable relevance ranking, and a simple API for integration. Typesense is particularly well-suited for applications requiring instant search capabilities, such as e-commerce, documentation, or any content-rich websites. It is often compared to tools like Elasticsearch but is more developer-friendly and less resource-intensive.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/ubuntu.json b/frontend/public/json/ubuntu.json index 2244621e1..cce7a681b 100644 --- a/frontend/public/json/ubuntu.json +++ b/frontend/public/json/ubuntu.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ubuntu.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/ubuntu.svg", + "config_path": "", "description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/ubuntu2204-vm.json b/frontend/public/json/ubuntu2204-vm.json index 2c930971f..ad83659c2 100644 --- a/frontend/public/json/ubuntu2204-vm.json +++ b/frontend/public/json/ubuntu2204-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ubuntu.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/ubuntu.svg", + "config_path": "", "description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/ubuntu2404-vm.json b/frontend/public/json/ubuntu2404-vm.json index ae49be2db..2f8176fa5 100644 --- a/frontend/public/json/ubuntu2404-vm.json +++ b/frontend/public/json/ubuntu2404-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ubuntu.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/ubuntu.svg", + "config_path": "", "description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/ubuntu2410-vm.json b/frontend/public/json/ubuntu2410-vm.json index 2dcbc17cb..7124b6d50 100644 --- a/frontend/public/json/ubuntu2410-vm.json +++ b/frontend/public/json/ubuntu2410-vm.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://ubuntu.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/ubuntu.svg", + "config_path": "", "description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/umami.json b/frontend/public/json/umami.json index 54640e790..a46f0e4ce 100644 --- a/frontend/public/json/umami.json +++ b/frontend/public/json/umami.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://umami.is/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/umami.svg", + "config_path": "/opt/umami/.env", "description": "Umami makes it easy to collect, analyze, and understand your web data while maintaining visitor privacy and data ownership.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/unbound.json b/frontend/public/json/unbound.json index 3e8e9afac..5324e16ab 100644 --- a/frontend/public/json/unbound.json +++ b/frontend/public/json/unbound.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.nlnetlabs.nl/projects/unbound/about/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/unbound.svg", + "config_path": "/etc/unbound/unbound.conf.d/unbound.conf", "description": "Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/unifi.json b/frontend/public/json/unifi.json index eaddbc2ee..469e513ca 100644 --- a/frontend/public/json/unifi.json +++ b/frontend/public/json/unifi.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://www.ui.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/ubiquiti.svg", + "config_path": "", "description": "UniFi Network Server is a software that helps manage and monitor UniFi networks (Wi-Fi, Ethernet, etc.) by providing an intuitive user interface and advanced features. It allows network administrators to configure, monitor, and upgrade network devices, as well as view network statistics, client devices, and historical events. The aim of the application is to make the management of UniFi networks easier and more efficient.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/unmanic.json b/frontend/public/json/unmanic.json index 355142032..0d235f96b 100644 --- a/frontend/public/json/unmanic.json +++ b/frontend/public/json/unmanic.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://docs.unmanic.app/", "logo": "https://raw.githubusercontent.com/Unmanic/unmanic/master/icon.png", + "config_path": "", "description": "Unmanic is a simple tool for optimising your file library. You can use it to convert your files into a single, uniform format, manage file movements based on timestamps, or execute custom commands against a file based on its file size.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/update-lxcs.json b/frontend/public/json/update-lxcs.json index e294122eb..b1354fd34 100644 --- a/frontend/public/json/update-lxcs.json +++ b/frontend/public/json/update-lxcs.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg", + "config_path": "", "description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/update-repo.json b/frontend/public/json/update-repo.json index 2eafa86ff..7f2567894 100644 --- a/frontend/public/json/update-repo.json +++ b/frontend/public/json/update-repo.json @@ -10,6 +10,7 @@ "documentation": null, "website": null, "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg", + "config_path": "", "description": "This script updates repository links in LXC containers, replacing old links from the tteck repository with links to the new community-scripts repository to fix issues related to updating scripts.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/uptimekuma.json b/frontend/public/json/uptimekuma.json index 9814ddf5b..4f2ad84f1 100644 --- a/frontend/public/json/uptimekuma.json +++ b/frontend/public/json/uptimekuma.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/louislam/uptime-kuma#uptime-kuma", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/uptime-kuma.svg", + "config_path": "", "description": "Uptime Kuma is a monitoring and alerting system that tracks the availability and performance of servers, websites, and other internet-connected devices. It can be self-hosted and is open-source, offering a visually appealing interface for monitoring and receiving notifications about downtime events.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/urbackupserver.json b/frontend/public/json/urbackupserver.json index 2e232fc15..97eaeed4c 100644 --- a/frontend/public/json/urbackupserver.json +++ b/frontend/public/json/urbackupserver.json @@ -12,6 +12,7 @@ "documentation":"https://www.urbackup.org/documentation.html", "website":"https://www.urbackup.org/", "logo":"https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/urbackup.webp", + "config_path": "", "description":"URBackup is an open-source backup software designed for creating reliable and efficient backups of both files and system images. It supports client-server architecture, allowing you to back up multiple computers to a central server. It offers features such as incremental backups, real-time file backup, and scheduling, ensuring minimal data loss and quick recovery", "install_methods":[ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/vaultwarden.json b/frontend/public/json/vaultwarden.json index 10f93adc8..eae430f72 100644 --- a/frontend/public/json/vaultwarden.json +++ b/frontend/public/json/vaultwarden.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/dani-garcia/vaultwarden/", "logo": "https://raw.githubusercontent.com/dani-garcia/vaultwarden/main/resources/vaultwarden-icon-white.svg", + "config_path": "/opt/vaultwarden/.env", "description": "Vaultwarden is a self-hosted password manager which provides secure and encrypted password storage. It uses client-side encryption and provides access to passwords through a web interface and mobile apps.", "install_methods": [ { @@ -52,3 +53,4 @@ } ] } + diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index a496d0ec3..2150ce2a6 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1250,3 +1250,4 @@ "date": "2022-07-15T05:20:17Z" } ] + diff --git a/frontend/public/json/victoriametrics.json b/frontend/public/json/victoriametrics.json index 06da91d77..2e03f1d41 100644 --- a/frontend/public/json/victoriametrics.json +++ b/frontend/public/json/victoriametrics.json @@ -12,6 +12,7 @@ "documentation": "https://docs.victoriametrics.com/", "website": "https://victoriametrics.com/", "logo": "https://marketplace-assets.digitalocean.com/logos/victoriametrics-victoriametricss.png", + "config_path": "", "description": "VictoriaMetrics is a fast, cost-saving, and scalable solution for monitoring and managing time series data. It delivers high performance and reliability, making it an ideal choice for businesses of all sizes.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/vikunja.json b/frontend/public/json/vikunja.json index 01115bd9c..abfb969e9 100644 --- a/frontend/public/json/vikunja.json +++ b/frontend/public/json/vikunja.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://vikunja.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/vikunja.svg", + "config_path": "/etc/vikunja/config.yml", "description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/wallos.json b/frontend/public/json/wallos.json index 0ff7ac1c3..7b24e23f9 100644 --- a/frontend/public/json/wallos.json +++ b/frontend/public/json/wallos.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/ellite/wallos", "website": "https://wallosapp.com/", "logo": "https://raw.githubusercontent.com/ellite/Wallos/refs/heads/main/images/icon/android-chrome-192x192.png", + "config_path": "", "description": "Wallos is a personal finance and budgeting tool that provides an intuitive interface for tracking expenses, managing subscriptions, and monitoring financial health. It features APIs for categories, notifications, payments, and user settings, making it suitable for automation and custom integrations. Additionally, it supports multi-language functionality.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/wastebin.json b/frontend/public/json/wastebin.json index 728c461c6..d7ee2673d 100644 --- a/frontend/public/json/wastebin.json +++ b/frontend/public/json/wastebin.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/matze/wastebin", "logo": "https://raw.githubusercontent.com/matze/wastebin/master/assets/favicon.png?raw=true", + "config_path": "/opt/wastebin-data/.env", "description": "Wastebin is a minimal pastebin with a design shamelessly copied from bin.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/watcharr.json b/frontend/public/json/watcharr.json index ba6385db9..383d0815a 100644 --- a/frontend/public/json/watcharr.json +++ b/frontend/public/json/watcharr.json @@ -12,6 +12,7 @@ "documentation": "https://watcharr.app/docs/introduction", "website": "https://watcharr.app/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/watcharr.webp", + "config_path": "", "description": "Open source, self-hostable watched list for all your content with user authentication, modern and clean UI and a very simple setup.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/watchyourlan.json b/frontend/public/json/watchyourlan.json index ff93c5874..ce537a82c 100644 --- a/frontend/public/json/watchyourlan.json +++ b/frontend/public/json/watchyourlan.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/aceberg/WatchYourLAN", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/watchyourlan.webp", + "config_path": "", "description": "WatchYourLAN is a lightweight network IP scanner with web GUI.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/wavelog.json b/frontend/public/json/wavelog.json index 88135dd1c..57419c6e1 100644 --- a/frontend/public/json/wavelog.json +++ b/frontend/public/json/wavelog.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/wavelog/wavelog/wiki", "website": "https://www.wavelog.org/", "logo": "https://raw.githubusercontent.com/wavelog/wavelog/refs/heads/master/assets/logo/wavelog_icon_only_darkly.png", + "config_path": "", "description": "Wavelog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.", "install_methods": [ { @@ -37,3 +38,4 @@ } ] } + diff --git a/frontend/public/json/wazuh.json b/frontend/public/json/wazuh.json index 26eda6951..69f0cb3f4 100644 --- a/frontend/public/json/wazuh.json +++ b/frontend/public/json/wazuh.json @@ -12,6 +12,7 @@ "documentation": "https://documentation.wazuh.com/", "website": "https://wazuh.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/wazuh.svg", + "config_path": "", "description": "Wazuh is an open-source security monitoring solution that provides endpoint protection, network monitoring, and log analysis capabilities.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/web-check.json b/frontend/public/json/web-check.json index 53cda3439..a640cb94f 100644 --- a/frontend/public/json/web-check.json +++ b/frontend/public/json/web-check.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/Lissy93/web-check/blob/master/.github/README.md", "website": "https://github.com/lissy93/web-check", "logo": "https://raw.githubusercontent.com/Lissy93/web-check/refs/heads/master/.github/web-check-logo.png", + "config_path": "/opt/web-check/.env", "description": "Get an insight into the inner-workings of a given website: uncover potential attack vectors, analyse server architecture, view security configurations, and learn what technologies a site is using.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/webmin.json b/frontend/public/json/webmin.json index f1b3972b9..e52fcda8f 100644 --- a/frontend/public/json/webmin.json +++ b/frontend/public/json/webmin.json @@ -10,6 +10,7 @@ "documentation": null, "website": "https://webmin.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/webmin.svg", + "config_path": "", "description": "Webmin provides a graphical user interface (GUI) for tasks such as user account management, package management, file system configuration, network configuration, and more.", "install_methods": [ { @@ -35,3 +36,4 @@ } ] } + diff --git a/frontend/public/json/wger.json b/frontend/public/json/wger.json index 2b935960d..a9eb1bc19 100644 --- a/frontend/public/json/wger.json +++ b/frontend/public/json/wger.json @@ -12,6 +12,7 @@ "documentation": "https://wger.readthedocs.io/en/latest/index.html#", "website": "https://wger.de", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/wger.svg", + "config_path": "/opt/wikijs/config.yml", "description": "wger (ˈvɛɡɐ) Workout Manager is a free, open source web application that helps you manage your personal workouts, weight and diet plans and can also be used as a simple gym management utility. It offers a REST API as well, for easy integration with other projects and tools.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "info" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/whisparr.json b/frontend/public/json/whisparr.json index c41d30d4b..f41fa0d40 100644 --- a/frontend/public/json/whisparr.json +++ b/frontend/public/json/whisparr.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://github.com/Whisparr/Whisparr", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/whisparr.svg", + "config_path": "", "description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/wikijs.json b/frontend/public/json/wikijs.json index d9a600e89..e530db60b 100644 --- a/frontend/public/json/wikijs.json +++ b/frontend/public/json/wikijs.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://js.wiki/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/wiki-js.svg", + "config_path": "/opt/wikijs/config.yml", "description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/wireguard.json b/frontend/public/json/wireguard.json index 5984f9dd3..86ebdcef4 100644 --- a/frontend/public/json/wireguard.json +++ b/frontend/public/json/wireguard.json @@ -12,6 +12,7 @@ "documentation": "https://www.wireguard.com/quickstart/", "website": "https://www.wireguard.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/wireguard.svg", + "config_path": "", "description": "WireGuard is a free and open-source virtual private network (VPN) software that uses modern cryptography to secure the data transmitted over a network. It is designed to be fast, secure, and easy to use. WireGuard supports various operating systems, including Linux, Windows, macOS, Android, and iOS. It operates at the network layer and is capable of being used with a wide range of protocols and configurations. Unlike other VPN protocols, WireGuard is designed to be simple and fast, with a focus on security and speed. It is known for its ease of setup and configuration, making it a popular choice for personal and commercial use.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/wordpress.json b/frontend/public/json/wordpress.json index c6a77de80..8313fcfac 100644 --- a/frontend/public/json/wordpress.json +++ b/frontend/public/json/wordpress.json @@ -12,6 +12,7 @@ "documentation": "https://wordpress.org/documentation/", "website": "https://wordpress.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/wordpress.svg", + "config_path": "/var/www/html/wordpress/wp-config.php", "description": "WordPress is the simplest, most popular way to create your own website or blog. In fact, WordPress powers over 43.6% of all the websites on the Internet. Yes – more than one in four websites that you visit are likely powered by WordPress.\n\nOn a slightly more technical level, WordPress is an open-source content management system licensed under GPLv2, which means that anyone can use or modify the WordPress software for free.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/yt-dlp-webui.json b/frontend/public/json/yt-dlp-webui.json index 5966bb33f..8449dfced 100644 --- a/frontend/public/json/yt-dlp-webui.json +++ b/frontend/public/json/yt-dlp-webui.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/marcopiovanello/yt-dlp-web-ui", "website": "https://github.com/marcopiovanello/yt-dlp-web-ui", "logo": "https://raw.githubusercontent.com/marcopiovanello/yt-dlp-web-ui/refs/heads/master/frontend/src/assets/favicon.ico", + "config_path": "/opt/yt-dlp-webui/config.conf", "description": "A not so terrible web ui for yt-dlp.\nHigh performance extendeable web ui and RPC server for yt-dlp with low impact on resources.\nCreated for the only purpose of fetching videos from my server/nas and monitor upcoming livestreams.", "install_methods": [ { @@ -45,3 +46,4 @@ } ] } + diff --git a/frontend/public/json/yunohost.json b/frontend/public/json/yunohost.json index 9cd9a741b..1ef620d72 100644 --- a/frontend/public/json/yunohost.json +++ b/frontend/public/json/yunohost.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://yunohost.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/yunohost.svg", + "config_path": "", "description": "YunoHost is an operating system aiming for the simplest administration of a server, and therefore democratize self-hosting, while making sure it stays reliable, secure, ethical and lightweight.", "install_methods": [ { @@ -36,4 +37,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/frontend/public/json/zabbix.json b/frontend/public/json/zabbix.json index d0261c28b..3c15d1207 100644 --- a/frontend/public/json/zabbix.json +++ b/frontend/public/json/zabbix.json @@ -12,6 +12,7 @@ "documentation": "https://www.zabbix.com/documentation/current/en/manual", "website": "https://www.zabbix.com/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/zabbix.svg", + "config_path": "/etc/zabbix/zabbix_server.conf", "description": "Zabbix is an all-in-one monitoring solution with a variety of enterprise-grade features available right out of the box.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/zammad.json b/frontend/public/json/zammad.json index 39b73e326..85df18388 100644 --- a/frontend/public/json/zammad.json +++ b/frontend/public/json/zammad.json @@ -12,6 +12,7 @@ "documentation": "https://docs.zammad.org/en/latest/", "website": "https://zammad.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/zammad.svg", + "config_path": "/etc/nginx/sites-available/zammad.conf", "description": "Zammad is a web based open source helpdesk/customer support system with many features to manage customer communication via several channels like telephone, facebook, twitter, chat and emails. It is distributed under version 3 of the GNU AFFERO General Public License (GNU AGPLv3).", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/zerotier-one.json b/frontend/public/json/zerotier-one.json index 66f9545f2..6a5c78774 100644 --- a/frontend/public/json/zerotier-one.json +++ b/frontend/public/json/zerotier-one.json @@ -12,6 +12,7 @@ "documentation": "https://docs.zerotier.com/", "website": "https://www.zerotier.com/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/zerotier.svg", + "config_path": "/opt/key-networks/ztncui/.env", "description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/zigbee2mqtt.json b/frontend/public/json/zigbee2mqtt.json index a68e72099..887decac9 100644 --- a/frontend/public/json/zigbee2mqtt.json +++ b/frontend/public/json/zigbee2mqtt.json @@ -12,6 +12,7 @@ "documentation": "https://www.zigbee2mqtt.io/guide/getting-started/", "website": "https://www.zigbee2mqtt.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/zigbee2mqtt.svg", + "config_path": "/opt/zigbee2mqtt/data/configuration.yaml", "description": "Zigbee2MQTT is an open-source software project that allows you to use Zigbee-based smart home devices (such as those sold under the Philips Hue and Ikea Tradfri brands) with MQTT-based home automation systems, like Home Assistant, Node-RED, and others. The software acts as a bridge between your Zigbee devices and MQTT, allowing you to control and monitor these devices from your home automation system.", "install_methods": [ { @@ -48,3 +49,4 @@ } ] } + diff --git a/frontend/public/json/zipline.json b/frontend/public/json/zipline.json index b1d045e91..982b3ee77 100644 --- a/frontend/public/json/zipline.json +++ b/frontend/public/json/zipline.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://zipline.diced.sh/", "logo": "https://raw.githubusercontent.com/diced/zipline/trunk/public/zipline_small.png", + "config_path": "/opt/zipline/.env", "description": "Zipline is a file-sharing and URL-shortening server designed for easy setup and extensive features. It allows users to upload files, organize them into folders, create shortened URLs, and manage uploads through a user-friendly dashboard. Additional features include image compression, video thumbnails, password protection, 2FA, OAuth2 registration, and API access for custom control. It supports integrations with platforms like Discord.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": "password" }, "notes": [] -} \ No newline at end of file +} diff --git a/frontend/public/json/zitadel.json b/frontend/public/json/zitadel.json index a48d9338c..0ba668f4f 100644 --- a/frontend/public/json/zitadel.json +++ b/frontend/public/json/zitadel.json @@ -12,6 +12,7 @@ "documentation": "https://zitadel.com/docs/guides/overview", "website": "https://zitadel.com", "logo": "https://raw.githubusercontent.com/zitadel/zitadel/refs/heads/main/console/src/assets/icons/android-chrome-512x512.png", + "config_path": "/opt/zitadel/config.yaml", "description": "Zitadel is an open-source identity and access management (IAM) solution designed to provide secure authentication, authorization, and user management for modern applications and services. Built with a focus on flexibility, scalability, and security, Zitadel offers a comprehensive set of features for developers and organizations looking to implement robust identity management.", "install_methods": [ { @@ -41,3 +42,4 @@ } ] } + diff --git a/frontend/public/json/zoraxy.json b/frontend/public/json/zoraxy.json index 7a78e2149..709fcdafd 100644 --- a/frontend/public/json/zoraxy.json +++ b/frontend/public/json/zoraxy.json @@ -12,6 +12,7 @@ "documentation": null, "website": "https://zoraxy.aroz.org/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/zoraxy.svg", + "config_path": "", "description": "Zoraxy is an all in one homelab network routing solution.", "install_methods": [ { @@ -32,3 +33,4 @@ }, "notes": [] } + diff --git a/frontend/public/json/zwave-js-ui.json b/frontend/public/json/zwave-js-ui.json index daf8933e4..9b7de90d9 100644 --- a/frontend/public/json/zwave-js-ui.json +++ b/frontend/public/json/zwave-js-ui.json @@ -12,6 +12,7 @@ "documentation": "https://zwave-js.github.io/zwave-js-ui/#/", "website": "https://github.com/zwave-js/zwave-js-ui#", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/zwave.svg", + "config_path": "/opt/.env", "description": "Z-Wave JS UI is an open-source software that serves as a gateway between Z-Wave devices and MQTT (Message Queuing Telemetry Transport) protocol, allowing users to control and monitor their Z-Wave devices via a user interface. The software provides a configurable platform to manage Z-Wave networks and integrate with other smart home systems through MQTT.", "install_methods": [ { @@ -31,4 +32,4 @@ "password": null }, "notes": [] -} \ No newline at end of file +} From cf4a2c8ffe9adc85a000b760bc9a1df9156d9838 Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:52:26 +0200 Subject: [PATCH 30/42] Feat: Add config path to website (#4005) * Feat: Add config path to website * Handel Responsive/Mobile --- .../public/json/podman-homeassistant.json | 2 +- frontend/public/json/watchyourlan.json | 2 +- .../src/app/json-editor/_schemas/schemas.ts | 1 + frontend/src/app/json-editor/page.tsx | 9 +++ .../app/scripts/_components/ScriptItem.tsx | 11 ++++ .../_components/ScriptItems/ConfigFile.tsx | 10 ++++ .../src/components/ui/config-copy-button.tsx | 55 +++++++++++++++++++ frontend/src/lib/types.ts | 1 + 8 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx create mode 100644 frontend/src/components/ui/config-copy-button.tsx diff --git a/frontend/public/json/podman-homeassistant.json b/frontend/public/json/podman-homeassistant.json index 503735ab2..22e38f839 100644 --- a/frontend/public/json/podman-homeassistant.json +++ b/frontend/public/json/podman-homeassistant.json @@ -12,7 +12,7 @@ "documentation": "https://www.home-assistant.io/docs/", "website": "https://www.home-assistant.io/", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/home-assistant.svg", - "config_path": "", + "config_path": "/var/lib/containers/storage/volumes/hass_config/_data", "description": "A standalone Podman container-based installation of Home Assistant Core means that the Home Assistant Core software is installed inside a container managed by Podman, separate from the host operating system. This provides a flexible and scalable solution for running the software, as the container can be easily moved between host systems or isolated from other processes for security. Podman is a popular open-source tool for managing containers that is similar to Docker, but designed for use on Linux systems without a daemon.\r\n\r\n\ud83d\udec8 If the LXC is created Privileged, the script will automatically set up USB passthrough.", "install_methods": [ { diff --git a/frontend/public/json/watchyourlan.json b/frontend/public/json/watchyourlan.json index ce537a82c..3bd33ad1d 100644 --- a/frontend/public/json/watchyourlan.json +++ b/frontend/public/json/watchyourlan.json @@ -12,7 +12,7 @@ "documentation": null, "website": "https://github.com/aceberg/WatchYourLAN", "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/watchyourlan.webp", - "config_path": "", + "config_path": "/data/config.yaml", "description": "WatchYourLAN is a lightweight network IP scanner with web GUI.", "install_methods": [ { diff --git a/frontend/src/app/json-editor/_schemas/schemas.ts b/frontend/src/app/json-editor/_schemas/schemas.ts index 9ffe8f3a1..63c676e6a 100644 --- a/frontend/src/app/json-editor/_schemas/schemas.ts +++ b/frontend/src/app/json-editor/_schemas/schemas.ts @@ -33,6 +33,7 @@ export const ScriptSchema = z.object({ documentation: z.string().nullable(), website: z.string().url().nullable(), logo: z.string().url().nullable(), + config_path: z.string(), description: z.string().min(1, "Description is required"), install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"), default_credentials: z.object({ diff --git a/frontend/src/app/json-editor/page.tsx b/frontend/src/app/json-editor/page.tsx index 1789b0a29..fd1a6e966 100644 --- a/frontend/src/app/json-editor/page.tsx +++ b/frontend/src/app/json-editor/page.tsx @@ -32,6 +32,7 @@ const initialScript: Script = { privileged: false, interface_port: null, documentation: null, + config_path: "", website: null, logo: null, description: "", @@ -174,6 +175,14 @@ export default function JSONGenerator() { onChange={(e) => updateScript("logo", e.target.value || null)} /> +
+ + updateScript("config_path", e.target.value || null)} + /> +
diff --git a/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx b/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx new file mode 100644 index 000000000..0f4f43fb0 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx @@ -0,0 +1,10 @@ +import ConfigCopyButton from "@/components/ui/config-copy-button"; +import { Script } from "@/lib/types"; + +export default function ConfigFile({ item }: { item: Script }) { + return ( +
+ {item.config_path ? item.config_path : "No config path set"} +
+ ); +} diff --git a/frontend/src/components/ui/config-copy-button.tsx b/frontend/src/components/ui/config-copy-button.tsx new file mode 100644 index 000000000..45fc2e92d --- /dev/null +++ b/frontend/src/components/ui/config-copy-button.tsx @@ -0,0 +1,55 @@ +"use client"; +import { cn } from "@/lib/utils"; +import { CheckIcon, ClipboardIcon } from "lucide-react"; +import { useEffect, useState } from "react"; +import { toast } from "sonner"; +import { Card } from "./card"; + +export default function CodeCopyButton({ + children, +}: { + children: React.ReactNode; +}) { + const [hasCopied, setHasCopied] = useState(false); + const isMobile = window.innerWidth <= 640; + + useEffect(() => { + if (hasCopied) { + setTimeout(() => { + setHasCopied(false); + }, 2000); + } + }, [hasCopied]); + + const handleCopy = (type: string, value: any) => { + navigator.clipboard.writeText(value); + + setHasCopied(true); + + + // toast.success(`copied ${type} to clipboard`, { + // icon: , + // }); + }; + + return ( +
+ +
+ {!isMobile && children ? children : "Copy Config File Path"} +
+
handleCopy("install command", children)} + > + {hasCopied ? ( + + ) : ( + + )} + Copy +
+
+
+ ); +} diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index b6aa20b17..df9d4bf48 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -12,6 +12,7 @@ export type Script = { documentation: string | null; website: string | null; logo: string | null; + config_path: string; description: string; install_methods: { type: "default" | "alpine"; From 6d4278a9e050778df8248ace41def516cc76deb0 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:53:18 +0200 Subject: [PATCH 31/42] Update CHANGELOG.md (#4023) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5013b1bf..e8568808c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Remove Whoogle [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4019](https://github.com/community-scripts/ProxmoxVE/pull/4019)) + - #### 📝 Script Information + + - Prepare JSON files for new website feature [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4004](https://github.com/community-scripts/ProxmoxVE/pull/4004)) + ## 2025-04-23 ### 🚀 Updated Scripts From 2f3892d29c22d5c06655727dadac3f136008efde Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:54:48 +0200 Subject: [PATCH 32/42] Update CHANGELOG.md (#4025) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8568808c..7471fa8a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,10 @@ All LXC instances created using this repository come pre-installed with Midnight - Remove Whoogle [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4019](https://github.com/community-scripts/ProxmoxVE/pull/4019)) + - #### ✨ New Features + + - Feat: Add config path to website [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4005](https://github.com/community-scripts/ProxmoxVE/pull/4005)) + - #### 📝 Script Information - Prepare JSON files for new website feature [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4004](https://github.com/community-scripts/ProxmoxVE/pull/4004)) From e24e9309d1226386b468274b4a1f3ab0014d8887 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:09:06 +0200 Subject: [PATCH 33/42] Cleanup misc folder (#4020) --- frontend/public/json/daemonsync.json | 2 +- frontend/public/json/openobserve.json | 2 +- misc/images/daemon-sync.png | Bin 55960 -> 0 bytes misc/images/filebrowser.png | Bin 4747 -> 0 bytes misc/images/haos.png | Bin 13846 -> 0 bytes misc/images/openobsecure.png | Bin 45295 -> 0 bytes 6 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 misc/images/daemon-sync.png delete mode 100644 misc/images/filebrowser.png delete mode 100644 misc/images/haos.png delete mode 100644 misc/images/openobsecure.png diff --git a/frontend/public/json/daemonsync.json b/frontend/public/json/daemonsync.json index 44951a4c3..4c1f83fa7 100644 --- a/frontend/public/json/daemonsync.json +++ b/frontend/public/json/daemonsync.json @@ -11,7 +11,7 @@ "interface_port": 8084, "documentation": null, "website": "https://daemonsync.me/", - "logo": "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fimg.informer.com%2Ficons_mac%2Fpng%2F128%2F350%2F350335.png&f=1&nofb=1", + "logo": "https://img.informer.com/icons_mac/png/128/350/350335.png", "config_path": "", "description": "Sync files from app to server, share photos & videos, back up your data and stay secure inside local network.", "install_methods": [ diff --git a/frontend/public/json/openobserve.json b/frontend/public/json/openobserve.json index 9e4e71657..2e38453fa 100644 --- a/frontend/public/json/openobserve.json +++ b/frontend/public/json/openobserve.json @@ -11,7 +11,7 @@ "interface_port": 5080, "documentation": null, "website": "https://openobserve.ai/", - "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/openobsecure.png?raw=true", + "logo": "https://avatars.githubusercontent.com/u/95867656", "config_path": "/opt/openobserve/data/.env", "description": "OpenObserve is a simple yet sophisticated log search, infrastructure monitoring, and APM solution.", "install_methods": [ diff --git a/misc/images/daemon-sync.png b/misc/images/daemon-sync.png deleted file mode 100644 index c8ed9c5a32120f4e84dc8321b7941dedb48add60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55960 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 Z{|}7#OW(DQmPP;o002ovPDHLkV1h>s7s~(u diff --git a/misc/images/haos.png b/misc/images/haos.png deleted file mode 100644 index 4fce16eb74c4deefd2d32ce78e80283bfef0b06c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13846 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 Y2M)vu>(hxgkN^Mx07*qoM6N<$f^m4D+5i9m diff --git a/misc/images/openobsecure.png b/misc/images/openobsecure.png deleted file mode 100644 index 52bbc9707d2eff299bf0c03c5f5a76ab51d3d8dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45295 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 From df93fc0ecfa0c3fc33141bf483db22556d3671ea Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:09:26 +0200 Subject: [PATCH 34/42] Update pihole.sh (#4026) --- ct/pihole.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ct/pihole.sh b/ct/pihole.sh index a90658793..19ba53364 100644 --- a/ct/pihole.sh +++ b/ct/pihole.sh @@ -29,6 +29,8 @@ function update_script() { fi msg_info "Updating ${APP}" set +e + $STD apt-get update + $STD apt-get upgrade -y /usr/local/bin/pihole -up msg_ok "Updated ${APP}" exit @@ -41,4 +43,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}/admin${CL}" \ No newline at end of file +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/admin${CL}" From 15be0b91a5b195d5b83fe97bdd03b3254ba3fc90 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:13:22 +0200 Subject: [PATCH 35/42] Update CHANGELOG.md (#4027) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7471fa8a8..ddfc15294 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,10 @@ All LXC instances created using this repository come pre-installed with Midnight - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) + - #### ✨ New Features + + - Pi-Hole: Fix Unbound update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4026](https://github.com/community-scripts/ProxmoxVE/pull/4026)) + ### 🌐 Website - Remove Whoogle [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4019](https://github.com/community-scripts/ProxmoxVE/pull/4019)) From 398a25ce62c2f994a54f6d6f81ae9d1f7ef393b7 Mon Sep 17 00:00:00 2001 From: Tobias <96661824+CrazyWolf13@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:42:46 +0200 Subject: [PATCH 36/42] Update nextpvr.json (#4028) --- frontend/public/json/nextpvr.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/public/json/nextpvr.json b/frontend/public/json/nextpvr.json index 729b58dcb..ee4e4f41b 100644 --- a/frontend/public/json/nextpvr.json +++ b/frontend/public/json/nextpvr.json @@ -12,6 +12,7 @@ "documentation": "https://github.com/sub3/NextPVR/wiki", "website": "https://nextpvr.com/", "logo": null, + "config_path": "", "description": "NextPVR is a personal video recorder application for Microsoft Windows, Linux, Mac and Docker. NextPVR makes it easy to watch or record live TV, and provides great features like series recordings, web scheduling, iPhone/iPad client application, Kodi/Emby integration etc.", "install_methods": [ { From 9d62b9e06411ab8e85bc7b567c77e91ffd42d36f Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> Date: Thu, 24 Apr 2025 13:03:54 +0200 Subject: [PATCH 37/42] Update jellyfin.json (#4029) --- frontend/public/json/jellyfin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/public/json/jellyfin.json b/frontend/public/json/jellyfin.json index 2535b0f96..cfc20a594 100644 --- a/frontend/public/json/jellyfin.json +++ b/frontend/public/json/jellyfin.json @@ -6,7 +6,7 @@ ], "date_created": "2024-05-02", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 8096, "documentation": "https://jellyfin.org/docs/", From 0d1492d527d33d564866ba2250de9d4486617887 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 13:23:13 +0200 Subject: [PATCH 38/42] Update CHANGELOG.md (#4030) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddfc15294..1750a4da5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 📝 Script Information + - Jellyfin: Mark as updateable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4029](https://github.com/community-scripts/ProxmoxVE/pull/4029)) - Prepare JSON files for new website feature [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4004](https://github.com/community-scripts/ProxmoxVE/pull/4004)) ## 2025-04-23 From dc84667ad889e1b4de17bc22f8fb1504f994e908 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:17:29 +0200 Subject: [PATCH 39/42] Update versions.json (#4032) Co-authored-by: GitHub Actions[bot] --- frontend/public/json/versions.json | 103 ++++++++++++++--------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/frontend/public/json/versions.json b/frontend/public/json/versions.json index 2150ce2a6..05071934e 100644 --- a/frontend/public/json/versions.json +++ b/frontend/public/json/versions.json @@ -1,13 +1,58 @@ [ + { + "name": "fhem/fhem-mirror", + "version": "6.2", + "date": "2025-04-24T10:35:55Z" + }, + { + "name": "glpi-project/glpi", + "version": "10.0.18", + "date": "2025-02-12T11:07:02Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v10.3.1", + "date": "2025-04-24T08:47:43Z" + }, + { + "name": "NLnetLabs/unbound", + "version": "release-1.23.0", + "date": "2025-04-24T08:07:21Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.22.1822", + "date": "2025-04-24T06:06:38Z" + }, + { + "name": "inventree/InvenTree", + "version": "0.17.11", + "date": "2025-04-24T05:25:55Z" + }, + { + "name": "openobserve/openobserve", + "version": "v0.14.6-rc7", + "date": "2025-04-24T04:02:56Z" + }, + { + "name": "rogerfar/rdt-client", + "version": "v2.0.109", + "date": "2025-04-24T03:55:08Z" + }, + { + "name": "syncthing/syncthing", + "version": "v2.0.0-beta.9", + "date": "2025-04-12T13:58:29Z" + }, { "name": "immich-app/immich", "version": "v1.132.1", "date": "2025-04-23T22:08:21Z" }, { - "name": "fhem/fhem-mirror", - "version": "6.2", - "date": "2025-04-23T20:31:09Z" + "name": "keycloak/keycloak", + "version": "26.2.1", + "date": "2025-04-23T12:17:17Z" }, { "name": "mongodb/mongo", @@ -31,8 +76,8 @@ }, { "name": "runtipi/runtipi", - "version": "nightly", - "date": "2025-04-21T16:55:50Z" + "version": "v3.10.0-beta.9", + "date": "2025-04-17T11:46:08Z" }, { "name": "NodeBB/NodeBB", @@ -44,11 +89,6 @@ "version": "v11.6.1", "date": "2025-04-23T17:04:02Z" }, - { - "name": "syncthing/syncthing", - "version": "v2.0.0-beta.9", - "date": "2025-04-12T13:58:29Z" - }, { "name": "nzbgetcom/nzbget", "version": "v24.8", @@ -64,11 +104,6 @@ "version": "v2.3.0p31-rc1", "date": "2025-04-23T13:16:47Z" }, - { - "name": "keycloak/keycloak", - "version": "26.2.1", - "date": "2025-04-23T12:17:17Z" - }, { "name": "redis/redis", "version": "7.4.3", @@ -104,16 +139,6 @@ "version": "v7.4.1", "date": "2025-04-23T06:40:34Z" }, - { - "name": "Jackett/Jackett", - "version": "v0.22.1815", - "date": "2025-04-23T05:56:23Z" - }, - { - "name": "openobserve/openobserve", - "version": "v0.14.6-rc6", - "date": "2025-04-23T04:24:27Z" - }, { "name": "jhuckaby/Cronicle", "version": "v0.9.78", @@ -149,11 +174,6 @@ "version": "0.203.2", "date": "2025-04-22T15:07:28Z" }, - { - "name": "zwave-js/zwave-js-ui", - "version": "v10.3.0", - "date": "2025-04-22T14:57:47Z" - }, { "name": "OliveTin/OliveTin", "version": "2025.4.22", @@ -287,7 +307,7 @@ { "name": "ollama/ollama", "version": "v0.6.6", - "date": "2025-04-19T01:13:05Z" + "date": "2025-04-17T04:34:58Z" }, { "name": "caddyserver/caddy", @@ -459,11 +479,6 @@ "version": "v0.6.5", "date": "2025-04-14T09:13:36Z" }, - { - "name": "rogerfar/rdt-client", - "version": "v2.0.108", - "date": "2025-04-13T22:17:55Z" - }, { "name": "autobrr/autobrr", "version": "v1.61.0", @@ -504,11 +519,6 @@ "version": "v5.5.2", "date": "2025-04-11T22:00:06Z" }, - { - "name": "NLnetLabs/unbound", - "version": "release-1.23.0rc2", - "date": "2025-04-11T13:24:25Z" - }, { "name": "sabnzbd/sabnzbd", "version": "4.5.1", @@ -529,11 +539,6 @@ "version": "cassandra-5.0.4", "date": "2025-04-10T16:32:00Z" }, - { - "name": "glpi-project/glpi", - "version": "10.0.18", - "date": "2025-02-12T11:07:02Z" - }, { "name": "zitadel/zitadel", "version": "v2.69.10", @@ -604,11 +609,6 @@ "version": "2.32.0", "date": "2025-04-06T09:43:51Z" }, - { - "name": "inventree/InvenTree", - "version": "0.17.10", - "date": "2025-04-06T05:31:49Z" - }, { "name": "jellyfin/jellyfin", "version": "v10.10.7", @@ -1250,4 +1250,3 @@ "date": "2022-07-15T05:20:17Z" } ] - From 08ff2daa38bfafb042b1f0c85a8a04b285a745fa Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:00:49 +0200 Subject: [PATCH 40/42] Update CHANGELOG.md (#4033) Co-authored-by: github-actions[bot] --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1750a4da5..c1cd0fe61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,20 +18,17 @@ All LXC instances created using this repository come pre-installed with Midnight ### 🚀 Updated Scripts - - Element Synapse: Add Synapse-Admin web UI to manage Matrix [@tremor021](https://github.com/tremor021) ([#4010](https://github.com/community-scripts/ProxmoxVE/pull/4010)) - - #### 🐞 Bug Fixes - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) - #### ✨ New Features + - Element Synapse: Add Synapse-Admin web UI to manage Matrix [@tremor021](https://github.com/tremor021) ([#4010](https://github.com/community-scripts/ProxmoxVE/pull/4010)) - Pi-Hole: Fix Unbound update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4026](https://github.com/community-scripts/ProxmoxVE/pull/4026)) ### 🌐 Website - - Remove Whoogle [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4019](https://github.com/community-scripts/ProxmoxVE/pull/4019)) - - #### ✨ New Features - Feat: Add config path to website [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4005](https://github.com/community-scripts/ProxmoxVE/pull/4005)) From be9784336ed6f9f1ed0854eb7add58b9ea1e95f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Slavi=C5=A1a=20Are=C5=BEina?= <58952836+tremor021@users.noreply.github.com> Date: Thu, 24 Apr 2025 20:52:57 +0200 Subject: [PATCH 41/42] Fix isntall and update (#4041) --- ct/elementsynapse.sh | 2 +- install/elementsynapse-install.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ct/elementsynapse.sh b/ct/elementsynapse.sh index 01dd0e306..020b797c3 100644 --- a/ct/elementsynapse.sh +++ b/ct/elementsynapse.sh @@ -55,7 +55,7 @@ function update_script() { rm -rf /opt/synapse-admin mkdir -p /opt/synapse-admin curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" - tar xzf "$temp_file" -C /opt/synapse-admin + tar xzf "$temp_file" -C /opt/synapse-admin --strip-components=1 cd /opt/synapse-admin $STD yarn install --ignore-engines systemctl start synapse-admin diff --git a/install/elementsynapse-install.sh b/install/elementsynapse-install.sh index 40215d2ea..c73eec6aa 100644 --- a/install/elementsynapse-install.sh +++ b/install/elementsynapse-install.sh @@ -63,15 +63,15 @@ temp_file=$(mktemp) mkdir -p /opt/synapse-admin RELEASE=$(curl -fsSL https://api.github.com/repos/etkecc/synapse-admin/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file" -tar xzf "$temp_file" -C /opt/synapse-admin -cd /opt/synapse-admin +tar xzf "$temp_file" -C /opt/synapse-admin --strip-components=1 +cd /opt/synapse-adminsys $STD yarn install --ignore-engines msg_ok "Installed Element Synapse" msg_info "Creating Service" cat </etc/systemd/system/synapse-admin.service [Unit] -Description=Excalidraw Service +Description=Synapse-Admin Service After=network.target Requires=matrix-synapse.service From 0608a4a285765fe6bb2f50654a2c4b0e35d2c828 Mon Sep 17 00:00:00 2001 From: "community-scripts-pr-app[bot]" <189241966+community-scripts-pr-app[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 21:13:37 +0200 Subject: [PATCH 42/42] Update CHANGELOG.md (#4042) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1cd0fe61..4c3783a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All LXC instances created using this repository come pre-installed with Midnight - #### 🐞 Bug Fixes + - Element Synapse: Fix Admin UI install and update procedure [@tremor021](https://github.com/tremor021) ([#4041](https://github.com/community-scripts/ProxmoxVE/pull/4041)) - SLSKD: always check for soularr update [@vhsdream](https://github.com/vhsdream) ([#4012](https://github.com/community-scripts/ProxmoxVE/pull/4012)) - #### ✨ New Features