From 82dc4643de1827e03e3e77b625af9c7afaa18f7c Mon Sep 17 00:00:00 2001 From: Michel Roegl-Brunner Date: Mon, 15 Sep 2025 14:30:07 +0200 Subject: [PATCH] feat: optimize JSON sync with 1 API call + raw URLs - Replace GitHub API calls (390+) with 1 API call + raw URL downloads - Create GitHubJsonService for efficient JSON file syncing - Reduce API rate limiting issues by 99.7% - Add automatic page reload after successful sync - Update tests to use new service - Maintain same functionality with better performance Performance improvement: - Before: 390+ GitHub API calls (1 per JSON file) - After: 1 GitHub API call + 389 raw URL downloads - Raw URLs have no rate limits, making sync much more reliable --- scripts/json/2fauth.json | 2 +- scripts/json/actualbudget.json | 68 +- scripts/json/add-iptag.json | 2 +- scripts/json/add-netbird-lxc.json | 2 +- scripts/json/add-tailscale-lxc.json | 2 +- scripts/json/adguard.json | 98 +- scripts/json/adventurelog.json | 2 +- scripts/json/agentdvr.json | 2 +- scripts/json/all-templates.json | 2 +- scripts/json/alpine-it-tools.json | 2 +- scripts/json/alpine-redlib.json | 35 + scripts/json/alpine-tinyauth.json | 2 +- scripts/json/alpine.json | 2 +- scripts/json/apache-cassandra.json | 2 +- scripts/json/apache-couchdb.json | 2 +- scripts/json/apache-guacamole.json | 2 +- scripts/json/apache-tika.json | 2 +- scripts/json/apache-tomcat.json | 2 +- scripts/json/apt-cacher-ng.json | 2 +- scripts/json/archivebox.json | 2 +- scripts/json/archlinux-vm.json | 2 +- scripts/json/argus.json | 2 +- scripts/json/aria2.json | 2 +- scripts/json/asterisk.json | 2 +- scripts/json/audiobookshelf.json | 6 +- scripts/json/authelia.json | 2 +- scripts/json/autobrr.json | 2 +- scripts/json/autocaliweb.json | 2 +- scripts/json/babybuddy.json | 2 +- scripts/json/backrest.json | 2 +- scripts/json/baikal.json | 2 +- scripts/json/bar-assistant.json | 2 +- scripts/json/barcode-buddy.json | 2 +- scripts/json/bazarr.json | 2 +- scripts/json/beszel.json | 2 +- scripts/json/bitmagnet.json | 2 +- scripts/json/blocky.json | 2 +- scripts/json/booklore.json | 2 +- scripts/json/bookstack.json | 2 +- scripts/json/bunkerweb.json | 2 +- scripts/json/bytestash.json | 2 +- scripts/json/caddy.json | 2 +- scripts/json/casaos.json | 2 +- scripts/json/changedetection.json | 2 +- scripts/json/channels.json | 2 +- scripts/json/checkmk.json | 2 +- scripts/json/clean-lxcs.json | 2 +- scripts/json/clean-orphaned-lvm.json | 2 +- scripts/json/cleanuparr.json | 2 +- scripts/json/cloudflare-ddns.json | 2 +- scripts/json/cloudflared.json | 2 +- scripts/json/cloudreve.json | 2 +- scripts/json/cockpit.json | 2 +- scripts/json/coder-code-server.json | 2 +- scripts/json/commafeed.json | 2 +- scripts/json/configarr.json | 2 +- scripts/json/convertx.json | 2 +- scripts/json/copyparty.json | 2 +- scripts/json/cosmos.json | 2 +- scripts/json/crafty-controller.json | 2 +- scripts/json/cron-update-lxcs.json | 2 +- scripts/json/cronicle.json | 2 +- scripts/json/cross-seed.json | 2 +- scripts/json/crowdsec.json | 2 +- scripts/json/cryptpad.json | 2 +- scripts/json/daemonsync.json | 2 +- scripts/json/dashy.json | 2 +- scripts/json/debian-13-vm.json | 4 +- scripts/json/debian-vm.json | 2 +- scripts/json/debian.json | 2 +- scripts/json/deconz.json | 2 +- scripts/json/deluge.json | 2 +- scripts/json/docker-vm.json | 2 +- scripts/json/docker.json | 2 +- scripts/json/dockge.json | 2 +- scripts/json/docmost.json | 2 +- scripts/json/documenso.json | 2 +- scripts/json/dolibarr.json | 2 +- scripts/json/dotnetaspwebapi.json | 2 +- scripts/json/duplicati.json | 78 +- scripts/json/elementsynapse.json | 2 +- scripts/json/emby.json | 2 +- scripts/json/emqx.json | 2 +- scripts/json/ersatztv.json | 2 +- scripts/json/esphome.json | 4 +- scripts/json/evcc.json | 78 +- scripts/json/excalidraw.json | 2 +- scripts/json/fenrus.json | 2 +- scripts/json/fhem.json | 2 +- scripts/json/filebrowser-quantum.json | 2 +- scripts/json/filebrowser.json | 2 +- scripts/json/fileflows.json | 2 +- scripts/json/firefly.json | 2 +- scripts/json/flaresolverr.json | 2 +- scripts/json/flowiseai.json | 2 +- scripts/json/fluid-calendar.json | 2 +- scripts/json/forgejo.json | 2 +- scripts/json/freepbx.json | 2 +- scripts/json/freshrss.json | 2 +- scripts/json/frigate.json | 2 +- scripts/json/fstrim.json | 2 +- scripts/json/fumadocs.json | 2 +- scripts/json/gatus.json | 2 +- scripts/json/ghost.json | 2 +- scripts/json/gitea-mirror.json | 2 +- scripts/json/gitea.json | 2 +- scripts/json/glance.json | 2 +- scripts/json/glances.json | 2 +- scripts/json/glpi.json | 2 +- scripts/json/go2rtc.json | 2 +- scripts/json/gokapi.json | 2 +- scripts/json/gomft.json | 2 +- scripts/json/gotify.json | 2 +- scripts/json/grafana.json | 88 +- scripts/json/graylog.json | 84 +- scripts/json/grist.json | 2 +- scripts/json/grocy.json | 2 +- scripts/json/habitica.json | 2 +- scripts/json/haos-vm.json | 2 +- scripts/json/headscale.json | 2 +- scripts/json/healthchecks.json | 2 +- scripts/json/heimdall-dashboard.json | 2 +- scripts/json/hev-socks5-server.json | 2 +- scripts/json/hivemq.json | 2 +- scripts/json/homarr.json | 2 +- scripts/json/homeassistant.json | 100 +- scripts/json/homebox.json | 4 +- scripts/json/homebridge.json | 2 +- scripts/json/homepage.json | 2 +- scripts/json/homer.json | 2 +- scripts/json/hortusfox.json | 2 +- scripts/json/host-backup.json | 2 +- scripts/json/huntarr.json | 2 +- scripts/json/hyperhdr.json | 2 +- scripts/json/hyperion.json | 2 +- scripts/json/immich.json | 2 +- scripts/json/influxdb.json | 2 +- scripts/json/inspircd.json | 2 +- scripts/json/inventree.json | 2 +- scripts/json/iobroker.json | 2 +- scripts/json/itsm-ng.json | 2 +- scripts/json/iventoy.json | 2 +- scripts/json/jackett.json | 2 +- scripts/json/jeedom.json | 2 +- scripts/json/jellyfin.json | 4 +- scripts/json/jellyseerr.json | 2 +- scripts/json/jenkins.json | 2 +- scripts/json/jupyternotebook.json | 2 +- scripts/json/kapowarr.json | 2 +- scripts/json/karakeep.json | 2 +- scripts/json/kasm.json | 2 +- scripts/json/kavita.json | 2 +- scripts/json/kernel-clean.json | 2 +- scripts/json/kernel-pin.json | 2 +- scripts/json/keycloak.json | 2 +- scripts/json/kimai.json | 2 +- scripts/json/koillection.json | 2 +- scripts/json/kometa.json | 2 +- scripts/json/komga.json | 2 +- scripts/json/komodo.json | 2 +- scripts/json/kubo.json | 2 +- scripts/json/lazylibrarian.json | 2 +- scripts/json/leantime.json | 2 +- scripts/json/librespeed-rust.json | 2 +- scripts/json/libretranslate.json | 2 +- scripts/json/lidarr.json | 2 +- scripts/json/linkstack.json | 2 +- scripts/json/linkwarden.json | 2 +- scripts/json/listmonk.json | 2 +- scripts/json/litellm.json | 2 +- scripts/json/lldap.json | 2 +- scripts/json/lubelogger.json | 2 +- scripts/json/lxc-delete.json | 2 +- scripts/json/lyrionmusicserver.json | 2 +- scripts/json/mafl.json | 2 +- scripts/json/magicmirror.json | 4 +- scripts/json/managemydamnlife.json | 2 +- scripts/json/mariadb.json | 2 +- scripts/json/matterbridge.json | 2 +- scripts/json/mattermost.json | 2 +- scripts/json/mealie.json | 2 +- scripts/json/mediamanager.json | 2 +- scripts/json/mediamtx.json | 2 +- scripts/json/medusa.json | 2 +- scripts/json/meilisearch.json | 2 +- scripts/json/memos.json | 4 +- scripts/json/meshcentral.json | 2 +- scripts/json/metube.json | 2 +- scripts/json/microcode.json | 2 +- scripts/json/mikrotik-routeros.json | 2 +- scripts/json/minarca.json | 2 +- scripts/json/minio.json | 2 +- scripts/json/mongodb.json | 2 +- scripts/json/monica.json | 68 +- scripts/json/monitor-all.json | 4 +- scripts/json/motioneye.json | 2 +- scripts/json/mqtt.json | 2 +- scripts/json/mylar3.json | 2 +- scripts/json/myspeed.json | 2 +- scripts/json/mysql.json | 92 +- scripts/json/n8n.json | 2 +- scripts/json/navidrome.json | 2 +- scripts/json/neo4j.json | 2 +- scripts/json/netbox.json | 2 +- scripts/json/netdata.json | 2 +- scripts/json/nextcloud-vm.json | 2 +- scripts/json/nextcloudpi.json | 2 +- scripts/json/nextpvr.json | 2 +- scripts/json/nginxproxymanager.json | 2 +- scripts/json/nic-offloading-fix.json | 2 +- scripts/json/nocodb.json | 2 +- scripts/json/node-red.json | 2 +- scripts/json/nodebb.json | 2 +- scripts/json/notifiarr.json | 2 +- scripts/json/npmplus.json | 2 +- scripts/json/ntfy.json | 2 +- scripts/json/nxwitness.json | 2 +- scripts/json/nzbget.json | 2 +- scripts/json/oauth2-proxy.json | 2 +- scripts/json/octoprint.json | 2 +- scripts/json/odoo.json | 2 +- scripts/json/olivetin.json | 2 +- scripts/json/ollama.json | 2 +- scripts/json/omada.json | 68 +- scripts/json/ombi.json | 2 +- scripts/json/omv.json | 2 +- scripts/json/onedev.json | 2 +- scripts/json/onlyoffice.json | 2 +- scripts/json/opengist.json | 2 +- scripts/json/openhab.json | 2 +- scripts/json/openobserve.json | 2 +- scripts/json/openproject.json | 2 +- scripts/json/openwebui.json | 2 +- scripts/json/openwrt-vm.json | 41 + scripts/json/openziti-controller.json | 2 +- scripts/json/openziti-tunnel.json | 2 +- scripts/json/ots.json | 2 +- scripts/json/outline.json | 84 +- scripts/json/overseerr.json | 2 +- scripts/json/owncast.json | 2 +- scripts/json/owncloud-vm.json | 2 +- scripts/json/pairdrop.json | 2 +- scripts/json/palmr.json | 2 +- scripts/json/paperless-ai.json | 2 +- scripts/json/paperless-gpt.json | 2 +- scripts/json/paperless-ngx.json | 2 +- scripts/json/part-db.json | 2 +- scripts/json/paymenter.json | 2 +- scripts/json/pbs-microcode.json | 2 +- scripts/json/pbs4-upgrade.json | 2 +- scripts/json/peanut.json | 2 +- scripts/json/pelican-panel.json | 2 +- scripts/json/pelican-wings.json | 2 +- scripts/json/petio.json | 2 +- scripts/json/pf2etools.json | 2 +- scripts/json/photoprism.json | 2 +- scripts/json/phpipam.json | 68 +- scripts/json/pialert.json | 2 +- scripts/json/pihole.json | 100 +- scripts/json/pimox-haos-vm.json | 2 +- scripts/json/planka.json | 2 +- scripts/json/plant-it.json | 2 +- scripts/json/plex.json | 2 +- scripts/json/pocketbase.json | 2 +- scripts/json/pocketid.json | 2 +- scripts/json/podman-homeassistant.json | 4 +- scripts/json/podman.json | 2 +- scripts/json/post-pbs-install.json | 2 +- scripts/json/post-pmg-install.json | 2 +- scripts/json/post-pve-install.json | 2 +- scripts/json/postgresql.json | 2 +- scripts/json/privatebin.json | 68 +- scripts/json/projectsend.json | 2 +- scripts/json/prometheus-alertmanager.json | 68 +- .../prometheus-paperless-ngx-exporter.json | 84 +- scripts/json/prometheus-pve-exporter.json | 2 +- scripts/json/prometheus.json | 2 +- scripts/json/prowlarr.json | 2 +- scripts/json/proxmox-backup-server.json | 84 +- scripts/json/proxmox-datacenter-manager.json | 2 +- scripts/json/proxmox-mail-gateway.json | 78 +- scripts/json/ps5-mqtt.json | 78 +- scripts/json/pterodactyl-panel.json | 2 +- scripts/json/pterodactyl-wings.json | 2 +- scripts/json/pulse.json | 2 +- scripts/json/pve-privilege-converter.json | 2 +- scripts/json/qbittorrent.json | 2 +- scripts/json/rabbitmq.json | 2 +- scripts/json/radarr.json | 2 +- scripts/json/radicale.json | 2 +- scripts/json/rclone.json | 2 +- scripts/json/rdtclient.json | 2 +- scripts/json/reactive-resume.json | 2 +- scripts/json/readeck.json | 2 +- scripts/json/recyclarr.json | 2 +- scripts/json/redis.json | 2 +- scripts/json/resiliosync.json | 4 +- scripts/json/revealjs.json | 2 +- scripts/json/runtipi.json | 2 +- scripts/json/rustdeskserver.json | 2 +- scripts/json/sabnzbd.json | 68 +- scripts/json/salt.json | 2 +- scripts/json/scaling-governor.json | 2 +- scripts/json/scraparr.json | 40 + scripts/json/searxng.json | 2 +- scripts/json/seelf.json | 78 +- scripts/json/semaphore.json | 2 +- scripts/json/sftpgo.json | 2 +- scripts/json/shinobi.json | 2 +- scripts/json/signoz.json | 40 + scripts/json/silverbullet.json | 2 +- scripts/json/slskd.json | 2 +- scripts/json/smokeping.json | 2 +- scripts/json/snipeit.json | 2 +- scripts/json/sonarr.json | 2 +- scripts/json/spoolman.json | 2 +- scripts/json/sqlserver2022.json | 2 +- scripts/json/stirling-pdf.json | 2 +- scripts/json/streamlink-webui.json | 2 +- scripts/json/stylus.json | 35 + scripts/json/suwayomi-server.json | 2 +- scripts/json/swizzin.json | 2 +- scripts/json/syncthing.json | 2 +- scripts/json/tandoor.json | 2 +- scripts/json/tasmoadmin.json | 68 +- scripts/json/tasmocompiler.json | 2 +- scripts/json/tautulli.json | 2 +- scripts/json/tdarr.json | 2 +- scripts/json/teamspeak-server.json | 2 +- scripts/json/technitiumdns.json | 2 +- scripts/json/teddycloud.json | 2 +- scripts/json/telegraf.json | 40 + scripts/json/the-lounge.json | 2 +- scripts/json/threadfin.json | 2 +- scripts/json/tianji.json | 4 +- scripts/json/traccar.json | 2 +- scripts/json/tracktor.json | 2 +- scripts/json/traefik.json | 2 +- scripts/json/transmission.json | 2 +- scripts/json/trilium.json | 2 +- scripts/json/tududi.json | 2 +- scripts/json/turnkey.json | 2 +- scripts/json/twingate-connector.json | 2 +- scripts/json/typesense.json | 2 +- scripts/json/ubuntu.json | 2 +- scripts/json/ubuntu2204-vm.json | 2 +- scripts/json/ubuntu2404-vm.json | 2 +- scripts/json/ubuntu2504-vm.json | 2 +- scripts/json/uhf.json | 35 + scripts/json/umami.json | 2 +- scripts/json/umbrel-os-vm.json | 2 +- scripts/json/umlautadaptarr.json | 2 +- scripts/json/unbound.json | 2 +- scripts/json/undefined.json | 1452 +++++++++++++++++ scripts/json/unifi.json | 2 +- scripts/json/unmanic.json | 2 +- scripts/json/update-lxcs.json | 2 +- scripts/json/update-repo.json | 2 +- scripts/json/uptimekuma.json | 2 +- scripts/json/urbackupserver.json | 76 +- scripts/json/vaultwarden.json | 2 +- scripts/json/victoriametrics.json | 2 +- scripts/json/vikunja.json | 2 +- scripts/json/wallos.json | 2 +- scripts/json/wastebin.json | 2 +- scripts/json/watcharr.json | 68 +- scripts/json/watchyourlan.json | 2 +- scripts/json/wavelog.json | 2 +- scripts/json/wazuh.json | 2 +- scripts/json/web-check.json | 2 +- scripts/json/webmin.json | 2 +- scripts/json/wger.json | 2 +- scripts/json/whisparr.json | 2 +- scripts/json/wikijs.json | 2 +- scripts/json/wireguard.json | 2 +- scripts/json/wizarr.json | 2 +- scripts/json/wordpress.json | 2 +- scripts/json/yt-dlp-webui.json | 2 +- scripts/json/yunohost.json | 2 +- scripts/json/zabbix.json | 2 +- scripts/json/zammad.json | 2 +- scripts/json/zerotier-one.json | 68 +- scripts/json/zigbee2mqtt.json | 2 +- scripts/json/zipline.json | 2 +- scripts/json/zitadel.json | 2 +- scripts/json/zoraxy.json | 2 +- scripts/json/zot.json | 35 + scripts/json/zwave-js-ui.json | 2 +- src/app/_components/ResyncButton.tsx | 8 +- .../api/routers/__tests__/scripts.test.ts | 41 +- src/server/api/routers/scripts.ts | 25 +- src/server/services/githubJsonService.ts | 185 +++ 392 files changed, 3323 insertions(+), 1381 deletions(-) create mode 100644 scripts/json/alpine-redlib.json create mode 100644 scripts/json/openwrt-vm.json create mode 100644 scripts/json/scraparr.json create mode 100644 scripts/json/signoz.json create mode 100644 scripts/json/stylus.json create mode 100644 scripts/json/telegraf.json create mode 100644 scripts/json/uhf.json create mode 100644 scripts/json/undefined.json create mode 100644 scripts/json/zot.json create mode 100644 src/server/services/githubJsonService.ts diff --git a/scripts/json/2fauth.json b/scripts/json/2fauth.json index 857b188..af1023e 100644 --- a/scripts/json/2fauth.json +++ b/scripts/json/2fauth.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/actualbudget.json b/scripts/json/actualbudget.json index 77b5901..24b69d9 100644 --- a/scripts/json/actualbudget.json +++ b/scripts/json/actualbudget.json @@ -1,35 +1,35 @@ { - "name": "Actual Budget", - "slug": "actualbudget", - "categories": [ - 23 - ], - "date_created": "2025-05-06", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 5006, - "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807", - "website": "https://actualbudget.org/", - "config_path": "/opt/actualbudget-data/config.json", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/actual-budget.webp", - "description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.", - "install_methods": [ - { - "type": "default", - "script": "ct/actualbudget.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "Actual Budget", + "slug": "actualbudget", + "categories": [ + 23 + ], + "date_created": "2025-05-06", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 5006, + "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807", + "website": "https://actualbudget.org/", + "config_path": "/opt/actualbudget-data/config.json", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/actual-budget.webp", + "description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.", + "install_methods": [ + { + "type": "default", + "script": "ct/actualbudget.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/add-iptag.json b/scripts/json/add-iptag.json index 1545e0f..d853c77 100644 --- a/scripts/json/add-iptag.json +++ b/scripts/json/add-iptag.json @@ -49,4 +49,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/add-netbird-lxc.json b/scripts/json/add-netbird-lxc.json index e015af4..f1c5f2b 100644 --- a/scripts/json/add-netbird-lxc.json +++ b/scripts/json/add-netbird-lxc.json @@ -45,4 +45,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/add-tailscale-lxc.json b/scripts/json/add-tailscale-lxc.json index 4a9fd0d..04fb41e 100644 --- a/scripts/json/add-tailscale-lxc.json +++ b/scripts/json/add-tailscale-lxc.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/adguard.json b/scripts/json/adguard.json index 5132693..91b38c7 100644 --- a/scripts/json/adguard.json +++ b/scripts/json/adguard.json @@ -1,51 +1,51 @@ { - "name": "AdGuard Home", - "slug": "adguard", - "categories": [ - 5 - ], - "date_created": "2024-04-28", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started", - "website": "https://adguard.com/en/adguard-home/overview.html", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/adguard-home.webp", - "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": [ - { - "type": "default", - "script": "ct/adguard.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 2, - "os": "debian", - "version": "12" - } - }, - { - "type": "alpine", - "script": "ct/alpine-adguard.sh", - "resources": { - "cpu": 1, - "ram": 256, - "hdd": 1, - "os": "alpine", - "version": "3.22" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "AdGuard Home", + "slug": "adguard", + "categories": [ + 5 + ], + "date_created": "2024-04-28", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started", + "website": "https://adguard.com/en/adguard-home/overview.html", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/adguard-home.webp", + "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": [ + { + "type": "default", + "script": "ct/adguard.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "debian", + "version": "12" + } }, - "notes": [ - { - "text": "Adguard Home can be updated via the user interface.", - "type": "info" - } - ] -} + { + "type": "alpine", + "script": "ct/alpine-adguard.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.22" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Adguard Home can be updated via the user interface.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/adventurelog.json b/scripts/json/adventurelog.json index 5502eb0..23ac1a1 100644 --- a/scripts/json/adventurelog.json +++ b/scripts/json/adventurelog.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/agentdvr.json b/scripts/json/agentdvr.json index 27fab2f..eb6eb48 100644 --- a/scripts/json/agentdvr.json +++ b/scripts/json/agentdvr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/all-templates.json b/scripts/json/all-templates.json index e5c2145..835a308 100644 --- a/scripts/json/all-templates.json +++ b/scripts/json/all-templates.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/alpine-it-tools.json b/scripts/json/alpine-it-tools.json index 36251d5..9206d6c 100644 --- a/scripts/json/alpine-it-tools.json +++ b/scripts/json/alpine-it-tools.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/alpine-redlib.json b/scripts/json/alpine-redlib.json new file mode 100644 index 0000000..2e38d27 --- /dev/null +++ b/scripts/json/alpine-redlib.json @@ -0,0 +1,35 @@ +{ + "name": "Redlib", + "slug": "alpine-redlib", + "categories": [ + 10 + ], + "date_created": "2025-08-25", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 5252, + "documentation": "https://github.com/redlib-org/redlib/blob/main/README.md", + "website": "https://github.com/redlib-org/redlib", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redlib.webp", + "config_path": "/opt/redlib/redlib.conf", + "description": "An alternative private front-end to Reddit. Redlib hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat.", + "install_methods": [ + { + "type": "default", + "script": "ct/alpine-redlib.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 1, + "os": "alpine", + "version": "3.22" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/alpine-tinyauth.json b/scripts/json/alpine-tinyauth.json index c5b691b..e5b9a6c 100644 --- a/scripts/json/alpine-tinyauth.json +++ b/scripts/json/alpine-tinyauth.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/alpine.json b/scripts/json/alpine.json index ff92004..28e378d 100644 --- a/scripts/json/alpine.json +++ b/scripts/json/alpine.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/apache-cassandra.json b/scripts/json/apache-cassandra.json index f9cc69e..cf0aea1 100644 --- a/scripts/json/apache-cassandra.json +++ b/scripts/json/apache-cassandra.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/apache-couchdb.json b/scripts/json/apache-couchdb.json index db7f0e2..96db382 100644 --- a/scripts/json/apache-couchdb.json +++ b/scripts/json/apache-couchdb.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/apache-guacamole.json b/scripts/json/apache-guacamole.json index 0cace84..ee6302b 100644 --- a/scripts/json/apache-guacamole.json +++ b/scripts/json/apache-guacamole.json @@ -32,4 +32,4 @@ "password": "guacadmin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/apache-tika.json b/scripts/json/apache-tika.json index eea6f67..11a1347 100644 --- a/scripts/json/apache-tika.json +++ b/scripts/json/apache-tika.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/apache-tomcat.json b/scripts/json/apache-tomcat.json index 1f7b1f9..28628fe 100644 --- a/scripts/json/apache-tomcat.json +++ b/scripts/json/apache-tomcat.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/apt-cacher-ng.json b/scripts/json/apt-cacher-ng.json index d8024c6..aff7283 100644 --- a/scripts/json/apt-cacher-ng.json +++ b/scripts/json/apt-cacher-ng.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/archivebox.json b/scripts/json/archivebox.json index dd8541f..1c06699 100644 --- a/scripts/json/archivebox.json +++ b/scripts/json/archivebox.json @@ -32,4 +32,4 @@ "password": "helper-scripts.com" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/archlinux-vm.json b/scripts/json/archlinux-vm.json index 2619478..a761d17 100644 --- a/scripts/json/archlinux-vm.json +++ b/scripts/json/archlinux-vm.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/argus.json b/scripts/json/argus.json index 7a0e8cf..f6e4622 100644 --- a/scripts/json/argus.json +++ b/scripts/json/argus.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/aria2.json b/scripts/json/aria2.json index 08de444..99d6a8a 100644 --- a/scripts/json/aria2.json +++ b/scripts/json/aria2.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/asterisk.json b/scripts/json/asterisk.json index 925ef39..b19d5ce 100644 --- a/scripts/json/asterisk.json +++ b/scripts/json/asterisk.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/audiobookshelf.json b/scripts/json/audiobookshelf.json index 737c3a4..fc509f1 100644 --- a/scripts/json/audiobookshelf.json +++ b/scripts/json/audiobookshelf.json @@ -6,7 +6,7 @@ ], "date_created": "2024-05-02", "type": "ct", - "updateable": false, + "updateable": true, "privileged": false, "interface_port": 13378, "documentation": "https://www.audiobookshelf.org/guides/", @@ -21,7 +21,7 @@ "resources": { "cpu": 2, "ram": 2048, - "hdd": 4, + "hdd": 5, "os": "debian", "version": "12" } @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/authelia.json b/scripts/json/authelia.json index e94491c..91a0794 100644 --- a/scripts/json/authelia.json +++ b/scripts/json/authelia.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/autobrr.json b/scripts/json/autobrr.json index 69bae5a..2fd11f8 100644 --- a/scripts/json/autobrr.json +++ b/scripts/json/autobrr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/autocaliweb.json b/scripts/json/autocaliweb.json index 51f4769..506a224 100644 --- a/scripts/json/autocaliweb.json +++ b/scripts/json/autocaliweb.json @@ -32,4 +32,4 @@ "password": "admin123" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/babybuddy.json b/scripts/json/babybuddy.json index 7294dec..1c5f236 100644 --- a/scripts/json/babybuddy.json +++ b/scripts/json/babybuddy.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/backrest.json b/scripts/json/backrest.json index 4257f54..af2c31b 100644 --- a/scripts/json/backrest.json +++ b/scripts/json/backrest.json @@ -37,4 +37,4 @@ "text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server." } ] -} +} \ No newline at end of file diff --git a/scripts/json/baikal.json b/scripts/json/baikal.json index 39c230d..4c6c487 100644 --- a/scripts/json/baikal.json +++ b/scripts/json/baikal.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/bar-assistant.json b/scripts/json/bar-assistant.json index 6558c3f..92f27bb 100644 --- a/scripts/json/bar-assistant.json +++ b/scripts/json/bar-assistant.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/barcode-buddy.json b/scripts/json/barcode-buddy.json index e3ddef1..9fab866 100644 --- a/scripts/json/barcode-buddy.json +++ b/scripts/json/barcode-buddy.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/bazarr.json b/scripts/json/bazarr.json index 2a04bf7..74bb058 100644 --- a/scripts/json/bazarr.json +++ b/scripts/json/bazarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/beszel.json b/scripts/json/beszel.json index 1eb8a22..a10f96e 100644 --- a/scripts/json/beszel.json +++ b/scripts/json/beszel.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/bitmagnet.json b/scripts/json/bitmagnet.json index 384dc05..18e4991 100644 --- a/scripts/json/bitmagnet.json +++ b/scripts/json/bitmagnet.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/blocky.json b/scripts/json/blocky.json index c619968..1669ab6 100644 --- a/scripts/json/blocky.json +++ b/scripts/json/blocky.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/booklore.json b/scripts/json/booklore.json index c0ef0bf..89ca1c7 100644 --- a/scripts/json/booklore.json +++ b/scripts/json/booklore.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/bookstack.json b/scripts/json/bookstack.json index 0886455..c51697a 100644 --- a/scripts/json/bookstack.json +++ b/scripts/json/bookstack.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/bunkerweb.json b/scripts/json/bunkerweb.json index 9fe806f..6c0a028 100644 --- a/scripts/json/bunkerweb.json +++ b/scripts/json/bunkerweb.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/bytestash.json b/scripts/json/bytestash.json index caabf0b..0504a4e 100644 --- a/scripts/json/bytestash.json +++ b/scripts/json/bytestash.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/caddy.json b/scripts/json/caddy.json index 2bd85bd..6d5f173 100644 --- a/scripts/json/caddy.json +++ b/scripts/json/caddy.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/casaos.json b/scripts/json/casaos.json index 0081e41..9622d92 100644 --- a/scripts/json/casaos.json +++ b/scripts/json/casaos.json @@ -41,4 +41,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/changedetection.json b/scripts/json/changedetection.json index 900b9d3..ee5c6e8 100644 --- a/scripts/json/changedetection.json +++ b/scripts/json/changedetection.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/channels.json b/scripts/json/channels.json index 9e46840..9d38e18 100644 --- a/scripts/json/channels.json +++ b/scripts/json/channels.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/checkmk.json b/scripts/json/checkmk.json index 368474c..ca4345f 100644 --- a/scripts/json/checkmk.json +++ b/scripts/json/checkmk.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/clean-lxcs.json b/scripts/json/clean-lxcs.json index c464d73..ec4ef5f 100644 --- a/scripts/json/clean-lxcs.json +++ b/scripts/json/clean-lxcs.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/clean-orphaned-lvm.json b/scripts/json/clean-orphaned-lvm.json index 10530eb..8c34611 100644 --- a/scripts/json/clean-orphaned-lvm.json +++ b/scripts/json/clean-orphaned-lvm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cleanuparr.json b/scripts/json/cleanuparr.json index bac2e33..48585bd 100644 --- a/scripts/json/cleanuparr.json +++ b/scripts/json/cleanuparr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/cloudflare-ddns.json b/scripts/json/cloudflare-ddns.json index 1141521..8eec24c 100644 --- a/scripts/json/cloudflare-ddns.json +++ b/scripts/json/cloudflare-ddns.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cloudflared.json b/scripts/json/cloudflared.json index 1b02700..c5ac5b6 100644 --- a/scripts/json/cloudflared.json +++ b/scripts/json/cloudflared.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cloudreve.json b/scripts/json/cloudreve.json index 7a6f51f..7a0d3b2 100644 --- a/scripts/json/cloudreve.json +++ b/scripts/json/cloudreve.json @@ -37,4 +37,4 @@ "type": "warn" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cockpit.json b/scripts/json/cockpit.json index 8d353e3..623f6f7 100644 --- a/scripts/json/cockpit.json +++ b/scripts/json/cockpit.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/coder-code-server.json b/scripts/json/coder-code-server.json index 00918cd..94e2af0 100644 --- a/scripts/json/coder-code-server.json +++ b/scripts/json/coder-code-server.json @@ -39,4 +39,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/commafeed.json b/scripts/json/commafeed.json index 6920f28..d9bc58c 100644 --- a/scripts/json/commafeed.json +++ b/scripts/json/commafeed.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/configarr.json b/scripts/json/configarr.json index baa0413..7fb71ab 100644 --- a/scripts/json/configarr.json +++ b/scripts/json/configarr.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/convertx.json b/scripts/json/convertx.json index ae2ee82..fb40219 100644 --- a/scripts/json/convertx.json +++ b/scripts/json/convertx.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/copyparty.json b/scripts/json/copyparty.json index 0e9404e..428be14 100644 --- a/scripts/json/copyparty.json +++ b/scripts/json/copyparty.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cosmos.json b/scripts/json/cosmos.json index 0ba7a82..28ae244 100644 --- a/scripts/json/cosmos.json +++ b/scripts/json/cosmos.json @@ -33,4 +33,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/crafty-controller.json b/scripts/json/crafty-controller.json index f968ef0..010b5a0 100644 --- a/scripts/json/crafty-controller.json +++ b/scripts/json/crafty-controller.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cron-update-lxcs.json b/scripts/json/cron-update-lxcs.json index f2c6c0f..dc836d7 100644 --- a/scripts/json/cron-update-lxcs.json +++ b/scripts/json/cron-update-lxcs.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cronicle.json b/scripts/json/cronicle.json index 395cafb..8e4fb26 100644 --- a/scripts/json/cronicle.json +++ b/scripts/json/cronicle.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cross-seed.json b/scripts/json/cross-seed.json index 929256c..4dc0e70 100644 --- a/scripts/json/cross-seed.json +++ b/scripts/json/cross-seed.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/crowdsec.json b/scripts/json/crowdsec.json index 795adf1..b50680b 100644 --- a/scripts/json/crowdsec.json +++ b/scripts/json/crowdsec.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/cryptpad.json b/scripts/json/cryptpad.json index b862ab3..419e2b1 100644 --- a/scripts/json/cryptpad.json +++ b/scripts/json/cryptpad.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/daemonsync.json b/scripts/json/daemonsync.json index 61ce43e..4ea4aad 100644 --- a/scripts/json/daemonsync.json +++ b/scripts/json/daemonsync.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/dashy.json b/scripts/json/dashy.json index a6d5d98..dad53df 100644 --- a/scripts/json/dashy.json +++ b/scripts/json/dashy.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/debian-13-vm.json b/scripts/json/debian-13-vm.json index bbb8a08..d7491a5 100644 --- a/scripts/json/debian-13-vm.json +++ b/scripts/json/debian-13-vm.json @@ -40,9 +40,9 @@ "text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands", "type": "info" }, - { + { "text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´", "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/debian-vm.json b/scripts/json/debian-vm.json index 08b2828..ede92fb 100644 --- a/scripts/json/debian-vm.json +++ b/scripts/json/debian-vm.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/debian.json b/scripts/json/debian.json index af65af0..a39ade6 100644 --- a/scripts/json/debian.json +++ b/scripts/json/debian.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/deconz.json b/scripts/json/deconz.json index 3691473..1e20c82 100644 --- a/scripts/json/deconz.json +++ b/scripts/json/deconz.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/deluge.json b/scripts/json/deluge.json index bf5d9ac..fe21a77 100644 --- a/scripts/json/deluge.json +++ b/scripts/json/deluge.json @@ -32,4 +32,4 @@ "password": "deluge" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/docker-vm.json b/scripts/json/docker-vm.json index b8d03c9..6966cba 100644 --- a/scripts/json/docker-vm.json +++ b/scripts/json/docker-vm.json @@ -42,4 +42,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/docker.json b/scripts/json/docker.json index 7865723..5b2d19e 100644 --- a/scripts/json/docker.json +++ b/scripts/json/docker.json @@ -56,4 +56,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/dockge.json b/scripts/json/dockge.json index ad6e555..847482d 100644 --- a/scripts/json/dockge.json +++ b/scripts/json/dockge.json @@ -41,4 +41,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/docmost.json b/scripts/json/docmost.json index 7919741..b002abc 100644 --- a/scripts/json/docmost.json +++ b/scripts/json/docmost.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/documenso.json b/scripts/json/documenso.json index dbe35c8..4da50b0 100644 --- a/scripts/json/documenso.json +++ b/scripts/json/documenso.json @@ -32,4 +32,4 @@ "password": "helper-scripts" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/dolibarr.json b/scripts/json/dolibarr.json index abb6098..0a94a35 100644 --- a/scripts/json/dolibarr.json +++ b/scripts/json/dolibarr.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/dotnetaspwebapi.json b/scripts/json/dotnetaspwebapi.json index 0137566..08abe4b 100644 --- a/scripts/json/dotnetaspwebapi.json +++ b/scripts/json/dotnetaspwebapi.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/duplicati.json b/scripts/json/duplicati.json index a55ed70..20be2d3 100644 --- a/scripts/json/duplicati.json +++ b/scripts/json/duplicati.json @@ -1,40 +1,40 @@ { - "name": "Duplicati", - "slug": "duplicati", - "categories": [ - 7 - ], - "date_created": "2025-02-06", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8200, - "documentation": "https://docs.duplicati.com/", - "website": "https://duplicati.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/duplicati.webp", - "config_path": "", - "description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data.", - "install_methods": [ - { - "type": "default", - "script": "ct/duplicati.sh", - "resources": { - "cpu": 1, - "ram": 1048, - "hdd": 10, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Admin password and database encryption key: `cat ~/duplicati.creds`", - "type": "info" - } - ] -} + "name": "Duplicati", + "slug": "duplicati", + "categories": [ + 7 + ], + "date_created": "2025-02-06", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8200, + "documentation": "https://docs.duplicati.com/", + "website": "https://duplicati.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/duplicati.webp", + "config_path": "", + "description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data.", + "install_methods": [ + { + "type": "default", + "script": "ct/duplicati.sh", + "resources": { + "cpu": 1, + "ram": 1048, + "hdd": 10, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Admin password and database encryption key: `cat ~/duplicati.creds`", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/elementsynapse.json b/scripts/json/elementsynapse.json index 4fa5dc5..b359927 100644 --- a/scripts/json/elementsynapse.json +++ b/scripts/json/elementsynapse.json @@ -41,4 +41,4 @@ "text": "Synapse-Admin is running on port 5173" } ] -} +} \ No newline at end of file diff --git a/scripts/json/emby.json b/scripts/json/emby.json index 7a9e64c..e091ce0 100644 --- a/scripts/json/emby.json +++ b/scripts/json/emby.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/emqx.json b/scripts/json/emqx.json index 7e57d45..0ee6e66 100644 --- a/scripts/json/emqx.json +++ b/scripts/json/emqx.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ersatztv.json b/scripts/json/ersatztv.json index 4924e6a..232eb1a 100644 --- a/scripts/json/ersatztv.json +++ b/scripts/json/ersatztv.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/esphome.json b/scripts/json/esphome.json index 697db1c..a56d3c2 100644 --- a/scripts/json/esphome.json +++ b/scripts/json/esphome.json @@ -21,7 +21,7 @@ "resources": { "cpu": 2, "ram": 1024, - "hdd": 4, + "hdd": 10, "os": "debian", "version": "12" } @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/evcc.json b/scripts/json/evcc.json index e632883..d0d80bc 100644 --- a/scripts/json/evcc.json +++ b/scripts/json/evcc.json @@ -1,40 +1,40 @@ { - "name": "evcc", - "slug": "evcc", - "categories": [ - 16 - ], - "date_created": "2024-10-15", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 7070, - "documentation": "https://evcc.io/#devices", - "website": "https://evcc.io/en/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/evcc.webp", - "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": [ - { - "type": "default", - "script": "ct/evcc.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell", - "type": "info" - } - ] -} + "name": "evcc", + "slug": "evcc", + "categories": [ + 16 + ], + "date_created": "2024-10-15", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7070, + "documentation": "https://evcc.io/#devices", + "website": "https://evcc.io/en/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/evcc.webp", + "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": [ + { + "type": "default", + "script": "ct/evcc.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/excalidraw.json b/scripts/json/excalidraw.json index 29e4b56..585a97e 100644 --- a/scripts/json/excalidraw.json +++ b/scripts/json/excalidraw.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/fenrus.json b/scripts/json/fenrus.json index 4bd7ef0..79be8d2 100644 --- a/scripts/json/fenrus.json +++ b/scripts/json/fenrus.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/fhem.json b/scripts/json/fhem.json index 0875bdf..6ff0a58 100644 --- a/scripts/json/fhem.json +++ b/scripts/json/fhem.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/filebrowser-quantum.json b/scripts/json/filebrowser-quantum.json index 739a4ed..260c1a8 100644 --- a/scripts/json/filebrowser-quantum.json +++ b/scripts/json/filebrowser-quantum.json @@ -44,4 +44,4 @@ "password": "helper-scripts.com" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/filebrowser.json b/scripts/json/filebrowser.json index f10ff45..dd355a9 100644 --- a/scripts/json/filebrowser.json +++ b/scripts/json/filebrowser.json @@ -49,4 +49,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/fileflows.json b/scripts/json/fileflows.json index 0505cd0..9640247 100644 --- a/scripts/json/fileflows.json +++ b/scripts/json/fileflows.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/firefly.json b/scripts/json/firefly.json index cff7e2b..05f7c0c 100644 --- a/scripts/json/firefly.json +++ b/scripts/json/firefly.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/flaresolverr.json b/scripts/json/flaresolverr.json index 03a63d0..e87ebf2 100644 --- a/scripts/json/flaresolverr.json +++ b/scripts/json/flaresolverr.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/flowiseai.json b/scripts/json/flowiseai.json index f8d2c76..53c9538 100644 --- a/scripts/json/flowiseai.json +++ b/scripts/json/flowiseai.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/fluid-calendar.json b/scripts/json/fluid-calendar.json index 4d75f3f..302d752 100644 --- a/scripts/json/fluid-calendar.json +++ b/scripts/json/fluid-calendar.json @@ -38,4 +38,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/forgejo.json b/scripts/json/forgejo.json index e2b84b7..9ed7e4b 100644 --- a/scripts/json/forgejo.json +++ b/scripts/json/forgejo.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/freepbx.json b/scripts/json/freepbx.json index 0db0731..9376164 100644 --- a/scripts/json/freepbx.json +++ b/scripts/json/freepbx.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/freshrss.json b/scripts/json/freshrss.json index 900cc74..b602bff 100644 --- a/scripts/json/freshrss.json +++ b/scripts/json/freshrss.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/frigate.json b/scripts/json/frigate.json index a9da5ab..6b385b7 100644 --- a/scripts/json/frigate.json +++ b/scripts/json/frigate.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/fstrim.json b/scripts/json/fstrim.json index 9c1b576..6273eea 100644 --- a/scripts/json/fstrim.json +++ b/scripts/json/fstrim.json @@ -41,4 +41,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/fumadocs.json b/scripts/json/fumadocs.json index f6a366d..06a5473 100644 --- a/scripts/json/fumadocs.json +++ b/scripts/json/fumadocs.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/gatus.json b/scripts/json/gatus.json index ba5cf1e..07336e5 100644 --- a/scripts/json/gatus.json +++ b/scripts/json/gatus.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/ghost.json b/scripts/json/ghost.json index 6dfd0ac..9109d37 100644 --- a/scripts/json/ghost.json +++ b/scripts/json/ghost.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/gitea-mirror.json b/scripts/json/gitea-mirror.json index 9370077..89c6a89 100644 --- a/scripts/json/gitea-mirror.json +++ b/scripts/json/gitea-mirror.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/gitea.json b/scripts/json/gitea.json index 117515c..643eba3 100644 --- a/scripts/json/gitea.json +++ b/scripts/json/gitea.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/glance.json b/scripts/json/glance.json index b96c337..6d00eac 100644 --- a/scripts/json/glance.json +++ b/scripts/json/glance.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/glances.json b/scripts/json/glances.json index 41a9c68..cfe6d89 100644 --- a/scripts/json/glances.json +++ b/scripts/json/glances.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/glpi.json b/scripts/json/glpi.json index 131e245..12f1bfc 100644 --- a/scripts/json/glpi.json +++ b/scripts/json/glpi.json @@ -32,4 +32,4 @@ "password": "glpi" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/go2rtc.json b/scripts/json/go2rtc.json index 3d96351..358a822 100644 --- a/scripts/json/go2rtc.json +++ b/scripts/json/go2rtc.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/gokapi.json b/scripts/json/gokapi.json index 63a572d..581d1c0 100644 --- a/scripts/json/gokapi.json +++ b/scripts/json/gokapi.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/gomft.json b/scripts/json/gomft.json index 59ca569..962b534 100644 --- a/scripts/json/gomft.json +++ b/scripts/json/gomft.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/gotify.json b/scripts/json/gotify.json index 9765ba8..b37c021 100644 --- a/scripts/json/gotify.json +++ b/scripts/json/gotify.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/grafana.json b/scripts/json/grafana.json index 201e93b..1564b07 100644 --- a/scripts/json/grafana.json +++ b/scripts/json/grafana.json @@ -1,46 +1,46 @@ { - "name": "Grafana", - "slug": "grafana", - "categories": [ - 9 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://grafana.com/docs/grafana/latest/", - "website": "https://grafana.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grafana.webp", - "config_path": "Debian: /etc/grafana/grafana.ini | Alpine: /etc/grafana.ini", - "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": [ - { - "type": "default", - "script": "ct/grafana.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 2, - "os": "debian", - "version": "12" - } - }, - { - "type": "alpine", - "script": "ct/alpine-grafana.sh", - "resources": { - "cpu": 1, - "ram": 256, - "hdd": 1, - "os": "alpine", - "version": "3.22" - } - } - ], - "default_credentials": { - "username": "admin", - "password": "admin" + "name": "Grafana", + "slug": "grafana", + "categories": [ + 9 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://grafana.com/docs/grafana/latest/", + "website": "https://grafana.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grafana.webp", + "config_path": "Debian: /etc/grafana/grafana.ini | Alpine: /etc/grafana.ini", + "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": [ + { + "type": "default", + "script": "ct/grafana.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "debian", + "version": "12" + } }, - "notes": [] -} + { + "type": "alpine", + "script": "ct/alpine-grafana.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 1, + "os": "alpine", + "version": "3.22" + } + } + ], + "default_credentials": { + "username": "admin", + "password": "admin" + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/graylog.json b/scripts/json/graylog.json index a0c931f..447ba47 100644 --- a/scripts/json/graylog.json +++ b/scripts/json/graylog.json @@ -1,44 +1,44 @@ { - "name": "Graylog", - "slug": "graylog", - "categories": [ - 9 - ], - "date_created": "2025-02-12", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 9000, - "documentation": "https://go2docs.graylog.org/current/home.htm", - "website": "https://graylog.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp", - "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": [ - { - "type": "default", - "script": "ct/graylog.sh", - "resources": { - "cpu": 2, - "ram": 8192, - "hdd": 30, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "Graylog", + "slug": "graylog", + "categories": [ + 9 + ], + "date_created": "2025-02-12", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 9000, + "documentation": "https://go2docs.graylog.org/current/home.htm", + "website": "https://graylog.org/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/graylog.webp", + "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": [ + { + "type": "default", + "script": "ct/graylog.sh", + "resources": { + "cpu": 2, + "ram": 8192, + "hdd": 30, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.", + "type": "info" }, - "notes": [ - { - "text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.", - "type": "info" - }, - { - "text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup", - "type": "info" - } - ] -} + { + "text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/grist.json b/scripts/json/grist.json index eda1066..ad7852f 100644 --- a/scripts/json/grist.json +++ b/scripts/json/grist.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/grocy.json b/scripts/json/grocy.json index b3a091a..aa71628 100644 --- a/scripts/json/grocy.json +++ b/scripts/json/grocy.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/habitica.json b/scripts/json/habitica.json index 76690b9..274c28e 100644 --- a/scripts/json/habitica.json +++ b/scripts/json/habitica.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/haos-vm.json b/scripts/json/haos-vm.json index bc337a1..bb3643a 100644 --- a/scripts/json/haos-vm.json +++ b/scripts/json/haos-vm.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/headscale.json b/scripts/json/headscale.json index 4bca10f..de6d895 100644 --- a/scripts/json/headscale.json +++ b/scripts/json/headscale.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/healthchecks.json b/scripts/json/healthchecks.json index 7528084..bfa04a9 100644 --- a/scripts/json/healthchecks.json +++ b/scripts/json/healthchecks.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/heimdall-dashboard.json b/scripts/json/heimdall-dashboard.json index 2c2253f..7599487 100644 --- a/scripts/json/heimdall-dashboard.json +++ b/scripts/json/heimdall-dashboard.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/hev-socks5-server.json b/scripts/json/hev-socks5-server.json index a6c2ad8..7f8380a 100644 --- a/scripts/json/hev-socks5-server.json +++ b/scripts/json/hev-socks5-server.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/hivemq.json b/scripts/json/hivemq.json index 4ef7224..3e38369 100644 --- a/scripts/json/hivemq.json +++ b/scripts/json/hivemq.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/homarr.json b/scripts/json/homarr.json index 48e5e3f..d3d6cad 100644 --- a/scripts/json/homarr.json +++ b/scripts/json/homarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/homeassistant.json b/scripts/json/homeassistant.json index faaa787..a2cf9af 100644 --- a/scripts/json/homeassistant.json +++ b/scripts/json/homeassistant.json @@ -1,52 +1,52 @@ { - "name": "Home Assistant Container", - "slug": "homeassistant", - "categories": [ - 16 - ], - "date_created": "2024-04-29", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8123, - "documentation": "https://www.home-assistant.io/docs/", - "website": "https://www.home-assistant.io/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp", - "config_path": "/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": [ - { - "type": "default", - "script": "ct/homeassistant.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 16, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "Home Assistant Container", + "slug": "homeassistant", + "categories": [ + 16 + ], + "date_created": "2024-04-29", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8123, + "documentation": "https://www.home-assistant.io/docs/", + "website": "https://www.home-assistant.io/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp", + "config_path": "/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": [ + { + "type": "default", + "script": "ct/homeassistant.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 16, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.", + "type": "warning" }, - "notes": [ - { - "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.", - "type": "warning" - }, - { - "text": "config path: `/var/lib/docker/volumes/hass_config/_data`", - "type": "info" - }, - { - "text": "Portainer interface: $IP: 9443 - User & password must be set manually within 5 minutes, otherwise a restart of Portainer is required!", - "type": "info" - }, - { - "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", - "type": "warning" - } - ] -} + { + "text": "config path: `/var/lib/docker/volumes/hass_config/_data`", + "type": "info" + }, + { + "text": "Portainer interface: $IP: 9443 - User & password must be set manually within 5 minutes, otherwise a restart of Portainer is required!", + "type": "info" + }, + { + "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", + "type": "warning" + } + ] +} \ No newline at end of file diff --git a/scripts/json/homebox.json b/scripts/json/homebox.json index 795b8e4..af57fba 100644 --- a/scripts/json/homebox.json +++ b/scripts/json/homebox.json @@ -13,7 +13,7 @@ "website": "https://homebox.software/en/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homebox.webp", "config_path": "/opt/homebox/.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.", + "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’s designed to be fast, easy to use, and portable.", "install_methods": [ { "type": "default", @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/homebridge.json b/scripts/json/homebridge.json index b0ef718..5d6f041 100644 --- a/scripts/json/homebridge.json +++ b/scripts/json/homebridge.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/homepage.json b/scripts/json/homepage.json index 4747a80..8417f45 100644 --- a/scripts/json/homepage.json +++ b/scripts/json/homepage.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/homer.json b/scripts/json/homer.json index debb517..d44eb24 100644 --- a/scripts/json/homer.json +++ b/scripts/json/homer.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/hortusfox.json b/scripts/json/hortusfox.json index a55ccb9..ff44810 100644 --- a/scripts/json/hortusfox.json +++ b/scripts/json/hortusfox.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/host-backup.json b/scripts/json/host-backup.json index 4a5c24b..e124169 100644 --- a/scripts/json/host-backup.json +++ b/scripts/json/host-backup.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/huntarr.json b/scripts/json/huntarr.json index 41a421f..69be3eb 100644 --- a/scripts/json/huntarr.json +++ b/scripts/json/huntarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/hyperhdr.json b/scripts/json/hyperhdr.json index a45f03d..62540bb 100644 --- a/scripts/json/hyperhdr.json +++ b/scripts/json/hyperhdr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/hyperion.json b/scripts/json/hyperion.json index 1b4d9ab..439d170 100644 --- a/scripts/json/hyperion.json +++ b/scripts/json/hyperion.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/immich.json b/scripts/json/immich.json index 1f37d0a..66eb663 100644 --- a/scripts/json/immich.json +++ b/scripts/json/immich.json @@ -53,4 +53,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/influxdb.json b/scripts/json/influxdb.json index 47139f2..39904df 100644 --- a/scripts/json/influxdb.json +++ b/scripts/json/influxdb.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/inspircd.json b/scripts/json/inspircd.json index 2c8aad3..b2f7a3e 100644 --- a/scripts/json/inspircd.json +++ b/scripts/json/inspircd.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/inventree.json b/scripts/json/inventree.json index c39ac4d..40835e6 100644 --- a/scripts/json/inventree.json +++ b/scripts/json/inventree.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/iobroker.json b/scripts/json/iobroker.json index 6249680..9aafd11 100644 --- a/scripts/json/iobroker.json +++ b/scripts/json/iobroker.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/itsm-ng.json b/scripts/json/itsm-ng.json index 89a7c62..1bcc78e 100644 --- a/scripts/json/itsm-ng.json +++ b/scripts/json/itsm-ng.json @@ -32,4 +32,4 @@ "password": "itsm" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/iventoy.json b/scripts/json/iventoy.json index ce62e43..452679c 100644 --- a/scripts/json/iventoy.json +++ b/scripts/json/iventoy.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/jackett.json b/scripts/json/jackett.json index 6ee1016..c59200f 100644 --- a/scripts/json/jackett.json +++ b/scripts/json/jackett.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/jeedom.json b/scripts/json/jeedom.json index e269657..6070064 100644 --- a/scripts/json/jeedom.json +++ b/scripts/json/jeedom.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/jellyfin.json b/scripts/json/jellyfin.json index 4dedd71..4be66ab 100644 --- a/scripts/json/jellyfin.json +++ b/scripts/json/jellyfin.json @@ -40,9 +40,9 @@ "text": "FFmpeg path: /usr/lib/jellyfin-ffmpeg/ffmpeg", "type": "info" }, - { + { "text": "For NVIDIA graphics cards, you'll need to install the same drivers in the container that you did on the host. In the container, run the driver installation script and add the CLI arg --no-kernel-module", "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/jellyseerr.json b/scripts/json/jellyseerr.json index 26aaa28..c8eaef8 100644 --- a/scripts/json/jellyseerr.json +++ b/scripts/json/jellyseerr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/jenkins.json b/scripts/json/jenkins.json index b31c753..a716091 100644 --- a/scripts/json/jenkins.json +++ b/scripts/json/jenkins.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/jupyternotebook.json b/scripts/json/jupyternotebook.json index f13860a..91c6c4c 100644 --- a/scripts/json/jupyternotebook.json +++ b/scripts/json/jupyternotebook.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kapowarr.json b/scripts/json/kapowarr.json index 6468f1e..9ad1aad 100644 --- a/scripts/json/kapowarr.json +++ b/scripts/json/kapowarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/karakeep.json b/scripts/json/karakeep.json index 16844c8..3033c9d 100644 --- a/scripts/json/karakeep.json +++ b/scripts/json/karakeep.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/kasm.json b/scripts/json/kasm.json index e4f2738..fca750a 100644 --- a/scripts/json/kasm.json +++ b/scripts/json/kasm.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kavita.json b/scripts/json/kavita.json index 3b6d255..587773e 100644 --- a/scripts/json/kavita.json +++ b/scripts/json/kavita.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kernel-clean.json b/scripts/json/kernel-clean.json index 6a0cf85..f0afdf9 100644 --- a/scripts/json/kernel-clean.json +++ b/scripts/json/kernel-clean.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kernel-pin.json b/scripts/json/kernel-pin.json index 746b343..64cc62f 100644 --- a/scripts/json/kernel-pin.json +++ b/scripts/json/kernel-pin.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/keycloak.json b/scripts/json/keycloak.json index 2f86a46..1613825 100644 --- a/scripts/json/keycloak.json +++ b/scripts/json/keycloak.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kimai.json b/scripts/json/kimai.json index 21f3692..d919eb2 100644 --- a/scripts/json/kimai.json +++ b/scripts/json/kimai.json @@ -32,4 +32,4 @@ "password": "helper-scripts.com" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/koillection.json b/scripts/json/koillection.json index 7693bda..bf33c3f 100644 --- a/scripts/json/koillection.json +++ b/scripts/json/koillection.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/kometa.json b/scripts/json/kometa.json index 9d5c734..e5d6a0e 100644 --- a/scripts/json/kometa.json +++ b/scripts/json/kometa.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/komga.json b/scripts/json/komga.json index 6d26e14..2c8bddf 100644 --- a/scripts/json/komga.json +++ b/scripts/json/komga.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/komodo.json b/scripts/json/komodo.json index 569e091..923aaeb 100644 --- a/scripts/json/komodo.json +++ b/scripts/json/komodo.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/kubo.json b/scripts/json/kubo.json index 2ee9705..1d58e49 100644 --- a/scripts/json/kubo.json +++ b/scripts/json/kubo.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/lazylibrarian.json b/scripts/json/lazylibrarian.json index 19b3326..f4c5376 100644 --- a/scripts/json/lazylibrarian.json +++ b/scripts/json/lazylibrarian.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/leantime.json b/scripts/json/leantime.json index 3173c0c..5307665 100644 --- a/scripts/json/leantime.json +++ b/scripts/json/leantime.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/librespeed-rust.json b/scripts/json/librespeed-rust.json index 319cb34..09167f1 100644 --- a/scripts/json/librespeed-rust.json +++ b/scripts/json/librespeed-rust.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/libretranslate.json b/scripts/json/libretranslate.json index 094916f..63257d8 100644 --- a/scripts/json/libretranslate.json +++ b/scripts/json/libretranslate.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/lidarr.json b/scripts/json/lidarr.json index 755b354..d9a89cc 100644 --- a/scripts/json/lidarr.json +++ b/scripts/json/lidarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/linkstack.json b/scripts/json/linkstack.json index ae369b6..4a1748e 100644 --- a/scripts/json/linkstack.json +++ b/scripts/json/linkstack.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/linkwarden.json b/scripts/json/linkwarden.json index 7fe88de..6144b9a 100644 --- a/scripts/json/linkwarden.json +++ b/scripts/json/linkwarden.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/listmonk.json b/scripts/json/listmonk.json index ba47075..8ed2cb8 100644 --- a/scripts/json/listmonk.json +++ b/scripts/json/listmonk.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/litellm.json b/scripts/json/litellm.json index 5676888..4dbd6ea 100644 --- a/scripts/json/litellm.json +++ b/scripts/json/litellm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/lldap.json b/scripts/json/lldap.json index 54c509d..0c89edb 100644 --- a/scripts/json/lldap.json +++ b/scripts/json/lldap.json @@ -32,4 +32,4 @@ "password": "password" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/lubelogger.json b/scripts/json/lubelogger.json index 8274abc..421e2d4 100644 --- a/scripts/json/lubelogger.json +++ b/scripts/json/lubelogger.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/lxc-delete.json b/scripts/json/lxc-delete.json index 14bd2ee..b5e2c75 100644 --- a/scripts/json/lxc-delete.json +++ b/scripts/json/lxc-delete.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/lyrionmusicserver.json b/scripts/json/lyrionmusicserver.json index 9119a21..5f29933 100644 --- a/scripts/json/lyrionmusicserver.json +++ b/scripts/json/lyrionmusicserver.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/mafl.json b/scripts/json/mafl.json index 6933e40..57e534a 100644 --- a/scripts/json/mafl.json +++ b/scripts/json/mafl.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/magicmirror.json b/scripts/json/magicmirror.json index 58c1ed6..dbb0383 100644 --- a/scripts/json/magicmirror.json +++ b/scripts/json/magicmirror.json @@ -13,7 +13,7 @@ "website": "https://docs.magicmirror.builders/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/magicmirror2.webp", "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.", + "description": "MagicMirror² 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": [ { "type": "default", @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/managemydamnlife.json b/scripts/json/managemydamnlife.json index e7a3142..63d1008 100644 --- a/scripts/json/managemydamnlife.json +++ b/scripts/json/managemydamnlife.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/mariadb.json b/scripts/json/mariadb.json index 743015e..3cb53bc 100644 --- a/scripts/json/mariadb.json +++ b/scripts/json/mariadb.json @@ -52,4 +52,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/matterbridge.json b/scripts/json/matterbridge.json index 21a5b49..b47cd06 100644 --- a/scripts/json/matterbridge.json +++ b/scripts/json/matterbridge.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mattermost.json b/scripts/json/mattermost.json index 3639ccd..3afd240 100644 --- a/scripts/json/mattermost.json +++ b/scripts/json/mattermost.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mealie.json b/scripts/json/mealie.json index 6136deb..b5a9dab 100644 --- a/scripts/json/mealie.json +++ b/scripts/json/mealie.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/mediamanager.json b/scripts/json/mediamanager.json index bf08b49..d7e77ab 100644 --- a/scripts/json/mediamanager.json +++ b/scripts/json/mediamanager.json @@ -42,4 +42,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mediamtx.json b/scripts/json/mediamtx.json index 89bb8c4..badae4a 100644 --- a/scripts/json/mediamtx.json +++ b/scripts/json/mediamtx.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/medusa.json b/scripts/json/medusa.json index a8ea34f..2881e98 100644 --- a/scripts/json/medusa.json +++ b/scripts/json/medusa.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/meilisearch.json b/scripts/json/meilisearch.json index ed2bf7e..37a1064 100644 --- a/scripts/json/meilisearch.json +++ b/scripts/json/meilisearch.json @@ -41,4 +41,4 @@ "type": "warn" } ] -} +} \ No newline at end of file diff --git a/scripts/json/memos.json b/scripts/json/memos.json index 0d5bcf0..c7201df 100644 --- a/scripts/json/memos.json +++ b/scripts/json/memos.json @@ -13,7 +13,7 @@ "website": "https://www.usememos.com/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/memos.webp", "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.", + "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’s lightweight and customizable, built for quick access and adaptability to individual or team needs.", "install_methods": [ { "type": "default", @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/meshcentral.json b/scripts/json/meshcentral.json index eb30c96..18785a9 100644 --- a/scripts/json/meshcentral.json +++ b/scripts/json/meshcentral.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/metube.json b/scripts/json/metube.json index 5c26b56..79641fe 100644 --- a/scripts/json/metube.json +++ b/scripts/json/metube.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/microcode.json b/scripts/json/microcode.json index 03ba956..04ed600 100644 --- a/scripts/json/microcode.json +++ b/scripts/json/microcode.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mikrotik-routeros.json b/scripts/json/mikrotik-routeros.json index 711ebc3..488043a 100644 --- a/scripts/json/mikrotik-routeros.json +++ b/scripts/json/mikrotik-routeros.json @@ -33,4 +33,4 @@ "password": "none" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/minarca.json b/scripts/json/minarca.json index 1ae6218..d8aae6a 100644 --- a/scripts/json/minarca.json +++ b/scripts/json/minarca.json @@ -32,4 +32,4 @@ "password": "admin123" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/minio.json b/scripts/json/minio.json index ea54c57..6a82859 100644 --- a/scripts/json/minio.json +++ b/scripts/json/minio.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mongodb.json b/scripts/json/mongodb.json index d9bbc41..325119a 100644 --- a/scripts/json/mongodb.json +++ b/scripts/json/mongodb.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/monica.json b/scripts/json/monica.json index 8d4d92e..9a78405 100644 --- a/scripts/json/monica.json +++ b/scripts/json/monica.json @@ -1,35 +1,35 @@ { - "name": "Monica", - "slug": "monica", - "categories": [ - 24 - ], - "date_created": "2025-01-28", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://github.com/monicahq/monica/tree/4.x/docs", - "website": "https://www.monicahq.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/monica.webp", - "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": [ - { - "type": "default", - "script": "ct/monica.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 8, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "admin@helper-scripts.com", - "password": "helper-scripts.com" - }, - "notes": [] -} + "name": "Monica", + "slug": "monica", + "categories": [ + 24 + ], + "date_created": "2025-01-28", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://github.com/monicahq/monica/tree/4.x/docs", + "website": "https://www.monicahq.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/monica.webp", + "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": [ + { + "type": "default", + "script": "ct/monica.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "admin@helper-scripts.com", + "password": "helper-scripts.com" + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/monitor-all.json b/scripts/json/monitor-all.json index f06ebb6..8c47d35 100644 --- a/scripts/json/monitor-all.json +++ b/scripts/json/monitor-all.json @@ -13,7 +13,7 @@ "website": null, "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", "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.", + "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🛈 Virtual machines without the QEMU guest agent installed must be excluded.\r\n🛈 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": [ { "type": "default", @@ -65,4 +65,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/motioneye.json b/scripts/json/motioneye.json index fefb335..f8afe39 100644 --- a/scripts/json/motioneye.json +++ b/scripts/json/motioneye.json @@ -32,4 +32,4 @@ "password": "none" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/mqtt.json b/scripts/json/mqtt.json index 3be84f8..6e0bf07 100644 --- a/scripts/json/mqtt.json +++ b/scripts/json/mqtt.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/mylar3.json b/scripts/json/mylar3.json index fc58f1b..6baa9af 100644 --- a/scripts/json/mylar3.json +++ b/scripts/json/mylar3.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/myspeed.json b/scripts/json/myspeed.json index 0209eb9..485392b 100644 --- a/scripts/json/myspeed.json +++ b/scripts/json/myspeed.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/mysql.json b/scripts/json/mysql.json index cf7a2f9..9f15bab 100644 --- a/scripts/json/mysql.json +++ b/scripts/json/mysql.json @@ -1,48 +1,48 @@ { - "name": "MySQL", - "slug": "mysql", - "categories": [ - 8 - ], - "date_created": "2024-10-10", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": null, - "documentation": "https://dev.mysql.com/doc/", - "website": "https://www.mysql.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp", - "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": [ - { - "type": "default", - "script": "ct/mysql.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "MySQL", + "slug": "mysql", + "categories": [ + 8 + ], + "date_created": "2024-10-10", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://dev.mysql.com/doc/", + "website": "https://www.mysql.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp", + "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": [ + { + "type": "default", + "script": "ct/mysql.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Database credentials: `cat mysql.creds`", + "type": "info" }, - "notes": [ - { - "text": "Database credentials: `cat mysql.creds`", - "type": "info" - }, - { - "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0", - "type": "info" - }, - { - "text": "If installed, access phpMyAdmin at `http:///phpMyAdmin`, case sensitive.", - "type": "info" - } - ] -} + { + "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0", + "type": "info" + }, + { + "text": "If installed, access phpMyAdmin at `http:///phpMyAdmin`, case sensitive.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/n8n.json b/scripts/json/n8n.json index 88b4745..d80f0b4 100644 --- a/scripts/json/n8n.json +++ b/scripts/json/n8n.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/navidrome.json b/scripts/json/navidrome.json index acfc1e6..34285fe 100644 --- a/scripts/json/navidrome.json +++ b/scripts/json/navidrome.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/neo4j.json b/scripts/json/neo4j.json index 3c2e7a3..3988cc0 100644 --- a/scripts/json/neo4j.json +++ b/scripts/json/neo4j.json @@ -32,4 +32,4 @@ "password": "neo4j" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/netbox.json b/scripts/json/netbox.json index 7b6030a..3dbddfd 100644 --- a/scripts/json/netbox.json +++ b/scripts/json/netbox.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/netdata.json b/scripts/json/netdata.json index 1efd956..bb3f9b8 100644 --- a/scripts/json/netdata.json +++ b/scripts/json/netdata.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nextcloud-vm.json b/scripts/json/nextcloud-vm.json index 37b0a2a..c488109 100644 --- a/scripts/json/nextcloud-vm.json +++ b/scripts/json/nextcloud-vm.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nextcloudpi.json b/scripts/json/nextcloudpi.json index 9fefb83..cb55487 100644 --- a/scripts/json/nextcloudpi.json +++ b/scripts/json/nextcloudpi.json @@ -52,4 +52,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nextpvr.json b/scripts/json/nextpvr.json index c15069c..3c70e70 100644 --- a/scripts/json/nextpvr.json +++ b/scripts/json/nextpvr.json @@ -32,4 +32,4 @@ "password": "password" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/nginxproxymanager.json b/scripts/json/nginxproxymanager.json index 49148fb..8a46c1c 100644 --- a/scripts/json/nginxproxymanager.json +++ b/scripts/json/nginxproxymanager.json @@ -41,4 +41,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nic-offloading-fix.json b/scripts/json/nic-offloading-fix.json index 261a67a..59a7662 100644 --- a/scripts/json/nic-offloading-fix.json +++ b/scripts/json/nic-offloading-fix.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nocodb.json b/scripts/json/nocodb.json index 32a191a..c32313d 100644 --- a/scripts/json/nocodb.json +++ b/scripts/json/nocodb.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/node-red.json b/scripts/json/node-red.json index cc3d369..1cc6009 100644 --- a/scripts/json/node-red.json +++ b/scripts/json/node-red.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/nodebb.json b/scripts/json/nodebb.json index 50affc5..61e03cc 100644 --- a/scripts/json/nodebb.json +++ b/scripts/json/nodebb.json @@ -38,4 +38,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/notifiarr.json b/scripts/json/notifiarr.json index a5a8b90..a3cece6 100644 --- a/scripts/json/notifiarr.json +++ b/scripts/json/notifiarr.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/npmplus.json b/scripts/json/npmplus.json index dd368a4..f783688 100644 --- a/scripts/json/npmplus.json +++ b/scripts/json/npmplus.json @@ -56,4 +56,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ntfy.json b/scripts/json/ntfy.json index fbcecd8..e868fcf 100644 --- a/scripts/json/ntfy.json +++ b/scripts/json/ntfy.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/nxwitness.json b/scripts/json/nxwitness.json index d55acdc..55d7c25 100644 --- a/scripts/json/nxwitness.json +++ b/scripts/json/nxwitness.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/nzbget.json b/scripts/json/nzbget.json index 8dd1cfb..4cac83d 100644 --- a/scripts/json/nzbget.json +++ b/scripts/json/nzbget.json @@ -32,4 +32,4 @@ "password": "tegbzn6789" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/oauth2-proxy.json b/scripts/json/oauth2-proxy.json index f12399e..651b9b5 100644 --- a/scripts/json/oauth2-proxy.json +++ b/scripts/json/oauth2-proxy.json @@ -42,4 +42,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/octoprint.json b/scripts/json/octoprint.json index 6e1e57b..7c0cba2 100644 --- a/scripts/json/octoprint.json +++ b/scripts/json/octoprint.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/odoo.json b/scripts/json/odoo.json index 40552ea..f3ce5eb 100644 --- a/scripts/json/odoo.json +++ b/scripts/json/odoo.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/olivetin.json b/scripts/json/olivetin.json index 7502b7d..3f5975f 100644 --- a/scripts/json/olivetin.json +++ b/scripts/json/olivetin.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ollama.json b/scripts/json/ollama.json index 26950fa..c0f61ac 100644 --- a/scripts/json/ollama.json +++ b/scripts/json/ollama.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/omada.json b/scripts/json/omada.json index 343e328..b5bfee4 100644 --- a/scripts/json/omada.json +++ b/scripts/json/omada.json @@ -1,35 +1,35 @@ { - "name": "Omada Controller", - "slug": "omada", - "categories": [ - 4 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8043, - "documentation": null, - "website": "https://www.tp-link.com/us/support/download/omada-software-controller/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/omada.webp", - "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": [ - { - "type": "default", - "script": "ct/omada.sh", - "resources": { - "cpu": 2, - "ram": 3072, - "hdd": 8, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "Omada Controller", + "slug": "omada", + "categories": [ + 4 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8043, + "documentation": null, + "website": "https://www.tp-link.com/us/support/download/omada-software-controller/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/omada.webp", + "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": [ + { + "type": "default", + "script": "ct/omada.sh", + "resources": { + "cpu": 2, + "ram": 3072, + "hdd": 8, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/ombi.json b/scripts/json/ombi.json index a1ab867..abbcd50 100644 --- a/scripts/json/ombi.json +++ b/scripts/json/ombi.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/omv.json b/scripts/json/omv.json index 6dd01ef..5262bae 100644 --- a/scripts/json/omv.json +++ b/scripts/json/omv.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/onedev.json b/scripts/json/onedev.json index 2c2b098..018462c 100644 --- a/scripts/json/onedev.json +++ b/scripts/json/onedev.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/onlyoffice.json b/scripts/json/onlyoffice.json index 633c3ca..ba6e1de 100644 --- a/scripts/json/onlyoffice.json +++ b/scripts/json/onlyoffice.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/opengist.json b/scripts/json/opengist.json index 80db5e4..b62bfbe 100644 --- a/scripts/json/opengist.json +++ b/scripts/json/opengist.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/openhab.json b/scripts/json/openhab.json index f87869b..55e026f 100644 --- a/scripts/json/openhab.json +++ b/scripts/json/openhab.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/openobserve.json b/scripts/json/openobserve.json index 092b029..e8f0d92 100644 --- a/scripts/json/openobserve.json +++ b/scripts/json/openobserve.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/openproject.json b/scripts/json/openproject.json index f1245d4..1c4dd77 100644 --- a/scripts/json/openproject.json +++ b/scripts/json/openproject.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/openwebui.json b/scripts/json/openwebui.json index 4d492f1..b06d1d2 100644 --- a/scripts/json/openwebui.json +++ b/scripts/json/openwebui.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/openwrt-vm.json b/scripts/json/openwrt-vm.json new file mode 100644 index 0000000..3055a64 --- /dev/null +++ b/scripts/json/openwrt-vm.json @@ -0,0 +1,41 @@ +{ + "name": "OpenWrt", + "slug": "openwrt-vm", + "categories": [ + 4, + 2 + ], + "date_created": "2024-05-02", + "type": "vm", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://openwrt.org/docs/start", + "website": "https://openwrt.org/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp", + "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": [ + { + "type": "default", + "script": "vm/openwrt-vm.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 0.5, + "os": null, + "version": null + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "If you use VLANs (default LAN is set to VLAN 999), make sure the Proxmox Linux Bridge is configured as VLAN-aware, otherwise the VM may fail to start.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/openziti-controller.json b/scripts/json/openziti-controller.json index 53b2b04..ba7158d 100644 --- a/scripts/json/openziti-controller.json +++ b/scripts/json/openziti-controller.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/openziti-tunnel.json b/scripts/json/openziti-tunnel.json index a964c09..e55ebd8 100644 --- a/scripts/json/openziti-tunnel.json +++ b/scripts/json/openziti-tunnel.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ots.json b/scripts/json/ots.json index 454dfca..f608137 100644 --- a/scripts/json/ots.json +++ b/scripts/json/ots.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/outline.json b/scripts/json/outline.json index 3503e4f..5c1debf 100644 --- a/scripts/json/outline.json +++ b/scripts/json/outline.json @@ -1,44 +1,44 @@ { - "name": "Outline", - "slug": "outline", - "categories": [ - 12 - ], - "date_created": "2025-02-26", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3000, - "documentation": "https://docs.getoutline.com/s/hosting/", - "website": "https://www.getoutline.com", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/outline.webp", - "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": [ - { - "type": "default", - "script": "ct/outline.sh", - "resources": { - "cpu": 2, - "ram": 4096, - "hdd": 8, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "Outline", + "slug": "outline", + "categories": [ + 12 + ], + "date_created": "2025-02-26", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://docs.getoutline.com/s/hosting/", + "website": "https://www.getoutline.com", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/outline.webp", + "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": [ + { + "type": "default", + "script": "ct/outline.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 8, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "After installation finishes, application will do a database migration so web UI might be unavailable for a minute or two. Also you need to manually add authentication and/or enable HTTPS.", + "type": "info" }, - "notes": [ - { - "text": "After installation finishes, application will do a database migration so web UI might be unavailable for a minute or two. Also you need to manually add authentication and/or enable HTTPS.", - "type": "info" - }, - { - "text": "Configuration file is at: `/opt/outline/.env`. Modify to suit your environment.", - "type": "info" - } - ] -} + { + "text": "Configuration file is at: `/opt/outline/.env`. Modify to suit your environment.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/overseerr.json b/scripts/json/overseerr.json index f6d3f00..8cbd531 100644 --- a/scripts/json/overseerr.json +++ b/scripts/json/overseerr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/owncast.json b/scripts/json/owncast.json index 55fc273..73e8cb3 100644 --- a/scripts/json/owncast.json +++ b/scripts/json/owncast.json @@ -32,4 +32,4 @@ "password": "abc123" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/owncloud-vm.json b/scripts/json/owncloud-vm.json index dfd13c6..5545b2e 100644 --- a/scripts/json/owncloud-vm.json +++ b/scripts/json/owncloud-vm.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pairdrop.json b/scripts/json/pairdrop.json index d5e4d7e..d0f4a52 100644 --- a/scripts/json/pairdrop.json +++ b/scripts/json/pairdrop.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/palmr.json b/scripts/json/palmr.json index 1e14220..91c6531 100644 --- a/scripts/json/palmr.json +++ b/scripts/json/palmr.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/paperless-ai.json b/scripts/json/paperless-ai.json index 5b7988f..d31f605 100644 --- a/scripts/json/paperless-ai.json +++ b/scripts/json/paperless-ai.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/paperless-gpt.json b/scripts/json/paperless-gpt.json index 408e0ac..aaec7f1 100644 --- a/scripts/json/paperless-gpt.json +++ b/scripts/json/paperless-gpt.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/paperless-ngx.json b/scripts/json/paperless-ngx.json index c202fae..6a5806e 100644 --- a/scripts/json/paperless-ngx.json +++ b/scripts/json/paperless-ngx.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/part-db.json b/scripts/json/part-db.json index 8449ad0..24e476d 100644 --- a/scripts/json/part-db.json +++ b/scripts/json/part-db.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/paymenter.json b/scripts/json/paymenter.json index dfae172..b7baa81 100644 --- a/scripts/json/paymenter.json +++ b/scripts/json/paymenter.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pbs-microcode.json b/scripts/json/pbs-microcode.json index 26bd883..d5fe416 100644 --- a/scripts/json/pbs-microcode.json +++ b/scripts/json/pbs-microcode.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pbs4-upgrade.json b/scripts/json/pbs4-upgrade.json index c6e9931..12840ad 100644 --- a/scripts/json/pbs4-upgrade.json +++ b/scripts/json/pbs4-upgrade.json @@ -49,4 +49,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/peanut.json b/scripts/json/peanut.json index 4b3fa11..991fbef 100644 --- a/scripts/json/peanut.json +++ b/scripts/json/peanut.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/pelican-panel.json b/scripts/json/pelican-panel.json index 74dcdab..d59cb41 100644 --- a/scripts/json/pelican-panel.json +++ b/scripts/json/pelican-panel.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pelican-wings.json b/scripts/json/pelican-wings.json index d76a5f6..a596fa5 100644 --- a/scripts/json/pelican-wings.json +++ b/scripts/json/pelican-wings.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/petio.json b/scripts/json/petio.json index 0ac4580..86f396d 100644 --- a/scripts/json/petio.json +++ b/scripts/json/petio.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/pf2etools.json b/scripts/json/pf2etools.json index 15f59db..2f4c98b 100644 --- a/scripts/json/pf2etools.json +++ b/scripts/json/pf2etools.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/photoprism.json b/scripts/json/photoprism.json index 5248431..6401ee3 100644 --- a/scripts/json/photoprism.json +++ b/scripts/json/photoprism.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/phpipam.json b/scripts/json/phpipam.json index b54a73c..d1fa5ea 100644 --- a/scripts/json/phpipam.json +++ b/scripts/json/phpipam.json @@ -1,35 +1,35 @@ { - "name": "phpIPAM", - "slug": "phpipam", - "categories": [ - 4 - ], - "date_created": "2025-01-15", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://phpipam.net/documents/all-documents/", - "website": "https://phpipam.net/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ - { - "type": "default", - "script": "ct/phpipam.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "Admin", - "password": "ipamadmin" - }, - "notes": [] -} + "name": "phpIPAM", + "slug": "phpipam", + "categories": [ + 4 + ], + "date_created": "2025-01-15", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://phpipam.net/documents/all-documents/", + "website": "https://phpipam.net/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ + { + "type": "default", + "script": "ct/phpipam.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "Admin", + "password": "ipamadmin" + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/pialert.json b/scripts/json/pialert.json index 3900a11..e12c2e9 100644 --- a/scripts/json/pialert.json +++ b/scripts/json/pialert.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/pihole.json b/scripts/json/pihole.json index c291827..0618c02 100644 --- a/scripts/json/pihole.json +++ b/scripts/json/pihole.json @@ -1,52 +1,52 @@ { - "name": "Pi-Hole", - "slug": "pihole", - "categories": [ - 5 - ], - "date_created": "2024-04-28", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://docs.pi-hole.net/", - "website": "https://pi-hole.net/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-hole.webp", - "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": [ - { - "type": "default", - "script": "ct/pihole.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 2, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "Pi-Hole", + "slug": "pihole", + "categories": [ + 5 + ], + "date_created": "2024-04-28", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://docs.pi-hole.net/", + "website": "https://pi-hole.net/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-hole.webp", + "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": [ + { + "type": "default", + "script": "ct/pihole.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "To set your password, log in to the container, and type the following: `pihole setpassword`", + "type": "info" }, - "notes": [ - { - "text": "To set your password, log in to the container, and type the following: `pihole setpassword`", - "type": "info" - }, - { - "text": "With an option to add Unbound", - "type": "info" - }, - { - "text": "With an option to configure Unbound as a forwarding DNS server (using DNS-over-TLS (DoT)) as opposed to a recursive DNS server", - "type": "info" - }, - { - "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", - "type": "warning" - } - ] -} + { + "text": "With an option to add Unbound", + "type": "info" + }, + { + "text": "With an option to configure Unbound as a forwarding DNS server (using DNS-over-TLS (DoT)) as opposed to a recursive DNS server", + "type": "info" + }, + { + "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", + "type": "warning" + } + ] +} \ No newline at end of file diff --git a/scripts/json/pimox-haos-vm.json b/scripts/json/pimox-haos-vm.json index 601c38f..521e92f 100644 --- a/scripts/json/pimox-haos-vm.json +++ b/scripts/json/pimox-haos-vm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/planka.json b/scripts/json/planka.json index b8d7a32..8089ec3 100644 --- a/scripts/json/planka.json +++ b/scripts/json/planka.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/plant-it.json b/scripts/json/plant-it.json index f46bdf5..4818bd5 100644 --- a/scripts/json/plant-it.json +++ b/scripts/json/plant-it.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/plex.json b/scripts/json/plex.json index 1d30688..975d6bf 100644 --- a/scripts/json/plex.json +++ b/scripts/json/plex.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pocketbase.json b/scripts/json/pocketbase.json index d5c0f2e..59d6af5 100644 --- a/scripts/json/pocketbase.json +++ b/scripts/json/pocketbase.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/pocketid.json b/scripts/json/pocketid.json index 5cb8a6d..cfaea71 100644 --- a/scripts/json/pocketid.json +++ b/scripts/json/pocketid.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/podman-homeassistant.json b/scripts/json/podman-homeassistant.json index f1cb564..c0d9ea1 100644 --- a/scripts/json/podman-homeassistant.json +++ b/scripts/json/podman-homeassistant.json @@ -13,7 +13,7 @@ "website": "https://www.home-assistant.io/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp", "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.", + "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🛈 If the LXC is created Privileged, the script will automatically set up USB passthrough.", "install_methods": [ { "type": "default", @@ -45,4 +45,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/podman.json b/scripts/json/podman.json index b5b8691..49f33f4 100644 --- a/scripts/json/podman.json +++ b/scripts/json/podman.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/post-pbs-install.json b/scripts/json/post-pbs-install.json index 60704c8..ad220fe 100644 --- a/scripts/json/post-pbs-install.json +++ b/scripts/json/post-pbs-install.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/post-pmg-install.json b/scripts/json/post-pmg-install.json index 1d034c8..0442f38 100644 --- a/scripts/json/post-pmg-install.json +++ b/scripts/json/post-pmg-install.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/post-pve-install.json b/scripts/json/post-pve-install.json index c5d40f6..283d39b 100644 --- a/scripts/json/post-pve-install.json +++ b/scripts/json/post-pve-install.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/postgresql.json b/scripts/json/postgresql.json index 0c8faf7..3328c8a 100644 --- a/scripts/json/postgresql.json +++ b/scripts/json/postgresql.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/privatebin.json b/scripts/json/privatebin.json index 2cc6518..274e9c2 100644 --- a/scripts/json/privatebin.json +++ b/scripts/json/privatebin.json @@ -1,35 +1,35 @@ { - "name": "PrivateBin", - "slug": "privatebin", - "categories": [ - 12 - ], - "date_created": "2025-01-29", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 80, - "documentation": "https://github.com/PrivateBin/PrivateBin/wiki", - "website": "https://github.com/PrivateBin/PrivateBin", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/privatebin.webp", - "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": [ - { - "type": "default", - "script": "ct/privatebin.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "PrivateBin", + "slug": "privatebin", + "categories": [ + 12 + ], + "date_created": "2025-01-29", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 80, + "documentation": "https://github.com/PrivateBin/PrivateBin/wiki", + "website": "https://github.com/PrivateBin/PrivateBin", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/privatebin.webp", + "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": [ + { + "type": "default", + "script": "ct/privatebin.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/projectsend.json b/scripts/json/projectsend.json index 8f6f9d1..a1bdec8 100644 --- a/scripts/json/projectsend.json +++ b/scripts/json/projectsend.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/prometheus-alertmanager.json b/scripts/json/prometheus-alertmanager.json index 0346f2e..ff1a88b 100644 --- a/scripts/json/prometheus-alertmanager.json +++ b/scripts/json/prometheus-alertmanager.json @@ -1,35 +1,35 @@ { - "name": "Prometheus Alertmanager", - "slug": "prometheus-alertmanager", - "categories": [ - 9 - ], - "date_created": "2025-01-09", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 9093, - "documentation": "https://prometheus.io/docs/alerting/latest/overview/", - "website": "https://prometheus.io/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp", - "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": [ - { - "type": "default", - "script": "ct/prometheus-alertmanager.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 2, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "Prometheus Alertmanager", + "slug": "prometheus-alertmanager", + "categories": [ + 9 + ], + "date_created": "2025-01-09", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 9093, + "documentation": "https://prometheus.io/docs/alerting/latest/overview/", + "website": "https://prometheus.io/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp", + "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": [ + { + "type": "default", + "script": "ct/prometheus-alertmanager.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 2, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/prometheus-paperless-ngx-exporter.json b/scripts/json/prometheus-paperless-ngx-exporter.json index 621d484..30a296a 100644 --- a/scripts/json/prometheus-paperless-ngx-exporter.json +++ b/scripts/json/prometheus-paperless-ngx-exporter.json @@ -1,44 +1,44 @@ { - "name": "Prometheus Paperless NGX Exporter", - "slug": "prometheus-paperless-ngx-exporter", - "categories": [ - 9 - ], - "date_created": "2025-02-07", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8081, - "documentation": null, - "website": "https://github.com/hansmi/prometheus-paperless-exporter", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp", - "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": [ - { - "type": "default", - "script": "ct/prometheus-paperless-ngx-exporter.sh", - "resources": { - "cpu": 1, - "ram": 256, - "hdd": 2, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null + "name": "Prometheus Paperless NGX Exporter", + "slug": "prometheus-paperless-ngx-exporter", + "categories": [ + 9 + ], + "date_created": "2025-02-07", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8081, + "documentation": null, + "website": "https://github.com/hansmi/prometheus-paperless-exporter", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp", + "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": [ + { + "type": "default", + "script": "ct/prometheus-paperless-ngx-exporter.sh", + "resources": { + "cpu": 1, + "ram": 256, + "hdd": 2, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Please adjust the Paperless URL in the systemd unit file: /etc/systemd/system/prometheus-paperless-ngx-exporter.service", + "type": "info" }, - "notes": [ - { - "text": "Please adjust the Paperless URL in the systemd unit file: /etc/systemd/system/prometheus-paperless-ngx-exporter.service", - "type": "info" - }, - { - "text": "Please adjust the Paperless authentication token in the configuration file: /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file", - "type": "info" - } - ] -} + { + "text": "Please adjust the Paperless authentication token in the configuration file: /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/prometheus-pve-exporter.json b/scripts/json/prometheus-pve-exporter.json index 9b4c388..68836cc 100644 --- a/scripts/json/prometheus-pve-exporter.json +++ b/scripts/json/prometheus-pve-exporter.json @@ -38,4 +38,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/prometheus.json b/scripts/json/prometheus.json index 4e342ea..7cbbd11 100644 --- a/scripts/json/prometheus.json +++ b/scripts/json/prometheus.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/prowlarr.json b/scripts/json/prowlarr.json index 8fd945e..d6f0a5f 100644 --- a/scripts/json/prowlarr.json +++ b/scripts/json/prowlarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/proxmox-backup-server.json b/scripts/json/proxmox-backup-server.json index e9dece4..ce64a6b 100644 --- a/scripts/json/proxmox-backup-server.json +++ b/scripts/json/proxmox-backup-server.json @@ -1,44 +1,44 @@ { - "name": "Proxmox Backup Server", - "slug": "proxmox-backup-server", - "categories": [ - 1 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8007, - "documentation": "https://pbs.proxmox.com/docs/", - "website": "https://www.proxmox.com/en/proxmox-backup-server/overview", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", - "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": [ - { - "type": "default", - "script": "ct/proxmox-backup-server.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 10, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "root", - "password": null + "name": "Proxmox Backup Server", + "slug": "proxmox-backup-server", + "categories": [ + 1 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8007, + "documentation": "https://pbs.proxmox.com/docs/", + "website": "https://www.proxmox.com/en/proxmox-backup-server/overview", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", + "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": [ + { + "type": "default", + "script": "ct/proxmox-backup-server.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 10, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "root", + "password": null + }, + "notes": [ + { + "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`", + "type": "warning" }, - "notes": [ - { - "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`", - "type": "warning" - }, - { - "text": "Advanced Install is only possible with disabled IPV6! Otherwise the installation sometimes stuck.", - "type": "warning" - } - ] -} + { + "text": "Advanced Install is only possible with disabled IPV6! Otherwise the installation sometimes stuck.", + "type": "warning" + } + ] +} \ No newline at end of file diff --git a/scripts/json/proxmox-datacenter-manager.json b/scripts/json/proxmox-datacenter-manager.json index 49d062d..21eef6c 100644 --- a/scripts/json/proxmox-datacenter-manager.json +++ b/scripts/json/proxmox-datacenter-manager.json @@ -41,4 +41,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/proxmox-mail-gateway.json b/scripts/json/proxmox-mail-gateway.json index d723abe..89ea0de 100644 --- a/scripts/json/proxmox-mail-gateway.json +++ b/scripts/json/proxmox-mail-gateway.json @@ -1,40 +1,40 @@ { - "name": "Proxmox Mail Gateway", - "slug": "proxmox-mail-gateway", - "categories": [ - 1 - ], - "date_created": "2025-02-04", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8006, - "documentation": "https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html", - "website": "https://www.proxmox.com/en/products/proxmox-mail-gateway/overview", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", - "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": [ - { - "type": "default", - "script": "ct/proxmox-mail-gateway.sh", - "resources": { - "cpu": 2, - "ram": 4096, - "hdd": 10, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "root", - "password": null - }, - "notes": [ - { - "text": "Set a root password if using autologin. This will be the PMG password. `passwd root`", - "type": "warning" - } - ] -} + "name": "Proxmox Mail Gateway", + "slug": "proxmox-mail-gateway", + "categories": [ + 1 + ], + "date_created": "2025-02-04", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8006, + "documentation": "https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html", + "website": "https://www.proxmox.com/en/products/proxmox-mail-gateway/overview", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp", + "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": [ + { + "type": "default", + "script": "ct/proxmox-mail-gateway.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 10, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "root", + "password": null + }, + "notes": [ + { + "text": "Set a root password if using autologin. This will be the PMG password. `passwd root`", + "type": "warning" + } + ] +} \ No newline at end of file diff --git a/scripts/json/ps5-mqtt.json b/scripts/json/ps5-mqtt.json index be0d155..635faba 100644 --- a/scripts/json/ps5-mqtt.json +++ b/scripts/json/ps5-mqtt.json @@ -1,40 +1,40 @@ { - "name": "PS5-MQTT", - "slug": "ps5-mqtt", - "categories": [ - 18 - ], - "date_created": "2025-01-09", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8645, - "documentation": null, - "website": "https://github.com/FunkeyFlo/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ps5-mqtt.webp", - "config_path": "/opt/.config/ps5-mqtt/config.json", - "description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.", - "install_methods": [ - { - "type": "default", - "script": "ct/ps5-mqtt.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 3, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "After installation, the MQTT endpoint must be configured. The configuration file is located within the LXC container at: `/opt/.config/ps5-mqtt/config.json`", - "type": "info" - } - ] -} + "name": "PS5-MQTT", + "slug": "ps5-mqtt", + "categories": [ + 18 + ], + "date_created": "2025-01-09", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8645, + "documentation": null, + "website": "https://github.com/FunkeyFlo/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ps5-mqtt.webp", + "config_path": "/opt/.config/ps5-mqtt/config.json", + "description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.", + "install_methods": [ + { + "type": "default", + "script": "ct/ps5-mqtt.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 3, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "After installation, the MQTT endpoint must be configured. The configuration file is located within the LXC container at: `/opt/.config/ps5-mqtt/config.json`", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/pterodactyl-panel.json b/scripts/json/pterodactyl-panel.json index c83e710..b1980a6 100644 --- a/scripts/json/pterodactyl-panel.json +++ b/scripts/json/pterodactyl-panel.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pterodactyl-wings.json b/scripts/json/pterodactyl-wings.json index 861de05..9f2a323 100644 --- a/scripts/json/pterodactyl-wings.json +++ b/scripts/json/pterodactyl-wings.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pulse.json b/scripts/json/pulse.json index 20a5ae9..0ff1311 100644 --- a/scripts/json/pulse.json +++ b/scripts/json/pulse.json @@ -45,4 +45,4 @@ "type": "Info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/pve-privilege-converter.json b/scripts/json/pve-privilege-converter.json index 530bd9b..2cb3bdb 100644 --- a/scripts/json/pve-privilege-converter.json +++ b/scripts/json/pve-privilege-converter.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/qbittorrent.json b/scripts/json/qbittorrent.json index 23cf383..94833c0 100644 --- a/scripts/json/qbittorrent.json +++ b/scripts/json/qbittorrent.json @@ -32,4 +32,4 @@ "password": "changeme" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/rabbitmq.json b/scripts/json/rabbitmq.json index 6f73043..fe2f7e3 100644 --- a/scripts/json/rabbitmq.json +++ b/scripts/json/rabbitmq.json @@ -32,4 +32,4 @@ "password": "proxmox" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/radarr.json b/scripts/json/radarr.json index 0a168e6..39ee744 100644 --- a/scripts/json/radarr.json +++ b/scripts/json/radarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/radicale.json b/scripts/json/radicale.json index 3900a90..7eda989 100644 --- a/scripts/json/radicale.json +++ b/scripts/json/radicale.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/rclone.json b/scripts/json/rclone.json index 08583f8..7d0697d 100644 --- a/scripts/json/rclone.json +++ b/scripts/json/rclone.json @@ -52,4 +52,4 @@ "text": "`htpasswd -b -B /opt/login.pwd newuser newuserpassword` to add more users." } ] -} +} \ No newline at end of file diff --git a/scripts/json/rdtclient.json b/scripts/json/rdtclient.json index 79b34ba..25f7892 100644 --- a/scripts/json/rdtclient.json +++ b/scripts/json/rdtclient.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/reactive-resume.json b/scripts/json/reactive-resume.json index a85cb90..499a5b4 100644 --- a/scripts/json/reactive-resume.json +++ b/scripts/json/reactive-resume.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/readeck.json b/scripts/json/readeck.json index a412099..d28b87f 100644 --- a/scripts/json/readeck.json +++ b/scripts/json/readeck.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/recyclarr.json b/scripts/json/recyclarr.json index 3a82e05..050deb6 100644 --- a/scripts/json/recyclarr.json +++ b/scripts/json/recyclarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/redis.json b/scripts/json/redis.json index 04a8e8a..8791b74 100644 --- a/scripts/json/redis.json +++ b/scripts/json/redis.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/resiliosync.json b/scripts/json/resiliosync.json index 754aeff..246bc5c 100644 --- a/scripts/json/resiliosync.json +++ b/scripts/json/resiliosync.json @@ -17,7 +17,7 @@ "install_methods": [ { "type": "default", - "script": "ct/resilio-sync.sh", + "script": "ct/resiliosync.sh", "resources": { "cpu": 2, "ram": 2048, @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/revealjs.json b/scripts/json/revealjs.json index fcd4d09..bb7e4a7 100644 --- a/scripts/json/revealjs.json +++ b/scripts/json/revealjs.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/runtipi.json b/scripts/json/runtipi.json index 771ccbe..614d2ff 100644 --- a/scripts/json/runtipi.json +++ b/scripts/json/runtipi.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/rustdeskserver.json b/scripts/json/rustdeskserver.json index 8e3ab60..cd11d09 100644 --- a/scripts/json/rustdeskserver.json +++ b/scripts/json/rustdeskserver.json @@ -56,4 +56,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/sabnzbd.json b/scripts/json/sabnzbd.json index cef95e4..67047eb 100644 --- a/scripts/json/sabnzbd.json +++ b/scripts/json/sabnzbd.json @@ -1,35 +1,35 @@ { - "name": "SABnzbd", - "slug": "sabnzbd", - "categories": [ - 11 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 7777, - "documentation": "https://sabnzbd.org/wiki/", - "website": "https://sabnzbd.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sabnzbd.webp", - "config_path": "/.sabnzbd/sabnzbd.ini", - "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": [ - { - "type": "default", - "script": "ct/sabnzbd.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 5, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "SABnzbd", + "slug": "sabnzbd", + "categories": [ + 11 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7777, + "documentation": "https://sabnzbd.org/wiki/", + "website": "https://sabnzbd.org/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sabnzbd.webp", + "config_path": "/.sabnzbd/sabnzbd.ini", + "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": [ + { + "type": "default", + "script": "ct/sabnzbd.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 5, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/salt.json b/scripts/json/salt.json index 096c4ee..f82aff4 100644 --- a/scripts/json/salt.json +++ b/scripts/json/salt.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/scaling-governor.json b/scripts/json/scaling-governor.json index 60fdeae..a09accf 100644 --- a/scripts/json/scaling-governor.json +++ b/scripts/json/scaling-governor.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/scraparr.json b/scripts/json/scraparr.json new file mode 100644 index 0000000..1ab5426 --- /dev/null +++ b/scripts/json/scraparr.json @@ -0,0 +1,40 @@ +{ + "name": "Scraparr", + "slug": "scraparr", + "categories": [ + 14 + ], + "date_created": "2025-09-15", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7100, + "documentation": "https://github.com/thecfu/scraparr/blob/main/README.md", + "website": "https://github.com/thecfu/scraparr", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/scraparr-dark.svg", + "config_path": "/scraparr/config/config.yaml", + "description": "Scraparr is a Prometheus exporter for the *arr suite (Sonarr, Radarr, Lidarr, etc.). It provides metrics that can be scraped by Prometheus to monitor and visualize the health and performance of your *arr applications.", + "install_methods": [ + { + "type": "default", + "script": "ct/scraparr.sh", + "resources": { + "cpu": 2, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Edit config file then restart the scraparr service: `systemctl restart scraparr`", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/searxng.json b/scripts/json/searxng.json index f56c420..972cab0 100644 --- a/scripts/json/searxng.json +++ b/scripts/json/searxng.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/seelf.json b/scripts/json/seelf.json index cea88d6..dba576c 100644 --- a/scripts/json/seelf.json +++ b/scripts/json/seelf.json @@ -1,40 +1,40 @@ { - "name": "seelf", - "slug": "seelf", - "categories": [ - 4 - ], - "date_created": "2025-02-04", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8080, - "documentation": "https://yuukanoo.github.io/seelf/guide/quickstart.html", - "website": "https://yuukanoo.github.io/seelf/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/seelf.webp", - "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": [ - { - "type": "default", - "script": "ct/seelf.sh", - "resources": { - "cpu": 2, - "ram": 4096, - "hdd": 10, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Initial admin email and password: `cat ~/seelf.creds`", - "type": "info" - } - ] -} + "name": "seelf", + "slug": "seelf", + "categories": [ + 4 + ], + "date_created": "2025-02-04", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8080, + "documentation": "https://yuukanoo.github.io/seelf/guide/quickstart.html", + "website": "https://yuukanoo.github.io/seelf/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/seelf.webp", + "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": [ + { + "type": "default", + "script": "ct/seelf.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 10, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Initial admin email and password: `cat ~/seelf.creds`", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/semaphore.json b/scripts/json/semaphore.json index a3a4ca8..fda5918 100644 --- a/scripts/json/semaphore.json +++ b/scripts/json/semaphore.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/sftpgo.json b/scripts/json/sftpgo.json index 747b73a..aa6945e 100644 --- a/scripts/json/sftpgo.json +++ b/scripts/json/sftpgo.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/shinobi.json b/scripts/json/shinobi.json index 41784a5..91228d9 100644 --- a/scripts/json/shinobi.json +++ b/scripts/json/shinobi.json @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/signoz.json b/scripts/json/signoz.json new file mode 100644 index 0000000..2078fbd --- /dev/null +++ b/scripts/json/signoz.json @@ -0,0 +1,40 @@ +{ + "name": "SigNoz", + "slug": "signoz", + "categories": [ + 9 + ], + "date_created": "2025-09-15", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8080, + "documentation": "https://signoz.io/docs/introduction/", + "config_path": "/opt/signoz/conf/systemd.env", + "website": "https://signoz.io/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/signoz.webp", + "description": "SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs, traces, metrics, exceptions, & alerts in a single tool.", + "install_methods": [ + { + "type": "default", + "script": "ct/signoz.sh", + "resources": { + "cpu": 2, + "ram": 4096, + "hdd": 20, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "The first user you register will be the admin user.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/silverbullet.json b/scripts/json/silverbullet.json index 7658c45..f1b2075 100644 --- a/scripts/json/silverbullet.json +++ b/scripts/json/silverbullet.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/slskd.json b/scripts/json/slskd.json index 69b254a..4ba02cf 100644 --- a/scripts/json/slskd.json +++ b/scripts/json/slskd.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/smokeping.json b/scripts/json/smokeping.json index 0b9c434..accdb2c 100644 --- a/scripts/json/smokeping.json +++ b/scripts/json/smokeping.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/snipeit.json b/scripts/json/snipeit.json index b8f9b0a..697166e 100644 --- a/scripts/json/snipeit.json +++ b/scripts/json/snipeit.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/sonarr.json b/scripts/json/sonarr.json index 336e430..deb6b32 100644 --- a/scripts/json/sonarr.json +++ b/scripts/json/sonarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/spoolman.json b/scripts/json/spoolman.json index 7a116e5..c5e8392 100644 --- a/scripts/json/spoolman.json +++ b/scripts/json/spoolman.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/sqlserver2022.json b/scripts/json/sqlserver2022.json index b3bf85f..317a296 100644 --- a/scripts/json/sqlserver2022.json +++ b/scripts/json/sqlserver2022.json @@ -45,4 +45,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/stirling-pdf.json b/scripts/json/stirling-pdf.json index 72086fa..6aec585 100644 --- a/scripts/json/stirling-pdf.json +++ b/scripts/json/stirling-pdf.json @@ -32,4 +32,4 @@ "password": "stirling" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/streamlink-webui.json b/scripts/json/streamlink-webui.json index 2aadd95..8ac4da1 100644 --- a/scripts/json/streamlink-webui.json +++ b/scripts/json/streamlink-webui.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/stylus.json b/scripts/json/stylus.json new file mode 100644 index 0000000..f7713f0 --- /dev/null +++ b/scripts/json/stylus.json @@ -0,0 +1,35 @@ +{ + "name": "Stylus", + "slug": "stylus", + "categories": [ + 4 + ], + "date_created": "2025-09-12", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8000, + "documentation": "https://mmastrac.github.io/stylus/", + "website": "https://github.com/mmastrac/stylus", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stylus.webp", + "config_path": "/opt/stylus/config.yaml", + "description": "Stylus (style + status) is a lightweight status page for infrastructure and networks. Configure a set of bash scripts that test the various parts of your infrastructure, set up visualizations with minimal configuration, and Stylus will generate you a dashboard for your system.", + "install_methods": [ + { + "type": "default", + "script": "ct/stylus.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 2, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/suwayomi-server.json b/scripts/json/suwayomi-server.json index dba29be..3c80685 100644 --- a/scripts/json/suwayomi-server.json +++ b/scripts/json/suwayomi-server.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/swizzin.json b/scripts/json/swizzin.json index 75c3061..aaca2d3 100644 --- a/scripts/json/swizzin.json +++ b/scripts/json/swizzin.json @@ -49,4 +49,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/syncthing.json b/scripts/json/syncthing.json index 8b57769..9a118c6 100644 --- a/scripts/json/syncthing.json +++ b/scripts/json/syncthing.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tandoor.json b/scripts/json/tandoor.json index 386da2a..30dea2f 100644 --- a/scripts/json/tandoor.json +++ b/scripts/json/tandoor.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tasmoadmin.json b/scripts/json/tasmoadmin.json index cc7513d..70af9b1 100644 --- a/scripts/json/tasmoadmin.json +++ b/scripts/json/tasmoadmin.json @@ -1,35 +1,35 @@ { - "name": "TasmoAdmin", - "slug": "tasmoadmin", - "categories": [ - 16 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": false, - "privileged": false, - "interface_port": 9999, - "documentation": null, - "website": "https://github.com/TasmoAdmin/TasmoAdmin#readme", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tasmoadmin.webp", - "config_path": "", - "description": "TasmoAdmin is an administrative platform for devices flashed with Tasmota.", - "install_methods": [ - { - "type": "default", - "script": "ct/tasmoadmin.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 2, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "TasmoAdmin", + "slug": "tasmoadmin", + "categories": [ + 16 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": false, + "privileged": false, + "interface_port": 9999, + "documentation": null, + "website": "https://github.com/TasmoAdmin/TasmoAdmin#readme", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tasmoadmin.webp", + "config_path": "", + "description": "TasmoAdmin is an administrative platform for devices flashed with Tasmota.", + "install_methods": [ + { + "type": "default", + "script": "ct/tasmoadmin.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/scripts/json/tasmocompiler.json b/scripts/json/tasmocompiler.json index ccd906a..6a7b4b9 100644 --- a/scripts/json/tasmocompiler.json +++ b/scripts/json/tasmocompiler.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tautulli.json b/scripts/json/tautulli.json index b409b0f..4759af7 100644 --- a/scripts/json/tautulli.json +++ b/scripts/json/tautulli.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tdarr.json b/scripts/json/tdarr.json index 88d8120..99b3a93 100644 --- a/scripts/json/tdarr.json +++ b/scripts/json/tdarr.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/teamspeak-server.json b/scripts/json/teamspeak-server.json index 8944f2f..ba9a21b 100644 --- a/scripts/json/teamspeak-server.json +++ b/scripts/json/teamspeak-server.json @@ -52,4 +52,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/technitiumdns.json b/scripts/json/technitiumdns.json index 57376fe..9d481b7 100644 --- a/scripts/json/technitiumdns.json +++ b/scripts/json/technitiumdns.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/teddycloud.json b/scripts/json/teddycloud.json index ef8608b..c7a077c 100644 --- a/scripts/json/teddycloud.json +++ b/scripts/json/teddycloud.json @@ -37,4 +37,4 @@ "type": "warn" } ] -} +} \ No newline at end of file diff --git a/scripts/json/telegraf.json b/scripts/json/telegraf.json new file mode 100644 index 0000000..77434dd --- /dev/null +++ b/scripts/json/telegraf.json @@ -0,0 +1,40 @@ +{ + "name": "Telegraf", + "slug": "telegraf", + "categories": [ + 9 + ], + "date_created": "2025-09-11", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://docs.influxdata.com/telegraf/v1/", + "config_path": "/etc/telegraf/telegraf.conf", + "website": "https://github.com/influxdata/telegraf", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/telegraf.webp", + "description": "Telegraf collects and sends time series data from databases, systems, and IoT sensors. It has no external dependencies, is easy to install, and requires minimal memory.", + "install_methods": [ + { + "type": "default", + "script": "ct/telegraf.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Make sure to configure an output for the telegraf config and start the service with `systemctl start telegraf`.", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/the-lounge.json b/scripts/json/the-lounge.json index 6cc2541..cada476 100644 --- a/scripts/json/the-lounge.json +++ b/scripts/json/the-lounge.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/threadfin.json b/scripts/json/threadfin.json index 0f1eab4..dc2d0c6 100644 --- a/scripts/json/threadfin.json +++ b/scripts/json/threadfin.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tianji.json b/scripts/json/tianji.json index b4a1504..236c7e6 100644 --- a/scripts/json/tianji.json +++ b/scripts/json/tianji.json @@ -13,7 +13,7 @@ "website": "https://tianji.msgbyte.com/", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tianji.webp", "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", + "description": "Tianji is an open-source tool for website analytics, uptime monitoring, and server status tracking, all in one. It’s lightweight, privacy-focused, and helps teams monitor web traffic, server health, and gather user interaction data", "install_methods": [ { "type": "default", @@ -32,4 +32,4 @@ "password": "admin" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/traccar.json b/scripts/json/traccar.json index 7db5617..d4ca67c 100644 --- a/scripts/json/traccar.json +++ b/scripts/json/traccar.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tracktor.json b/scripts/json/tracktor.json index 00d3585..ead315d 100644 --- a/scripts/json/tracktor.json +++ b/scripts/json/tracktor.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/traefik.json b/scripts/json/traefik.json index b69d7df..12133f8 100644 --- a/scripts/json/traefik.json +++ b/scripts/json/traefik.json @@ -43,4 +43,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/transmission.json b/scripts/json/transmission.json index 726813a..4cc6cd8 100644 --- a/scripts/json/transmission.json +++ b/scripts/json/transmission.json @@ -52,4 +52,4 @@ "text": "Alpine script sets initial disk size to 1GB. Please adjust for your needs after installation ends." } ] -} +} \ No newline at end of file diff --git a/scripts/json/trilium.json b/scripts/json/trilium.json index 2b42f1a..392c01d 100644 --- a/scripts/json/trilium.json +++ b/scripts/json/trilium.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/tududi.json b/scripts/json/tududi.json index 96ba075..d7a8459 100644 --- a/scripts/json/tududi.json +++ b/scripts/json/tududi.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/turnkey.json b/scripts/json/turnkey.json index a544d21..2d8ef02 100644 --- a/scripts/json/turnkey.json +++ b/scripts/json/turnkey.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/twingate-connector.json b/scripts/json/twingate-connector.json index 35add22..cc23590 100644 --- a/scripts/json/twingate-connector.json +++ b/scripts/json/twingate-connector.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/typesense.json b/scripts/json/typesense.json index 1eddb84..ab2440c 100644 --- a/scripts/json/typesense.json +++ b/scripts/json/typesense.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ubuntu.json b/scripts/json/ubuntu.json index bf7459f..6011d4c 100644 --- a/scripts/json/ubuntu.json +++ b/scripts/json/ubuntu.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/ubuntu2204-vm.json b/scripts/json/ubuntu2204-vm.json index 1a78c0e..db25d64 100644 --- a/scripts/json/ubuntu2204-vm.json +++ b/scripts/json/ubuntu2204-vm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ubuntu2404-vm.json b/scripts/json/ubuntu2404-vm.json index b51f118..c0da950 100644 --- a/scripts/json/ubuntu2404-vm.json +++ b/scripts/json/ubuntu2404-vm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/ubuntu2504-vm.json b/scripts/json/ubuntu2504-vm.json index cd23216..4f0f511 100644 --- a/scripts/json/ubuntu2504-vm.json +++ b/scripts/json/ubuntu2504-vm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/uhf.json b/scripts/json/uhf.json new file mode 100644 index 0000000..9002885 --- /dev/null +++ b/scripts/json/uhf.json @@ -0,0 +1,35 @@ +{ + "name": "UHF Server", + "slug": "uhf", + "categories": [ + 13 + ], + "date_created": "2025-09-12", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 7568, + "documentation": "https://www.uhfapp.com/server", + "website": "https://www.uhfapp.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uhf.webp", + "config_path": "/etc/uhf-server/", + "description": "UHF Server is a powerful companion app that lets you seamlessly schedule and record your favorite shows from the UHF app.", + "install_methods": [ + { + "type": "default", + "script": "ct/uhf.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/umami.json b/scripts/json/umami.json index a96cba0..c21ac83 100644 --- a/scripts/json/umami.json +++ b/scripts/json/umami.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/umbrel-os-vm.json b/scripts/json/umbrel-os-vm.json index 78e6c1a..df7e413 100644 --- a/scripts/json/umbrel-os-vm.json +++ b/scripts/json/umbrel-os-vm.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/umlautadaptarr.json b/scripts/json/umlautadaptarr.json index e59a4a0..b51aab8 100644 --- a/scripts/json/umlautadaptarr.json +++ b/scripts/json/umlautadaptarr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/unbound.json b/scripts/json/unbound.json index 293fe54..71399e3 100644 --- a/scripts/json/unbound.json +++ b/scripts/json/unbound.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/undefined.json b/scripts/json/undefined.json new file mode 100644 index 0000000..2114fab --- /dev/null +++ b/scripts/json/undefined.json @@ -0,0 +1,1452 @@ +[ + { + "name": "meilisearch/meilisearch", + "version": "latest", + "date": "2025-09-15T11:12:14Z" + }, + { + "name": "FlowiseAI/Flowise", + "version": "flowise@3.0.6", + "date": "2025-09-15T11:07:20Z" + }, + { + "name": "VictoriaMetrics/VictoriaMetrics", + "version": "v1.126.0", + "date": "2025-09-15T10:43:35Z" + }, + { + "name": "zitadel/zitadel", + "version": "v4.2.0", + "date": "2025-09-15T09:29:55Z" + }, + { + "name": "authelia/authelia", + "version": "v4.39.10", + "date": "2025-09-15T09:11:13Z" + }, + { + "name": "emqx/emqx", + "version": "e5.8.6-hotfix2", + "date": "2025-09-15T08:31:12Z" + }, + { + "name": "Checkmk/checkmk", + "version": "v2.4.0p12-rc1", + "date": "2025-09-15T07:21:11Z" + }, + { + "name": "esphome/esphome", + "version": "2025.8.4", + "date": "2025-09-10T05:03:47Z" + }, + { + "name": "Jackett/Jackett", + "version": "v0.23.23", + "date": "2025-09-15T05:57:33Z" + }, + { + "name": "mealie-recipes/mealie", + "version": "v3.2.1", + "date": "2025-09-15T03:45:31Z" + }, + { + "name": "Prowlarr/Prowlarr", + "version": "v2.0.5.5160", + "date": "2025-08-23T21:23:11Z" + }, + { + "name": "firefly-iii/firefly-iii", + "version": "v6.4.0", + "date": "2025-09-13T16:38:21Z" + }, + { + "name": "cross-seed/cross-seed", + "version": "v6.13.3", + "date": "2025-09-08T21:45:15Z" + }, + { + "name": "9001/copyparty", + "version": "v1.19.9", + "date": "2025-09-15T00:54:27Z" + }, + { + "name": "crafty-controller/crafty-4", + "version": "v4.5.4", + "date": "2025-09-15T00:49:53Z" + }, + { + "name": "jeedom/core", + "version": "4.4.20", + "date": "2025-09-15T00:27:09Z" + }, + { + "name": "steveiliop56/tinyauth", + "version": "v3.6.2", + "date": "2025-07-17T12:08:03Z" + }, + { + "name": "inventree/InvenTree", + "version": "1.0.0", + "date": "2025-09-14T23:37:56Z" + }, + { + "name": "fallenbagel/jellyseerr", + "version": "preview-test-arm-builds", + "date": "2025-09-14T20:12:37Z" + }, + { + "name": "moghtech/komodo", + "version": "v1.19.4", + "date": "2025-09-14T19:51:50Z" + }, + { + "name": "ErsatzTV/ErsatzTV", + "version": "v25.6.0", + "date": "2025-09-14T17:55:21Z" + }, + { + "name": "msgbyte/tianji", + "version": "v1.25.8", + "date": "2025-09-14T16:50:23Z" + }, + { + "name": "Lidarr/Lidarr", + "version": "v2.13.3.4711", + "date": "2025-08-28T20:06:24Z" + }, + { + "name": "ellite/Wallos", + "version": "v4.2.0", + "date": "2025-09-14T14:49:18Z" + }, + { + "name": "karakeep-app/karakeep", + "version": "cli/v0.27.1", + "date": "2025-09-14T14:48:48Z" + }, + { + "name": "docmost/docmost", + "version": "v0.23.1", + "date": "2025-09-14T14:31:45Z" + }, + { + "name": "semaphoreui/semaphore", + "version": "v2.17.0-beta2", + "date": "2025-09-14T14:08:27Z" + }, + { + "name": "intri-in/manage-my-damn-life-nextjs", + "version": "v0.8.1", + "date": "2025-09-14T06:45:23Z" + }, + { + "name": "Luligu/matterbridge", + "version": "3.2.7", + "date": "2025-09-14T06:35:13Z" + }, + { + "name": "gtsteffaniak/filebrowser", + "version": "v0.8.5-beta", + "date": "2025-09-13T22:53:30Z" + }, + { + "name": "Ombi-app/Ombi", + "version": "v4.47.1", + "date": "2025-01-05T21:14:23Z" + }, + { + "name": "home-assistant/core", + "version": "2025.9.3", + "date": "2025-09-13T12:44:37Z" + }, + { + "name": "gotify/server", + "version": "v2.7.2", + "date": "2025-09-13T12:11:38Z" + }, + { + "name": "wizarrrr/wizarr", + "version": "v2025.9.3", + "date": "2025-09-13T11:44:41Z" + }, + { + "name": "syncthing/syncthing", + "version": "v2.0.9", + "date": "2025-09-13T09:37:24Z" + }, + { + "name": "documenso/documenso", + "version": "v1.12.4", + "date": "2025-09-13T08:08:55Z" + }, + { + "name": "ollama/ollama", + "version": "v0.11.11-rc3", + "date": "2025-09-12T23:40:14Z" + }, + { + "name": "coder/code-server", + "version": "v4.103.2", + "date": "2025-08-25T23:30:54Z" + }, + { + "name": "YunoHost/yunohost", + "version": "debian/12.1.23", + "date": "2025-09-12T22:15:47Z" + }, + { + "name": "chrisvel/tududi", + "version": "v0.82-rc2", + "date": "2025-09-12T09:59:30Z" + }, + { + "name": "homarr-labs/homarr", + "version": "v1.37.0", + "date": "2025-09-12T19:19:14Z" + }, + { + "name": "booklore-app/booklore", + "version": "v1.3.0", + "date": "2025-09-12T19:06:32Z" + }, + { + "name": "immich-app/immich", + "version": "v1.142.0", + "date": "2025-09-12T18:52:03Z" + }, + { + "name": "keycloak/keycloak", + "version": "26.3.4", + "date": "2025-09-12T13:28:51Z" + }, + { + "name": "nzbgetcom/nzbget", + "version": "v25.3", + "date": "2025-09-01T09:47:06Z" + }, + { + "name": "cloudreve/cloudreve", + "version": "4.8.0", + "date": "2025-09-12T09:48:11Z" + }, + { + "name": "wazuh/wazuh", + "version": "coverity-w37-4.13.0", + "date": "2025-09-10T15:46:01Z" + }, + { + "name": "MediaBrowser/Emby.Releases", + "version": "4.9.1.2", + "date": "2025-06-26T22:08:00Z" + }, + { + "name": "mattermost/mattermost", + "version": "server/public/v0.1.19", + "date": "2025-09-11T22:57:26Z" + }, + { + "name": "go-vikunja/vikunja", + "version": "v1.0.0-rc0", + "date": "2025-08-17T18:47:15Z" + }, + { + "name": "tailscale/tailscale", + "version": "v1.88.1", + "date": "2025-09-11T22:19:51Z" + }, + { + "name": "influxdata/influxdb", + "version": "v3.4.2", + "date": "2025-09-11T20:43:23Z" + }, + { + "name": "HabitRPG/habitica", + "version": "v5.41.0", + "date": "2025-09-11T19:46:20Z" + }, + { + "name": "zerotier/ZeroTierOne", + "version": "1.16.0", + "date": "2025-09-11T18:01:57Z" + }, + { + "name": "Dolibarr/dolibarr", + "version": "18.0.8", + "date": "2025-09-11T16:27:45Z" + }, + { + "name": "Threadfin/Threadfin", + "version": "1.2.37", + "date": "2025-09-11T16:13:41Z" + }, + { + "name": "prometheus/prometheus", + "version": "v0.306.0-rc.1", + "date": "2025-09-11T13:37:41Z" + }, + { + "name": "apache/tika", + "version": "3.2.3-rc1", + "date": "2025-09-11T14:37:50Z" + }, + { + "name": "rcourtman/Pulse", + "version": "v4.14.0", + "date": "2025-09-05T18:28:28Z" + }, + { + "name": "bunkerity/bunkerweb", + "version": "v1.6.4", + "date": "2025-08-18T20:22:07Z" + }, + { + "name": "Paymenter/Paymenter", + "version": "v1.3.2", + "date": "2025-09-11T09:54:47Z" + }, + { + "name": "cockpit-project/cockpit", + "version": "345.2", + "date": "2025-09-11T09:06:44Z" + }, + { + "name": "NLnetLabs/unbound", + "version": "release-1.24.0rc1", + "date": "2025-09-11T07:05:16Z" + }, + { + "name": "go-gitea/gitea", + "version": "v1.24.6", + "date": "2025-09-11T04:20:27Z" + }, + { + "name": "TandoorRecipes/recipes", + "version": "2.2.0", + "date": "2025-09-10T18:36:56Z" + }, + { + "name": "fuma-nama/fumadocs", + "version": "fumadocs-mdx@11.9.1", + "date": "2025-09-10T15:26:47Z" + }, + { + "name": "linuxserver/Heimdall", + "version": "v2.7.5", + "date": "2025-09-10T15:16:49Z" + }, + { + "name": "mongodb/mongo", + "version": "r7.0.25-alpha0", + "date": "2025-09-10T12:13:38Z" + }, + { + "name": "aceberg/WatchYourLAN", + "version": "2.1.4", + "date": "2025-09-10T12:08:09Z" + }, + { + "name": "glpi-project/glpi", + "version": "10.0.20", + "date": "2025-09-10T12:00:00Z" + }, + { + "name": "open-webui/open-webui", + "version": "v0.6.28", + "date": "2025-09-10T10:53:42Z" + }, + { + "name": "jenkinsci/jenkins", + "version": "jenkins-2.527", + "date": "2025-09-09T19:58:28Z" + }, + { + "name": "kyantech/Palmr", + "version": "v3.2.1-beta", + "date": "2025-09-09T19:47:13Z" + }, + { + "name": "Part-DB/Part-DB-server", + "version": "v2.1.2", + "date": "2025-09-09T19:34:11Z" + }, + { + "name": "hargata/lubelog", + "version": "v1.5.1", + "date": "2025-09-09T16:56:49Z" + }, + { + "name": "element-hq/synapse", + "version": "v1.138.0", + "date": "2025-09-09T11:25:50Z" + }, + { + "name": "traefik/traefik", + "version": "v3.5.2", + "date": "2025-09-09T10:28:12Z" + }, + { + "name": "docker/compose", + "version": "v2.39.3", + "date": "2025-09-09T08:27:27Z" + }, + { + "name": "OctoPrint/OctoPrint", + "version": "1.11.3", + "date": "2025-09-09T08:03:31Z" + }, + { + "name": "readeck/readeck", + "version": "0.20.2", + "date": "2025-09-09T06:09:25Z" + }, + { + "name": "gotson/komga", + "version": "1.23.4", + "date": "2025-09-09T02:47:05Z" + }, + { + "name": "Tautulli/Tautulli", + "version": "v2.16.0", + "date": "2025-09-09T01:05:45Z" + }, + { + "name": "diced/zipline", + "version": "v4.3.1", + "date": "2025-09-08T22:26:23Z" + }, + { + "name": "n8n-io/n8n", + "version": "n8n@1.109.2", + "date": "2025-09-03T07:50:21Z" + }, + { + "name": "apache/tomcat", + "version": "10.1.46", + "date": "2025-09-08T14:29:54Z" + }, + { + "name": "home-assistant/operating-system", + "version": "16.2", + "date": "2025-09-08T14:03:25Z" + }, + { + "name": "theonedev/onedev", + "version": "v12.0.10", + "date": "2025-09-08T13:20:16Z" + }, + { + "name": "evcc-io/evcc", + "version": "0.207.6", + "date": "2025-09-08T11:52:00Z" + }, + { + "name": "autobrr/autobrr", + "version": "v1.66.1", + "date": "2025-09-08T10:49:03Z" + }, + { + "name": "webmin/webmin", + "version": "2.501", + "date": "2025-09-08T04:50:25Z" + }, + { + "name": "paperless-ngx/paperless-ngx", + "version": "v2.18.4", + "date": "2025-09-07T23:57:32Z" + }, + { + "name": "minio/minio", + "version": "RELEASE.2025-09-07T16-13-09Z", + "date": "2025-09-07T18:53:04Z" + }, + { + "name": "dgtlmoon/changedetection.io", + "version": "0.50.12", + "date": "2025-09-07T14:16:07Z" + }, + { + "name": "runtipi/runtipi", + "version": "v4.4.0", + "date": "2025-09-02T19:26:18Z" + }, + { + "name": "Radarr/Radarr", + "version": "v5.27.5.10198", + "date": "2025-09-03T12:08:43Z" + }, + { + "name": "pocketbase/pocketbase", + "version": "v0.30.0", + "date": "2025-09-07T05:25:44Z" + }, + { + "name": "forgejo/forgejo", + "version": "v12.0.3", + "date": "2025-09-06T07:01:44Z" + }, + { + "name": "Stirling-Tools/Stirling-PDF", + "version": "v1.3.2", + "date": "2025-09-05T18:44:15Z" + }, + { + "name": "henrygd/beszel", + "version": "v0.12.7", + "date": "2025-09-05T18:11:36Z" + }, + { + "name": "Brandawg93/PeaNUT", + "version": "v5.14.2", + "date": "2025-09-05T17:24:12Z" + }, + { + "name": "CrazyWolf13/streamlink-webui", + "version": "0.6", + "date": "2025-09-05T06:05:04Z" + }, + { + "name": "louislam/uptime-kuma", + "version": "2.0.0-beta.2-temp", + "date": "2025-03-28T08:45:58Z" + }, + { + "name": "pelican-dev/panel", + "version": "v1.0.0-beta25", + "date": "2025-09-04T21:42:46Z" + }, + { + "name": "pelican-dev/wings", + "version": "v1.0.0-beta17", + "date": "2025-09-04T21:30:14Z" + }, + { + "name": "Cleanuparr/Cleanuparr", + "version": "v2.2.3", + "date": "2025-09-04T19:24:39Z" + }, + { + "name": "AdguardTeam/AdGuardHome", + "version": "v0.107.65", + "date": "2025-08-20T14:02:28Z" + }, + { + "name": "NodeBB/NodeBB", + "version": "v4.5.1", + "date": "2025-09-04T16:02:49Z" + }, + { + "name": "raydak-labs/configarr", + "version": "v1.15.1", + "date": "2025-09-04T14:00:59Z" + }, + { + "name": "plankanban/planka", + "version": "planka-1.0.4", + "date": "2025-09-04T13:49:40Z" + }, + { + "name": "blakeblackshear/frigate", + "version": "v0.14.1", + "date": "2024-08-29T22:32:51Z" + }, + { + "name": "openobserve/openobserve", + "version": "v0.15.1", + "date": "2025-09-04T10:37:23Z" + }, + { + "name": "morpheus65535/bazarr", + "version": "v1.5.3-beta.10", + "date": "2025-07-15T06:07:03Z" + }, + { + "name": "actualbudget/actual", + "version": "v25.9.0", + "date": "2025-09-04T01:12:37Z" + }, + { + "name": "hyperion-project/hyperion.ng", + "version": "2.1.1", + "date": "2025-06-14T17:45:06Z" + }, + { + "name": "Graylog2/graylog2-server", + "version": "6.1.15", + "date": "2025-09-03T14:51:37Z" + }, + { + "name": "neo4j/neo4j", + "version": "5.26.12", + "date": "2025-09-03T12:03:22Z" + }, + { + "name": "apache/cassandra", + "version": "cassandra-4.1.10", + "date": "2025-09-03T08:46:02Z" + }, + { + "name": "netbox-community/netbox", + "version": "v4.4.0", + "date": "2025-09-02T17:04:25Z" + }, + { + "name": "rabbitmq/rabbitmq-server", + "version": "v4.1.4", + "date": "2025-09-02T14:26:24Z" + }, + { + "name": "postgres/postgres", + "version": "REL_18_RC1", + "date": "2025-09-01T20:03:08Z" + }, + { + "name": "project-zot/zot", + "version": "v2.1.8", + "date": "2025-09-01T19:20:42Z" + }, + { + "name": "Koenkk/zigbee2mqtt", + "version": "2.6.1", + "date": "2025-09-01T19:05:18Z" + }, + { + "name": "outline/outline", + "version": "v0.87.3", + "date": "2025-09-01T16:25:43Z" + }, + { + "name": "seanmorley15/AdventureLog", + "version": "v0.11.0", + "date": "2025-09-01T16:19:38Z" + }, + { + "name": "grafana/grafana", + "version": "rrc_steady_12.2.0-17245430286.patch1", + "date": "2025-09-01T14:19:14Z" + }, + { + "name": "grokability/snipe-it", + "version": "v8.3.1", + "date": "2025-09-01T11:00:07Z" + }, + { + "name": "crowdsecurity/crowdsec", + "version": "v1.7.0", + "date": "2025-09-01T10:10:34Z" + }, + { + "name": "LibreTranslate/LibreTranslate", + "version": "v1.7.3", + "date": "2025-08-31T15:59:43Z" + }, + { + "name": "jhuckaby/Cronicle", + "version": "v0.9.91", + "date": "2025-08-30T21:49:57Z" + }, + { + "name": "silverbulletmd/silverbullet", + "version": "2.0.0", + "date": "2025-08-29T13:38:35Z" + }, + { + "name": "Forceu/Gokapi", + "version": "v2.1.0", + "date": "2025-08-29T12:56:13Z" + }, + { + "name": "saltstack/salt", + "version": "v3007.7", + "date": "2025-08-29T01:19:08Z" + }, + { + "name": "linkwarden/linkwarden", + "version": "v2.12.2", + "date": "2025-08-28T20:34:30Z" + }, + { + "name": "benjaminjonard/koillection", + "version": "1.7.0", + "date": "2025-08-28T18:10:59Z" + }, + { + "name": "gristlabs/grist-core", + "version": "v1.7.3", + "date": "2025-08-28T16:50:02Z" + }, + { + "name": "BookStackApp/BookStack", + "version": "v25.07.2", + "date": "2025-08-28T16:46:05Z" + }, + { + "name": "garethgeorge/backrest", + "version": "v1.9.2", + "date": "2025-08-28T07:06:14Z" + }, + { + "name": "pocket-id/pocket-id", + "version": "v1.10.0", + "date": "2025-08-27T20:35:47Z" + }, + { + "name": "ipfs/kubo", + "version": "v0.37.0", + "date": "2025-08-27T20:03:52Z" + }, + { + "name": "zwave-js/zwave-js-ui", + "version": "v11.2.1", + "date": "2025-08-27T15:19:02Z" + }, + { + "name": "advplyr/audiobookshelf", + "version": "v2.29.0", + "date": "2025-08-25T22:43:20Z" + }, + { + "name": "sabnzbd/sabnzbd", + "version": "4.5.3", + "date": "2025-08-25T13:59:56Z" + }, + { + "name": "zabbix/zabbix", + "version": "7.4.2", + "date": "2025-08-25T12:38:14Z" + }, + { + "name": "FlareSolverr/FlareSolverr", + "version": "v3.4.0", + "date": "2025-08-25T03:22:00Z" + }, + { + "name": "plexguide/Huntarr.io", + "version": "8.2.10", + "date": "2025-08-25T01:26:55Z" + }, + { + "name": "wavelog/wavelog", + "version": "2.1", + "date": "2025-08-24T15:42:19Z" + }, + { + "name": "janeczku/calibre-web", + "version": "0.6.25", + "date": "2025-08-24T08:51:55Z" + }, + { + "name": "sysadminsmedia/homebox", + "version": "v0.21.0", + "date": "2025-08-23T18:33:53Z" + }, + { + "name": "caddyserver/caddy", + "version": "v2.10.2", + "date": "2025-08-23T03:10:31Z" + }, + { + "name": "rclone/rclone", + "version": "v1.71.0", + "date": "2025-08-22T16:41:23Z" + }, + { + "name": "goauthentik/authentik", + "version": "version/2025.8.1", + "date": "2025-08-22T14:55:30Z" + }, + { + "name": "lazy-media/Reactive-Resume", + "version": "v1.2.4", + "date": "2025-08-22T07:40:01Z" + }, + { + "name": "Kozea/Radicale", + "version": "v3.5.5", + "date": "2025-08-22T06:57:33Z" + }, + { + "name": "traccar/traccar", + "version": "v6.9.1", + "date": "2025-08-22T04:04:12Z" + }, + { + "name": "cloudflare/cloudflared", + "version": "2025.8.1", + "date": "2025-08-21T15:39:34Z" + }, + { + "name": "gethomepage/homepage", + "version": "v1.4.6", + "date": "2025-08-21T14:05:58Z" + }, + { + "name": "openhab/openhab-core", + "version": "4.3.7", + "date": "2025-08-20T10:26:21Z" + }, + { + "name": "duplicati/duplicati", + "version": "v2.1.2.0-2.1.2.0_beta_2025-08-20", + "date": "2025-08-20T08:15:46Z" + }, + { + "name": "TwiN/gatus", + "version": "v5.23.2", + "date": "2025-08-19T21:24:45Z" + }, + { + "name": "karlomikus/bar-assistant", + "version": "v5.8.0", + "date": "2025-08-19T16:46:00Z" + }, + { + "name": "oauth2-proxy/oauth2-proxy", + "version": "v7.12.0", + "date": "2025-08-19T06:57:20Z" + }, + { + "name": "ventoy/Ventoy", + "version": "v1.1.07", + "date": "2025-08-18T16:13:54Z" + }, + { + "name": "FreshRSS/FreshRSS", + "version": "1.27.0", + "date": "2025-08-18T16:03:26Z" + }, + { + "name": "redis/redis", + "version": "8.2.1", + "date": "2025-08-18T15:42:48Z" + }, + { + "name": "jupyter/notebook", + "version": "@jupyter-notebook/ui-components@7.5.0-alpha.2", + "date": "2025-08-18T07:39:41Z" + }, + { + "name": "lldap/lldap", + "version": "v0.6.2", + "date": "2025-08-17T22:07:10Z" + }, + { + "name": "deluge-torrent/deluge", + "version": "deluge-2.2.1.dev0", + "date": "2025-08-17T20:22:28Z" + }, + { + "name": "matze/wastebin", + "version": "3.3.0", + "date": "2025-08-17T19:57:11Z" + }, + { + "name": "mylar3/mylar3", + "version": "v0.8.3", + "date": "2025-08-17T06:24:54Z" + }, + { + "name": "jellyfin/jellyfin", + "version": "v10.10.7", + "date": "2025-04-05T19:14:59Z" + }, + { + "name": "Kometa-Team/Kometa", + "version": "v2.2.1", + "date": "2025-08-13T19:49:01Z" + }, + { + "name": "requarks/wiki", + "version": "v2.5.308", + "date": "2025-08-13T07:09:29Z" + }, + { + "name": "bluenviron/mediamtx", + "version": "v1.14.0", + "date": "2025-08-12T13:58:46Z" + }, + { + "name": "slskd/slskd", + "version": "0.23.2", + "date": "2025-08-10T23:35:07Z" + }, + { + "name": "ioBroker/ioBroker", + "version": "1012-08-09", + "date": "2025-08-10T13:50:58Z" + }, + { + "name": "kimai/kimai", + "version": "2.38.0", + "date": "2025-08-08T21:47:19Z" + }, + { + "name": "MariaDB/server", + "version": "mariadb-12.0.2", + "date": "2025-08-07T21:23:15Z" + }, + { + "name": "Athou/commafeed", + "version": "5.11.0", + "date": "2025-08-06T21:14:18Z" + }, + { + "name": "bastienwirtz/homer", + "version": "v25.08.1", + "date": "2025-08-06T21:04:07Z" + }, + { + "name": "TryGhost/Ghost-CLI", + "version": "v1.28.3", + "date": "2025-08-06T12:32:02Z" + }, + { + "name": "WordPress/WordPress", + "version": "4.7.30", + "date": "2025-08-05T17:23:06Z" + }, + { + "name": "binwiederhier/ntfy", + "version": "v2.14.0", + "date": "2025-08-05T08:31:35Z" + }, + { + "name": "rogerfar/rdt-client", + "version": "v2.0.116", + "date": "2025-08-05T04:45:21Z" + }, + { + "name": "inspircd/inspircd", + "version": "v4.8.0", + "date": "2025-08-02T09:12:10Z" + }, + { + "name": "donaldzou/WGDashboard", + "version": "v4.2.5", + "date": "2025-08-02T08:58:21Z" + }, + { + "name": "alexta69/metube", + "version": "2025.07.31", + "date": "2025-08-01T14:44:48Z" + }, + { + "name": "Suwayomi/Suwayomi-Server", + "version": "v2.1.1867", + "date": "2025-07-31T18:08:43Z" + }, + { + "name": "leiweibau/Pi.Alert", + "version": "v2025-07-30", + "date": "2025-07-30T17:13:40Z" + }, + { + "name": "danielbrendel/hortusfox-web", + "version": "v5.2", + "date": "2025-07-30T10:40:00Z" + }, + { + "name": "dani-garcia/vaultwarden", + "version": "1.34.3", + "date": "2025-07-30T09:10:59Z" + }, + { + "name": "OliveTin/OliveTin", + "version": "2025.7.29", + "date": "2025-07-29T22:20:13Z" + }, + { + "name": "caddyserver/xcaddy", + "version": "v0.4.5", + "date": "2025-07-29T16:39:18Z" + }, + { + "name": "node-red/node-red", + "version": "4.1.0", + "date": "2025-07-29T15:15:26Z" + }, + { + "name": "navidrome/navidrome", + "version": "v0.58.0", + "date": "2025-07-28T18:59:50Z" + }, + { + "name": "PrivateBin/PrivateBin", + "version": "2.0.0", + "date": "2025-07-28T07:48:40Z" + }, + { + "name": "umami-software/umami", + "version": "v2.19.0", + "date": "2025-07-27T22:25:00Z" + }, + { + "name": "heiher/hev-socks5-server", + "version": "2.9.0", + "date": "2025-07-25T14:20:25Z" + }, + { + "name": "TasmoAdmin/TasmoAdmin", + "version": "v4.3.1", + "date": "2025-07-22T20:10:08Z" + }, + { + "name": "PCJones/UmlautAdaptarr", + "version": "v0.7.3", + "date": "2025-07-22T14:39:54Z" + }, + { + "name": "tobychui/zoraxy", + "version": "v3.2.5r2", + "date": "2025-07-21T12:52:26Z" + }, + { + "name": "icereed/paperless-gpt", + "version": "v0.22.0", + "date": "2025-07-17T06:35:43Z" + }, + { + "name": "usememos/memos", + "version": "v0.25.0", + "date": "2025-07-16T14:57:02Z" + }, + { + "name": "sbondCo/Watcharr", + "version": "v2.1.1", + "date": "2025-07-15T22:38:01Z" + }, + { + "name": "pi-hole/pi-hole", + "version": "v6.1.4", + "date": "2025-07-14T21:22:17Z" + }, + { + "name": "homebridge/homebridge", + "version": "v1.11.0", + "date": "2025-07-13T19:22:47Z" + }, + { + "name": "mayswind/AriaNg", + "version": "1.3.11", + "date": "2025-07-13T13:33:48Z" + }, + { + "name": "eclipse-mosquitto/mosquitto", + "version": "v2.0.22", + "date": "2025-07-11T21:34:20Z" + }, + { + "name": "NginxProxyManager/nginx-proxy-manager", + "version": "v2.12.6", + "date": "2025-07-09T21:52:15Z" + }, + { + "name": "nicolargo/glances", + "version": "v4.3.3", + "date": "2025-07-09T15:35:44Z" + }, + { + "name": "mysql/mysql-server", + "version": "mysql-cluster-9.4.0", + "date": "2025-07-09T08:35:30Z" + }, + { + "name": "photoprism/photoprism", + "version": "250707-d28b3101e", + "date": "2025-07-07T15:15:21Z" + }, + { + "name": "Kareadita/Kavita", + "version": "v0.8.7", + "date": "2025-07-05T20:08:58Z" + }, + { + "name": "qbittorrent/qBittorrent", + "version": "release-5.1.2", + "date": "2025-07-02T06:13:16Z" + }, + { + "name": "hivemq/hivemq-community-edition", + "version": "2025.4", + "date": "2025-07-01T18:01:37Z" + }, + { + "name": "MagicMirrorOrg/MagicMirror", + "version": "v2.32.0", + "date": "2025-06-30T22:12:48Z" + }, + { + "name": "typesense/typesense", + "version": "v29.0", + "date": "2025-06-30T03:52:33Z" + }, + { + "name": "librespeed/speedtest-rust", + "version": "v1.3.8", + "date": "2025-06-29T07:41:53Z" + }, + { + "name": "arunavo4/gitea-mirror", + "version": "v2.18.0", + "date": "2025-06-24T08:29:55Z" + }, + { + "name": "itsmng/itsm-ng", + "version": "v2.0.7", + "date": "2025-06-23T14:35:40Z" + }, + { + "name": "clusterzx/paperless-ai", + "version": "v3.0.7", + "date": "2025-06-22T17:49:29Z" + }, + { + "name": "Sonarr/Sonarr", + "version": "v4.0.15.2941", + "date": "2025-06-20T17:20:54Z" + }, + { + "name": "benzino77/tasmocompiler", + "version": "v12.7.0", + "date": "2025-06-20T08:31:16Z" + }, + { + "name": "prometheus-pve/prometheus-pve-exporter", + "version": "v3.5.5", + "date": "2025-06-19T05:43:47Z" + }, + { + "name": "pterodactyl/panel", + "version": "v1.11.11", + "date": "2025-06-18T18:04:50Z" + }, + { + "name": "Bubka/2FAuth", + "version": "v5.6.0", + "date": "2025-06-18T12:19:54Z" + }, + { + "name": "TriliumNext/Notes", + "version": "v0.95.0", + "date": "2025-06-15T21:12:04Z" + }, + { + "name": "Readarr/Readarr", + "version": "v2.0.0.4645", + "date": "2017-03-07T18:56:06Z" + }, + { + "name": "glanceapp/glance", + "version": "v0.8.4", + "date": "2025-06-10T07:57:14Z" + }, + { + "name": "jordan-dalby/ByteStash", + "version": "v1.5.8", + "date": "2025-06-07T11:39:10Z" + }, + { + "name": "juanfont/headscale", + "version": "v0.26.1", + "date": "2025-06-06T11:22:02Z" + }, + { + "name": "C4illin/ConvertX", + "version": "v0.14.1", + "date": "2025-06-04T08:57:15Z" + }, + { + "name": "Pf2eToolsOrg/Pf2eTools", + "version": "v0.9.0", + "date": "2025-06-03T11:49:40Z" + }, + { + "name": "release-argus/Argus", + "version": "0.26.3", + "date": "2025-05-29T21:18:15Z" + }, + { + "name": "stonith404/pingvin-share", + "version": "v1.13.0", + "date": "2025-05-25T20:21:13Z" + }, + { + "name": "0xERR0R/blocky", + "version": "v0.26.2", + "date": "2025-05-22T05:24:42Z" + }, + { + "name": "hansmi/prometheus-paperless-exporter", + "version": "v0.0.8", + "date": "2025-05-18T11:37:31Z" + }, + { + "name": "motioneye-project/motioneye", + "version": "0.42.1", + "date": "2020-06-07T07:27:04Z" + }, + { + "name": "stackblitz-labs/bolt.diy", + "version": "1.0.0", + "date": "2025-05-12T07:39:23Z" + }, + { + "name": "owncast/owncast", + "version": "v0.2.3", + "date": "2025-05-10T21:14:45Z" + }, + { + "name": "getumbrel/umbrel", + "version": "1.4.2", + "date": "2025-05-09T08:54:49Z" + }, + { + "name": "ZoeyVid/NPMplus", + "version": "2025-05-07-r1", + "date": "2025-05-07T12:18:42Z" + }, + { + "name": "apache/couchdb", + "version": "3.5.0", + "date": "2025-05-05T16:28:24Z" + }, + { + "name": "TechnitiumSoftware/DnsServer", + "version": "v13.6.0", + "date": "2025-04-26T10:21:12Z" + }, + { + "name": "dotnetfactory/fluid-calendar", + "version": "v1.4.0", + "date": "2025-04-24T16:20:17Z" + }, + { + "name": "monicahq/monica", + "version": "v4.1.2", + "date": "2024-05-04T08:06:50Z" + }, + { + "name": "IceWhaleTech/CasaOS", + "version": "v0.4.15", + "date": "2024-12-19T03:19:49Z" + }, + { + "name": "Casvt/Kapowarr", + "version": "V1.2.0", + "date": "2025-04-16T14:55:28Z" + }, + { + "name": "StarFleetCPTN/GoMFT", + "version": "v0.2.11", + "date": "2025-04-12T21:13:08Z" + }, + { + "name": "thomiceli/opengist", + "version": "v1.10.0", + "date": "2025-04-07T14:32:15Z" + }, + { + "name": "azukaar/Cosmos-Server", + "version": "v0.18.4", + "date": "2025-04-05T19:12:57Z" + }, + { + "name": "wger-project/wger", + "version": "2.3", + "date": "2025-04-05T18:05:36Z" + }, + { + "name": "louislam/dockge", + "version": "1.5.0", + "date": "2025-03-30T17:42:59Z" + }, + { + "name": "grocy/grocy", + "version": "v4.5.0", + "date": "2025-03-28T19:02:22Z" + }, + { + "name": "hakimel/reveal.js", + "version": "5.2.1", + "date": "2025-03-28T13:00:23Z" + }, + { + "name": "sct/overseerr", + "version": "v1.34.0", + "date": "2025-03-26T08:48:34Z" + }, + { + "name": "nextcloud/nextcloudpi", + "version": "v1.55.4", + "date": "2025-03-24T11:31:02Z" + }, + { + "name": "Donkie/Spoolman", + "version": "v0.22.1", + "date": "2025-03-18T21:01:22Z" + }, + { + "name": "transmission/transmission", + "version": "4.0.1-beta.1", + "date": "2024-12-13T00:16:24Z" + }, + { + "name": "excalidraw/excalidraw", + "version": "v0.18.0", + "date": "2025-03-11T12:47:22Z" + }, + { + "name": "AlexxIT/go2rtc", + "version": "v1.9.9", + "date": "2025-03-10T03:22:11Z" + }, + { + "name": "awawa-dev/HyperHDR", + "version": "v21.0.0.0", + "date": "2025-03-09T12:25:44Z" + }, + { + "name": "YuukanOO/seelf", + "version": "v2.4.2", + "date": "2025-03-08T10:49:04Z" + }, + { + "name": "prometheus/alertmanager", + "version": "v0.28.1", + "date": "2025-03-07T15:41:35Z" + }, + { + "name": "toniebox-reverse-engineering/teddycloud", + "version": "tc_v0.6.4", + "date": "2025-03-05T15:43:40Z" + }, + { + "name": "bitmagnet-io/bitmagnet", + "version": "v0.10.0", + "date": "2025-03-02T15:13:47Z" + }, + { + "name": "schlagmichdoch/PairDrop", + "version": "v1.11.2", + "date": "2025-02-24T19:47:06Z" + }, + { + "name": "drakkan/sftpgo", + "version": "v2.6.6", + "date": "2025-02-24T19:14:46Z" + }, + { + "name": "babybuddy/babybuddy", + "version": "v2.7.1", + "date": "2025-02-22T01:14:41Z" + }, + { + "name": "recyclarr/recyclarr", + "version": "v7.4.1", + "date": "2025-02-15T20:54:00Z" + }, + { + "name": "actualbudget/actual-server", + "version": "v25.2.1", + "date": "2025-02-06T20:41:28Z" + }, + { + "name": "rustdesk/rustdesk-server", + "version": "1.1.14", + "date": "2025-01-25T12:48:28Z" + }, + { + "name": "petio-team/petio", + "version": "v0.5.7", + "date": "2025-01-17T15:57:17Z" + }, + { + "name": "favonia/cloudflare-ddns", + "version": "v1.15.1", + "date": "2024-12-16T13:00:05Z" + }, + { + "name": "ArchiveBox/ArchiveBox", + "version": "v0.7.3", + "date": "2024-12-15T10:18:06Z" + }, + { + "name": "pymedusa/Medusa", + "version": "v1.0.22", + "date": "2024-12-13T12:22:19Z" + }, + { + "name": "MDeLuise/plant-it", + "version": "0.10.0", + "date": "2024-12-10T09:35:26Z" + }, + { + "name": "phpipam/phpipam", + "version": "v1.7.3", + "date": "2024-11-27T21:26:11Z" + }, + { + "name": "swizzin/swizzin", + "version": "stable", + "date": "2021-06-14T23:31:47Z" + }, + { + "name": "sabre-io/Baikal", + "version": "0.10.1", + "date": "2024-11-10T10:25:45Z" + }, + { + "name": "CorentinTh/it-tools", + "version": "v2024.10.22-7ca5933", + "date": "2024-10-22T09:58:03Z" + }, + { + "name": "Notifiarr/notifiarr", + "version": "v0.8.3", + "date": "2024-10-04T23:49:07Z" + }, + { + "name": "FunkeyFlo/ps5-mqtt", + "version": "v1.4.0", + "date": "2024-08-06T19:57:33Z" + }, + { + "name": "projectsend/projectsend", + "version": "r1720", + "date": "2024-08-03T04:07:20Z" + }, + { + "name": "hywax/mafl", + "version": "v0.15.4", + "date": "2024-07-13T11:03:43Z" + }, + { + "name": "Forceu/barcodebuddy", + "version": "v1.8.1.8", + "date": "2024-06-02T20:01:53Z" + }, + { + "name": "Lissy93/dashy", + "version": "3.1.1", + "date": "2024-05-30T17:20:53Z" + }, + { + "name": "gnmyt/MySpeed", + "version": "v1.0.9", + "date": "2024-05-21T22:15:33Z" + }, + { + "name": "pterodactyl/wings", + "version": "v1.11.13", + "date": "2024-05-08T04:20:34Z" + }, + { + "name": "CrazyWolf13/web-check", + "version": "1.0.0", + "date": "2024-05-05T02:01:51Z" + }, + { + "name": "thelounge/thelounge-deb", + "version": "v4.4.3", + "date": "2024-04-06T12:24:35Z" + } +] \ No newline at end of file diff --git a/scripts/json/unifi.json b/scripts/json/unifi.json index ab1989f..a5bb9ff 100644 --- a/scripts/json/unifi.json +++ b/scripts/json/unifi.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/unmanic.json b/scripts/json/unmanic.json index 33fde24..f84aad1 100644 --- a/scripts/json/unmanic.json +++ b/scripts/json/unmanic.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/update-lxcs.json b/scripts/json/update-lxcs.json index 6624a95..db12279 100644 --- a/scripts/json/update-lxcs.json +++ b/scripts/json/update-lxcs.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/update-repo.json b/scripts/json/update-repo.json index 371f214..842154c 100644 --- a/scripts/json/update-repo.json +++ b/scripts/json/update-repo.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/uptimekuma.json b/scripts/json/uptimekuma.json index 19d8c4a..aa69d2d 100644 --- a/scripts/json/uptimekuma.json +++ b/scripts/json/uptimekuma.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/urbackupserver.json b/scripts/json/urbackupserver.json index 6724195..f8e5fa6 100644 --- a/scripts/json/urbackupserver.json +++ b/scripts/json/urbackupserver.json @@ -1,40 +1,40 @@ { - "name": "UrBackup Server", - "slug": "urbackupserver", - "categories": [ - 7 - ], - "date_created": "2025-01-18", - "type": "ct", - "updateable": true, - "privileged": true, - "interface_port": 55414, - "documentation": "https://www.urbackup.org/documentation.html", - "website": "https://www.urbackup.org/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ - { - "type": "default", - "script": "ct/urbackupserver.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 16, - "os": "debian", - "version": "12" - } + "name": "UrBackup Server", + "slug": "urbackupserver", + "categories": [ + 7 + ], + "date_created": "2025-01-18", + "type": "ct", + "updateable": true, + "privileged": true, + "interface_port": 55414, + "documentation": "https://www.urbackup.org/documentation.html", + "website": "https://www.urbackup.org/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ + { + "type": "default", + "script": "ct/urbackupserver.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 16, + "os": "debian", + "version": "12" } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up", - "type": "info" - } - ] -} + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up", + "type": "info" + } + ] +} \ No newline at end of file diff --git a/scripts/json/vaultwarden.json b/scripts/json/vaultwarden.json index 584d372..a8e98eb 100644 --- a/scripts/json/vaultwarden.json +++ b/scripts/json/vaultwarden.json @@ -52,4 +52,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/victoriametrics.json b/scripts/json/victoriametrics.json index 77371cd..fcfca7e 100644 --- a/scripts/json/victoriametrics.json +++ b/scripts/json/victoriametrics.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/vikunja.json b/scripts/json/vikunja.json index f7044c2..49ccf10 100644 --- a/scripts/json/vikunja.json +++ b/scripts/json/vikunja.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wallos.json b/scripts/json/wallos.json index e69e2c0..dca0f0f 100644 --- a/scripts/json/wallos.json +++ b/scripts/json/wallos.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wastebin.json b/scripts/json/wastebin.json index f964051..2f7a1d5 100644 --- a/scripts/json/wastebin.json +++ b/scripts/json/wastebin.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/watcharr.json b/scripts/json/watcharr.json index 20f546a..e71c3b8 100644 --- a/scripts/json/watcharr.json +++ b/scripts/json/watcharr.json @@ -1,35 +1,35 @@ { - "name": "Watcharr", - "slug": "watcharr", - "categories": [ - 13 - ], - "date_created": "2025-02-12", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3080, - "documentation": "https://watcharr.app/docs/introduction", - "website": "https://watcharr.app/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ - { - "type": "default", - "script": "ct/watcharr.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [] -} + "name": "Watcharr", + "slug": "watcharr", + "categories": [ + 13 + ], + "date_created": "2025-02-12", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3080, + "documentation": "https://watcharr.app/docs/introduction", + "website": "https://watcharr.app/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/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": [ + { + "type": "default", + "script": "ct/watcharr.sh", + "resources": { + "cpu": 1, + "ram": 1024, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/watchyourlan.json b/scripts/json/watchyourlan.json index 25686a1..e0598ce 100644 --- a/scripts/json/watchyourlan.json +++ b/scripts/json/watchyourlan.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wavelog.json b/scripts/json/wavelog.json index b9796ef..68333c7 100644 --- a/scripts/json/wavelog.json +++ b/scripts/json/wavelog.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/wazuh.json b/scripts/json/wazuh.json index 4a33877..530c71b 100644 --- a/scripts/json/wazuh.json +++ b/scripts/json/wazuh.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/web-check.json b/scripts/json/web-check.json index b4931d3..3dbe0a1 100644 --- a/scripts/json/web-check.json +++ b/scripts/json/web-check.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/webmin.json b/scripts/json/webmin.json index 3569bd1..ce77ff9 100644 --- a/scripts/json/webmin.json +++ b/scripts/json/webmin.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/wger.json b/scripts/json/wger.json index 67f1b37..75cb0dc 100644 --- a/scripts/json/wger.json +++ b/scripts/json/wger.json @@ -37,4 +37,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/whisparr.json b/scripts/json/whisparr.json index 86007e1..2d83b66 100644 --- a/scripts/json/whisparr.json +++ b/scripts/json/whisparr.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wikijs.json b/scripts/json/wikijs.json index 3f62307..6370f56 100644 --- a/scripts/json/wikijs.json +++ b/scripts/json/wikijs.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wireguard.json b/scripts/json/wireguard.json index f122cbf..944fa0c 100644 --- a/scripts/json/wireguard.json +++ b/scripts/json/wireguard.json @@ -52,4 +52,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/wizarr.json b/scripts/json/wizarr.json index 5cd5ca8..933b760 100644 --- a/scripts/json/wizarr.json +++ b/scripts/json/wizarr.json @@ -33,4 +33,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/wordpress.json b/scripts/json/wordpress.json index b07466e..c78f5c6 100644 --- a/scripts/json/wordpress.json +++ b/scripts/json/wordpress.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/yt-dlp-webui.json b/scripts/json/yt-dlp-webui.json index a9c0890..24da577 100644 --- a/scripts/json/yt-dlp-webui.json +++ b/scripts/json/yt-dlp-webui.json @@ -45,4 +45,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/yunohost.json b/scripts/json/yunohost.json index b6c59e0..82a33f6 100644 --- a/scripts/json/yunohost.json +++ b/scripts/json/yunohost.json @@ -37,4 +37,4 @@ "type": "warning" } ] -} +} \ No newline at end of file diff --git a/scripts/json/zabbix.json b/scripts/json/zabbix.json index 05cb158..8b2cc69 100644 --- a/scripts/json/zabbix.json +++ b/scripts/json/zabbix.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/zammad.json b/scripts/json/zammad.json index 92b752b..aa00739 100644 --- a/scripts/json/zammad.json +++ b/scripts/json/zammad.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/zerotier-one.json b/scripts/json/zerotier-one.json index 670f8e6..63d9dec 100644 --- a/scripts/json/zerotier-one.json +++ b/scripts/json/zerotier-one.json @@ -1,35 +1,35 @@ { - "name": "Zerotier-One", - "slug": "zerotier-one", - "categories": [ - 4 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 3443, - "documentation": "https://docs.zerotier.com/", - "website": "https://www.zerotier.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zerotier.webp", - "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": [ - { - "type": "default", - "script": "ct/zerotier-one.sh", - "resources": { - "cpu": 1, - "ram": 512, - "hdd": 4, - "os": "debian", - "version": "12" - } - } - ], - "default_credentials": { - "username": "admin", - "password": "password" - }, - "notes": [] -} + "name": "Zerotier-One", + "slug": "zerotier-one", + "categories": [ + 4 + ], + "date_created": "2024-05-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3443, + "documentation": "https://docs.zerotier.com/", + "website": "https://www.zerotier.com/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zerotier.webp", + "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": [ + { + "type": "default", + "script": "ct/zerotier-one.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 4, + "os": "debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": "admin", + "password": "password" + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/zigbee2mqtt.json b/scripts/json/zigbee2mqtt.json index ce3770f..7cd8847 100644 --- a/scripts/json/zigbee2mqtt.json +++ b/scripts/json/zigbee2mqtt.json @@ -48,4 +48,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/zipline.json b/scripts/json/zipline.json index 69ca1c3..9bb5506 100644 --- a/scripts/json/zipline.json +++ b/scripts/json/zipline.json @@ -32,4 +32,4 @@ "password": "password" }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/zitadel.json b/scripts/json/zitadel.json index 92fe0ff..38f4e10 100644 --- a/scripts/json/zitadel.json +++ b/scripts/json/zitadel.json @@ -41,4 +41,4 @@ "type": "info" } ] -} +} \ No newline at end of file diff --git a/scripts/json/zoraxy.json b/scripts/json/zoraxy.json index 6436402..2d1cc1f 100644 --- a/scripts/json/zoraxy.json +++ b/scripts/json/zoraxy.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/scripts/json/zot.json b/scripts/json/zot.json new file mode 100644 index 0000000..d731f05 --- /dev/null +++ b/scripts/json/zot.json @@ -0,0 +1,35 @@ +{ + "name": "Zot Registry", + "slug": "zot", + "categories": [ + 13 + ], + "date_created": "2025-06-06", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8080, + "documentation": "https://zotregistry.dev/docs/intro/", + "website": "https://zotregistry.dev/", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zot-registry.webp", + "config_path": "/etc/zot/config.json", + "description": "Zot is a cloud-native OCI image registry focused on extensibility, maintainability, and performance. It supports advanced features such as Web UI, security scanning, authentication via htpasswd and OIDC, and more.", + "install_methods": [ + { + "type": "default", + "script": "ct/zot-registry.sh", + "resources": { + "cpu": 1, + "ram": 2048, + "hdd": 5, + "os": "Debian", + "version": "12" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/scripts/json/zwave-js-ui.json b/scripts/json/zwave-js-ui.json index 91dfee8..4e03843 100644 --- a/scripts/json/zwave-js-ui.json +++ b/scripts/json/zwave-js-ui.json @@ -32,4 +32,4 @@ "password": null }, "notes": [] -} +} \ No newline at end of file diff --git a/src/app/_components/ResyncButton.tsx b/src/app/_components/ResyncButton.tsx index 681d4f1..7ceb67a 100644 --- a/src/app/_components/ResyncButton.tsx +++ b/src/app/_components/ResyncButton.tsx @@ -14,11 +14,15 @@ export function ResyncButton() { setLastSync(new Date()); if (data.success) { setSyncMessage(data.message ?? 'Scripts synced successfully'); + // Reload the page after successful sync + setTimeout(() => { + window.location.reload(); + }, 2000); // Wait 2 seconds to show the success message } else { setSyncMessage(data.error ?? 'Failed to sync scripts'); + // Clear message after 3 seconds for errors + setTimeout(() => setSyncMessage(null), 3000); } - // Clear message after 3 seconds - setTimeout(() => setSyncMessage(null), 3000); }, onError: (error) => { setIsResyncing(false); diff --git a/src/server/api/routers/__tests__/scripts.test.ts b/src/server/api/routers/__tests__/scripts.test.ts index 665ad8c..a1cfab0 100644 --- a/src/server/api/routers/__tests__/scripts.test.ts +++ b/src/server/api/routers/__tests__/scripts.test.ts @@ -19,9 +19,11 @@ vi.mock('~/server/lib/git', () => ({ }, })) -vi.mock('~/server/services/github', () => ({ - githubService: { +vi.mock('~/server/services/githubJsonService', () => ({ + githubJsonService: { + syncJsonFiles: vi.fn(), getAllScripts: vi.fn(), + getScriptBySlug: vi.fn(), }, })) @@ -212,8 +214,8 @@ describe('scriptsRouter', () => { it('should return script on success', async () => { const mockScript = { name: 'Test Script', slug: 'test-script' } - const { localScriptsService } = await import('~/server/services/localScripts') - vi.mocked(localScriptsService.getScriptBySlug).mockResolvedValue(mockScript) + const { githubJsonService } = await import('~/server/services/githubJsonService') + vi.mocked(githubJsonService.getScriptBySlug).mockResolvedValue(mockScript) const result = await caller.getScriptBySlug({ slug: 'test-script' }) @@ -224,8 +226,8 @@ describe('scriptsRouter', () => { }) it('should return error when script not found', async () => { - const { localScriptsService } = await import('~/server/services/localScripts') - vi.mocked(localScriptsService.getScriptBySlug).mockResolvedValue(null) + const { githubJsonService } = await import('~/server/services/githubJsonService') + vi.mocked(githubJsonService.getScriptBySlug).mockResolvedValue(null) const result = await caller.getScriptBySlug({ slug: 'nonexistent' }) @@ -239,35 +241,36 @@ describe('scriptsRouter', () => { describe('resyncScripts', () => { it('should resync scripts successfully', async () => { - const mockGitHubScripts = [ - { name: 'Script 1', slug: 'script-1' }, - { name: 'Script 2', slug: 'script-2' }, - ] - - const { githubService } = await import('~/server/services/github') - const { localScriptsService } = await import('~/server/services/localScripts') + const { githubJsonService } = await import('~/server/services/githubJsonService') - vi.mocked(githubService.getAllScripts).mockResolvedValue(mockGitHubScripts) - vi.mocked(localScriptsService.saveScriptsFromGitHub).mockResolvedValue(undefined) + vi.mocked(githubJsonService.syncJsonFiles).mockResolvedValue({ + success: true, + message: 'Successfully synced 2 scripts from GitHub using 1 API call + raw downloads', + count: 2 + }) const result = await caller.resyncScripts() expect(result).toEqual({ success: true, - message: 'Successfully synced 2 scripts from GitHub to local directory', + message: 'Successfully synced 2 scripts from GitHub using 1 API call + raw downloads', count: 2, }) }) it('should return error on failure', async () => { - const { githubService } = await import('~/server/services/github') - vi.mocked(githubService.getAllScripts).mockRejectedValue(new Error('GitHub error')) + const { githubJsonService } = await import('~/server/services/githubJsonService') + vi.mocked(githubJsonService.syncJsonFiles).mockResolvedValue({ + success: false, + message: 'GitHub error', + count: 0 + }) const result = await caller.resyncScripts() expect(result).toEqual({ success: false, - error: 'GitHub error', + message: 'GitHub error', count: 0, }) }) diff --git a/src/server/api/routers/scripts.ts b/src/server/api/routers/scripts.ts index bf074dd..6446f80 100644 --- a/src/server/api/routers/scripts.ts +++ b/src/server/api/routers/scripts.ts @@ -2,7 +2,7 @@ import { z } from "zod"; import { createTRPCRouter, publicProcedure } from "~/server/api/trpc"; import { scriptManager } from "~/server/lib/scripts"; import { gitManager } from "~/server/lib/git"; -import { githubService } from "~/server/services/github"; +import { githubJsonService } from "~/server/services/githubJsonService"; import { localScriptsService } from "~/server/services/localScripts"; import { scriptDownloaderService } from "~/server/services/scriptDownloader"; @@ -97,11 +97,11 @@ export const scriptsRouter = createTRPCRouter({ } }), - // Get all scripts from local directory + // Get all scripts from GitHub (1 API call + raw downloads) getAllScripts: publicProcedure .query(async () => { try { - const scripts = await localScriptsService.getAllScripts(); + const scripts = await githubJsonService.getAllScripts(); return { success: true, scripts }; } catch (error) { return { @@ -112,12 +112,12 @@ export const scriptsRouter = createTRPCRouter({ } }), - // Get script by slug from local directory + // Get script by slug from GitHub (1 API call + raw downloads) getScriptBySlug: publicProcedure .input(z.object({ slug: z.string() })) .query(async ({ input }) => { try { - const script = await localScriptsService.getScriptBySlug(input.slug); + const script = await githubJsonService.getScriptBySlug(input.slug); if (!script) { return { success: false, @@ -135,20 +135,17 @@ export const scriptsRouter = createTRPCRouter({ } }), - // Resync scripts from GitHub repo to local directory + // Resync scripts from GitHub (1 API call + raw downloads) resyncScripts: publicProcedure .mutation(async () => { try { - // First, try to get scripts from GitHub - const githubScripts = await githubService.getAllScripts(); - - // Save scripts to local directory - await localScriptsService.saveScriptsFromGitHub(githubScripts); + // Sync JSON files using 1 API call + raw downloads + const result = await githubJsonService.syncJsonFiles(); return { - success: true, - message: `Successfully synced ${githubScripts.length} scripts from GitHub to local directory`, - count: githubScripts.length + success: result.success, + message: result.message, + count: result.count }; } catch (error) { console.error('Error in resyncScripts:', error); diff --git a/src/server/services/githubJsonService.ts b/src/server/services/githubJsonService.ts new file mode 100644 index 0000000..39958fe --- /dev/null +++ b/src/server/services/githubJsonService.ts @@ -0,0 +1,185 @@ +import { writeFile, mkdir } from 'fs/promises'; +import { join } from 'path'; +import { env } from '~/env.js'; +import type { Script, ScriptCard, GitHubFile } from '~/types/script'; + +export class GitHubJsonService { + private baseUrl: string; + private repoUrl: string; + private branch: string; + private jsonFolder: string; + private localJsonDirectory: string; + + constructor() { + this.repoUrl = env.REPO_URL ?? ""; + this.branch = env.REPO_BRANCH; + this.jsonFolder = env.JSON_FOLDER; + this.localJsonDirectory = join(process.cwd(), 'scripts', 'json'); + + // Only validate GitHub URL if it's provided + if (this.repoUrl) { + // Extract owner and repo from the URL + const urlMatch = /github\.com\/([^\/]+)\/([^\/]+)/.exec(this.repoUrl); + if (!urlMatch) { + throw new Error(`Invalid GitHub repository URL: ${this.repoUrl}`); + } + + const [, owner, repo] = urlMatch; + this.baseUrl = `https://api.github.com/repos/${owner}/${repo}`; + } else { + // Set a dummy base URL if no REPO_URL is provided + this.baseUrl = ""; + } + } + + private async fetchFromGitHub(endpoint: string): Promise { + const response = await fetch(`${this.baseUrl}${endpoint}`, { + headers: { + 'Accept': 'application/vnd.github.v3+json', + 'User-Agent': 'PVEScripts-Local/1.0', + }, + }); + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status} ${response.statusText}`); + } + + return response.json() as Promise; + } + + private async downloadJsonFile(filePath: string): Promise